"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