import type { ChatStatus } from "ai"; import { CheckIcon, LightbulbIcon, LightbulbOffIcon } from "lucide-react"; import { useCallback, useMemo, useState, type ComponentProps } from "react"; import { PromptInput, PromptInputBody, PromptInputButton, PromptInputFooter, PromptInputSubmit, PromptInputTextarea, type PromptInputMessage, } from "@/components/ai-elements/prompt-input"; import type { AgentThreadContext } from "@/core/threads"; import { cn } from "@/lib/utils"; import { ModelSelector, ModelSelectorContent, ModelSelectorInput, ModelSelectorItem, ModelSelectorList, ModelSelectorName, ModelSelectorTrigger, } from "../ai-elements/model-selector"; import { Tooltip } from "./tooltip"; const AVAILABLE_MODELS = [ { name: "deepseek-v3.2", displayName: "DeepSeek v3.2", provider: "deepseek" }, { name: "doubao-seed-1.8", displayName: "Doubao Seed 1.8", provider: "doubao", }, ]; export function InputBox({ className, autoFocus, status = "ready", context, onContextChange, onSubmit, onStop, ...props }: Omit, "onSubmit"> & { assistantId?: string | null; status?: ChatStatus; context: Omit; showWelcome?: boolean; onContextChange?: (context: Omit) => void; onSubmit?: (message: PromptInputMessage) => void; onStop?: () => void; }) { const [modelDialogOpen, setModelDialogOpen] = useState(false); const selectedModel = useMemo( () => AVAILABLE_MODELS.find((m) => m.name === context.model_name), [context.model_name], ); const handleModelSelect = useCallback( (model_name: string) => { onContextChange?.({ ...context, model_name, }); setModelDialogOpen(false); }, [onContextChange, context], ); const handleThinkingToggle = useCallback(() => { onContextChange?.({ ...context, thinking_enabled: !context.thinking_enabled, }); }, [onContextChange, context]); const handleSubmit = useCallback( async (message: PromptInputMessage) => { if (status === "streaming") { onStop?.(); return; } if (!message.text) { return; } onSubmit?.(message); }, [onSubmit, onStop, status], ); return (
Thinking is enabled
Click to disable thinking
) : (
Thinking is disabled
Click to enable thinking
) } > {context.thinking_enabled ? ( ) : ( )}
{selectedModel?.displayName} {AVAILABLE_MODELS.map((m) => ( handleModelSelect(m.name)} > {m.displayName} {m.name === context.model_name ? ( ) : (
)} ))}
); }