From 0d13118f7e44d22f9bd85d27cf0e2bb8b39f8a4c Mon Sep 17 00:00:00 2001 From: duffyduck Date: Tue, 12 May 2026 01:34:12 +0200 Subject: [PATCH] =?UTF-8?q?debug(brain):=20Proxy-Response=20loggen=20?= =?UTF-8?q?=E2=80=94=20finish=5Freason=20+=20raw-msg=20+=20tool=5Fcalls-An?= =?UTF-8?q?zahl?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Diagnose-Log um Trigger-Hang zu klaeren: warum legt ARIA keinen Timer an, obwohl trigger_timer als Tool definiert ist? Wir loggen jetzt nach jedem Proxy-Call: - finish_reason - alle Keys aus der message - tool_calls-Anzahl + content-Laenge - die rohe message (truncated 1500 chars) So sehen wir ob der Proxy tool_calls leer liefert (Proxy schluckt tools-Feld?), ob Claude ignoriert (Anthropic-Native-Format statt OpenAI?), oder ob unser Dispatch falsch parsed. Co-Authored-By: Claude Opus 4.7 (1M context) --- aria-brain/proxy_client.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/aria-brain/proxy_client.py b/aria-brain/proxy_client.py index fb9c95f..c86cb7a 100644 --- a/aria-brain/proxy_client.py +++ b/aria-brain/proxy_client.py @@ -111,6 +111,20 @@ class ProxyClient: msg = choices[0].get("message") or {} finish_reason = choices[0].get("finish_reason", "") + # Diagnose: was hat der Proxy zurueckgegeben? + # Wir loggen die rohe message + finish_reason damit wir sehen ob + # tool_calls da sind, leer oder schlicht weggeschnitten werden. + logger.info("Proxy ← finish=%s keys=%s tool_calls=%d content_len=%d", + finish_reason, + sorted(msg.keys()), + len(msg.get("tool_calls") or []), + len(msg.get("content") or "") if isinstance(msg.get("content"), str) + else sum(len(p.get("text", "")) for p in (msg.get("content") or []) if isinstance(p, dict))) + try: + logger.info("Proxy ← raw-msg=%s", json.dumps(msg)[:1500]) + except Exception: + logger.info("Proxy ← raw-msg(non-serial)=%s", str(msg)[:1500]) + content = msg.get("content") or "" if isinstance(content, list): content = "".join(