WEB.BUILDING.GENIOUS / components /provider-selector.tsx
Humbl3m33's picture
Rename provider-selector.tsx to components/provider-selector.tsx
115e666 verified
Raw
History Blame Contribute Delete
2.62 kB
"use client"
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"
import { Badge } from "@/components/ui/badge"
import type { AIProvider } from "@/types/chat"
interface ProviderSelectorProps {
selected: AIProvider
onSelect: (provider: AIProvider) => void
selectedModel?: string
onModelSelect?: (model: string) => void
}
const providers = [
{
id: "openai" as AIProvider,
name: "OpenAI",
badge: "GPT-4",
models: ["gpt-4o", "gpt-4o-mini", "gpt-4-turbo", "gpt-3.5-turbo"],
},
{
id: "openrouter" as AIProvider,
name: "OpenRouter",
badge: "Multi-Model",
models: ["openai/gpt-4o", "anthropic/claude-3.5-sonnet", "meta-llama/llama-3.1-405b", "google/gemini-pro-1.5"],
},
{
id: "groq" as AIProvider,
name: "Groq",
badge: "Fast",
models: ["llama-3.1-70b-versatile", "llama-3.1-8b-instant", "mixtral-8x7b-32768"],
},
{
id: "grok" as AIProvider,
name: "Grok",
badge: "xAI",
models: ["grok-beta", "grok-vision-beta"],
},
]
export function ProviderSelector({ selected, onSelect, selectedModel, onModelSelect }: ProviderSelectorProps) {
const currentProvider = providers.find((p) => p.id === selected)
return (
<div className="flex items-center gap-3">
<span className="text-sm font-medium">AI Provider:</span>
<Select value={selected} onValueChange={onSelect}>
<SelectTrigger className="w-48">
<SelectValue />
</SelectTrigger>
<SelectContent>
{providers.map((provider) => (
<SelectItem key={provider.id} value={provider.id}>
<div className="flex items-center gap-2">
<span>{provider.name}</span>
<Badge variant="secondary" className="text-xs">
{provider.badge}
</Badge>
</div>
</SelectItem>
))}
</SelectContent>
</Select>
{onModelSelect && currentProvider && (
<>
<span className="text-sm font-medium">Model:</span>
<Select value={selectedModel || currentProvider.models[0]} onValueChange={onModelSelect}>
<SelectTrigger className="w-64">
<SelectValue />
</SelectTrigger>
<SelectContent>
{currentProvider.models.map((model) => (
<SelectItem key={model} value={model}>
<span className="font-mono text-sm">{model}</span>
</SelectItem>
))}
</SelectContent>
</Select>
</>
)}
</div>
)
}