diff --git a/apps/web-ele/src/components/markdown-view/index.ts b/apps/web-ele/src/components/markdown-view/index.ts new file mode 100644 index 000000000..742bce8f5 --- /dev/null +++ b/apps/web-ele/src/components/markdown-view/index.ts @@ -0,0 +1,3 @@ +export { default as MarkdownView } from './markdown-view.vue'; + +export * from './typing'; diff --git a/apps/web-ele/src/components/markdown-view/markdown-view.vue b/apps/web-ele/src/components/markdown-view/markdown-view.vue new file mode 100644 index 000000000..e3af56379 --- /dev/null +++ b/apps/web-ele/src/components/markdown-view/markdown-view.vue @@ -0,0 +1,206 @@ + + + + + + + diff --git a/apps/web-ele/src/components/markdown-view/typing.ts b/apps/web-ele/src/components/markdown-view/typing.ts new file mode 100644 index 000000000..350bbcf3a --- /dev/null +++ b/apps/web-ele/src/components/markdown-view/typing.ts @@ -0,0 +1,3 @@ +export type MarkdownViewProps = { + content: string; +}; diff --git a/apps/web-ele/src/views/ai/chat/index/data.ts b/apps/web-ele/src/views/ai/chat/index/data.ts new file mode 100644 index 000000000..8cc4ed6f3 --- /dev/null +++ b/apps/web-ele/src/views/ai/chat/index/data.ts @@ -0,0 +1,77 @@ +import type { VbenFormSchema } from '#/adapter/form'; + +import { AiModelTypeEnum } from '@vben/constants'; + +import { getModelSimpleList } from '#/api/ai/model/model'; + +export function useFormSchema(): VbenFormSchema[] { + return [ + { + component: 'Input', + fieldName: 'id', + dependencies: { + triggerFields: [''], + show: () => false, + }, + }, + { + fieldName: 'systemMessage', + label: '角色设定', + component: 'Textarea', + componentProps: { + rows: 4, + placeholder: '请输入角色设定', + }, + }, + { + component: 'ApiSelect', + fieldName: 'modelId', + label: '模型', + componentProps: { + api: () => getModelSimpleList(AiModelTypeEnum.CHAT), + labelField: 'name', + valueField: 'id', + allowClear: true, + placeholder: '请选择模型', + }, + rules: 'required', + }, + { + fieldName: 'temperature', + label: '温度参数', + component: 'InputNumber', + componentProps: { + placeholder: '请输入温度参数', + class: 'w-full', + precision: 2, + min: 0, + max: 2, + }, + rules: 'required', + }, + { + fieldName: 'maxTokens', + label: '回复数 Token 数', + component: 'InputNumber', + componentProps: { + placeholder: '请输入回复数 Token 数', + class: 'w-full', + min: 0, + max: 8192, + }, + rules: 'required', + }, + { + fieldName: 'maxContexts', + label: '上下文数量', + component: 'InputNumber', + componentProps: { + placeholder: '请输入上下文数量', + class: 'w-full', + min: 0, + max: 20, + }, + rules: 'required', + }, + ]; +} diff --git a/apps/web-ele/src/views/ai/chat/index/index.vue b/apps/web-ele/src/views/ai/chat/index/index.vue new file mode 100644 index 000000000..ae58f6ab6 --- /dev/null +++ b/apps/web-ele/src/views/ai/chat/index/index.vue @@ -0,0 +1,690 @@ + + + + + + + + + + + + + {{ activeConversation?.title ? activeConversation?.title : '对话' }} + + ({{ activeMessageList.length }}) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 上下文 + + + + 联网搜索 + + + + + {{ conversationInProgress ? '进行中' : '发送' }} + + + + 停止 + + + + + + + + + diff --git a/apps/web-ele/src/views/ai/chat/index/modules/conversation/list.vue b/apps/web-ele/src/views/ai/chat/index/modules/conversation/list.vue new file mode 100644 index 000000000..b87c15b1f --- /dev/null +++ b/apps/web-ele/src/views/ai/chat/index/modules/conversation/list.vue @@ -0,0 +1,397 @@ + + + + + + + + + 对话 + + + + + + + + + + + + + + + + + + + + + + + 加载中... + + + + + + + + {{ groupName }} + + + + + + + + {{ conversation.title }} + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web-ele/src/views/ai/chat/index/modules/conversation/update-form.vue b/apps/web-ele/src/views/ai/chat/index/modules/conversation/update-form.vue new file mode 100644 index 000000000..6a7ae84e4 --- /dev/null +++ b/apps/web-ele/src/views/ai/chat/index/modules/conversation/update-form.vue @@ -0,0 +1,82 @@ + + + + + + + diff --git a/apps/web-ele/src/views/ai/chat/index/modules/message/file-upload.vue b/apps/web-ele/src/views/ai/chat/index/modules/message/file-upload.vue new file mode 100644 index 000000000..6d6b69179 --- /dev/null +++ b/apps/web-ele/src/views/ai/chat/index/modules/message/file-upload.vue @@ -0,0 +1,304 @@ + + + + + + + + + + {{ fileList.length }} + + + + + + + + + + + + + + + + + + + {{ file.name }} + + + ({{ formatFileSize(file.size) }}) + + + + + + + + + + + + + + + diff --git a/apps/web-ele/src/views/ai/chat/index/modules/message/files.vue b/apps/web-ele/src/views/ai/chat/index/modules/message/files.vue new file mode 100644 index 000000000..ed163a026 --- /dev/null +++ b/apps/web-ele/src/views/ai/chat/index/modules/message/files.vue @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + {{ getFileNameFromUrl(url) }} + + + + + + diff --git a/apps/web-ele/src/views/ai/chat/index/modules/message/knowledge.vue b/apps/web-ele/src/views/ai/chat/index/modules/message/knowledge.vue new file mode 100644 index 000000000..34eabf15d --- /dev/null +++ b/apps/web-ele/src/views/ai/chat/index/modules/message/knowledge.vue @@ -0,0 +1,103 @@ + + + + + + + 知识引用 + + + + + {{ doc.title }} + + ({{ doc.segments.length }} 条) + + + + + + + + + {{ document?.title }} + + + + 分段 {{ segment.id }} + + + {{ segment.content }} + + + + + + diff --git a/apps/web-ele/src/views/ai/chat/index/modules/message/list-empty.vue b/apps/web-ele/src/views/ai/chat/index/modules/message/list-empty.vue new file mode 100644 index 000000000..b8ac0a3e4 --- /dev/null +++ b/apps/web-ele/src/views/ai/chat/index/modules/message/list-empty.vue @@ -0,0 +1,39 @@ + + + + + + + + 芋道 AI + + + + + {{ prompt.prompt }} + + + + + diff --git a/apps/web-ele/src/views/ai/chat/index/modules/message/list.vue b/apps/web-ele/src/views/ai/chat/index/modules/message/list.vue new file mode 100644 index 000000000..fdaf36459 --- /dev/null +++ b/apps/web-ele/src/views/ai/chat/index/modules/message/list.vue @@ -0,0 +1,242 @@ + + + + + + + + + + + + + {{ formatDateTime(item.createTime) }} + + + + + + + + + + + + + + + + + + + + + + + + + + + {{ formatDateTime(item.createTime) }} + + + + + + + {{ item.content }} + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web-ele/src/views/ai/chat/index/modules/message/loading.vue b/apps/web-ele/src/views/ai/chat/index/modules/message/loading.vue new file mode 100644 index 000000000..a5e076532 --- /dev/null +++ b/apps/web-ele/src/views/ai/chat/index/modules/message/loading.vue @@ -0,0 +1,9 @@ + + + + + + + diff --git a/apps/web-ele/src/views/ai/chat/index/modules/message/new-conversation.vue b/apps/web-ele/src/views/ai/chat/index/modules/message/new-conversation.vue new file mode 100644 index 000000000..339af1704 --- /dev/null +++ b/apps/web-ele/src/views/ai/chat/index/modules/message/new-conversation.vue @@ -0,0 +1,25 @@ + + + + + + + 点击下方按钮,开始你的对话吧 + + + + 新建对话 + + + + + diff --git a/apps/web-ele/src/views/ai/chat/index/modules/message/reasoning.vue b/apps/web-ele/src/views/ai/chat/index/modules/message/reasoning.vue new file mode 100644 index 000000000..99390fbfc --- /dev/null +++ b/apps/web-ele/src/views/ai/chat/index/modules/message/reasoning.vue @@ -0,0 +1,83 @@ + + + + + + + + + {{ titleText }} + + + + + + + + + + + diff --git a/apps/web-ele/src/views/ai/chat/index/modules/message/web-search.vue b/apps/web-ele/src/views/ai/chat/index/modules/message/web-search.vue new file mode 100644 index 000000000..d48a94c24 --- /dev/null +++ b/apps/web-ele/src/views/ai/chat/index/modules/message/web-search.vue @@ -0,0 +1,173 @@ + + + + + + + + + 联网搜索结果 ({{ webSearchPages.length }} 条) + + + + + + + + + + + + + + + + + + {{ page.name }} + + + + {{ page.title }} + + + + {{ page.snippet }} + + + + {{ page.url }} + + + + + + + + + + + + + + + + + + {{ selectedResult.title }} + + + {{ selectedResult.name }} + + + {{ selectedResult.url }} + + + + + + + + 简短描述 + + {{ selectedResult.snippet }} + + + + + 内容摘要 + + {{ selectedResult.summary }} + + + + + + + diff --git a/apps/web-ele/src/views/ai/chat/index/modules/role/category-list.vue b/apps/web-ele/src/views/ai/chat/index/modules/role/category-list.vue new file mode 100644 index 000000000..fa5ece41a --- /dev/null +++ b/apps/web-ele/src/views/ai/chat/index/modules/role/category-list.vue @@ -0,0 +1,43 @@ + + + + + + + {{ category }} + + + + diff --git a/apps/web-ele/src/views/ai/chat/index/modules/role/list.vue b/apps/web-ele/src/views/ai/chat/index/modules/role/list.vue new file mode 100644 index 000000000..eccceb04f --- /dev/null +++ b/apps/web-ele/src/views/ai/chat/index/modules/role/list.vue @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + 编辑 + + + + + + 删除 + + + + + + + + + + + + + + + + {{ role.name }} + + + {{ role.description }} + + + + + 使用 + + + + + + + diff --git a/apps/web-ele/src/views/ai/chat/index/modules/role/repository.vue b/apps/web-ele/src/views/ai/chat/index/modules/role/repository.vue new file mode 100644 index 000000000..818cc51d8 --- /dev/null +++ b/apps/web-ele/src/views/ai/chat/index/modules/role/repository.vue @@ -0,0 +1,261 @@ + + + + + + + + + + + + + + + + + + 添加角色 + + + + + + + + + + + + + + + + + +