@elyracode/web-ui 0.9.9 → 0.9.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/dist/ChatPanel.d.ts +1 -1
- package/dist/ChatPanel.d.ts.map +1 -1
- package/dist/app.css +2 -2
- package/dist/components/AgentInterface.d.ts +1 -1
- package/dist/components/AgentInterface.d.ts.map +1 -1
- package/dist/components/AgentInterface.js +1 -1
- package/dist/components/AgentInterface.js.map +1 -1
- package/dist/components/MessageEditor.d.ts +2 -2
- package/dist/components/MessageEditor.d.ts.map +1 -1
- package/dist/components/Messages.d.ts +3 -3
- package/dist/components/Messages.d.ts.map +1 -1
- package/dist/components/Messages.js.map +1 -1
- package/dist/components/ProviderKeyInput.js +2 -2
- package/dist/components/ProviderKeyInput.js.map +1 -1
- package/dist/components/SandboxedIframe.d.ts +1 -1
- package/dist/components/SandboxedIframe.d.ts.map +1 -1
- package/dist/components/SandboxedIframe.js +1 -1
- package/dist/components/SandboxedIframe.js.map +1 -1
- package/dist/components/message-renderer-registry.js.map +1 -1
- package/dist/components/sandbox/ArtifactsRuntimeProvider.d.ts +4 -3
- package/dist/components/sandbox/ArtifactsRuntimeProvider.d.ts.map +1 -1
- package/dist/components/sandbox/ArtifactsRuntimeProvider.js +31 -31
- package/dist/components/sandbox/ArtifactsRuntimeProvider.js.map +1 -1
- package/dist/components/sandbox/AttachmentsRuntimeProvider.d.ts +1 -1
- package/dist/components/sandbox/AttachmentsRuntimeProvider.d.ts.map +1 -1
- package/dist/components/sandbox/AttachmentsRuntimeProvider.js +6 -5
- package/dist/components/sandbox/AttachmentsRuntimeProvider.js.map +1 -1
- package/dist/components/sandbox/ConsoleRuntimeProvider.d.ts +3 -2
- package/dist/components/sandbox/ConsoleRuntimeProvider.d.ts.map +1 -1
- package/dist/components/sandbox/ConsoleRuntimeProvider.js +12 -11
- package/dist/components/sandbox/ConsoleRuntimeProvider.js.map +1 -1
- package/dist/components/sandbox/FileDownloadRuntimeProvider.d.ts +3 -2
- package/dist/components/sandbox/FileDownloadRuntimeProvider.d.ts.map +1 -1
- package/dist/components/sandbox/FileDownloadRuntimeProvider.js +6 -4
- package/dist/components/sandbox/FileDownloadRuntimeProvider.js.map +1 -1
- package/dist/components/sandbox/RuntimeMessageRouter.d.ts +2 -1
- package/dist/components/sandbox/RuntimeMessageRouter.d.ts.map +1 -1
- package/dist/components/sandbox/RuntimeMessageRouter.js.map +1 -1
- package/dist/components/sandbox/SandboxRuntimeProvider.d.ts +3 -2
- package/dist/components/sandbox/SandboxRuntimeProvider.d.ts.map +1 -1
- package/dist/components/sandbox/runtime-messages.d.ts +140 -0
- package/dist/components/sandbox/runtime-messages.d.ts.map +1 -0
- package/dist/components/sandbox/runtime-messages.js +9 -0
- package/dist/components/sandbox/runtime-messages.js.map +1 -0
- package/dist/dialogs/AttachmentOverlay.d.ts.map +1 -1
- package/dist/dialogs/AttachmentOverlay.js +4 -4
- package/dist/dialogs/AttachmentOverlay.js.map +1 -1
- package/dist/dialogs/ModelSelector.d.ts +3 -3
- package/dist/dialogs/ModelSelector.d.ts.map +1 -1
- package/dist/dialogs/ModelSelector.js.map +1 -1
- package/dist/storage/stores/custom-providers-store.d.ts +2 -2
- package/dist/storage/stores/custom-providers-store.d.ts.map +1 -1
- package/dist/storage/types.d.ts +2 -2
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/tools/artifacts/DocxArtifact.js +1 -1
- package/dist/tools/artifacts/DocxArtifact.js.map +1 -1
- package/dist/tools/artifacts/ExcelArtifact.js +1 -1
- package/dist/tools/artifacts/ExcelArtifact.js.map +1 -1
- package/dist/tools/artifacts/HtmlArtifact.js.map +1 -1
- package/dist/tools/artifacts/PdfArtifact.d.ts.map +1 -1
- package/dist/tools/artifacts/PdfArtifact.js +1 -1
- package/dist/tools/artifacts/PdfArtifact.js.map +1 -1
- package/dist/tools/artifacts/artifacts-tool-renderer.d.ts.map +1 -1
- package/dist/tools/artifacts/artifacts-tool-renderer.js.map +1 -1
- package/dist/tools/artifacts/artifacts.js.map +1 -1
- package/dist/tools/extract-document.js +1 -1
- package/dist/tools/extract-document.js.map +1 -1
- package/dist/tools/index.d.ts +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/javascript-repl.js.map +1 -1
- package/dist/tools/renderer-registry.d.ts +4 -3
- package/dist/tools/renderer-registry.d.ts.map +1 -1
- package/dist/tools/renderer-registry.js.map +1 -1
- package/dist/tools/renderers/BashRenderer.d.ts.map +1 -1
- package/dist/tools/renderers/BashRenderer.js.map +1 -1
- package/dist/tools/renderers/CalculateRenderer.d.ts.map +1 -1
- package/dist/tools/renderers/CalculateRenderer.js.map +1 -1
- package/dist/tools/renderers/DefaultRenderer.d.ts +1 -1
- package/dist/tools/renderers/DefaultRenderer.d.ts.map +1 -1
- package/dist/tools/renderers/DefaultRenderer.js.map +1 -1
- package/dist/tools/renderers/GetCurrentTimeRenderer.d.ts.map +1 -1
- package/dist/tools/renderers/GetCurrentTimeRenderer.js.map +1 -1
- package/dist/tools/types.d.ts +1 -1
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/utils/attachment-utils.js +1 -1
- package/dist/utils/attachment-utils.js.map +1 -1
- package/dist/utils/format.d.ts +2 -2
- package/dist/utils/format.d.ts.map +1 -1
- package/dist/utils/format.js.map +1 -1
- package/dist/utils/model-discovery.d.ts +6 -6
- package/dist/utils/model-discovery.d.ts.map +1 -1
- package/dist/utils/model-discovery.js +3 -3
- package/dist/utils/model-discovery.js.map +1 -1
- package/dist/utils/proxy-utils.d.ts +1 -1
- package/example/package.json +23 -23
- package/example/src/css-modules.d.ts +3 -0
- package/package.json +6 -6
- package/src/ChatPanel.ts +1 -1
- package/src/components/AgentInterface.ts +5 -5
- package/src/components/MessageEditor.ts +2 -2
- package/src/components/Messages.ts +6 -6
- package/src/components/ProviderKeyInput.ts +3 -3
- package/src/components/SandboxedIframe.ts +7 -6
- package/src/components/message-renderer-registry.ts +1 -1
- package/src/components/sandbox/ArtifactsRuntimeProvider.ts +40 -44
- package/src/components/sandbox/AttachmentsRuntimeProvider.ts +9 -7
- package/src/components/sandbox/ConsoleRuntimeProvider.ts +19 -17
- package/src/components/sandbox/FileDownloadRuntimeProvider.ts +11 -7
- package/src/components/sandbox/RuntimeMessageRouter.ts +7 -8
- package/src/components/sandbox/SandboxRuntimeProvider.ts +4 -2
- package/src/components/sandbox/runtime-messages.ts +146 -0
- package/src/dialogs/AttachmentOverlay.ts +12 -11
- package/src/dialogs/CustomProviderDialog.ts +2 -2
- package/src/dialogs/ModelSelector.ts +11 -11
- package/src/storage/stores/custom-providers-store.ts +2 -2
- package/src/storage/types.ts +2 -2
- package/src/tools/artifacts/DocxArtifact.ts +2 -2
- package/src/tools/artifacts/ExcelArtifact.ts +3 -3
- package/src/tools/artifacts/HtmlArtifact.ts +1 -1
- package/src/tools/artifacts/PdfArtifact.ts +5 -4
- package/src/tools/artifacts/artifacts-tool-renderer.ts +4 -4
- package/src/tools/artifacts/artifacts.ts +4 -4
- package/src/tools/extract-document.ts +6 -6
- package/src/tools/index.ts +1 -1
- package/src/tools/javascript-repl.ts +3 -3
- package/src/tools/renderer-registry.ts +5 -5
- package/src/tools/renderers/BashRenderer.ts +3 -3
- package/src/tools/renderers/CalculateRenderer.ts +3 -3
- package/src/tools/renderers/DefaultRenderer.ts +5 -5
- package/src/tools/renderers/GetCurrentTimeRenderer.ts +5 -5
- package/src/tools/types.ts +1 -1
- package/src/utils/attachment-utils.ts +10 -3
- package/src/utils/format.ts +2 -2
- package/src/utils/model-discovery.ts +35 -22
- package/src/utils/proxy-utils.ts +1 -1
|
@@ -1,14 +1,27 @@
|
|
|
1
|
-
import type { Model } from "@elyracode/ai";
|
|
1
|
+
import type { Api, Model } from "@elyracode/ai";
|
|
2
2
|
import { LMStudioClient } from "@lmstudio/sdk";
|
|
3
3
|
import { Ollama } from "ollama/browser";
|
|
4
4
|
|
|
5
|
+
/** Minimal shape of a model entry from an OpenAI-compatible /v1/models endpoint. */
|
|
6
|
+
interface OpenAICompatibleModel {
|
|
7
|
+
id: string;
|
|
8
|
+
context_length?: number;
|
|
9
|
+
max_tokens?: number;
|
|
10
|
+
max_model_len?: number;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/** Minimal shape of the response from an OpenAI-compatible /v1/models endpoint. */
|
|
14
|
+
interface OpenAICompatibleModelsResponse {
|
|
15
|
+
data?: OpenAICompatibleModel[];
|
|
16
|
+
}
|
|
17
|
+
|
|
5
18
|
/**
|
|
6
19
|
* Discover models from an Ollama server.
|
|
7
20
|
* @param baseUrl - Base URL of the Ollama server (e.g., "http://localhost:11434")
|
|
8
21
|
* @param apiKey - Optional API key (currently unused by Ollama)
|
|
9
22
|
* @returns Array of discovered models
|
|
10
23
|
*/
|
|
11
|
-
export async function discoverOllamaModels(baseUrl: string, _apiKey?: string): Promise<Model<
|
|
24
|
+
export async function discoverOllamaModels(baseUrl: string, _apiKey?: string): Promise<Model<Api>[]> {
|
|
12
25
|
try {
|
|
13
26
|
// Create Ollama client
|
|
14
27
|
const ollama = new Ollama({ host: baseUrl });
|
|
@@ -17,7 +30,7 @@ export async function discoverOllamaModels(baseUrl: string, _apiKey?: string): P
|
|
|
17
30
|
const { models } = await ollama.list();
|
|
18
31
|
|
|
19
32
|
// Fetch details for each model and convert to Model format
|
|
20
|
-
const ollamaModelPromises: Promise<Model<
|
|
33
|
+
const ollamaModelPromises: Promise<Model<Api> | null>[] = models.map(async (model) => {
|
|
21
34
|
try {
|
|
22
35
|
// Get model details
|
|
23
36
|
const details = await ollama.show({
|
|
@@ -25,14 +38,14 @@ export async function discoverOllamaModels(baseUrl: string, _apiKey?: string): P
|
|
|
25
38
|
});
|
|
26
39
|
|
|
27
40
|
// Check capabilities - filter out models that don't support tools
|
|
28
|
-
const capabilities: string[] =
|
|
41
|
+
const capabilities: string[] = details.capabilities || [];
|
|
29
42
|
if (!capabilities.includes("tools")) {
|
|
30
43
|
console.debug(`Skipping model ${model.name}: does not support tools`);
|
|
31
44
|
return null;
|
|
32
45
|
}
|
|
33
46
|
|
|
34
47
|
// Extract model info
|
|
35
|
-
const modelInfo
|
|
48
|
+
const modelInfo = (details.model_info || {}) as unknown as Record<string, string>;
|
|
36
49
|
|
|
37
50
|
// Get context window size - look for architecture-specific keys
|
|
38
51
|
const architecture = modelInfo["general.architecture"] || "";
|
|
@@ -43,10 +56,10 @@ export async function discoverOllamaModels(baseUrl: string, _apiKey?: string): P
|
|
|
43
56
|
const maxTokens = contextWindow * 10;
|
|
44
57
|
|
|
45
58
|
// Ollama only supports completions API
|
|
46
|
-
const ollamaModel: Model<
|
|
59
|
+
const ollamaModel: Model<Api> = {
|
|
47
60
|
id: model.name,
|
|
48
61
|
name: model.name,
|
|
49
|
-
api: "openai-completions"
|
|
62
|
+
api: "openai-completions",
|
|
50
63
|
provider: "", // Will be set by caller
|
|
51
64
|
baseUrl: `${baseUrl}/v1`,
|
|
52
65
|
reasoning: capabilities.includes("thinking"),
|
|
@@ -69,7 +82,7 @@ export async function discoverOllamaModels(baseUrl: string, _apiKey?: string): P
|
|
|
69
82
|
});
|
|
70
83
|
|
|
71
84
|
const results = await Promise.all(ollamaModelPromises);
|
|
72
|
-
return results.filter((m): m is Model<
|
|
85
|
+
return results.filter((m): m is Model<Api> => m !== null);
|
|
73
86
|
} catch (err) {
|
|
74
87
|
console.error("Failed to discover Ollama models:", err);
|
|
75
88
|
throw new Error(`Ollama discovery failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
@@ -82,7 +95,7 @@ export async function discoverOllamaModels(baseUrl: string, _apiKey?: string): P
|
|
|
82
95
|
* @param apiKey - Optional API key
|
|
83
96
|
* @returns Array of discovered models
|
|
84
97
|
*/
|
|
85
|
-
export async function discoverLlamaCppModels(baseUrl: string, apiKey?: string): Promise<Model<
|
|
98
|
+
export async function discoverLlamaCppModels(baseUrl: string, apiKey?: string): Promise<Model<Api>[]> {
|
|
86
99
|
try {
|
|
87
100
|
const headers: HeadersInit = {
|
|
88
101
|
"Content-Type": "application/json",
|
|
@@ -101,21 +114,21 @@ export async function discoverLlamaCppModels(baseUrl: string, apiKey?: string):
|
|
|
101
114
|
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
102
115
|
}
|
|
103
116
|
|
|
104
|
-
const data = await response.json();
|
|
117
|
+
const data = (await response.json()) as OpenAICompatibleModelsResponse;
|
|
105
118
|
|
|
106
119
|
if (!data.data || !Array.isArray(data.data)) {
|
|
107
120
|
throw new Error("Invalid response format from llama.cpp server");
|
|
108
121
|
}
|
|
109
122
|
|
|
110
|
-
return data.data.map((model
|
|
123
|
+
return data.data.map((model) => {
|
|
111
124
|
// llama.cpp doesn't always provide context window info
|
|
112
125
|
const contextWindow = model.context_length || 8192;
|
|
113
126
|
const maxTokens = model.max_tokens || 4096;
|
|
114
127
|
|
|
115
|
-
const llamaModel: Model<
|
|
128
|
+
const llamaModel: Model<Api> = {
|
|
116
129
|
id: model.id,
|
|
117
130
|
name: model.id,
|
|
118
|
-
api: "openai-completions"
|
|
131
|
+
api: "openai-completions",
|
|
119
132
|
provider: "", // Will be set by caller
|
|
120
133
|
baseUrl: `${baseUrl}/v1`,
|
|
121
134
|
reasoning: false,
|
|
@@ -144,7 +157,7 @@ export async function discoverLlamaCppModels(baseUrl: string, apiKey?: string):
|
|
|
144
157
|
* @param apiKey - Optional API key
|
|
145
158
|
* @returns Array of discovered models
|
|
146
159
|
*/
|
|
147
|
-
export async function discoverVLLMModels(baseUrl: string, apiKey?: string): Promise<Model<
|
|
160
|
+
export async function discoverVLLMModels(baseUrl: string, apiKey?: string): Promise<Model<Api>[]> {
|
|
148
161
|
try {
|
|
149
162
|
const headers: HeadersInit = {
|
|
150
163
|
"Content-Type": "application/json",
|
|
@@ -163,21 +176,21 @@ export async function discoverVLLMModels(baseUrl: string, apiKey?: string): Prom
|
|
|
163
176
|
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
164
177
|
}
|
|
165
178
|
|
|
166
|
-
const data = await response.json();
|
|
179
|
+
const data = (await response.json()) as OpenAICompatibleModelsResponse;
|
|
167
180
|
|
|
168
181
|
if (!data.data || !Array.isArray(data.data)) {
|
|
169
182
|
throw new Error("Invalid response format from vLLM server");
|
|
170
183
|
}
|
|
171
184
|
|
|
172
|
-
return data.data.map((model
|
|
185
|
+
return data.data.map((model) => {
|
|
173
186
|
// vLLM provides max_model_len which is the context window
|
|
174
187
|
const contextWindow = model.max_model_len || 8192;
|
|
175
188
|
const maxTokens = Math.min(contextWindow, 4096); // Cap max tokens
|
|
176
189
|
|
|
177
|
-
const vllmModel: Model<
|
|
190
|
+
const vllmModel: Model<Api> = {
|
|
178
191
|
id: model.id,
|
|
179
192
|
name: model.id,
|
|
180
|
-
api: "openai-completions"
|
|
193
|
+
api: "openai-completions",
|
|
181
194
|
provider: "", // Will be set by caller
|
|
182
195
|
baseUrl: `${baseUrl}/v1`,
|
|
183
196
|
reasoning: false,
|
|
@@ -206,7 +219,7 @@ export async function discoverVLLMModels(baseUrl: string, apiKey?: string): Prom
|
|
|
206
219
|
* @param apiKey - Optional API key (unused for LM Studio SDK)
|
|
207
220
|
* @returns Array of discovered models
|
|
208
221
|
*/
|
|
209
|
-
export async function discoverLMStudioModels(baseUrl: string, _apiKey?: string): Promise<Model<
|
|
222
|
+
export async function discoverLMStudioModels(baseUrl: string, _apiKey?: string): Promise<Model<Api>[]> {
|
|
210
223
|
try {
|
|
211
224
|
// Extract host and port from baseUrl
|
|
212
225
|
const url = new URL(baseUrl);
|
|
@@ -226,10 +239,10 @@ export async function discoverLMStudioModels(baseUrl: string, _apiKey?: string):
|
|
|
226
239
|
// Use 10x context length like Ollama does
|
|
227
240
|
const maxTokens = contextWindow;
|
|
228
241
|
|
|
229
|
-
const lmStudioModel: Model<
|
|
242
|
+
const lmStudioModel: Model<Api> = {
|
|
230
243
|
id: model.path,
|
|
231
244
|
name: model.displayName || model.path,
|
|
232
|
-
api: "openai-completions"
|
|
245
|
+
api: "openai-completions",
|
|
233
246
|
provider: "", // Will be set by caller
|
|
234
247
|
baseUrl: `${baseUrl}/v1`,
|
|
235
248
|
reasoning: model.trainedForToolUse || false,
|
|
@@ -263,7 +276,7 @@ export async function discoverModels(
|
|
|
263
276
|
type: "ollama" | "llama.cpp" | "vllm" | "lmstudio",
|
|
264
277
|
baseUrl: string,
|
|
265
278
|
apiKey?: string,
|
|
266
|
-
): Promise<Model<
|
|
279
|
+
): Promise<Model<Api>[]> {
|
|
267
280
|
switch (type) {
|
|
268
281
|
case "ollama":
|
|
269
282
|
return discoverOllamaModels(baseUrl, apiKey);
|
package/src/utils/proxy-utils.ts
CHANGED
|
@@ -125,7 +125,7 @@ export function isCorsError(error: unknown): boolean {
|
|
|
125
125
|
* @returns A streamFn compatible with Agent's streamFn option
|
|
126
126
|
*/
|
|
127
127
|
export function createStreamFn(getProxyUrl: () => Promise<string | undefined>) {
|
|
128
|
-
return async (model: Model<
|
|
128
|
+
return async (model: Model<Api>, context: Context, options?: SimpleStreamOptions) => {
|
|
129
129
|
const apiKey = options?.apiKey;
|
|
130
130
|
const proxyUrl = await getProxyUrl();
|
|
131
131
|
|