From e578bcfa8f05ed886e8abab60cb7a525177ef342 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E4=BA=9A=E6=98=95?= <1549469775@qq.com> Date: Mon, 13 Oct 2025 17:38:10 +0800 Subject: [PATCH] feat: Enhance chat functionality and add new components - Introduced new Chat and MessageHelper classes for improved chat handling. - Added Ollama and OpenAI providers for diverse AI model support. - Implemented error handling with custom error classes for better debugging. - Updated auto-imports to include new chat-related types and functions globally. - Added a new SVG asset for chat UI. - Enhanced ChatBox component with dynamic message handling and configuration options. - Updated package.json to include eventsource-parser for streaming support. --- bun.lockb | Bin 203607 -> 203989 bytes packages/client/auto-imports.d.ts | 40 ++ packages/client/package.json | 1 + packages/client/public/deepseek.svg | 1 + packages/client/src/components/ChatBox/index.vue | 196 +++++-- packages/client/src/components/ChatBox/prompt.txt | 568 +++++++++++++++++++++ packages/client/src/composables/useChat/Chat.ts | 79 +++ packages/client/src/composables/useChat/index.ts | 64 +++ .../composables/useChat/modules/MessageHelper.ts | 72 +++ .../src/composables/useChat/modules/error.ts | 171 +++++++ .../src/composables/useChat/provider/Ollama.ts | 188 +++++++ .../src/composables/useChat/provider/Openai.ts | 178 +++++++ packages/client/src/composables/useChat/type.ts | 87 ++++ packages/client/src/composables/useScroll/index.ts | 10 +- packages/client/src/pages/index.vue | 2 +- 15 files changed, 1608 insertions(+), 49 deletions(-) create mode 100644 packages/client/public/deepseek.svg create mode 100644 packages/client/src/components/ChatBox/prompt.txt create mode 100644 packages/client/src/composables/useChat/Chat.ts create mode 100644 packages/client/src/composables/useChat/index.ts create mode 100644 packages/client/src/composables/useChat/modules/MessageHelper.ts create mode 100644 packages/client/src/composables/useChat/modules/error.ts create mode 100644 packages/client/src/composables/useChat/provider/Ollama.ts create mode 100644 packages/client/src/composables/useChat/provider/Openai.ts create mode 100644 packages/client/src/composables/useChat/type.ts diff --git a/bun.lockb b/bun.lockb index c4db671d659096c4155240238a7e8298b8e78497..24bd2f14837ec16f841694a3fc3a153fa1e9710d 100644 GIT binary patch delta 14248 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 delta 14239 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 + readonly AIProviderNoImplementedChatError: UnwrapRef + readonly AIProviderNoImplementedPaintError: UnwrapRef + readonly ApiError: UnwrapRef + readonly BaseError: UnwrapRef + readonly Chat: UnwrapRef + readonly ChatboxAIAPIError: UnwrapRef readonly EffectScope: UnwrapRef + readonly MessageHelper: UnwrapRef + readonly NetworkError: UnwrapRef + readonly Ollama: UnwrapRef + readonly OpenAI: UnwrapRef readonly acceptHMRUpdate: UnwrapRef readonly clearSSRContext: UnwrapRef readonly computed: UnwrapRef @@ -195,6 +234,7 @@ declare module 'vue' { readonly unref: UnwrapRef readonly useAttrs: UnwrapRef readonly useAuthStore: UnwrapRef + readonly useChat: UnwrapRef readonly useCookie: UnwrapRef readonly useCssModule: UnwrapRef readonly useCssVars: UnwrapRef diff --git a/packages/client/package.json b/packages/client/package.json index d98baf8..115d4ee 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -20,6 +20,7 @@ "@vitejs/plugin-vue": "^6.0.1", "ant-design-x-vue": "^1.3.2", "dompurify": "^3.2.7", + "eventsource-parser": "^3.0.6", "htmlparser2": "^10.0.0", "jsdom": "^27.0.0", "marked": "^16.3.0", diff --git a/packages/client/public/deepseek.svg b/packages/client/public/deepseek.svg new file mode 100644 index 0000000..82c91eb --- /dev/null +++ b/packages/client/public/deepseek.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/client/src/components/ChatBox/index.vue b/packages/client/src/components/ChatBox/index.vue index 43b75c6..2924086 100644 --- a/packages/client/src/components/ChatBox/index.vue +++ b/packages/client/src/components/ChatBox/index.vue @@ -1,27 +1,92 @@