Update changelog for version 0.1.12, improve response parsing for nested OpenAI-compatible payloads, and enhance assistant message extraction in conversation agent.

This commit is contained in:
techartdev
2026-02-20 16:43:48 +02:00
parent e6fb9e2914
commit 2331ec0d8d
4 changed files with 91 additions and 35 deletions
+48 -4
View File
@@ -174,10 +174,54 @@ class OpenClawConversationAgent(conversation.AbstractConversationAgent):
message=message,
session_id=conversation_id,
)
choices = response.get("choices", [])
if choices:
return choices[0].get("message", {}).get("content", "")
return ""
extracted = self._extract_text_recursive(response)
return extracted or ""
def _extract_text_recursive(self, value: Any, depth: int = 0) -> str | None:
"""Recursively extract assistant text from nested response payloads."""
if depth > 8:
return None
if isinstance(value, str):
text = value.strip()
return text or None
if isinstance(value, list):
parts: list[str] = []
for item in value:
extracted = self._extract_text_recursive(item, depth + 1)
if extracted:
parts.append(extracted)
if parts:
return "\n".join(parts)
return None
if isinstance(value, dict):
priority_keys = (
"output_text",
"text",
"content",
"message",
"response",
"answer",
"choices",
"output",
"delta",
)
for key in priority_keys:
if key not in value:
continue
extracted = self._extract_text_recursive(value.get(key), depth + 1)
if extracted:
return extracted
for nested_value in value.values():
extracted = self._extract_text_recursive(nested_value, depth + 1)
if extracted:
return extracted
return None
def _error_result(
self,