'use client' import { useEffect, useMemo, useState } from 'react' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select' import { Button } from '@/components/ui/button' import { Label } from '@/components/ui/label' import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from '@/components/ui/dialog' import { Settings2, Sparkles } from 'lucide-react' import { useModelDefaults, useModels } from '@/lib/hooks/use-models' import { LoadingSpinner } from '@/components/common/LoadingSpinner' interface ModelSelectorProps { currentModel?: string onModelChange: (model?: string) => void disabled?: boolean } export function ModelSelector({ currentModel, onModelChange, disabled = false }: ModelSelectorProps) { const [open, setOpen] = useState(false) const [selectedModel, setSelectedModel] = useState(currentModel || 'default') const { data: models, isLoading } = useModels() const { data: defaults } = useModelDefaults() useEffect(() => { setSelectedModel(currentModel || 'default') }, [currentModel]) // Filter for language models only and sort by name const languageModels = useMemo(() => { if (!models) { return [] } return [...models] .filter((model) => model.type === 'language') .sort((a, b) => a.name.localeCompare(b.name)) }, [models]) const defaultModel = useMemo(() => { if (!defaults?.default_chat_model) return undefined return languageModels.find(model => model.id === defaults.default_chat_model) }, [defaults?.default_chat_model, languageModels]) const currentModelName = useMemo(() => { if (currentModel) { return languageModels.find(model => model.id === currentModel)?.name || currentModel } if (defaultModel) { return defaultModel.name } return 'Default Model' }, [currentModel, languageModels, defaultModel]) const handleSave = () => { onModelChange(selectedModel === 'default' ? undefined : selectedModel) setOpen(false) } const handleReset = () => { setSelectedModel('default') onModelChange(undefined) setOpen(false) } return ( Model Configuration Override the default model for this chat session. Leave empty to use the system default.
{selectedModel && selectedModel !== 'default' && (

This session will use {languageModels.find(m => m.id === selectedModel)?.name} instead of the default model.

)}
) }