Beschreibung
Wenn Googles Gemini API eine Anfrage mit promptFeedback.blockReason ablehnt, behandelt Discourse AI die Antwort als erfolgreiche, aber leere Rückmeldung. Bei der KI-Übersetzung hat dies zwei Auswirkungen: Das Thema oder der Beitrag erhält nie eine erkannte Sprache und wird daher nie übersetzt, und der Backfill sendet die gleiche blockierte Anfrage bei späteren Läufen erneut. Es gibt keine Anzeige für einen Administrator, dass ein Block stattgefunden hat.
Beobachtet auf einem selbst gehosteten Site, die release/2026.7 (2026.7.3, Commit f1caa6321287f918644fba9ff8943579fdcf027a) mit dem mitgelieferten discourse-ai-Plugin ausführt. Die Anfrage war die Spracherkennung eines Thementitels unter Verwendung des eingebauten Locale-Detector-Agenten auf gemini-3.5-flash-lite. Der Titel war ein kurzer, harmloser Satz auf Schwedisch. Der gleiche Titel wurde von gemini-3.8-flash ohne Block übersetzt.
Google antwortete mit HTTP 200 und einem einzelnen Stream-Event ohne Kandidaten:
data: {"promptFeedback": {"blockReason": "PROHIBITED_CONTENT"},"usageMetadata": {"promptTokenCount": 417,"totalTokenCount": 417,"promptTokensDetails": [{"modality": "TEXT","tokenCount": 417}],"serviceTier": "standard"},"modelVersion": "gemini-3.5-flash-lite","responseId": "..."}
Die Anfrage enthält bereits BLOCK_NONE für die vier Sicherheitskategorien, die Discourse AI festlegt, daher wird dieser Block nicht von diesen Einstellungen beeinflusst. Das Audit-Protokoll erfasst response_status 200.
Ursache
DiscourseAi::Completions::Endpoints::Gemini#decode_chunkliest nurcandidatesaus jedem Stream-Event.promptFeedbackwird nie geprüft, sodass eine blockierte Anfrage ein leeres Ergebnis ohne Fehler erzeugt.DiscourseAi::Translation::LanguageDetector#detectgibtnilzurück, wenn die Antwort nicht mit dem Sprach-Tag-Muster übereinstimmt, was bei einer leeren Antwort der Fall ist. Das Thema oder der Beitrag behältlocaleNULL bei.Jobs::TopicsLocaleDetectionBackfillwählt bei jedem Lauf Themen mitlocaleNULL aus und hat keine Versuchsgrenze, sodass die blockierte Anfrage laut Code alle fünf Minuten wiederholt wird, solange das Thema im Backfill-Fenster ist. Beiträge sind auf zwei Erkennungsversuche pro Tag durch das Relocalize-Kontingent begrenzt und werden täglich erneut versucht.- Übersetzungskandidaten erfordern eine erkannte Locale, daher wird der Eintrag nie übersetzt.
Der gleiche Code ist auf main Stand 2026-10-03 vorhanden.
Vorschlag zur Behebung
promptFeedback.blockReasonim Gemini-Endpunkt erkennen und einen eindeutigen, sichtbaren Fehler auslösen oder protokollieren, der den Grund nennt.- Das Scheitern dem Thema oder Beitrag zuordnen, damit der Backfill aufhört, eine Anfrage zu wiederholen, die erneut blockiert wird, oder eine Versuchsgrenze für die Themen-Erkennung anwenden, wie sie bereits für Beiträge existiert.
- Blockierte Einträge auf der Übersetzungs-Admin-Seite anzeigen, damit ein Administrator die Sprache manuell festlegen kann.
Reproduzieren
Der Block hängt von Googles Filter ab und kann nicht mit einer bekannten Eingabe erzwungen werden. Betroffene Aufrufe können im Audit-Protokoll gefunden werden:
SELECT id, created_at, language_model, post_id, topic_id, response_status
FROM ai_api_audit_logs
WHERE feature_name = 'translation'
AND raw_response_payload LIKE '%blockReason%'
ORDER BY created_at
Workaround
Das manuelle Festlegen der Sprache des Themas lässt die Übersetzung fortsetzen. Auf dieser Site hat das Übersetzungsmodell denselben Text nicht blockiert.