sheer / src /pages /chat /components /ModelSelector.tsx
barreloflube's picture
feat: add Hugging Face and Clerk integrations with enhanced configuration
136f9cf
raw
history blame
2.66 kB
import React from "react";
import { Button } from "@/components/ui/button";
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu";
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip";
import { Badge } from "@/components/ui/badge";
import { Check, Info } from "lucide-react";
import { CHAT_MODELS } from "@/lib/config/types";
interface ModelSelectorProps {
selectedModel: string;
selectedModelName: string;
enabledChatModels: string[] | undefined;
onModelChange: (model: string) => void;
}
export const ModelSelector = React.memo(({
selectedModel,
selectedModelName,
enabledChatModels,
onModelChange
}: ModelSelectorProps) => (
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button
variant="ghost"
className="w-[200px] h-8 p-1 justify-start font-normal truncate"
>
<span className="truncate">{selectedModelName}</span>
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent className="w-[400px]">
{CHAT_MODELS
.filter((model) => enabledChatModels?.includes(model.model))
.map((model) => (
<TooltipProvider key={model.model}>
<Tooltip>
<TooltipTrigger asChild>
<DropdownMenuItem
className="p-4"
onSelect={() => onModelChange(model.model)}
>
<div className="flex items-center gap-2 w-full">
{model.model === selectedModel && (
<Check className="h-4 w-4 shrink-0" />
)}
<span className="flex-grow">{model.name}</span>
<Info className="h-4 w-4 text-muted-foreground shrink-0" />
</div>
</DropdownMenuItem>
</TooltipTrigger>
<TooltipContent side="right" align="start" className="max-w-[300px]">
<p>{model.description}</p>
{model.modalities && model.modalities.length > 0 && (
<div className="flex gap-1 flex-wrap mt-1">
{model.modalities.map((modality) => (
<Badge key={modality} variant="secondary" className="capitalize text-xs">
{modality.toLowerCase()}
</Badge>
))}
</div>
)}
</TooltipContent>
</Tooltip>
</TooltipProvider>
))}
</DropdownMenuContent>
</DropdownMenu>
));
ModelSelector.displayName = "ModelSelector";