@meaningfully/ui 0.0.9 → 0.0.10
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.
|
@@ -29,14 +29,9 @@
|
|
|
29
29
|
let chunkSize = $state(defaultChunkSize);
|
|
30
30
|
let chunkOverlap = $state(defaultChunkOverlap);
|
|
31
31
|
|
|
32
|
-
// Model options grouped by provider
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
"azure": ["text-embedding-3-small", "text-embedding-3-large"],
|
|
36
|
-
"ollama": ["mxbai-embed-large", "nomic-embed-text"],
|
|
37
|
-
"mistral": ["mistral-embed"],
|
|
38
|
-
"gemini": ["gemini-embedding-001"]
|
|
39
|
-
};
|
|
32
|
+
// Model options grouped by provider - fetched from API
|
|
33
|
+
let availableModelOptions: Record<string, string[]> = $state({});
|
|
34
|
+
let allModelOptions: Record<string, string[]> = $state({});
|
|
40
35
|
|
|
41
36
|
let modelProvider = $state("openai");
|
|
42
37
|
let modelName = $state("text-embedding-3-small");
|
|
@@ -50,8 +45,8 @@
|
|
|
50
45
|
|
|
51
46
|
// Update model name when provider changes
|
|
52
47
|
$effect(() => {
|
|
53
|
-
if (modelProvider &&
|
|
54
|
-
modelName =
|
|
48
|
+
if (modelProvider && availableModelOptions[modelProvider]) {
|
|
49
|
+
modelName = availableModelOptions[modelProvider][0];
|
|
55
50
|
}
|
|
56
51
|
});
|
|
57
52
|
|
|
@@ -78,7 +73,23 @@
|
|
|
78
73
|
return result;
|
|
79
74
|
};
|
|
80
75
|
|
|
81
|
-
onMount(() => {
|
|
76
|
+
onMount(async () => {
|
|
77
|
+
// Fetch available model options from API
|
|
78
|
+
try {
|
|
79
|
+
const modelOptionsData = await api.getAvailableModelOptions();
|
|
80
|
+
availableModelOptions = modelOptionsData.availableModelOptions;
|
|
81
|
+
allModelOptions = modelOptionsData.allModelOptions;
|
|
82
|
+
|
|
83
|
+
// Set default provider to first available one
|
|
84
|
+
const availableProviders = Object.keys(availableModelOptions);
|
|
85
|
+
if (availableProviders.length > 0) {
|
|
86
|
+
modelProvider = availableProviders[0];
|
|
87
|
+
modelName = availableModelOptions[modelProvider][0];
|
|
88
|
+
}
|
|
89
|
+
} catch (e) {
|
|
90
|
+
console.error('Error fetching available model options:', e);
|
|
91
|
+
}
|
|
92
|
+
|
|
82
93
|
// Subscribe to the file data store
|
|
83
94
|
const unsubscribe = fileDataStore.subscribe((data: any) => {
|
|
84
95
|
if (!data) {
|
|
@@ -284,15 +295,15 @@
|
|
|
284
295
|
<select
|
|
285
296
|
bind:value={modelProvider}
|
|
286
297
|
class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-violet-500 focus:ring-violet-500">
|
|
287
|
-
<option value="openai">OpenAI</option>
|
|
288
|
-
<option value="azure">Azure OpenAI</option>
|
|
289
|
-
<option value="ollama">Ollama</option>
|
|
290
|
-
<option value="mistral">Mistral AI</option>
|
|
291
|
-
<option value="gemini">Google Gemini</option>
|
|
298
|
+
<option value="openai" disabled={!availableModelOptions.openai}>OpenAI</option>
|
|
299
|
+
<option value="azure" disabled={!availableModelOptions.azure}>Azure OpenAI</option>
|
|
300
|
+
<option value="ollama" disabled={!availableModelOptions.ollama}>Ollama</option>
|
|
301
|
+
<option value="mistral" disabled={!availableModelOptions.mistral}>Mistral AI</option>
|
|
302
|
+
<option value="gemini" disabled={!availableModelOptions.gemini}>Google Gemini</option>
|
|
292
303
|
</select>
|
|
293
304
|
</label>
|
|
294
305
|
<p class="text-xs text-gray-500">
|
|
295
|
-
The provider for the embedding model.
|
|
306
|
+
The provider for the embedding model. {Object.keys(availableModelOptions).length === 0 ? 'No providers are configured yet. Please set up API keys in the settings.' : ''}
|
|
296
307
|
</p>
|
|
297
308
|
</div>
|
|
298
309
|
|
|
@@ -301,8 +312,9 @@
|
|
|
301
312
|
What embedding model should we use?
|
|
302
313
|
<select
|
|
303
314
|
bind:value={modelName}
|
|
304
|
-
|
|
305
|
-
|
|
315
|
+
disabled={!availableModelOptions[modelProvider]}
|
|
316
|
+
class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-violet-500 focus:ring-violet-500 disabled:opacity-50 disabled:cursor-not-allowed">
|
|
317
|
+
{#each (availableModelOptions[modelProvider] || allModelOptions[modelProvider] || []) as modelNameChoice}
|
|
306
318
|
<option value={modelNameChoice}>{modelNameChoice}</option>
|
|
307
319
|
{/each}
|
|
308
320
|
</select>
|
|
@@ -95,8 +95,10 @@
|
|
|
95
95
|
link.setAttribute('download', 'results.csv');
|
|
96
96
|
document.body.appendChild(link);
|
|
97
97
|
link.click();
|
|
98
|
-
|
|
99
|
-
|
|
98
|
+
setTimeout(() => {
|
|
99
|
+
document.body.removeChild(link);
|
|
100
|
+
URL.revokeObjectURL(url);
|
|
101
|
+
}, 5000);
|
|
100
102
|
};
|
|
101
103
|
|
|
102
104
|
// Computed property for visible results
|
|
@@ -111,6 +113,7 @@
|
|
|
111
113
|
onclick={downloadCSV}
|
|
112
114
|
class="px-4 py-2 bg-green-500 text-white rounded hover:bg-green-600 transition-colors flex items-center gap-2"
|
|
113
115
|
title="Download results as CSV"
|
|
116
|
+
data-testid="download-csv"
|
|
114
117
|
>
|
|
115
118
|
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
|
116
119
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"></path>
|
|
@@ -254,7 +254,7 @@
|
|
|
254
254
|
{/each}
|
|
255
255
|
</tbody>
|
|
256
256
|
</table>
|
|
257
|
-
<button class="mt-4 px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600" onclick={closeModal}>Close</button>
|
|
257
|
+
<button data-testid="modal-close-button" class="mt-4 px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600" onclick={closeModal}>Close</button>
|
|
258
258
|
</div>
|
|
259
259
|
</div>
|
|
260
260
|
{/if}
|
package/dist/types.d.ts
CHANGED
|
@@ -57,4 +57,8 @@ export interface MeaningfullyAPI {
|
|
|
57
57
|
elapsedTimeMs: number;
|
|
58
58
|
estimatedTimeRemainingMs: number | null;
|
|
59
59
|
}>;
|
|
60
|
+
getAvailableModelOptions: () => Promise<{
|
|
61
|
+
availableModelOptions: Record<string, string[]>;
|
|
62
|
+
allModelOptions: Record<string, string[]>;
|
|
63
|
+
}>;
|
|
60
64
|
}
|