From 4ace68af4236a1be8b57dbcfc185871eda76fed9 Mon Sep 17 00:00:00 2001
From: yinbangzhong <zhongbangyin@126.com>
Date: 星期四, 08 八月 2024 16:48:08 +0800
Subject: [PATCH] 会话实时显示

---
 src/views/session/sessionRecordsManager/index.vue |   63 +++++++++++++++++++++----------
 1 files changed, 43 insertions(+), 20 deletions(-)

diff --git a/src/views/session/sessionRecordsManager/index.vue b/src/views/session/sessionRecordsManager/index.vue
index d64b2df..4b22809 100644
--- a/src/views/session/sessionRecordsManager/index.vue
+++ b/src/views/session/sessionRecordsManager/index.vue
@@ -306,6 +306,7 @@
   import { useAppStore } from '@/store';
   import { computed, nextTick, onMounted, reactive, ref } from 'vue';
   import { Message } from '@arco-design/web-vue';
+  import { EventSourceParserStream } from 'eventsource-parser/stream';
   import moment from 'moment';
   import AddSession from '@/views/session/sessionManager/components/addSession.vue';
   import {
@@ -314,6 +315,8 @@
     getSessionDetailsApi,
     sessionListApi,
   } from '@/api/session';
+  import { getAuthorization } from "@/utils/auth";
+
 
   const sessionDetailList = ref([]); //鏍规嵁浼氳瘽id鍑烘潵鐨勪細璇濊鎯�
   const sessionList = ref([]); //浼氳瘽鍒楄〃
@@ -353,30 +356,49 @@
       return;
     }
     if (inputMsg.value) {
-      const data = await chatApi({
-        conversation_id: activeSessionId.value,
-        messages: inputMsg.value,
+      sessionDetailList.value.push({ "content": inputMsg.value, "role": "user" });
+      sessionDetailList.value.push({  "role": "last" });
+      refreshScroll();
+      const response = await fetch("/api/tech/cloudminds/query?modeltype=localragflow", {
+        method: 'POST',
+        headers: {
+          'Authorization': getAuthorization(),
+          'Content-Type': 'application/json',
+        },
+        body: JSON.stringify({
+          conversation_id: activeSessionId.value,
+          messages: inputMsg.value,
+        }),
       });
-      if (data) {
-        chatDis.value = false;
 
-        // inputMsg.value = '';
-        // querySessionDetail({ id: activeSessionId.value });
-      }
-      const res = await getSessionDetailsApi(activeSessionId.value);
-      if (res.code === 200) {
-        sessionDetailList.value = res.data.message.map((item, index) => {
-          if (index === res.data.message.length - 1) {
-            item.role = 'last';
-            displayedText.value = '';
-            currIndex.value = 0;
-            streamStr.value = item.content;
-            startDisplayStr();
+      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;
+          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);
           }
-          return item;
-        });
-        refreshScroll();
+          if (done) {
+            console.info('done');
+            break;
+          }
+        }
       }
+      chatDis.value=false;
       inputMsg.value = '';
     } else {
       Message.warning('娑堟伅涓嶈兘涓虹┖');
@@ -428,6 +450,7 @@
       displayedText.value += res[currIndex.value];
       currIndex.value++;
       setTimeout(startDisplayStr, 100);
+      refreshScroll();
     } else {
       clearTimeout(timer!);
       timer = null;

--
Gitblit v1.8.0