2
0
Yuki Takei 1 жил өмнө
parent
commit
3ffc33c0cc

+ 48 - 17
apps/app/src/client/components/RagSearch/RagSearchModal.tsx

@@ -1,4 +1,4 @@
-import React, { useState } from 'react';
+import React, { useEffect, useState } from 'react';
 
 import { Modal, ModalBody, ModalHeader } from 'reactstrap';
 
@@ -27,29 +27,60 @@ const RagSearchModal = (): JSX.Element => {
 
   const { data: ragSearchModalData, close: closeRagSearchModal } = useRagSearchModal();
 
+  const isOpened = ragSearchModalData?.isOpened ?? false;
+
+  useEffect(() => {
+    // do nothing when modal is not opened
+    if (!isOpened) {
+      return;
+    }
+
+    // do nothing when threadId is already set
+    if (threadId != null) {
+      return;
+    }
+
+    const createThread = async() => {
+      // create thread
+      try {
+        const res = await apiv3Post('/openai/thread', { threadId });
+        const thread = res.data.thread;
+
+        setThreadId(thread.id);
+      }
+      catch (err) {
+        logger.error(err.toString());
+      }
+    };
+
+    createThread();
+  }, [isOpened, threadId]);
+
   const onClickSubmitUserMessageHandler = async() => {
     const newUserMessage = { id: messages.length.toString(), content: input, isUserMessage: true };
     setMessages(msgs => [...msgs, newUserMessage]);
 
     setInput('');
 
+    // post message
     try {
-      const res = await apiv3Post('/openai/chat', { userMessage: input, threadId });
-      const assistantMessageData = res.data.messages;
-
-      if (assistantMessageData.data.length > 0) {
-        const newMessages: Message[] = assistantMessageData.data.reverse()
-          .map((message: any) => {
-            return {
-              id: message.id,
-              content: message.content[0].text.value,
-            };
-          });
-
-        setMessages(msgs => [...msgs, ...newMessages]);
-        setThreadId(assistantMessageData.data[0].threadId);
-      }
+      const res = await apiv3Post('/openai/message', { userMessage: input, threadId });
 
+      if (res.data) {
+        console.log(res.data);
+      }
+      // if (res.data) {
+      //   const newMessages: Message[] = assistantMessageData.data.reverse()
+      //     .map((message: any) => {
+      //       return {
+      //         id: message.id,
+      //         content: message.content[0].text.value,
+      //       };
+      //     });
+
+      //   setMessages(msgs => [...msgs, ...newMessages]);
+      //   setThreadId(assistantMessageData.data[0].threadId);
+      // }
     }
     catch (err) {
       logger.error(err.toString());
@@ -57,7 +88,7 @@ const RagSearchModal = (): JSX.Element => {
   };
 
   return (
-    <Modal size="lg" isOpen={ragSearchModalData?.isOpened ?? false} toggle={closeRagSearchModal} data-testid="search-modal">
+    <Modal size="lg" isOpen={isOpened} toggle={closeRagSearchModal} data-testid="search-modal">
       <ModalBody>
         <ModalHeader tag="h4" className="mb-3 p-0">
           <span className="material-symbols-outlined me-2 text-primary">psychology</span>

+ 6 - 4
apps/app/src/server/routes/apiv3/openai/message.ts

@@ -1,3 +1,5 @@
+import assert from 'assert';
+
 import type { Request, RequestHandler } from 'express';
 import type { ValidationChain } from 'express-validator';
 import { body } from 'express-validator';
@@ -63,15 +65,15 @@ export const postMessageHandlersFactory: PostMessageHandlersFactory = (crowi) =>
       res.setHeader('X-Accel-Buffering', 'no');
 
       try {
-        for await (const data of stream) {
-          res.write(data);
-        }
+        res.send(stream.toReadableStream());
       }
       catch (e) {
         return res.status(500).send({ message: 'Internal server error', error: e });
       }
+      finally {
+        res.end();
+      }
 
-      res.end();
     },
   ];
 };