diff --git a/run_agent.py b/run_agent.py index 6771b709..e45dc061 100644 --- a/run_agent.py +++ b/run_agent.py @@ -6807,20 +6807,18 @@ class AIAgent: pending_handled = True break - if not pending_handled: - # Error happened before tool processing (e.g. response parsing). - # Choose role to avoid consecutive same-role messages. - last_role = messages[-1].get("role") if messages else None - err_role = "assistant" if last_role == "user" else "user" - sys_err_msg = { - "role": err_role, - "content": f"[System error during processing: {error_msg}]", - } - messages.append(sys_err_msg) - + # Non-tool errors don't need a synthetic message injected. + # The error is already printed to the user (line above), and + # the retry loop continues. Injecting a fake user/assistant + # message pollutes history, burns tokens, and risks violating + # role-alternation invariants. + # If we're near the limit, break to avoid infinite loops if api_call_count >= self.max_iterations - 1: final_response = f"I apologize, but I encountered repeated errors: {error_msg}" + # Append as assistant so the history stays valid for + # session resume (avoids consecutive user messages). + messages.append({"role": "assistant", "content": final_response}) break if final_response is None and (