videowatch-Queue: bei Verbindungs- und Konfigurationsfehlern pausieren statt Versuche zu verbrauchen #53
Labels
No labels
herkunft/alpha-feedback
status
blockiert
status
zu-testen
typ
bug
typ
docs
typ
enhancement
typ
feature
typ
idea
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
iris/Iris#53
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
Wenn ein Dienst fehlt, den jedes Video braucht (LM Studio/Splash oder Whisper nicht erreichbar), probiert die Queue jedes Video dreimal und markiert es dann als
failed. Am 2026-10-16 liefen so vier Videos in knapp zwei Minuten durch ($TMPDIR/videowatch-logs/queue-*.log: je 3 Versuche, 5 s Pause, EndeQueue abgeschlossen: 0 erledigt, 4 fehlgeschlagen). Die Queue-Datei wanderte nachcompleted/, die Einträge müssen von Hand per „Erneut versuchen" zurückgesetzt werden.Die Wiederholungen sind in diesem Fall sinnlos: Der Fehler hängt nicht am Video, sondern an der Umgebung, und beim nächsten Video ist er derselbe.
Ursache
_process_iteminskills/videowatch/process_queue.pykennt nur den Exit-Code vonwatch_local.py(MAX_ATTEMPTS = 3,RETRY_DELAY_SECONDS = 5). Es unterscheidet nicht zwischen „dieses Video ist kaputt" und „die Infrastruktur fehlt".Vorschlag
watch_local.pybeendet sich bei Infrastrukturfehlern (LLM-Endpunkt oder Whisper nicht erreichbar) mit einem eigenen Exit-Code, zum Beispiel 75 (EX_TEMPFAIL), statt mit 1. Das ist deterministischer als der Abgleich von Fehlertext.process_queue.pyzählt solche Fehler nicht als Versuch, lässt das Item aufpendingund pausiert die ganze Queue (global.pause), statt zum nächsten Video zu gehen.lastError, Benachrichtigung), und die Queue läuft nach dem Aufheben der Pause oder nach Erreichbarkeit weiter.Offen
process_queue.py, das habe ich nicht geprüft).Zusammenhang: iris/Iris#50 (dort wurde der Fehlergrund in
lastErrorergänzt).PR #65 gemergt: feat(videowatch): Queue pausiert, wenn der LLM-Server fehlt, statt Versuche zu verbrauchen (iris/Iris#53)
watch_local.py prüft den LLM-Server vor dem Download und beendet sich bei Ausfall oder fehlendem
Modell mit Exit-Code 75 (EXIT_SERVICE_UNAVAILABLE). process_queue.py zählt dafür keinen Versuch,
lässt das Item vorn in der Queue, schaltet die globale Pause ein und meldet den Grund per
Benachrichtigung; nach dem Wiedereinschalten läuft dasselbe Video weiter. SKILL.md angepasst,
8 neue Tests.
Co-Authored-By: Claude Sonnet 5.5 noreply@anthropic.com
alf/2ndbrain#65
Commits:
PR #12 gemergt: feat(videowatch): Grund auch bei wartenden Queue-Einträgen anzeigen (iris/Iris#53)
Co-Authored-By: Claude Sonnet 5.5 noreply@anthropic.com
iris/2ndbrain-ios#12
Commits:
PR #56 gemergt: feat(videowatch): Grund auch bei wartenden Queue-Einträgen anzeigen (iris/Iris#53)
Co-Authored-By: Claude Sonnet 5.5 noreply@anthropic.com
#56
Commits:
Stand 2026-10-16: umgesetzt (alf/2ndbrain PR #65, Anzeige in iris/Iris und iris/2ndbrain-ios)
Verhalten jetzt
watch_local.pyprüft den LLM-Server vor dem Download (client.models.list()). Fehlt er, oder ist kein Modell geladen (nur wenn kein--modelübergeben wurde), endet der Lauf mit Exit-Code 75 (EXIT_SERVICE_UNAVAILABLE,download.py). Vorher kam der Fehler erst nach dem Download, und mit gesetztem--model(zum Beispiel Splash) gar nicht vorab. Die Meldung heißt jetztLLM-Server nicht erreichbar (<URL>): ….process_queue.pyzählt für Code 75 keinen Versuch, lässt das Item aufpendingan der Spitze, schaltet die globale Pause ein (global.pause) und schickt die Benachrichtigung „videowatch pausiert: . Nach dem Beheben die Verarbeitung in der Queue wieder einschalten."_wait_if_paused. Der Schalter „Verarbeitung aktiv" löscht die Datei, danach läuft dasselbe Video ohne Neustart weiter.lastError) jetzt auch bei wartenden Einträgen, nicht nur bei fehlgeschlagenen.SKILL.md: die beiden Fehlerabschnitte (Server nicht erreichbar, kein Modell geladen) sind angepasst.Entscheidung zu den offenen Fragen aus dem Issue
Geprüft
watch_local.pymit nicht erreichbarer LLM-Adresse: Exit-Code 75, MeldungLLM-Server nicht erreichbar (http://127.0.0.1:9/v1): Connection error., kein Arbeitsverzeichnis, kein Download.process_queue.pyin einem Temp-Verzeichnis: nach 5 sglobal.pause, Itempendingmit 0 Versuchen und dem Grund inlastError; nach dem Löschen der Pause-Datei läuft derselbe Eintrag erneut an und pausiert wieder.Iris.xcodeprojund der iOS-App sind erfolgreich.Nicht geprüft / Grenzen
global.pauseist global). Das passt, weil der LLM-Server von allen gemeinsam genutzt wird, ist aber nicht pro Queue einstellbar.watch_local.pymeldet den Fehlschlag selbst weiter per Benachrichtigung (nötig, damit der Watchdog den Lauf nicht als Absturz meldet). Je Pause erscheinen deshalb „fehlgeschlagen: " und „pausiert".process_queue.py(er startet es aus dem Skill-Ordner). Ob und wann der Skill dort aktualisiert ist, habe ich nicht geprüft; ein Test gegen den Linux-Server fehlt.Geschlossen auf Wunsch von Alf. Umgesetzt in alf/2ndbrain #65 (Worker, Exit-Code 75, Pause) sowie in iris/Iris und iris/2ndbrain-ios (Grund auch bei wartenden Einträgen). Nicht Teil dieses Issues geblieben: Prüfung des LLM-Servers mitten im Lauf, Test gegen den Linux-Server, Pause pro Queue statt global.