-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBookWriterControl.cs
More file actions
127 lines (113 loc) · 4.21 KB
/
BookWriterControl.cs
File metadata and controls
127 lines (113 loc) · 4.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Drawing;
using System.Threading.Tasks;
namespace MimicMuseAI
{
public partial class BookWriterControl : UserControl
{
private TextBox MainTextDisplay;
private TextBox promptInput;
private Button ButtonSubmit;
private FeatherlessClient _client;
public BookWriterControl()
{
InitializeComponent();
_client = new FeatherlessClient(Environment.GetEnvironmentVariable("FEATHERLESS_KEY"));
_client.OnStreamUpdate += AppendToMainTextDisplay; // Subscribe to streaming updates
}
private void InitializeComponent()
{
MainTextDisplay = new TextBox();
promptInput = new TextBox();
ButtonSubmit = new Button();
SuspendLayout();
//
// MainTextDisplay
//
MainTextDisplay.Dock = DockStyle.Top;
MainTextDisplay.Location = new Point(0, 0);
MainTextDisplay.Multiline = true;
MainTextDisplay.Name = "MainTextDisplay";
MainTextDisplay.Size = new Size(475, 374);
MainTextDisplay.TabIndex = 2;
MainTextDisplay.ScrollBars = ScrollBars.Vertical; // Ensure scrolling
//
// promptInput
//
promptInput.Dock = DockStyle.Top;
promptInput.Location = new Point(0, 374);
promptInput.Name = "promptInput";
promptInput.Size = new Size(475, 23);
promptInput.TabIndex = 1;
//
// ButtonSubmit
//
ButtonSubmit.Dock = DockStyle.Top;
ButtonSubmit.Location = new Point(0, 397);
ButtonSubmit.Name = "ButtonSubmit";
ButtonSubmit.Size = new Size(475, 31);
ButtonSubmit.TabIndex = 0;
ButtonSubmit.Text = "Submit";
ButtonSubmit.Click += ButtonSubmit_Click;
//
// BookWriterControl
//
Controls.Add(ButtonSubmit);
Controls.Add(promptInput);
Controls.Add(MainTextDisplay);
Name = "BookWriterControl";
Size = new Size(475, 429);
ResumeLayout(false);
PerformLayout();
}
private async void ButtonSubmit_Click(object sender, EventArgs e)
{
// Clear previous streaming response
AppendToMainTextDisplay("\n---\n"); // Add a separator for clarity
// Get context from MainTextDisplay and promptInput
string context = GetMainTextDisplayContent() + " " + GetPromptInputContent();
// Fetch lore data (if applicable)
Dictionary<string, string> loreData = LoreBookControl.GetInstance().GetSavedData();
string additionalLore = GetAdditionalLoreContent(context, loreData);
// Create the full prompt
string finalPrompt = context + "\n" + additionalLore;
// Send the request to Featherless API
await _client.SendMessageAsync(finalPrompt);
}
private void AppendToMainTextDisplay(string text)
{
if (MainTextDisplay.InvokeRequired)
{
MainTextDisplay.Invoke(new Action(() => MainTextDisplay.AppendText(text)));
}
else
{
MainTextDisplay.AppendText(text);
}
}
private string GetMainTextDisplayContent()
{
return MainTextDisplay.Text ?? string.Empty;
}
private string GetPromptInputContent()
{
return promptInput.Text ?? string.Empty;
}
private string GetAdditionalLoreContent(string context, Dictionary<string, string> loreData)
{
string additional = "";
foreach (var entry in loreData)
{
string[] keyWords = entry.Key.Split(',', StringSplitOptions.TrimEntries);
if (keyWords.Any(keyWord => context.Contains(keyWord)))
{
additional += $"{entry.Key}:{{{entry.Value}}}\n";
}
}
return additional;
}
}
}