Hermes-Lauf mit Aufruflimit: vorhandene Antwort wird als „Unbekannter Fehler“ verworfen (Parität zu iris/Iris#42) #14

Closed
opened 2026-10-13 17:58:01 +00:00 by alf · 2 comments
Owner

Schwester-Issue zu iris/Iris#42: Hermes meldet einen Turn, der das Aufruflimit erreicht (max_iterations_reached), als run.failed mit output und turn_exit_reason, aber ohne error. Der Linux-Server wertet nur error aus und verwirft die Antwort:

  • app/agent_jobs.py:493 → message = event.get("error", "Unbekannter Fehler"), legt [Fehler] Unbekannter Fehler als Nachricht an und beendet den Job als failed.
  • app/hermes_client.py:151 → raise RuntimeError(event.get("error", "Unbekannter Fehler")).

Verhalten angleichen: Ohne error, aber mit nicht leerem output, die Antwort als Assistenten-Nachricht speichern (mit Hinweis auf das Limit aus turn_exit_reason), Job nicht als Fehler führen. Test: run.failed mit output, ohne error. Muss dasselbe Verhalten wie der Mac-Server zeigen (Wire-Parität).

Schwester-Issue zu iris/Iris#42: Hermes meldet einen Turn, der das Aufruflimit erreicht (`max_iterations_reached`), als `run.failed` **mit** `output` und `turn_exit_reason`, aber ohne `error`. Der Linux-Server wertet nur `error` aus und verwirft die Antwort: - `app/agent_jobs.py:493` → `message = event.get("error", "Unbekannter Fehler")`, legt `[Fehler] Unbekannter Fehler` als Nachricht an und beendet den Job als `failed`. - `app/hermes_client.py:151` → `raise RuntimeError(event.get("error", "Unbekannter Fehler"))`. Verhalten angleichen: Ohne `error`, aber mit nicht leerem `output`, die Antwort als Assistenten-Nachricht speichern (mit Hinweis auf das Limit aus `turn_exit_reason`), Job nicht als Fehler führen. Test: `run.failed` mit `output`, ohne `error`. Muss dasselbe Verhalten wie der Mac-Server zeigen (Wire-Parität).
Author
Owner

PR #16 gemergt: fix(hermes): run.failed mit vorhandener Antwort (Aufruflimit) wird als Antwort gespeichert statt als Unbekannter Fehler (#14)
#16

Commits:

  • fix(hermes): run.failed mit vorhandener Antwort (Aufruflimit) wird als Antwort gespeichert statt als Unbekannter Fehler (#14)
PR #16 gemergt: fix(hermes): run.failed mit vorhandener Antwort (Aufruflimit) wird als Antwort gespeichert statt als Unbekannter Fehler (#14) https://forgejo.lewerken.duckdns.org/iris/iris-linux-server/pulls/16 Commits: - fix(hermes): run.failed mit vorhandener Antwort (Aufruflimit) wird als Antwort gespeichert statt als Unbekannter Fehler (#14)
Author
Owner

Stand nach PR #16 (Linux-Server):

Geändert: neues Modul app/run_failure.py (nur Standardbibliothek) wertet run.failed aus. agent_jobs._stream_turn: ohne error, aber mit nicht leerem output, wird das Event wie ein abgeschlossener Turn behandelt (Antwort + Hinweiszeile „Aufruflimit erreicht (90/90) — … unvollständig", Job completed, mit dem bestehenden Denkprozess-Zweig). Echte Fehler (error gesetzt) und leere Events bleiben [Fehler] …/„Unbekannter Fehler". hermes_client.complete_once (interne Einmal-Aufrufe) wirft bei einem vorzeitigen Ende weiter, aber mit Klartext statt „Unbekannter Fehler".

Geprüft: iris-server/tests/test_run_failure.py, 9 Tests ohne laufenden Server (reine Funktion + _stream_turn mit ersetztem Hermes-Client), darunter das echte Event vom 2026-10-13; Mutationsprobe (Zweig in _stream_turn deaktiviert) lässt den Test scheitern. Dasselbe Verhalten wie Iris/HermesRunFailure.swift (iris/Iris#42).

Nicht geprüft / offen: Deploy auf alf@iris-server und ein Live-Lauf bis zum Aufruflimit. Das Dockerfile kopiert app/ komplett, das neue Modul braucht keinen Eintrag.

Stand nach PR #16 (Linux-Server): **Geändert:** neues Modul `app/run_failure.py` (nur Standardbibliothek) wertet `run.failed` aus. `agent_jobs._stream_turn`: ohne `error`, aber mit nicht leerem `output`, wird das Event wie ein abgeschlossener Turn behandelt (Antwort + Hinweiszeile „Aufruflimit erreicht (90/90) — … unvollständig", Job `completed`, mit dem bestehenden Denkprozess-Zweig). Echte Fehler (`error` gesetzt) und leere Events bleiben `[Fehler] …`/„Unbekannter Fehler". `hermes_client.complete_once` (interne Einmal-Aufrufe) wirft bei einem vorzeitigen Ende weiter, aber mit Klartext statt „Unbekannter Fehler". **Geprüft:** `iris-server/tests/test_run_failure.py`, 9 Tests ohne laufenden Server (reine Funktion + `_stream_turn` mit ersetztem Hermes-Client), darunter das echte Event vom 2026-10-13; Mutationsprobe (Zweig in `_stream_turn` deaktiviert) lässt den Test scheitern. Dasselbe Verhalten wie `Iris/HermesRunFailure.swift` (iris/Iris#42). **Nicht geprüft / offen:** Deploy auf `alf@iris-server` und ein Live-Lauf bis zum Aufruflimit. Das `Dockerfile` kopiert `app/` komplett, das neue Modul braucht keinen Eintrag.
alf closed this issue 2026-10-16 14:34:15 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
iris/iris-linux-server#14
No description provided.