"use client"; import classNames from "classnames"; import { Popover, PopoverContent, PopoverTrigger, } from "@/components/ui/popover"; import { PROVIDERS, MODELS } from "@/lib/providers"; import { Button } from "@/components/ui/button"; import { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { useMemo, useState, useEffect } from "react"; import { useUpdateEffect } from "react-use"; import Image from "next/image"; import { Brain, CheckCheck, ChevronDown } from "lucide-react"; import { useAi } from "@/hooks/useAi"; export function Settings({ open, onClose, error, isFollowUp = false, }: { open: boolean; error?: string; isFollowUp?: boolean; onClose: React.Dispatch>; }) { const { model, provider, setProvider, setModel, selectedModel, globalAiLoading, } = useAi(); const [isMounted, setIsMounted] = useState(false); useEffect(() => { setIsMounted(true); }, []); const modelAvailableProviders = useMemo(() => { const availableProviders = MODELS.find( (m: { value: string }) => m.value === model )?.providers; if (!availableProviders) return Object.keys(PROVIDERS); return Object.keys(PROVIDERS).filter((id) => availableProviders.includes(id) ); }, [model]); useUpdateEffect(() => { if ( provider !== "auto" && !modelAvailableProviders.includes(provider as string) ) { setProvider("auto"); } }, [model, provider]); return (
Customize Settings
{error !== "" && (

{error}

)} {isFollowUp && (
Note: You can't use a Thinker model for follow-up requests. We automatically switch to the default model for you.
)}

Use auto-provider

We'll automatically select the best provider for you based on your prompt.

{ const foundModel = MODELS.find( (m: { value: string }) => m.value === model ); if (provider === "auto" && foundModel?.autoProvider) { setProvider(foundModel.autoProvider); } else { setProvider("auto"); } }} >
); }