feat: adaptiver Modell-Router (Circuit-Breaker) + parallele KI-Analyse
Der reale Erst-Scan dauerte ~10 min, weil pro Kandidat sequenziell erst die rate-limited Free-Modelle (429) probiert wurden. Zwei Hebel beheben das: 1. ModelRouter: programmatische Telemetrie statt LLM-Orchestrator. Pro Modell Erfolg/Latenz; ausgefallene/rate-limited Modelle bekommen per Circuit-Breaker einen Cooldown und werden übersprungen, das schnellste gesunde Modell zuerst. Failsafe-Pruning toter Slugs über OpenRouter /models (24h-Cache). State persistent in data/ai_router_state.json. 2. Parallelisierung: ThreadPoolExecutor mit konfigurierbarer max_concurrency (Default 8, I/O-gebunden → an API-Rate-Limits gebunden, nicht an CPU-Kerne). Klassifikationen laufen nebenläufig, Merge im Hauptthread (keine Locks), findings deterministisch sortiert. Fingerprint-Gruppierung: identischer Inhalt wird nur einmal klassifiziert, Funde aber für alle URLs emittiert. Realtest bredelar.info: Frisch-Scan von ~10 min auf 1:01 min; Breaker öffnete 14× (Free-Modelle übersprungen), alle Verdikte von gemini-2.5-flash-lite. Config: max_concurrency, breaker_failure_threshold, breaker_cooldown_seconds, refresh_models. Tests: 251 grün (+12: Router-Reihung/Breaker/Pruning-failsafe, parallel==sequenziell, Dedup, deterministische Reihenfolge). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
31730403b3
commit
125d80e7f9
7 changed files with 415 additions and 65 deletions
|
|
@ -984,6 +984,34 @@ Hinweis: Kostenlose Modelle liefern nicht immer ein gültiges Ergebnis (sie unte
|
|||
strikte JSON-Format nicht durchgehend). In dem Fall greift automatisch die nächste Stufe — das
|
||||
zuverlässige Bezahlmodell auf Stufe 3 fängt solche Fälle ab.
|
||||
|
||||
### Adaptiver Modell-Router und Parallelität
|
||||
|
||||
Statt die Kette stur von vorn abzuarbeiten, **lernt** der Scanner während des Laufs, welche
|
||||
Modelle gerade funktionieren:
|
||||
|
||||
- **Circuit-Breaker:** Antwortet ein Modell wiederholt mit Fehler/Rate-Limit (`429`) oder zu
|
||||
langsam, wird es für `breaker_cooldown_seconds` übersprungen — keine verschwendeten Versuche
|
||||
mehr an gerade tote Free-Modelle. Das schnellste gesunde Modell kommt zuerst dran.
|
||||
- **Live-Abgleich (`refresh_models`):** Einmal täglich gleicht der Router die Modell-Liste mit
|
||||
OpenRouter ab; nicht mehr existierende Slugs fallen automatisch raus (failsafe — bei Netzfehler
|
||||
bleibt alles wie gehabt).
|
||||
- **Parallelität (`max_concurrency`):** Mehrere Inhalte werden gleichzeitig geprüft. Die KI-Calls
|
||||
warten fast nur auf die API-Antwort (Netzwerk), nicht auf die CPU — deshalb ist die Stellgröße
|
||||
an die **Rate-Limits der API** gebunden, nicht an die CPU-Kerne. Default 8 passt auf einen
|
||||
4-Kern-vhost genauso wie auf einen 24-Kern-Rechner.
|
||||
|
||||
```yaml
|
||||
ai_analysis:
|
||||
max_concurrency: 8 # gleichzeitige API-Anfragen
|
||||
breaker_failure_threshold: 2 # Fehler, bis ein Modell pausiert wird
|
||||
breaker_cooldown_seconds: 120 # Pausendauer eines ausgefallenen Modells
|
||||
refresh_models: true # tote Modell-Slugs automatisch aussortieren
|
||||
```
|
||||
|
||||
Wirkung: Der Erst-Scan einer Site (der den ganzen Bestand prüft) wird deutlich schneller, weil
|
||||
rate-limited Free-Modelle sofort übersprungen werden und die verbleibenden Anfragen nebenläufig
|
||||
laufen.
|
||||
|
||||
Audio- und Video-Prüfung sind als abschaltbare Erweiterungspunkte vorbereitet
|
||||
(`ai_analysis.audio` / `ai_analysis.video`, default deaktiviert) und können aktiviert werden,
|
||||
sobald eine Website solche Mediendateien direkt einbindet.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue