"use client" import { useOllama } from "@/contexts/ollama-context" import { AI_MODELS, OLLAMA_MODELS, isOllamaModel } from "@/types/prompt" import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { Cloud, Server, ChevronDown, Check } from "lucide-react" import { useState, useRef, useEffect } from "react" import { cn } from "@/lib/utils" interface ModelSelectorProps { value: string onChange: (model: string) => void disabled?: boolean showOllama?: boolean compact?: boolean } export function ModelSelector({ value, onChange, disabled = false, showOllama = true, compact = false }: ModelSelectorProps) { const { settings } = useOllama() const [open, setOpen] = useState(false) const dropdownRef = useRef(null) // Close on click outside useEffect(() => { const handleClickOutside = (event: MouseEvent) => { if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) { setOpen(false) } } document.addEventListener("mousedown", handleClickOutside) return () => document.removeEventListener("mousedown", handleClickOutside) }, []) // Get current model info const isOllama = isOllamaModel(value) const currentModel = isOllama ? (OLLAMA_MODELS as Record)[value] || { name: value } : (AI_MODELS as Record)[value] || { name: value } // Build cloud models list const cloudModels = Object.entries(AI_MODELS).map(([id, config]) => ({ id, ...config, isOllama: false, })) // Build Ollama models list (from detected + predefined) const ollamaModels = settings.enabled ? settings.availableModels.map(name => ({ id: name, name: name, description: "Local Ollama model", isOllama: true, })) : [] return (
{open && (
{/* Cloud Models */}

Cloud Models

{cloudModels.map((model) => ( ))}
{/* Ollama Models */} {showOllama && (

Ollama Models {!settings.enabled && ( Not connected )}

{ollamaModels.length > 0 ? ( ollamaModels.map((model) => ( )) ) : (

{settings.enabled ? "No models found. Run: ollama pull llama3.2" : "Click 'Ollama' in header to connect" }

)}
)}
)}
) } // Simple inline selector for compact spaces export function ModelBadge({ model }: { model: string }) { const isOllama = isOllamaModel(model) const modelInfo = isOllama ? (OLLAMA_MODELS as Record)[model] : (AI_MODELS as Record)[model] return ( {isOllama ? ( ) : ( )} {modelInfo?.name || model} ) }