"use client"; 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 { useI18n } from "@/core/i18n/hooks"; import { useModels } from "@/core/models/hooks"; 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"; export function InputBox({ className, autoFocus, status = "ready", context, onContextChange, onSubmit, onStop, ...props }: Omit, "onSubmit"> & { assistantId?: string | null; status?: ChatStatus; context: Omit; onContextChange?: (context: Omit) => void; onSubmit?: (message: PromptInputMessage) => void; onStop?: () => void; }) { const { t } = useI18n(); const [modelDialogOpen, setModelDialogOpen] = useState(false); const { models } = useModels(); const selectedModel = useMemo( () => models.find((m) => m.name === context.model_name), [context.model_name, models], ); const handleModelSelect = useCallback( (model_name: string) => { const supports_thinking = selectedModel?.supports_thinking ?? false; onContextChange?.({ ...context, model_name, thinking_enabled: supports_thinking && context.thinking_enabled, }); setModelDialogOpen(false); }, [selectedModel?.supports_thinking, 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 (
{t.inputBox.thinkingEnabled}
{t.inputBox.clickToDisableThinking}
) : (
{t.inputBox.thinkingDisabled}
{t.inputBox.clickToEnableThinking}
) } > {selectedModel?.supports_thinking && ( {context.thinking_enabled ? ( ) : ( )} )}
{selectedModel?.display_name} {models.map((m) => ( handleModelSelect(m.name)} > {m.display_name} {m.name === context.model_name ? ( ) : (
)} ))}
); }