import { ChatbotUIContext } from "@/context/context" import { CHAT_SETTING_LIMITS } from "@/lib/chat-setting-limits" import useHotkey from "@/lib/hooks/use-hotkey" import { LLMID, ModelProvider } from "@/types" import { IconAdjustmentsHorizontal } from "@tabler/icons-react" import { FC, useContext, useEffect, useRef } from "react" import { Button } from "../ui/button" import { ChatSettingsForm } from "../ui/chat-settings-form" import { Popover, PopoverContent, PopoverTrigger } from "../ui/popover" interface ChatSettingsProps {} export const ChatSettings: FC = ({}) => { useHotkey("i", () => handleClick()) const { chatSettings, setChatSettings, models, availableHostedModels, availableLocalModels, availableOpenRouterModels } = useContext(ChatbotUIContext) const buttonRef = useRef(null) const handleClick = () => { if (buttonRef.current) { buttonRef.current.click() } } useEffect(() => { if (!chatSettings) return setChatSettings({ ...chatSettings, temperature: Math.min( chatSettings.temperature, CHAT_SETTING_LIMITS[chatSettings.model]?.MAX_TEMPERATURE || 1 ), contextLength: Math.min( chatSettings.contextLength, CHAT_SETTING_LIMITS[chatSettings.model]?.MAX_CONTEXT_LENGTH || 4096 ) }) }, [chatSettings?.model]) if (!chatSettings) return null const allModels = [ ...models.map(model => ({ modelId: model.model_id as LLMID, modelName: model.name, provider: "custom" as ModelProvider, hostedId: model.id, platformLink: "", imageInput: false })), ...availableHostedModels, ...availableLocalModels, ...availableOpenRouterModels ] const fullModel = allModels.find(llm => llm.modelId === chatSettings.model) return ( ) }