From c90912ed0723e9763f76ff05b39b88c3b4b01e0b Mon Sep 17 00:00:00 2001 From: admin Date: Tue, 19 May 2026 21:37:34 +0400 Subject: [PATCH] fix: truncate large tool outputs to prevent Crof incomplete responses Crof models (mimo, deepseek-v4-pro) return status=incomplete when tool results contain too much text (e.g. full HTML pages at 8500+ tokens). Auto-truncate tool outputs exceeding 8000 chars with truncation notice. Combined with the 30-item conversation trim from previous commit. --- CHANGELOG.md | 3 +++ codex-launcher_2.1.2_all.deb | Bin 24176 -> 24292 bytes src/translate-proxy.py | 24 ++++++++++++++++++------ 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a47b8dc..9e15f1c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,9 @@ - Keeps system/developer messages, original user query, and most recent items - Drops oldest tool call/outputs from the middle when conversation grows too long - Prevents `status=incomplete` errors on providers with smaller context windows +- **Truncates large tool outputs (>8000 chars)** to prevent model output token exhaustion + - Crof's models return `incomplete` when tool results contain too much text (e.g., full HTML pages) + - Truncated outputs include `[truncated N chars]` suffix so the model knows data was cut - Added request/response logging to `~/.cache/codex-proxy/requests.log` for debugging - Proxy stderr no longer discarded by launcher (visible in terminal for debugging) diff --git a/codex-launcher_2.1.2_all.deb b/codex-launcher_2.1.2_all.deb index 4837cff71d7ee82b1ccb51505611270b351bf02d..e57cfa8e10ea7a8ce68177a215b3aeb2a0bce29f 100644 GIT binary patch delta 23214 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 delta 23097 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 _MAX_TOOL_OUTPUT_CHARS: + item = dict(item) + item["output"] = o[:_MAX_TOOL_OUTPUT_CHARS] + f"\n... [truncated {len(o) - _MAX_TOOL_OUTPUT_CHARS} chars]" + print(f"[trim] tool output truncated {len(o)} -> {_MAX_TOOL_OUTPUT_CHARS}", file=sys.stderr) + out.append(item) + if len(out) <= _MAX_INPUT_ITEMS: + return out head_end = 0 - for i, item in enumerate(input_data): + for i, item in enumerate(out): t = item.get("type") if t == "message" and item.get("role") in ("developer", "system"): head_end = i + 1 @@ -179,12 +191,12 @@ def _trim_input(input_data): head_end = i + 1 else: break - head = input_data[:head_end] + head = out[:head_end] tail_keep = _MAX_INPUT_ITEMS - len(head) - tail = input_data[-tail_keep:] - trimmed = len(input_data) - len(head) - len(tail) + tail = out[-tail_keep:] + trimmed = len(out) - len(head) - len(tail) if trimmed > 0: - print(f"[trim] {len(input_data)} items -> {len(head) + len(tail)} (dropped {trimmed} old items)", file=sys.stderr) + print(f"[trim] {len(out)} items -> {len(head) + len(tail)} (dropped {trimmed} old items)", file=sys.stderr) return head + tail # ═══════════════════════════════════════════════════════════════════