fix(agents): survive long overnight runs

- compact at memory-safe token budget (~20k) not the 131k window; gpt-oss
  hits oMLX's prefill memory guard ~47k tokens on a 24GB machine
- repair invalid_tool_calls (malformed JSON args) before echoing history —
  LangChain serializes the raw malformed string which oMLX 500s on
- retry invokes (4x) with an oMLX watchdog restart between attempts
- ALWAYS finalize: salvage picks from findings even after invoke failures

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016DvdRZkyCy9NJpHYDdPqmS
This commit is contained in:
Aryan SinghandClaude Opus 4.8 committed 2026-07-02 12:22:29 -05:00
1 parent 3bf4a6f63c
commit 6b1c461a80
4 files changed
+104 -12

No files matched your search

+3
View File
@@ -82,6 +82,9 @@ def main(compressed: bool = False) -> int:
deadline = next_deadline(now, hard_stop, len(PERSONAS) - i, per_agent_cap_s)
logger.info("--- {} until {} ---", persona.id,
datetime.fromtimestamp(deadline).strftime("%H:%M:%S"))
if not server.server_up(): # recover if a prior agent left oMLX unresponsive
logger.warning("oMLX unreachable before {}; recovering...", persona.id)
server.ensure_ready(warm=False)
out = run_agent(persona, deadline_ts=deadline, step_budget=step_budget,
min_steps=min_steps, min_seconds=min_seconds,
checkpointer=cp, model_name=model_name)