Kaynağa Gözat

feat: add preMessageDeltaHandler for streaming pre-message updates in SSE

Shun Miyazawa 9 ay önce
ebeveyn
işleme
3028de6f55

+ 9 - 0
apps/app/src/features/openai/server/routes/message/post-message.ts

@@ -5,6 +5,7 @@ import type { ValidationChain } from 'express-validator';
 import { body } from 'express-validator';
 import type { AssistantStream } from 'openai/lib/AssistantStream';
 import type { MessageDelta } from 'openai/resources/beta/threads/messages.mjs';
+import { type ChatCompletionChunk } from 'openai/resources/chat/completions';
 
 import { getOrCreateChatAssistant } from '~/features/openai/server/services/assistant';
 import type Crowi from '~/server/crowi';
@@ -120,6 +121,14 @@ export const postMessageHandlersFactory: PostMessageHandlersFactory = (crowi) =>
         'Cache-Control': 'no-cache, no-transform',
       });
 
+      const preMessageDeltaHandler = (delta: ChatCompletionChunk.Choice.Delta) => {
+        const content = { text: delta.content };
+        res.write(`data: ${JSON.stringify(content)}\n\n`);
+      };
+
+      // Don't add await since SSE is performed asynchronously with main message
+      openaiService.generateAndProcessPreMessage(req.body.userMessage, preMessageDeltaHandler);
+
       const messageDeltaHandler = async(delta: MessageDelta) => {
         const content = delta.content?.[0];