src/api/agentSession.ts | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main.ts | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/dmx/IntelligentAgent/components/agentConfig.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/dmx/knowledgeLib/components/excel.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/dmx/knowledgeLib/components/txt.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/sessionManager/components/agentSession.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/sessionManager/components/updataFile.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/sessionManager/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
yarn.lock | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/api/agentSession.ts
@@ -38,6 +38,14 @@ ); } export function updateAgentConversation(data) { return axios.post( '/api/v1/canvas/update_agent_conversation', data ); } // 获取会话详情 export function getAgentSessionDetailsApi(id: string) { return axios.get( src/main.ts
@@ -6,7 +6,6 @@ import store from './store'; import i18n from './locale'; import directive from './directive'; import './mock'; import App from './App.vue'; src/views/dmx/IntelligentAgent/components/agentConfig.vue
@@ -575,7 +575,8 @@ } if (!max_tokens.value) { formNew.llm_setting.max_tokens = ''; //formNew.llm_setting.max_tokens = ''; delete formNew.llm_setting.max_tokens; } setLoading(true); @@ -607,6 +608,7 @@ // console.log(props.formData,'传入数据'); if (props.formData.llm_setting.max_tokens == '') { max_tokens.value = false; delete props.formData.llm_setting.max_tokens; } else { max_tokens.value = true; } src/views/dmx/knowledgeLib/components/excel.vue
@@ -8,6 +8,7 @@ </template> <script setup> // 获取父组件传递的资源url const props = defineProps({ previewSrc: { @@ -18,7 +19,7 @@ }); //引入VueOfficeExcel组件相关 import VueOfficeExcel from '@vue-office/excel'; import '@vue-office/excel/lib/index.css'; const comStyle = { width: '100%', src/views/dmx/knowledgeLib/components/txt.vue
@@ -1,6 +1,6 @@ <template> <div> <pre v-html="content"></pre> <pre v-text="content"></pre> </div> </template> @@ -8,6 +8,7 @@ import { ref, watch } from "vue"; let content = ref(""); // 获取父组件传递的资源url const props = defineProps({ previewSrc: { @@ -17,14 +18,30 @@ } }); const getContent = (url) => { fetch(url) .then((res) => res.text()) .then((data) => { content.value = data; }); //监控属性previewSrc的变化,如果发生变化,重新获取内容 watch( () => props.previewSrc, () => { getContent(); } ); const getContent = () => { content.value=""; fetch(props.previewSrc, { responseType: "arraybuffer" }).then( (response) => { return response.arrayBuffer(); } ).then( (data) => { const decoder = new TextDecoder('gbk'); content.value = decoder.decode(data); } ); }; getContent(props.previewSrc); getContent(); const comStyle = { src/views/sessionManager/components/agentSession.vue
@@ -70,11 +70,7 @@ /> </template> <template #content> <!-- <a-card :class="{ chatItemAnswer: theme === 'light' }">--> <!-- <div :class="{ light: theme === 'light' }"--> <!-- >{{ sessionDetail.content }}--> <!-- </div>--> <!-- </a-card>--> <a-textarea readonly auto-size @@ -86,18 +82,7 @@ style="border: none" > </a-textarea> <!-- <div class="prompt"> <ul> <li class="prompt-item" @click="copyText('43234')"> <span> 344343klsdjkjksdjkjksdjk就开始大家看数据库登记卡受打击凯撒登记卡受打击凯撒登记卡受打击凯撒的43</span > <span style="margin-left: 20px"> <icon-right /> </span> </li> </ul> </div> --> </template> <template #actions> <span @@ -189,19 +174,7 @@ <icon-send size="32" style="color: #0960bd" /> </a-button> </div> <!-- <div class="btn-send">--> <!-- <!– <icon-send size="32" /> –>--> <!-- <a-button--> <!-- :disabled="chatDis"--> <!-- @click="sentClick"--> <!-- type="text"--> <!-- style="border-radius: 24px"--> <!-- :loading="loading"--> <!-- >--> <!-- <icon-send size="32" style="color: #0960bd;"/>--> <!-- </a-button--> <!-- >--> <!-- </div>--> </div> <a-modal v-model:visible="visible" @@ -250,8 +223,8 @@ import { agentResetApi, agentSetApi, getAgentSessionDetailsApi, } from '@/api/agentSession'; getAgentSessionDetailsApi, updateAgentConversation } from "@/api/agentSession"; import EventBus from '@/utils/EventBus'; import useClipboard from 'vue-clipboard3'; import { addSessionApi, getSessionDetailsApi } from '@/api/session'; @@ -282,7 +255,7 @@ const selectValue = ref(''); const sectionList = ref({}); let chatObj = reactive({}); const isStopChat = ref(false); let isStopChat = false; const appStore = useAppStore(); const theme = computed(() => { return appStore.theme; @@ -295,6 +268,8 @@ let isHistory = ref(false); //是否是历史记录 let dsl = reactive({}); const chatDataMeg = reactive({}); let toStop = false; const rules = { name: [ @@ -377,7 +352,9 @@ 'Content-Type': 'application/json', }, body: JSON.stringify({ converson_id: conversation_id.value, id: agentObj.id, dsl:agentObj.dsl, }), }); @@ -420,7 +397,11 @@ if (code == 0) { console.log(data, 'agent会话详情'); Object.assign(chatObj, data); sessionDetailList.value = data.dsl.messages; // sessionDetailList.value = data.dsl.messages; await updateAgentConversation({ converson_id: conversation_id.value, dsl:data.dsl, }) agentTitle.value = `${data.title}` || '未命名会话'; from.name = `${data.title}` || '未命名会话'; refreshScroll(); //刷新滚动条位置 @@ -498,7 +479,11 @@ } }; let message_stop = []; let message_id = ""; const startChat = async (valMsg) => { isStopChat = false; displayedText.value = ''; sessionDetailList.value.push({ content: valMsg, role: 'user', @@ -507,6 +492,7 @@ refreshScroll(); let chatStr = { id: agentObj.id, converson_id: conversation_id.value, message: valMsg, }; if (isHistory.value) { @@ -527,6 +513,11 @@ .getReader(); currIndex.value = 0; while (true) { if (isStopChat) { message_stop.push(message_id); setChatDataMeg(chatDataMeg); break; } const x = await reader?.read(); if (x) { const { done, value } = x; @@ -534,6 +525,16 @@ try { const val = JSON.parse(value?.data || ''); const d = val?.data; if (message_id != d.message_id) { message_id = d.message_id; message_stop = []; } else { //message_stop中查找message_id const index = message_stop.findIndex(item => item === message_id); if (index > -1) { break; } } if (typeof d !== 'boolean') { console.info('data:', d); streamStr.value = d.content; @@ -543,15 +544,10 @@ console.warn(e); } if (done) { console.info('done'); displayedText.value = ''; if (isStopChat.value) { isStopChat.value = false; setChatDataMeg(chatDataMeg); } else { queryAgentSessionDetail(agentObj.id); EventBus.emit('queryAppUsageList'); } console.info("done"); displayedText.value = ""; queryAgentSessionDetail(agentObj.id); EventBus.emit("queryAppUsageList"); break; } } @@ -561,13 +557,9 @@ }; const stopChat = async () => { // const { code, data } = await stopChatApi(agentObj.id); // if (code === 200) { // Message.success("已停止"); // } loading.value = false; chatDis.value = false; isStopChat.value = true; isStopChat = true; console.log('stopChat'); console.log(displayedText.value, 'displayedText'); console.log(sessionDetailList.value, 'sessionDetailList'); @@ -656,7 +648,7 @@ watch( () => props.modalObj, (newVal, oldVal) => { // Object.assign(agentObj, newVal); Object.assign(agentObj, newVal); //调用agent初始化方法 if (JSON.stringify(newVal) != '{}') { // initPage(); src/views/sessionManager/components/updataFile.vue
@@ -19,6 +19,7 @@ :auto-upload="false" ref="uploadRef" @change="onChange" :show-retry-button="false" multiple :limit="1" /> @@ -31,36 +32,6 @@ " class="upload-wrap" > <!-- <div>--> <!-- <span>解析方法: </span>--> <!-- <a-radio-group--> <!-- v-model="parser_id"--> <!-- style="width: 400px"--> <!-- @change="parserChange"--> <!-- >--> <!-- <a-popover v-for="item in filterData" :key="item.value">--> <!-- <a-radio :value="item.value" style="margin-right: 10px">{{--> <!-- item.name--> <!-- }}</a-radio>--> <!-- <template #content>--> <!-- <p>{{ item.parser_config_str }}</p>--> <!-- </template>--> <!-- </a-popover>--> <!-- </a-radio-group>--> <!-- </div>--> <!-- <a-select--> <!-- :style="{ width: '100px', margin: '0 10px' }"--> <!-- :default-value="['通用', '多模态']"--> <!-- v-model="parser_configs"--> <!-- multiple--> <!-- size="small"--> <!-- >--> <!-- <a-option v-for="item in parser_ids" :key="item.value">{{--> <!-- item.name--> <!-- }}</a-option>--> <!-- </a-select>--> <!-- <p class="config-text">更多配置</p>--> <a-button :loading="onFileSelectedLoading" @click="upDataFile" @@ -396,7 +367,8 @@ watch( () => props.sessionId, (value, oldValue) => { (value) => { activeSessionId.value = value; } ); src/views/sessionManager/index.vue
@@ -121,7 +121,7 @@ /> </template> <template #content> <a-card v-if="isExistTip(sessionDetail.content)"> <a-card v-if="isExistTip(sessionDetail.content)" style="padding: 10px"> <div :class="{ chatItemAnswer: theme === 'light' }" :style="{ @@ -160,10 +160,13 @@ " > <img style="width: 20px; height: 20px" style="width: 15px; height: 15px" :src="tipImage" /> </a-tooltip> <span v-if="tipIndex == item.len - 1"> {{ breakContent.substring(item.index + 5) }} </span> </span> <span v-else-if="tipIndex == item.len - 1"> {{ @@ -179,7 +182,7 @@ " > <img style="width: 20px; height: 20px" style="width: 15px; height: 15px" :src="tipImage" /> </a-tooltip> @@ -199,7 +202,7 @@ " > <img style="width: 20px; height: 20px" style="width: 15px; height: 15px" :src="tipImage" /> </a-tooltip> @@ -238,12 +241,9 @@ </ul> </div> --> </template> <!-- <div>{{ sessionDetail.role === 'assistant' }}</div> --> <template #actions> <!-- <div v-for="(item, leng) in messagenList.reference" :key="leng" > --> <div> <div> <template @@ -308,12 +308,7 @@ </template> <template #actions> <!-- <div class="icon-box"> <div> <img :src="getIconByExtension('pdf')" alt="" /> </div> <div class="icon-text"> 文件类型 </div> </div> --> <div class="action" @click="stopChat" @@ -329,24 +324,12 @@ </template> </a-comment> </div> <!-- <div class="chartStart" v-if="isStart" @click="startChat" >停止生成</div > <div class="chartStart v-else" @click="stopChat">重新生成</div> --> </a-scrollbar> <div class="chat_bottom"> <div class="center-bottom"> <!-- <a-textarea v-model="inputMsg" @keydown.shift.enter="sendMessage" style="height: 180px" placeholder="输入您想了解的内容,Shift+Enter发送" :max-length="500" allow-clear show-word-limit > </a-textarea> --> <a-textarea v-model="inputMsg" @keydown.shift.enter="handleShiftEnter" @@ -382,12 +365,6 @@ :sessionId="activeSessionId" @selectFileCallback="selectFileCallback" ></updataFile> <!-- <uploadFile ref="fileInput" :handleRemove="handleRemove" :typeXLse="false" @selectFileCallback="selectFileCallback" ></uploadFile> --> <a-button :disabled="chatDis" @@ -483,11 +460,10 @@ </a-col> </a-row> <a-modal title=" " v-model:visible="fileVisible" :footer="false" fullscreen> <!-- <docx previewSrc="http://192.168.20.116:1080/v1/document/get/405c3efa4d8c11ef97560242ac120006"></docx>--> <docx v-if="documenttype == 'docx'" :previewSrc="previewSrc"></docx> <excel v-if="documenttype == 'xlsx'" :previewSrc="previewSrc"></excel> <excel v-if="documenttype == ('xlsx' || 'xls')" :previewSrc="previewSrc"></excel> <Pdf v-if="documenttype == 'pdf'" :previewSrc="previewSrc"></Pdf> <txt v-if="documenttype == 'txt'" :previewSrc="previewSrc"></txt> <txt v-if="documenttype == 'txt'" :previewSrc="previewSrc"></txt> </a-modal> <a-modal v-model:visible="visible" @@ -591,7 +567,7 @@ let from = reactive({ name: '未命名会话', }); const isStopChat = ref(false); const currIndex = ref(0); const displayedText = ref(''); // 正在显示的文字 let timer: number | null = null; @@ -712,7 +688,7 @@ const clickHref = async (item) => { documenttype.value = item.doc_name.split('.').pop(); previewSrc.value = httpUrl + `/api/v1/document/get/${item.doc_id}`; previewSrc.value = httpUrl + `/api/v1/document/get/${item.doc_id}`+"?t="+new Date().getTime(); fileVisible.value = true; }; @@ -780,53 +756,6 @@ activeSessionId.value = conversation_id; }; //上传 // const selectFileCallback = async (resData, file) => { // console.log(111); // try { // const formData = new FormData(); // uploaditemList.value = resData; // uploaditemList.value.map((item) => { // if (item.name == file[0].file.name) { // item.onFileSelectedLoading = true; // item.textName = '上传中'; // } // return item; // }); // debugger; // if (!activeSessionId.value) { // await createSession(resData); // } // // onFileSelectedLoading.value = true; // // textName.value = '上传中'; // formData.append('files', file[0].file); // formData.append('conversation_id', activeSessionId.value); // console.log(formData, 'formData'); // const { data, code } = await uploadAndParse(formData); // if (code === 200) { // uploaditemList.value.map((item: any) => { // item.onFileSelectedLoading = false; // item.textName = '上传成功'; // return item; // }); // getInfo(data); // // onFileSelectedLoading.value = false; // // textName.value = '上传成功'; // } // } catch (err) { // uploaditemList.value.map((item: any) => { // item.onFileSelectedLoading = false; // item.textName = '上传失败'; // return item; // }); // // onFileSelectedLoading.value = false; // // textName.value = '上传失败'; // Message.error('上传失败'); // } // }; //上传成功解析getinfo const getInfo = async (id) => { @@ -942,6 +871,7 @@ // 发送 const sentClick = () => { displayedText.value=""; sendMessage('click'); uploaditemList.value = []; }; @@ -1000,11 +930,14 @@ } }; let message_stop = []; let message_id = ""; const startChat = async (valMsg) => { chatDis.value = true; loading.value = true; chartLoading.value = true; toStop = false; displayedText.value = ''; chartLoading.value = true; sessionDetailList.value.push({ content: valMsg, role: 'user', @@ -1033,6 +966,7 @@ currIndex.value = 0; while (true) { if (toStop) { message_stop.push(message_id); displayedText.value = ''; setChatDataMeg(chatDataMeg); break; @@ -1044,6 +978,16 @@ try { const val = JSON.parse(value?.data || ''); const d = val?.data; if (message_id != d.message_id) { message_id = d.message_id; message_stop = []; } else { //message_stop中查找message_id const index = message_stop.findIndex(item => item === message_id); if (index > -1) { break; } } if (typeof d !== 'boolean') { // console.info("data:", d); streamStr.value = d.content; @@ -1057,12 +1001,8 @@ console.info('done'); displayedText.value = ''; chartLoading.value = false; if (isStopChat.value) { setChatDataMeg(chatDataMeg); } else { queryNewSessionDetail(activeSessionId.value); EventBus.emit('queryAppUsageList'); } queryNewSessionDetail(activeSessionId.value); EventBus.emit('queryAppUsageList'); break; } } @@ -1073,14 +1013,8 @@ }; const stopChat = async () => { // const { code, data } = await stopChatApi(activeSessionId.value); // if (code === 200) { // Message.success("已停止"); // queryNewSessionDetail(activeSessionId.value); // } loading.value = false; chatDis.value = false; isStopChat.value = true; toStop = true; console.log('stopChat'); console.log(displayedText.value, 'displayedText'); @@ -1103,7 +1037,9 @@ .concat(lastArr); console.log(sessionDetailList.value, 'sessionDetailList2'); console.log(chatObj, 'chatObj对象'); chatObj.message = chatObj.message.concat(lastArr); if (chatObj?.message) { chatObj.message = chatObj.message.concat(lastArr); } Object.assign(chatDataMeg, { id: chatObj.id, conversation_id: chatObj.id, @@ -1133,7 +1069,6 @@ agentTitle.value = data.name; from.name = data.name; refreshScroll(); //刷新滚动条位置 isStopChat.value = false; } }; @@ -1205,6 +1140,7 @@ // fileInput.value.cancel(); }); EventBus.on('newChat', () => { uploaditemList.value = []; agentType.value = '1'; // createSession(''); activeSessionId.value = ''; yarn.lock
@@ -1018,7 +1018,7 @@ "@vue-office/excel@^1.7.11": version "1.7.11" resolved "https://registry.npmmirror.com/@vue-office/excel/-/excel-1.7.11.tgz" resolved "https://registry.npmmirror.com/@vue-office/excel/-/excel-1.7.11.tgz#e37e5a2c212907a62c9b65e42d9df21f9c68a2cc" integrity sha512-LF3R9IV573Sf4qTu6Ik5Ee8UMfkrsZQ6HEQE25/2m1c0CMcHX6KanIy6Cz0b0Q+FrLH3TjIsLTm6oPcqAbDGSA== "@vue-office/pdf@^2.0.2":