(e: React.FormEvent)
| 110 | |
| 111 | // 提交查询并开始流式响应 |
| 112 | const handleSubmit = async (e: React.FormEvent) => { |
| 113 | e.preventDefault() |
| 114 | |
| 115 | // 验证查询 |
| 116 | const trimmedQuery = query.trim() |
| 117 | if (!trimmedQuery) return |
| 118 | |
| 119 | // 重置文本框高度 |
| 120 | resetTextareaHeight() |
| 121 | |
| 122 | // 检查是否设置了模型 |
| 123 | if (!hasModelSettings) { |
| 124 | toast({ |
| 125 | title: "缺少模型设置", |
| 126 | description: "请先配置您的 AI 模型设置", |
| 127 | variant: "destructive", |
| 128 | }) |
| 129 | return |
| 130 | } |
| 131 | |
| 132 | // 添加用户消息 |
| 133 | const userMessageId = generateId() |
| 134 | const userMessage: Message = { |
| 135 | id: userMessageId, |
| 136 | role: "user", |
| 137 | content: trimmedQuery, |
| 138 | } |
| 139 | |
| 140 | // 创建助手的初始加载消息 |
| 141 | const assistantMessageId = generateId() |
| 142 | const assistantMessage: Message = { |
| 143 | id: assistantMessageId, |
| 144 | role: "assistant", |
| 145 | content: "", |
| 146 | isLoading: true, |
| 147 | } |
| 148 | |
| 149 | // 添加消息到对话中 |
| 150 | setMessages((prev) => [...prev, userMessage, assistantMessage]) |
| 151 | |
| 152 | // 清空输入 |
| 153 | setQuery("") |
| 154 | |
| 155 | // 滚动到底部 |
| 156 | setTimeout(scrollToBottom, 100) |
| 157 | |
| 158 | // 开始生成回复 |
| 159 | handleGenerateResponse(trimmedQuery, userMessageId, assistantMessageId) |
| 160 | } |
| 161 | |
| 162 | const handleClearConversation = () => { |
| 163 | // 如果正在生成回复,先停止所有进行中的操作 |
nothing calls this directly
no test coverage detected