jack 1 месяц назад
Родитель
Сommit
0f3306a938
2 измененных файлов с 50 добавлено и 8 удалено
  1. 33 1
      app/core/runner/llm_callback_handler.py
  2. 17 7
      app/core/runner/pub_handler.py

+ 33 - 1
app/core/runner/llm_callback_handler.py

@@ -102,6 +102,33 @@ class LLMCallbackHandler:
                     self.event_handler.pub_message_delta(
                         self.message.id, index, delta.content, delta.role
                     )
+                elif delta.reasoning_content is not None:
+                    # call on delta message received
+                    if not self.final_message_started:
+                        self.final_message_started = True
+
+                        self.message = self.on_message_create_func(content="")
+                        self.step = self.on_step_create_func(self.message.id)
+                        logging.debug(
+                            "create message and step (%s), (%s)",
+                            self.message,
+                            self.step,
+                        )
+
+                        self.event_handler.pub_run_step_created(self.step)
+                        self.event_handler.pub_run_step_in_progress(self.step)
+                        self.event_handler.pub_message_created(self.message)
+                        self.event_handler.pub_message_in_progress(self.message)
+
+                    # append message content delta
+                    # message.reasoning_content += delta.reasoning_content
+                    self.event_handler.pub_message_delta(
+                        self.message.id,
+                        index,
+                        delta.content,
+                        delta.role,
+                        delta.reasoning_content,
+                    )
                 elif hasattr(delta, "audio") and delta.audio is not None:
                     if not self.final_message_started:
                         self.final_message_started = True
@@ -122,7 +149,12 @@ class LLMCallbackHandler:
                     # append message content delta
                     # message.audio += delta.audio
                     self.event_handler.pub_message_delta(
-                        self.message.id, index, delta.content, delta.role, delta.audio
+                        self.message.id,
+                        index,
+                        delta.content,
+                        delta.role,
+                        None,
+                        delta.audio,
                     )
                 if chunk.usage:
                     self.event_handler.pub_message_usage(chunk)

+ 17 - 7
app/core/runner/pub_handler.py

@@ -306,20 +306,30 @@ class StreamEventHandler:
             )
         )
 
-    def pub_message_delta(self, message_id, index, content, role, audio=None):
+    def pub_message_delta(
+        self, message_id, index, content, role, reasoning_content=None, audio=None
+    ):
         """
         pub MessageDelta
         """
+        delta = {
+            "content": [{"index": index, "type": "text", "text": {"value": content}}],
+            "role": role,
+        }
+        if reasoning_content is not None:
+            delta["reasoning_content"] = [
+                {
+                    "index": index,
+                    "type": "text",
+                    "text": {"value": reasoning_content},
+                }
+            ]
+
         self.pub_event(
             events.ThreadMessageDelta(
                 data=events.MessageDeltaEvent(
                     id=message_id,
-                    delta={
-                        "content": [
-                            {"index": index, "type": "text", "text": {"value": content}}
-                        ],
-                        "role": role,
-                    },
+                    delta=delta,
                     audio=audio,
                     object="thread.message.delta",
                 ),