"use client" /** * Model Selector - WeKnora Integration * * Allows users to switch between AI models dynamically */ import { useState } from "react" import { Button } from "@/components/ui/button" import { Badge } from "@/components/ui/badge" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select" import { Sparkles, Zap, Brain, Rocket, Info } from "lucide-react" import { cn } from "@/lib/utils" import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "@/components/ui/tooltip" interface AIModel { id: string name: string provider: string description: string speed: 'fast' | 'medium' | 'slow' quality: 'standard' | 'high' | 'premium' icon: React.ReactNode available: boolean } // Prioritize Moonshot and Gemini (user has these APIs) const AI_MODELS: AIModel[] = [ { id: "moonshot-v1-8k", name: "Moonshot V1", provider: "Moonshot", description: "Fast, efficient for most queries", speed: "fast", quality: "high", icon: , available: true }, { id: "gemini-2.5-flash", name: "Gemini 2.5 Flash", provider: "Google", description: "Latest Gemini, great balance", speed: "fast", quality: "high", icon: , available: true }, { id: "gemini-1.5-pro", name: "Gemini 1.5 Pro", provider: "Google", description: "Best for complex analysis", speed: "medium", quality: "premium", icon: , available: true }, { id: "gpt-4o-mini", name: "GPT-4o Mini", provider: "OpenAI", description: "Requires OpenAI API key", speed: "fast", quality: "high", icon: , available: false }, { id: "claude-3.5-sonnet", name: "Claude 3.5 Sonnet", provider: "Anthropic", description: "Requires Anthropic API key", speed: "medium", quality: "premium", icon: , available: false } ] interface ModelSelectorProps { selected: string onChange: (modelId: string) => void className?: string showDetails?: boolean } export function ModelSelector({ selected, onChange, className, showDetails = true }: ModelSelectorProps) { const selectedModel = AI_MODELS.find(m => m.id === selected) || AI_MODELS[0] const getSpeedBadge = (speed: string) => { switch (speed) { case 'fast': return Fast case 'medium': return Medium case 'slow': return Slow } } const getQualityBadge = (quality: string) => { switch (quality) { case 'premium': return Premium case 'high': return High case 'standard': return Standard } } return (
{showDetails && (
{selectedModel.icon} {selectedModel.name}

{selectedModel.description}

{getSpeedBadge(selectedModel.speed)} {getQualityBadge(selectedModel.quality)}
)}
) } // Compact version for sidebar export function ModelSelectorCompact({ selected, onChange }: { selected: string onChange: (modelId: string) => void }) { const selectedModel = AI_MODELS.find(m => m.id === selected) || AI_MODELS[0] return ( ) } export default ModelSelector