Merge pull request #2303 from NousResearch/hermes/hermes-31d7db3b

fix: remove synthetic error message injection, fix session resume after repeated failures
This commit is contained in:
Teknium 2026-03-21 07:03:54 -07:00 committed by GitHub
commit 58b52dfb2f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 37 additions and 15 deletions

View file

@ -6942,20 +6942,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 (