import { Check, ChevronsUpDown } from 'lucide-react' import { useRouter } from 'next/router' import { useState } from 'react' import { Badge, Button, Command, CommandGroup, CommandItem, CommandList, Popover, PopoverContent, PopoverTrigger, Tooltip, TooltipContent, TooltipTrigger, } from 'ui' import { useCheckEntitlements } from '@/hooks/misc/useCheckEntitlements' import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' import { ASSISTANT_MODELS, isAdvanceOnlyModelId } from '@/lib/ai/model.utils' import type { AssistantModelId } from '@/lib/ai/model.utils' interface ModelSelectorProps { selectedModel: AssistantModelId onSelectModel: (model: AssistantModelId) => void } export const ModelSelector = ({ selectedModel, onSelectModel }: ModelSelectorProps) => { const router = useRouter() const { data: organization } = useSelectedOrganizationQuery() const { hasAccess: hasAccessToAdvanceModel, isLoading: isLoadingEntitlements } = useCheckEntitlements('assistant.advance_model') const [open, setOpen] = useState(false) const slug = organization?.slug ?? '_' const upgradeHref = `/org/${slug}/billing?panel=subscriptionPlan&source=ai-assistant-model` const handleSelectModel = (modelId: AssistantModelId) => { if (isLoadingEntitlements && isAdvanceOnlyModelId(modelId)) { return } if (isAdvanceOnlyModelId(modelId) && !hasAccessToAdvanceModel) { setOpen(false) void router.push(upgradeHref) return } onSelectModel(modelId) setOpen(false) } return ( {ASSISTANT_MODELS.map((m) => ( handleSelectModel(m.id)} className="flex justify-between" > {m.id} {isAdvanceOnlyModelId(m.id) && !hasAccessToAdvanceModel && !isLoadingEntitlements ? (
Upgrade
{m.id} is available on Pro plans and above
) : ( selectedModel === m.id && )}
))}
) }