/* eslint-disable @typescript-eslint/no-explicit-any */ import classNames from "classnames"; import { PiGearSixFill } from "react-icons/pi"; import { RiCheckboxCircleFill } from "react-icons/ri"; import { Popover, PopoverContent, PopoverTrigger } from "../ui/popover"; // @ts-expect-error not needed import { PROVIDERS, MODELS } from "./../../../utils/providers"; import { Button } from "../ui/button"; import { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectTrigger, SelectValue, } from "../ui/select"; import { useMemo } from "react"; import { useUpdateEffect } from "react-use"; function Settings({ open, onClose, provider, model, error, onChange, onModelChange, }: { open: boolean; provider: string; model: string; error?: string; 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 (
{/* Provider */} Customize Settings
How to use it locally? {error !== "" && (

{error}

)}

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") { onChange(foundModel.providers[0]); } else { onChange("auto"); } }} >
); } export default Settings;