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'} +

+
+