From 456417582262cf321666f3c6fda865e8d4412c97 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Sun, 19 Oct 2025 18:29:22 +0530 Subject: [PATCH] feat(settings): add embedding model selector --- .../Settings/Sections/Models/ModelSelect.tsx | 80 +++++++++++++++++++ .../Settings/Sections/Models/Section.tsx | 15 +++- 2 files changed, 92 insertions(+), 3 deletions(-) create mode 100644 src/components/Settings/Sections/Models/ModelSelect.tsx diff --git a/src/components/Settings/Sections/Models/ModelSelect.tsx b/src/components/Settings/Sections/Models/ModelSelect.tsx new file mode 100644 index 0000000..d6976e8 --- /dev/null +++ b/src/components/Settings/Sections/Models/ModelSelect.tsx @@ -0,0 +1,80 @@ +import Select from '@/components/ui/Select'; +import { ConfigModelProvider } from '@/lib/config/types'; +import { useState } from 'react'; +import { toast } from 'sonner'; + +const ModelSelect = ({ + providers, + type, +}: { + providers: ConfigModelProvider[]; + type: 'chat' | 'embedding'; +}) => { + const [selectedModel, setSelectedModel] = useState( + `${providers[0]?.id}/${providers[0].embeddingModels[0]?.key}`, + ); + const [loading, setLoading] = useState(false); + + const handleSave = async (newValue: string) => { + setLoading(true); + setSelectedModel(newValue); + try { + if (type === 'chat') { + localStorage.setItem('chatModelProviderId', newValue.split('/')[0]); + localStorage.setItem('chatModelKey', newValue.split('/')[1]); + } else { + localStorage.setItem( + 'embeddingModelProviderId', + newValue.split('/')[0], + ); + localStorage.setItem('embeddingModelKey', newValue.split('/')[1]); + } + } catch (error) { + console.error('Error saving config:', error); + toast.error('Failed to save configuration.'); + } finally { + setLoading(false); + } + }; + + return ( +
+
+
+

+ Select {type === 'chat' ? 'Chat Model' : 'Embedding Model'} +

+

+ {type === 'chat' + ? 'Select the model to use for chat responses' + : 'Select the model to use for embeddings'} +

+
+