From 7d1e44c728a8e436fede1ceb8a62b5c4fb848b09 Mon Sep 17 00:00:00 2001 From: liudong <liudong> Date: 星期一, 19 八月 2024 17:32:43 +0800 Subject: [PATCH] agent会话名称修改 --- src/views/sessionManager/components/agentSession.vue | 315 +++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 246 insertions(+), 69 deletions(-) diff --git a/src/views/sessionManager/components/agentSession.vue b/src/views/sessionManager/components/agentSession.vue index 090a513..093bc27 100644 --- a/src/views/sessionManager/components/agentSession.vue +++ b/src/views/sessionManager/components/agentSession.vue @@ -3,7 +3,30 @@ <div class="header___lEPyH"> <div class="chatHeader"> <div class="chatHeaderBox"> - <span class="title">{{agentTitle}}</span> +<!-- <span class="title">{{agentTitle}}</span>--> + <a-popover + position="bottom" + trigger="click" + > + <a-button border + >{{agentTitle}} + <icon-down style="margin-left: 4px" /> + </a-button> + <template #content> + <a-button + type="text" + class="button" + style="color: #2a2a2b" + @click="handleClick()" + > + <template #icon> + <icon-edit /> + </template> + 淇敼鍚嶇О + </a-button> + <!-- <a-divider style="margin: 10px 0" />--> + </template> + </a-popover> </div> </div> </div> @@ -12,13 +35,13 @@ id="agentHome" class="chat-list" style=" - width: 90%; + width: 80%; overflow: auto; height: calc(100vh - 380px); margin: 0px auto 20px; " > - <div class="chat-item" v-for="sessionDetail in sessionDetailList"> + <div class="chat-item" v-for="(sessionDetail,index) in sessionDetailList"> <a-comment v-if="sessionDetail.role === 'user'"> <template #avatar> <img @@ -42,11 +65,28 @@ /> </template> <template #content> - <a-card :class="{ chatItemAnswer: theme === 'light' }"> - <div :class="{ light: theme === 'light' }" - >{{ sessionDetail.content }} - </div> - </a-card> +<!-- <a-card :class="{ chatItemAnswer: theme === 'light' }">--> +<!-- <div :class="{ light: theme === 'light' }"--> +<!-- >{{ sessionDetail.content }}--> +<!-- </div>--> +<!-- </a-card>--> + <a-textarea + readonly + auto-size + v-model="sessionDetail.content" + :class="{ chatItemAnswer: theme === 'light' }" + :style="{backgroundColor: theme === 'light' ? '#ffffff' : '#000000'}" + style="border: none" + > + </a-textarea> + </template> + <template #actions> + <span class="action" v-if="index != 0" @click="copy(sessionDetail.content)"> + <icon-copy /> 澶嶅埗 + </span> + <span class="action" v-if="index != 0 && index == sessionDetailList.length - 1" @click="reGenerate()"> + <icon-refresh /> 閲嶆柊鐢熸垚 + </span> </template> </a-comment> <a-comment v-else-if="sessionDetail.role === 'last'"> @@ -63,8 +103,18 @@ auto-size v-model="displayedText" :class="{ chatItemAnswer: theme === 'light' }" + :style="{backgroundColor: theme === 'light' ? '#ffffff' : '#000000'}" + style="border: none" > </a-textarea> + </template> + <template #actions> + <div class="action" + @click="stopChat" + style="background: var(--color-bg-2);color: var(--color-primary-light-4);" v-if="displayedText != ''"> + <icon-record-stop /> + 鍋滄鐢熸垚 + </div> </template> </a-comment> </div> @@ -84,6 +134,8 @@ show-word-limit :disabled="chatDis" :class="{ textItemAnswer: theme === 'dark' }" + :style="{backgroundColor: theme === 'light' ? '#ffffff' : '#000000'}" + style="border: none" :auto-size="{ minRows: 12, maxRows: 5, @@ -94,14 +146,28 @@ <a-button :disabled="chatDis" @click="sentClick" - type="primary" + type="text" style="border-radius: 24px" :loading="loading" - size="large" - >鍙戦��</a-button + > + <icon-send size="32" style="color: #0960bd;"/> + </a-button > </div> </div> + <a-modal v-model:visible="visible" title="淇敼鍚嶇О" @before-open="handleOpened" @cancel="handleCancel" :footer="false" title-align="start"> + <a-form ref="formRef" :rules="rules" :model="agentObj" @submit="handleSubmit" > + <a-form-item field="name" label="鍚嶇О"> + <a-input v-model="agentTitle" placeholder="璇疯緭鍏ュ悕绉�"/> + </a-form-item> + <a-form-item> + <div style="width: 100%;text-align: right"> + <a-button @click="visible = false">鍙栨秷</a-button> + <a-button style="margin-left: 10px" type="primary" html-type="submit">纭畾</a-button> + </div> + </a-form-item> + </a-form> + </a-modal> </div> </template> @@ -113,6 +179,8 @@ import { EventSourceParserStream } from 'eventsource-parser/stream'; import { agentResetApi, agentSetApi, getAgentSessionDetailsApi } from "@/api/agentSession"; import EventBus from '@/utils/EventBus'; +import useClipboard from "vue-clipboard3"; +import { addSessionApi } from "@/api/session"; const props = defineProps({ modalObj: Object, }); @@ -139,12 +207,50 @@ const agentList = ref([]); const selectValue = ref(''); const sectionList = ref({}); - +let chatObj = reactive({}); +const isStopChat = ref(false) const appStore = useAppStore(); const theme = computed(() => { return appStore.theme; }); +const visible = ref(false); + + + +const rules = { + name: [ + { + required: true, + message:'鍚嶇О涓嶅厑璁镐负绌�', + }, + ], +} + +const handleSubmit = async({values, errors}) => { + if(errors) return; + agentObj.name = agentTitle.value; + const { code, data } = await addSessionApi(agentObj); + if (data) { + Message.success("淇敼鎴愬姛"); + handleCancel() + queryAgentSessionDetail(agentObj.id); + } +} + +const handleClick = () => { + visible.value = true; +}; +const handleCancel = () => { + visible.value = false; +} + +const handleOpened =(el) => { + // Object.assign(form,{ + // name: '',// 鐢ㄦ埛鍚� + // }); + // formRef.value.resetFields(); +} // 鍒濆鍖栭〉闈� @@ -247,12 +353,22 @@ }; - +const { toClipboard } = useClipboard(); +const copy = async (text) => { + await toClipboard(text); //鍙傛暟涓鸿澶嶅埗鐨勬枃鏈� +} const sentClick = () => { sendMessage('click'); }; + +// 閲嶆柊鐢熸垚 +const reGenerate = () => { + let inputContent = sessionDetailList.value[sessionDetailList.value.length-2].content + startChat(inputContent) +}; + const sendMessage = async (event) => { if (event.keyCode == 13 || event === 'click') { if (!event.shiftKey) { @@ -261,8 +377,8 @@ event.preventDefault(); // 闃绘榛樿琛屼负锛屽嵆涓嶆崲琛� } - chatDis.value = true; - loading.value = true; + // chatDis.value = true; + // loading.value = true; // if (!agentObj.id) { // Message.warning('璇烽�夋嫨浼氳瘽'); // chatDis.value = false; @@ -275,59 +391,7 @@ // } if (inputMsg.value) { - sessionDetailList.value.push({ - content: inputMsg.value, - role: 'user', - }); - sessionDetailList.value.push({ role: 'last' }); - refreshScroll(); - const response = await fetch( - '/api/v1/canvas/completion', - { - method: 'POST', - headers: { - 'Authorization': getAuthorization(), - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - id: agentObj.id, - message: inputMsg.value, - }), - } - ); - - const reader = response?.body - ?.pipeThrough(new TextDecoderStream()) - .pipeThrough(new EventSourceParserStream()) - .getReader(); - currIndex.value = 0; - while (true) { - const x = await reader?.read(); - if (x) { - const { done, value } = x; - console.log(x, 999); - try { - const val = JSON.parse(value?.data || ''); - const d = val?.data; - if (typeof d !== 'boolean') { - console.info('data:', d); - streamStr.value = d.content; - startDisplayStr(); - } - } catch (e) { - console.warn(e); - } - if (done) { - console.info('done'); - displayedText.value = ''; - queryAgentSessionDetail(agentObj.id); - EventBus.emit('queryAppUsageList'); - break; - } - } - } - chatDis.value = false; - loading.value = false; + startChat(inputMsg.value) inputMsg.value = ''; } else { Message.warning('娑堟伅涓嶈兘涓虹┖'); @@ -337,6 +401,101 @@ } } }; + + +const startChat = async(valMsg)=>{ + + sessionDetailList.value.push({ + content: valMsg, + role: 'user', + }); + sessionDetailList.value.push({ role: 'last' }); + refreshScroll(); + const response = await fetch( + '/api/v1/canvas/completion', + { + method: 'POST', + headers: { + 'Authorization': getAuthorization(), + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + id: agentObj.id, + message: valMsg, + }), + } + ); + + const reader = response?.body + ?.pipeThrough(new TextDecoderStream()) + .pipeThrough(new EventSourceParserStream()) + .getReader(); + currIndex.value = 0; + while (true) { + const x = await reader?.read(); + if (x) { + const { done, value } = x; + // console.log(x, 999); + try { + const val = JSON.parse(value?.data || ''); + const d = val?.data; + if (typeof d !== 'boolean') { + console.info('data:', d); + streamStr.value = d.content; + startDisplayStr(); + } + } catch (e) { + console.warn(e); + } + if (done) { + console.info('done'); + displayedText.value = ''; + queryAgentSessionDetail(agentObj.id); + EventBus.emit('queryAppUsageList'); + break; + } + } + } + chatDis.value = false; + loading.value = false; +} + +const stopChat=async()=>{ + // const { code, data } = await stopChatApi(activeSessionId.value); + // if (code === 200) { + // Message.success("宸插仠姝�"); + // queryNewSessionDetail(activeSessionId.value); + // } + isStopChat.value = true; + console.log('stopChat'); + console.log(displayedText.value, 'displayedText'); + console.log(sessionDetailList.value, 'sessionDetailList'); + let inputText = sessionDetailList.value[sessionDetailList.value.length-2].content + // 鏁扮粍鍚堝苟 + let lastArr = [{ + content: inputText, + role: "user" + },{ + content: displayedText.value, + role: "assistant" + }] + sessionDetailList.value = sessionDetailList.value.splice(0, sessionDetailList.value.length-2).concat(lastArr); + console.log(sessionDetailList.value, 'sessionDetailList2'); + console.log(chatObj, 'chatObj瀵硅薄'); + chatObj.message = chatObj.message.concat(lastArr); + // clearTimeout(timer!); + // timer = null; + // const { code, data } = await addSessionApi(chatObj); + // if (data) { + // //鍋滄瀹氭椂鍣� + // clearTimeout(timer!); + // timer = null; + // displayedText.value = ""; + // queryNewSessionDetail(activeSessionId.value); + // } + + +} const handleShiftEnter = (event) => { event.preventDefault(); @@ -484,6 +643,8 @@ .chat_bottom { display: flex; align-items: center; + width: 78%; + margin: 0 auto; .center-bottom { // position: absolute; // width: 90%; @@ -505,7 +666,7 @@ .btn-send { position: absolute !important; right: 10px; - bottom: 10px; + top: 80px; z-index: 10; } :deep(.arco-btn-size-large) { @@ -557,4 +718,20 @@ } } } + +.action { + cursor: pointer; + display: inline-block; + padding: 0 10px; + color: var(--color-text-1); + line-height: 24px; + background: transparent; + border-radius: 2px; + cursor: pointer; + transition: all 0.1s ease; + font-size: 12px; +} +.action:hover { + background: var(--color-fill-3); +} </style> -- Gitblit v1.8.0