diff --git a/surfsense_web/components/settings/model-config-manager.tsx b/surfsense_web/components/settings/model-config-manager.tsx index 20edc228c..7fb0163a1 100644 --- a/surfsense_web/components/settings/model-config-manager.tsx +++ b/surfsense_web/components/settings/model-config-manager.tsx @@ -3,7 +3,9 @@ import { AlertCircle, Bot, + Check, CheckCircle, + ChevronsUpDown, Clock, Edit3, Eye, @@ -21,6 +23,14 @@ import { Alert, AlertDescription } from "@/components/ui/alert"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Card, CardContent } from "@/components/ui/card"; +import { + Command, + CommandEmpty, + CommandGroup, + CommandInput, + CommandItem, + CommandList, +} from "@/components/ui/command"; import { Dialog, DialogContent, @@ -30,6 +40,7 @@ import { } from "@/components/ui/dialog"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; +import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover"; import { Select, SelectContent, @@ -41,6 +52,7 @@ import { LANGUAGES } from "@/contracts/enums/languages"; import { getModelsByProvider } from "@/contracts/enums/llm-models"; import { LLM_PROVIDERS } from "@/contracts/enums/llm-providers"; import { type CreateLLMConfig, type LLMConfig, useLLMConfigs } from "@/hooks/use-llm-configs"; +import { cn } from "@/lib/utils"; import InferenceParamsEditor from "../inference-params-editor"; interface ModelConfigManagerProps { @@ -72,6 +84,7 @@ export function ModelConfigManager({ searchSpaceId }: ModelConfigManagerProps) { search_space_id: searchSpaceId, }); const [isSubmitting, setIsSubmitting] = useState(false); + const [modelComboboxOpen, setModelComboboxOpen] = useState(false); // Populate form when editing useEffect(() => { @@ -533,51 +546,91 @@ export function ModelConfigManager({ searchSpaceId }: ModelConfigManagerProps) {
- {availableModels.length} model{availableModels.length !== 1 ? "s" : ""}{" "} - available -
- > - ) : ( - <> - handleInputChange("model_name", e.target.value)} - required - /> - {selectedProvider && ( -- Examples: {selectedProvider.example} -
- )} - > - )} + + {formData.model_name || "Select or type model name..."} + ++ {availableModels.length > 0 + ? `Type freely or select from ${availableModels.length} model suggestions` + : selectedProvider?.example + ? `Examples: ${selectedProvider.example}` + : "Type your model name freely"} +