diff --git a/src/api/ai/base/aiKnowledgeBaseType/index.ts b/src/api/ai/base/aiKnowledgeBaseType/index.ts new file mode 100644 index 0000000..d8363cd --- /dev/null +++ b/src/api/ai/base/aiKnowledgeBaseType/index.ts @@ -0,0 +1,77 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { AiKnowledgeBaseTypeVO, AiKnowledgeBaseTypeForm, AiKnowledgeBaseTypeQuery } from '@/api/ai/base/aiKnowledgeBaseType/types'; + +/** + * 查询AI知识库类型列表 + * @param query + * @returns {*} + */ + +export const listAiKnowledgeBaseType = (query?: AiKnowledgeBaseTypeQuery): AxiosPromise => { + return request({ + url: '/ai/aiKnowledgeBaseType/list', + method: 'get', + params: query + }); +}; + +/** + * 查询AI知识库类型详细 + * @param knowledgeBaseTypeId + */ +export const getAiKnowledgeBaseType = (knowledgeBaseTypeId: string | number): AxiosPromise => { + return request({ + url: '/ai/aiKnowledgeBaseType/' + knowledgeBaseTypeId, + method: 'get' + }); +}; + +/** + * 新增AI知识库类型 + * @param data + */ +export const addAiKnowledgeBaseType = (data: AiKnowledgeBaseTypeForm) => { + return request({ + url: '/ai/aiKnowledgeBaseType', + method: 'post', + data: data + }); +}; + +/** + * 修改AI知识库类型 + * @param data + */ +export const updateAiKnowledgeBaseType = (data: AiKnowledgeBaseTypeForm) => { + return request({ + url: '/ai/aiKnowledgeBaseType', + method: 'put', + data: data + }); +}; + +/** + * 删除AI知识库类型 + * @param knowledgeBaseTypeId + */ +export const delAiKnowledgeBaseType = (knowledgeBaseTypeId: string | number | Array) => { + return request({ + url: '/ai/aiKnowledgeBaseType/' + knowledgeBaseTypeId, + method: 'delete' + }); +}; + + +/** + * 下拉框查询AI知识库类型列表 + * @param query + * @returns {*} + */ +export function getAiKnowledgeBaseTypeList (query) { + return request({ + url: '/ai/aiKnowledgeBaseType/getAiKnowledgeBaseTypeList', + method: 'get', + params: query + }); +}; diff --git a/src/api/ai/base/aiKnowledgeBaseType/types.ts b/src/api/ai/base/aiKnowledgeBaseType/types.ts new file mode 100644 index 0000000..1bcb665 --- /dev/null +++ b/src/api/ai/base/aiKnowledgeBaseType/types.ts @@ -0,0 +1,56 @@ +export interface AiKnowledgeBaseTypeVO { + /** + * 主键 + */ + knowledgeBaseTypeId: string | number; + + /** + * 知识库类型名称 + */ + knowledgeBaseTypeName: string; + + /** + * 备注 + */ + remark: string; + +} + +export interface AiKnowledgeBaseTypeForm extends BaseEntity { + /** + * 主键 + */ + knowledgeBaseTypeId?: string | number; + + /** + * 知识库类型名称 + */ + knowledgeBaseTypeName?: string; + + /** + * 备注 + */ + remark?: string; + +} + +export interface AiKnowledgeBaseTypeQuery extends PageQuery { + + /** + * 主键 + */ + knowledgeBaseTypeId?: string | number; + + /** + * 知识库类型名称 + */ + knowledgeBaseTypeName?: string; + + /** + * 日期范围参数 + */ + params?: any; +} + + + diff --git a/src/api/ai/base/aiModel/index.ts b/src/api/ai/base/aiModel/index.ts new file mode 100644 index 0000000..932d0b1 --- /dev/null +++ b/src/api/ai/base/aiModel/index.ts @@ -0,0 +1,92 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { AiModelVO, AiModelForm, AiModelQuery } from '@/api/ai/base/aiModel/types'; + +/** + * 查询AI模型列表 + * @param query + * @returns {*} + */ + +export const listAiModel = (query?: AiModelQuery): AxiosPromise => { + return request({ + url: '/ai/aiModel/list', + method: 'get', + params: query + }); +}; + +/** + * 查询AI模型详细 + * @param modelId + */ +export const getAiModel = (modelId: string | number): AxiosPromise => { + return request({ + url: '/ai/aiModel/' + modelId, + method: 'get' + }); +}; + +/** + * 新增AI模型 + * @param data + */ +export const addAiModel = (data: AiModelForm) => { + return request({ + url: '/ai/aiModel', + method: 'post', + data: data + }); +}; + +/** + * 修改AI模型 + * @param data + */ +export const updateAiModel = (data: AiModelForm) => { + return request({ + url: '/ai/aiModel', + method: 'put', + data: data + }); +}; + +/** + * 删除AI模型 + * @param modelId + */ +export const delAiModel = (modelId: string | number | Array) => { + return request({ + url: '/ai/aiModel/' + modelId, + method: 'delete' + }); +}; + + +/** + * 下拉框查询AI模型列表 + * @param query + * @returns {*} + */ +export function getAiModelList (query) { + return request({ + url: '/ai/aiModel/getAiModelList', + method: 'get', + params: query + }); +}; + + +/** + * 测试AI模型调用API是否成功 + * @returns {*} + * @param provider + * @param data + */ +export function testAIModel (provider,data) { + return request({ + url: '/ai/aiModel/testAIModel?provider='+provider, + method: 'post', + data: data + }); +}; diff --git a/src/api/ai/base/aiModel/types.ts b/src/api/ai/base/aiModel/types.ts new file mode 100644 index 0000000..75c12be --- /dev/null +++ b/src/api/ai/base/aiModel/types.ts @@ -0,0 +1,286 @@ +export interface AiModelVO { + /** + * 主键 + */ + modelId: string | number; + + /** + * 模型名称 + */ + modelName: string; + + /** + * AI平台ID,关联ai_platform + */ + platformId: string | number; + + /** + * 模型类型ID,关联ai_model_type + */ + modelTypeId: string | number; + + /** + * 基础模型ID,关联ai_base_model + */ + baseModelId: string | number; + + /** + * 计费类型(1token计费,2次数计费) + */ + chargeType: string; + + /** + * 模型价格 + */ + modelPrice: number; + + /** + * 请求地址 + */ + apiEndpoint: string; + + /** + * 秘钥 + */ + apiKey: string; + + /** + * 密钥 + */ + apiSecret: string; + + /** + * 向量库(1milvus,2weaviate,) + */ + vectorLibrary: string; + + /** + * 描述 + */ + description: string; + + /** + * 高级配置—模型温度(0-1);值越大,回复内容越赋有多样性创造性、随机性;设为0根据事实回答,希望得到精准答案应该降低该参数;日常聊天建议0.5-0.8 + */ + modelTemperature: number; + + /** + * 高级配置—词汇属性(0-1);值越小,AI生成的内容越单调也越容易理解;值越大,AI回复的词汇范围越大,越多样化 + */ + vocabularyAttribute: number; + + /** + * 高级配置—话题属性(-2.0-2.0);值越大,越能够让AI更好的控制新话题的引入,建议微调或不变 + */ + topicAttribute: number; + + /** + * 高级配置—重复属性(-2.0-2.0);值越大,越能够让AI更好的避免重复之前说过的话,建议微调或不变 + */ + duplicateAttribute: number; + + /** + * 高级配置—最大回复(1-16000);设置AI最大回复内容大小,会影响返回结果内容的长度;普通聊天建议500-800;短文生成建议800-2000;代码生成建议2000-3600;长文生成建议4000左右(或选择长回复模型) + */ + maxReply: number; + + /** + * 激活标识(1是,0否) + */ + activeFlag: string; + +} + +export interface AiModelForm extends BaseEntity { + /** + * 主键 + */ + modelId?: string | number; + + /** + * 模型名称 + */ + modelName?: string; + + /** + * AI平台ID,关联ai_platform + */ + platformId?: string | number; + + /** + * 模型类型ID,关联ai_model_type + */ + modelTypeId?: string | number; + + /** + * 基础模型ID,关联ai_base_model + */ + baseModelId?: string | number; + + /** + * 计费类型(1token计费,2次数计费) + */ + chargeType?: string; + + /** + * 模型价格 + */ + modelPrice?: number; + + /** + * 请求地址 + */ + apiEndpoint?: string; + + /** + * 秘钥 + */ + apiKey?: string; + + /** + * 密钥 + */ + apiSecret?: string; + + /** + * 向量库(1milvus,2weaviate,) + */ + vectorLibrary?: string; + + /** + * 描述 + */ + description?: string; + + /** + * 高级配置—模型温度(0-1);值越大,回复内容越赋有多样性创造性、随机性;设为0根据事实回答,希望得到精准答案应该降低该参数;日常聊天建议0.5-0.8 + */ + modelTemperature?: number; + + /** + * 高级配置—词汇属性(0-1);值越小,AI生成的内容越单调也越容易理解;值越大,AI回复的词汇范围越大,越多样化 + */ + vocabularyAttribute?: number; + + /** + * 高级配置—话题属性(-2.0-2.0);值越大,越能够让AI更好的控制新话题的引入,建议微调或不变 + */ + topicAttribute?: number; + + /** + * 高级配置—重复属性(-2.0-2.0);值越大,越能够让AI更好的避免重复之前说过的话,建议微调或不变 + */ + duplicateAttribute?: number; + + /** + * 高级配置—最大回复(1-16000);设置AI最大回复内容大小,会影响返回结果内容的长度;普通聊天建议500-800;短文生成建议800-2000;代码生成建议2000-3600;长文生成建议4000左右(或选择长回复模型) + */ + maxReply?: number; + + /** + * 激活标识(1是,0否) + */ + activeFlag?: string; + +} + +export interface AiModelQuery extends PageQuery { + + /** + * 主键 + */ + modelId?: string | number; + + /** + * 模型名称 + */ + modelName?: string; + + /** + * AI平台ID,关联ai_platform + */ + platformId?: string | number; + + /** + * 模型类型ID,关联ai_model_type + */ + modelTypeId?: string | number; + + /** + * 基础模型ID,关联ai_base_model + */ + baseModelId?: string | number; + + /** + * 计费类型(1token计费,2次数计费) + */ + chargeType?: string; + + /** + * 模型价格 + */ + modelPrice?: number; + + /** + * 请求地址 + */ + apiEndpoint?: string; + + /** + * 秘钥 + */ + apiKey?: string; + + /** + * 密钥 + */ + apiSecret?: string; + + /** + * 向量库(1milvus,2weaviate,) + */ + vectorLibrary?: string; + + /** + * 描述 + */ + description?: string; + + /** + * 高级配置—模型温度(0-1);值越大,回复内容越赋有多样性创造性、随机性;设为0根据事实回答,希望得到精准答案应该降低该参数;日常聊天建议0.5-0.8 + */ + modelTemperature?: number; + + /** + * 高级配置—词汇属性(0-1);值越小,AI生成的内容越单调也越容易理解;值越大,AI回复的词汇范围越大,越多样化 + */ + vocabularyAttribute?: number; + + /** + * 高级配置—话题属性(-2.0-2.0);值越大,越能够让AI更好的控制新话题的引入,建议微调或不变 + */ + topicAttribute?: number; + + /** + * 高级配置—重复属性(-2.0-2.0);值越大,越能够让AI更好的避免重复之前说过的话,建议微调或不变 + */ + duplicateAttribute?: number; + + /** + * 高级配置—最大回复(1-16000);设置AI最大回复内容大小,会影响返回结果内容的长度;普通聊天建议500-800;短文生成建议800-2000;代码生成建议2000-3600;长文生成建议4000左右(或选择长回复模型) + */ + maxReply?: number; + + /** + * 激活标识(1是,0否) + */ + activeFlag?: string; + + /** + * 日期范围参数 + */ + params?: any; +} + + + diff --git a/src/api/ai/base/aiPlatform/index.ts b/src/api/ai/base/aiPlatform/index.ts new file mode 100644 index 0000000..2174b62 --- /dev/null +++ b/src/api/ai/base/aiPlatform/index.ts @@ -0,0 +1,97 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { AiPlatformVO, AiPlatformForm, AiPlatformQuery } from '@/api/ai/base/aiPlatform/types'; + +/** + * 查询AI平台列表 + * @param query + * @returns {*} + */ + +export const listAiPlatform = (query?: AiPlatformQuery): AxiosPromise => { + return request({ + url: '/ai/base/aiPlatform/list', + method: 'get', + params: query + }); +}; + + +/** + * 查询AI基础模型列表 + * @param query + * @returns {*} + */ + +export const listAiBaseModels = (query?: AiPlatformQuery): AxiosPromise => { + return request({ + url: '/ai/base/aiPlatform/getAiBaseModelList', + method: 'get', + params: query + }); +}; + + + + + + +/** + * 查询AI平台详细 + * @param platformId + */ +export const getAiPlatform = (platformId: string | number): AxiosPromise => { + return request({ + url: '/ai/base/aiPlatform/' + platformId, + method: 'get' + }); +}; + +/** + * 新增AI平台 + * @param data + */ +export const addAiPlatform = (data: AiPlatformForm) => { + return request({ + url: '/ai/base/aiPlatform', + method: 'post', + data: data + }); +}; + +/** + * 修改AI平台 + * @param data + */ +export const updateAiPlatform = (data: AiPlatformForm) => { + return request({ + url: '/ai/base/aiPlatform', + method: 'put', + data: data + }); +}; + +/** + * 删除AI平台 + * @param platformId + */ +export const delAiPlatform = (platformId: string | number | Array) => { + return request({ + url: '/ai/base/aiPlatform/' + platformId, + method: 'delete' + }); +}; + + +/** + * 下拉框查询AI平台列表 + * @param query + * @returns {*} + */ +export function getAiPlatformList (query) { + return request({ + url: '/ai/base/aiPlatform/getAiPlatformList', + method: 'get', + params: query + }); +}; diff --git a/src/api/ai/base/aiPlatform/types.ts b/src/api/ai/base/aiPlatform/types.ts new file mode 100644 index 0000000..41eba4d --- /dev/null +++ b/src/api/ai/base/aiPlatform/types.ts @@ -0,0 +1,106 @@ +export interface AiPlatformVO { + /** + * 平台ID,主键 + */ + platformId: string | number; + + /** + * 平台名称,如DeepSeek, 通义千问, 智普AI + */ + platformName: string; + + /** + * 平台描述 + */ + platformDescription: string; + + /** + * base api url地址 + */ + baseApiUrl: string; + + /** + * 平台图标 + */ + platformIcon: string; + + /** + * 授权方法(1,API_KEY,2,OAUTH2),先支持API_KEY + */ + authMethod: string; + +} + +export interface AiPlatformForm extends BaseEntity { + /** + * 平台ID,主键 + */ + platformId?: string | number; + + /** + * 平台名称,如DeepSeek, 通义千问, 智普AI + */ + platformName?: string; + + /** + * 平台描述 + */ + platformDescription?: string; + + /** + * base api url地址 + */ + baseApiUrl?: string; + + /** + * 平台图标 + */ + platformIcon?: string; + + /** + * 授权方法(1,API_KEY,2,OAUTH2),先支持API_KEY + */ + authMethod?: string; + +} + +export interface AiPlatformQuery extends PageQuery { + + /** + * 平台ID,主键 + */ + platformId?: string | number; + + /** + * 平台名称,如DeepSeek, 通义千问, 智普AI + */ + platformName?: string; + + /** + * 平台描述 + */ + platformDescription?: string; + + /** + * base api url地址 + */ + baseApiUrl?: string; + + /** + * 平台图标 + */ + platformIcon?: string; + + /** + * 授权方法(1,API_KEY,2,OAUTH2),先支持API_KEY + */ + authMethod?: string; + + /** + * 日期范围参数 + */ + params?: any; +} + + + diff --git a/src/api/ai/skill/aiChat/index.ts b/src/api/ai/skill/aiChat/index.ts new file mode 100644 index 0000000..3dc4174 --- /dev/null +++ b/src/api/ai/skill/aiChat/index.ts @@ -0,0 +1,136 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { AskVO } from '@/api/ai/skill/aiChat/types'; +import EventSourcePolyfill from 'event-source-polyfill'; +import { AiChatMessageForm } from '@/api/ai/skill/aiChat/types'; + + +/** + * 下拉框查询AI模型列表 + * @param query + * @returns {*} + */ +export function getAiModelJoinList (query) { + return request({ + url: '/ai/assistant/getAiModelJoinList', + method: 'get', + params: query + }); +}; + + +/** + * 获取AI会话列表 + * @param query + * @returns {*} + */ +export function getAiChatMessageList (query) { + return request({ + url: '/ai/assistant/getAiChatMessageList', + method: 'get', + params: query + }); +}; + +/** + * 根据会话ID获取会话信息列表 + * @param query + * @returns {*} + */ +export function getAiChatMessages (sessionId: string) { + return request({ + url: '/ai/assistant/getAiChatMessages/'+sessionId, + method: 'get', + }); +}; + + +/** + * 修改AI会话标题 + * @param data + */ +export const updateAiMessageTopic = (data: AiChatMessageForm) => { + return request({ + url: '/ai/assistant/updateAiChatMessageTopic', + method: 'post', + data: data + }); +}; + +/** + * 删除AI会话信息 + * @param sessionId + */ +export const delAiMessage = (sessionId: string) => { + return request({ + url: '/ai/assistant/' + sessionId, + method: 'delete' + }); +}; + + + +/** + * AI问答,完整回复 + * @param query + * @returns {*} + */ + +export const aiAsk = (query?: AskVO): AxiosPromise => { + return request({ + url: '/ai/api/stream/ask', + method: 'get', + params: query + }); +}; + +export const aiStreamAsk = (query?: AskVO): AxiosPromise => { + return request({ + url: '/ai/api/stream/stream', + method: 'post', + params: query + }); +}; + +export const aiSqlAsk = (query?: AskVO): AxiosPromise => { + return request({ + url: '/ai/api/chat/sql', + method: 'post', + params: query + }); +}; + + +export const streamDeepSeek = (prompt, handlers) => { + const url = `/ai/api/stream/stream?prompt=${encodeURIComponent(prompt)}`; + + const eventSource = new EventSourcePolyfill(url, { + headers: { + 'Content-Type': 'text/event-stream' + }, + withCredentials: false, // 根据你的CORS配置调整 + heartbeatTimeout: 300000 // 5分钟超时 + }); + + eventSource.onmessage = (event) => { + if (event.data === '[DONE]') { + handlers.onComplete(); + eventSource.close(); + } else { + try { + handlers.onData(event.data); + } catch (e) { + console.error('Error processing chunk:', e); + } + } + }; + + eventSource.onerror = (error) => { + handlers.onError(new Error(`EventSource failed: ${error.message || 'Unknown error'}`)); + eventSource.close(); + }; + + return () => { + eventSource.close(); + }; +}; diff --git a/src/api/ai/skill/aiChat/types.ts b/src/api/ai/skill/aiChat/types.ts new file mode 100644 index 0000000..17db2d6 --- /dev/null +++ b/src/api/ai/skill/aiChat/types.ts @@ -0,0 +1,100 @@ +export interface AskVO { + + /** + * 模型分类名称 + */ + question: string; + + /** + * api地址 + */ + provider: string; + + + +} + + + +export interface AIModelVO { + /** + * 模型ID + */ + modelId: number; + + /** + * 模型分类编码 + */ + modelType: string; + + /** + * 模型名称 + */ + modelName: string; + + + /** + * 平台编码 + */ + platformCode: string; + + /** + * 平台图标 + */ + platformIcon: string; + + /** + * 默认标识 + */ + defaultFlag: string; + +} + + +export interface AiChatMessageForm extends BaseEntity { + /** + * 主键 + */ + chatMessageId?: string | number; + + /** + * 会话ID + */ + sessionId?: string; + + /** + * 聊天标题 + */ + messageTopic?: string; + + /** + * 扣除金额(暂时不用) + */ + deductCost?: number; + + /** + * 累计 Tokens + */ + totalToken?: number; + + /** + * 模型ID,关联ai_model + */ + modelId?: string | number; + + /** + * 知识库ID,关联ai_knowledge_base + */ + knowledgeBaseId?: string | number; + + /** + * 聊天类型(1AI问答,2知识库问答,3AI生成SQL,4AI填报) + */ + messageType?: string; + + /** + * 备注 + */ + remark?: string; + +} diff --git a/src/assets/icons/svg/Ai.svg b/src/assets/icons/svg/Ai.svg new file mode 100644 index 0000000..99e12b3 --- /dev/null +++ b/src/assets/icons/svg/Ai.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/aichat.svg b/src/assets/icons/svg/aichat.svg new file mode 100644 index 0000000..16de668 --- /dev/null +++ b/src/assets/icons/svg/aichat.svg @@ -0,0 +1 @@ + diff --git a/src/router/index.ts b/src/router/index.ts index fdd0a5b..4c011fd 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -335,12 +335,26 @@ export const dynamicRoutes: RouteRecordRaw[] = [ hidden: true, permissions: ['mes:orderInfo:edit'], children: [ - // { - // path: 'index/:productOrderId(\\d+)', - // component: () => import('@/views/mes/orderInfo/editProductOrder.vue'), - // name: 'productOrderEdit', - // meta: { title: '生产任务', activeMenu: '/mes/productplan', noCache: true } - // } + { + path: 'index/:productOrderId(\\d+)', + component: () => import('@/views/mes/orderInfo/editProductOrder.vue'), + name: 'productOrderEdit', + meta: { title: '生产任务', activeMenu: '/mes/orderInfo', noCache: true } + } + ] + }, + { + path: '/mes/product-order', + component: Layout, + hidden: true, + permissions: ['mes:orderInfo:edit'], + children: [ + { + path: 'index', + component: () => import('@/views/mes/orderInfo/batchAddOrder.vue'), + name: 'batchAddOrder', + meta: { title: '生产任务', activeMenu: '/mes/orderInfo', noCache: true } + } ] }, { @@ -502,7 +516,63 @@ export const dynamicRoutes: RouteRecordRaw[] = [ meta: { title: '保养工单申请', activeMenu: '/dms/maint/maintEdit', noCache: true } } ] - } + }, + + { + path: '/ai/skill/knowledgeBaseDocs', + component: Layout, + hidden: true, + permissions: ['ai:aiKnowledgeBaseDocs:list'], + children: [ + { + path: 'index', + component: () => import('@/views/ai/skill/aiKnowledge/knowledgeBaseDocs.vue'), + name: 'KnowledgeBaseDocs', + meta: { title: '知识库详情', activeMenu: '/ai/skill/aiKnowledge', noCache: true } + } + ] + }, + + { + path: '/ai/skill/knowledgeBaseQA', + component: Layout, + hidden: true, + permissions: ['ai:aiKnowledgeBaseDocs:qa'], + children: [ + { + path: 'index', + component: () => import('@/views/ai/skill/aiChat/index.vue'), + name: 'KnowledgeBaseQA', + meta: { title: '知识库问答', activeMenu: '/ai/skill/aiKnowledge', noCache: true } + } + ] + }, + + // { + // path: '/knowledge-base-preview', + // name: 'KnowledgeBasePreview', + // component: () => import('@/views/ai/skill/aiKnowledge/KnowledgeBasePreview.vue'), + // hidden: true + // }, + // { + // path: '/knowledge-base-upload', + // name: 'KnowledgeBaseUpload', + // component: () => import('@/views/ai/skill/aiKnowledge/KnowledgeBaseUpload.vue'), + // hidden: true + // }, + // { + // path: '/knowledge-base-qa', + // name: 'KnowledgeBaseQA', + // component: () => import('@/views/ai/skill/aiKnowledge/KnowledgeBaseQA.vue'), + // hidden: true + // }, + // { + // path: '/ai-chat-settings', + // name: 'AiChatSettings', + // component: () => import('@/views/ai/base/aiApp/aiAppConfig.vue'), + // hidden: true + // } + ]; diff --git a/src/views/ai/base/aiKnowledgeBaseType/index.vue b/src/views/ai/base/aiKnowledgeBaseType/index.vue new file mode 100644 index 0000000..05a5802 --- /dev/null +++ b/src/views/ai/base/aiKnowledgeBaseType/index.vue @@ -0,0 +1,235 @@ + + + diff --git a/src/views/ai/base/aiModel/ModelSettings.vue b/src/views/ai/base/aiModel/ModelSettings.vue new file mode 100644 index 0000000..dff08ff --- /dev/null +++ b/src/views/ai/base/aiModel/ModelSettings.vue @@ -0,0 +1,461 @@ + + + + + diff --git a/src/views/ai/base/aiModel/index.vue b/src/views/ai/base/aiModel/index.vue new file mode 100644 index 0000000..b12dbf4 --- /dev/null +++ b/src/views/ai/base/aiModel/index.vue @@ -0,0 +1,527 @@ + + + + + diff --git a/src/views/ai/base/aiPlatform/index.vue b/src/views/ai/base/aiPlatform/index.vue new file mode 100644 index 0000000..f95728a --- /dev/null +++ b/src/views/ai/base/aiPlatform/index.vue @@ -0,0 +1,1226 @@ + + + + + diff --git a/src/views/ai/skill/aiChat/index.vue b/src/views/ai/skill/aiChat/index.vue new file mode 100644 index 0000000..c3fa5fa --- /dev/null +++ b/src/views/ai/skill/aiChat/index.vue @@ -0,0 +1,1825 @@ +