import classNames from "classnames"; import { PiGearSixFill } from "react-icons/pi"; import { RiCheckboxCircleFill } from "react-icons/ri"; 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 } from "react"; import { useUpdateEffect } from "react-use"; import Image from "next/image"; export function Settings({ open, onClose, provider, model, error, isFollowUp = false, onChange, onModelChange, }: { open: boolean; provider: string; model: string; error?: string; isFollowUp?: boolean; onClose: React.Dispatch>; onChange: (provider: string) => void; onModelChange: (model: string) => void; }) { 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)) { onChange("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) { onChange(foundModel.autoProvider); } else { onChange("auto"); } }} >
); }