diff --git a/web/src/lib/components/chat/Models.svelte b/web/src/lib/components/chat/Models.svelte
index 3ef9e1cf..a6a2788e 100644
--- a/web/src/lib/components/chat/Models.svelte
+++ b/web/src/lib/components/chat/Models.svelte
@@ -1,20 +1,29 @@
-
+
+
diff --git a/web/src/lib/store/model-store.ts b/web/src/lib/store/model-store.ts
index 2cb0db14..b1149c7b 100644
--- a/web/src/lib/store/model-store.ts
+++ b/web/src/lib/store/model-store.ts
@@ -1,4 +1,4 @@
-import { writable } from 'svelte/store';
+import { derived, writable } from 'svelte/store';
import { modelsApi } from '$lib/api/models';
import { configApi } from '$lib/api/config';
import type { VendorModel, ModelConfig } from '$lib/interfaces/model-interface';
@@ -13,13 +13,34 @@ export const modelConfig = writable({
});
export const availableModels = writable([]);
+export const selectedVendor = writable('');
+
+// Sorted unique vendor names
+export const vendorNames = derived(availableModels, ($models) =>
+ [...new Set($models.map(m => m.vendor))].sort((a, b) =>
+ a.toLowerCase().localeCompare(b.toLowerCase())
+ )
+);
+
+// Models filtered by selected vendor
+export const filteredModels = derived(
+ [availableModels, selectedVendor],
+ ([$models, $vendor]) =>
+ $vendor ? $models.filter(m => m.vendor === $vendor) : $models
+);
// Initialize available models
export async function loadAvailableModels() {
try {
const models = await modelsApi.getAvailable();
console.log('Load models:', models);
- const uniqueModels = [...new Map(models.map(model => [model.name, model])).values()];
+ const uniqueModels = [...new Map(models.map(model => [`${model.vendor}:${model.name}`, model])).values()];
+ // Sort like CLI: vendor name (case-insensitive), then model name (case-insensitive)
+ uniqueModels.sort((a, b) => {
+ const vendorCmp = a.vendor.toLowerCase().localeCompare(b.vendor.toLowerCase());
+ if (vendorCmp !== 0) return vendorCmp;
+ return a.name.toLowerCase().localeCompare(b.name.toLowerCase());
+ });
availableModels.set(uniqueModels);
} catch (error) {
console.error('Client failed to load available models:', error);