Commit 97e7711
Changed files (1)
src
ai
texts
src/ai/texts/openai_response.py
@@ -4,7 +4,7 @@ import contextlib
import hashlib
from typing import Literal
-from glom import Coalesce, glom
+from glom import Coalesce, flatten, glom
from loguru import logger
from openai import AsyncOpenAI, DefaultAsyncHttpxClient
from pyrogram.client import Client
@@ -240,17 +240,15 @@ async def single_api_response(
sent_messages.append(status_msg)
status_mid = status_msg.id
- if response_type == "response.reasoning_summary_text.done":
- thoughts = resp.get("text", thoughts)
- elif response_type == "response.output_text.done":
- answers = resp.get("text", answers)
- elif response_type == "response.content_part.done":
- tool_calls = glom(resp, "part.annotations", default=[]) or []
- elif response_type in {"response.created", "response.in_progress", "response.completed"}:
- response_id = glom(resp, "response.id", default="")
-
if response_type == "response.completed":
full_response = resp
+ response_id = glom(resp, "response.id", default="")
+ tool_calls = flatten(glom(resp, "response.output.**.annotations", default=[]))
+ thoughts = flatten(glom(resp, "response.output.*.summary.*.text", default=[])) or thoughts
+ thoughts = "".join(thoughts)
+ answers = flatten(glom(resp, "response.output.*.content.*.text", default=[])) or answers
+ answers = "".join(answers)
+
# all chunks are processed
if not answers.strip() and not thoughts.strip(): # empty response
return await single_api_response(