From 22c306b27c6aa4871681cbcd8f366eb2e5631865 Mon Sep 17 00:00:00 2001 From: c72121122 Date: Sun, 30 Mar 2025 11:58:00 +0800 Subject: [PATCH] Sun Mar 30 11:58:00 CST 2025 inscode --- .inscode | 2 +- src/App.vue | 266 +++++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 233 insertions(+), 35 deletions(-) diff --git a/.inscode b/.inscode index 75cbde4..9fec957 100644 --- a/.inscode +++ b/.inscode @@ -11,4 +11,4 @@ XDG_CONFIG_HOME = "/root/.config" npm_config_prefix = "/root/${PROJECT_DIR}/.config/npm/node_global" [debugger] -program = "main.js" \ No newline at end of file +program = "main.js" diff --git a/src/App.vue b/src/App.vue index 633a5df..ff10dc9 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,47 +1,245 @@ + + +import { ref } from 'vue'; +import axios from 'axios'; +import MarkdownIt from 'markdown-it'; +import { fetchEventSource } from 'fetch-event-source'; - + const userMessage = { sender: '你', text: userInput.value }; + chatMessages.value.push(userMessage); + userInput.value = ''; + + let aiResponse = ''; + let aiMessageIndex = chatMessages.value.length; + chatMessages.value.push({ sender: 'AI', text: 'AI 思考中...' }); + + try { + await fetchEventSource('http://localhost:11434/api/generate', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + model: 'gemma3:12b', + prompt: userMessage.text + }), + onmessage: (event) => { + if (event.data === '[DONE]') return; + try { + const data = JSON.parse(event.data); + aiResponse += data.response; + chatMessages.value[aiMessageIndex].text = aiResponse; + } catch (error) { + console.error('解析响应数据出错:', error); + } + }, + onclose: () => { + loading.value = false; + }, + onerror: (error) => { + console.error('请求出错:', error); + let errorText = '无法连接到模型,请检查服务是否运行。'; + if (error.response) { + errorText += ` 服务器响应错误: ${JSON.stringify(error.response.data)}`; + } else if (error.request) { + errorText += ' 没有收到服务器响应。'; + } else { + errorText += ` 错误信息: ${error.message}`; + } + const errorMessage = { sender: '错误', text: errorText }; + chatMessages.value.push(errorMessage); + loading.value = false; + } + }); + } catch (error) { + console.error('请求出错:', error); + let errorText = '无法连接到模型,请检查服务是否运行。'; + if (error.response) { + errorText += ` 服务器响应错误: ${JSON.stringify(error.response.data)}`; + } else if (error.request) { + errorText += ' 没有收到服务器响应。'; + } else { + errorText += ` 错误信息: ${error.message}`; + } + const errorMessage = { sender: '错误', text: errorText }; + chatMessages.value.push(errorMessage); + loading.value = false; + } +}; + +const handleNewChat = () => { + chatMessages.value = []; +}; + +const renderMarkdown = (text) => { + return md.render(text); +}; + +const handleKeyDown = (event) => { + if (event.shiftKey && event.key === 'Enter') { + // Shift + Enter 实现换行 + userInput.value += '\n'; + event.preventDefault(); + } else if (event.key === 'Enter') { + // Enter 发送消息 + sendMessage(); + event.preventDefault(); + } +}; + + \ No newline at end of file -- GitLab