Codex-Komprimierung schlägt fehl mit "Antwortschutz ist nicht verfügbar": Es ist die Websuche, nicht Ihr Kontext

AIHubMix8 Min. Lesezeit
Codex-Komprimierung schlägt fehl mit "Antwortschutz ist nicht verfügbar": Es ist die Websuche, nicht Ihr Kontext

Seit dem 8. Oktober 2026 sterben lange Codex-Sitzungen in dem Moment, in dem sie versuchen, zu komprimieren. Die Fehlermeldung lautet stream disconnected before completion: response protection is unavailable, Wiederholungen helfen nicht, und das Gespräch kann nicht fortgesetzt werden. Die meisten Berichte betreffen gpt-6.1-sol, aber gpt-6-astra und gpt-5.6-sol schlagen auf die gleiche Weise fehl. Es tritt hinter selbstgehosteten Proxys auf und zeigt sich auch in der offiziellen Codex-App mit einem direkten ChatGPT-Login.

Die kurze Antwort: Der Kontext ist nicht zu groß, und Ihr Netzwerk ist nicht das Problem. Der Codex-Backend von ChatGPT lehnt jetzt jede Anfrage ab, die eine frühere Websuche in seiner Historie wiederholt, ohne auch das Websuche-Tool zu deklarieren. Die Komprimierungsanfrage von Codex deklariert überhaupt keine Tools. Eine einzige Websuche zu Beginn einer Sitzung reicht aus, um jede spätere Komprimierung fehlschlagen zu lassen.

Was Sie jetzt tun sollten:

  • Neue Sitzungen: Setzen Sie web_search = "disabled", bis sich das Backend oder Codex ändert.
  • Festgefahrene Sitzungen: Verschieben Sie die Arbeit in eine neue Sitzung. Die alte wird nicht komprimiert.
  • Wenn Sie Ihr eigenes Gateway vor Codex betreiben: Fügen Sie eine Websuche-Deklaration hinzu, wenn die Historie eine Suche enthält. Der Code ist unten.

Der Rest dieses Beitrags erklärt, wie der Auslöser gefunden wurde, welche Community-Lösungen nicht funktionieren und wie man eine festgefahrene Sitzung retten kann.

Wie der Fehler aussieht

Sie werden eine dieser Meldungen in Codex sehen:

stream disconnected before completion: response protection is unavailable
Error running remote compact task: stream disconnected before completion: stream closed before response.completed

Die zweite Nachricht ist die generische Version. Codex zeigt nicht immer den Fehler von upstream an, sodass eine Komprimierung, die mit "stream closed before response.completed" fehlschlägt, dasselbe Problem sein kann. Das lokale Protokoll von Codex hat oft Failed to run pre-sampling compact daneben.

Darunter sendet der Upstream eine von zwei Dingen. Manchmal ist es ein HTTP 502 mit diesem Body, den ein ChatGPT Plus-Nutzer auf gpt-6.1-sol auch im Entwicklerforum von OpenAI gepostet hat:

{"message": "response protection is unavailable", "type": "internal_error"}

Manchmal ist es ein HTTP 200, dessen Stream in einem response.failed Ereignis mit code: "upstream_error" endet und kein response.completed hat. Alles, was nur den HTTP-Status überprüft, verpasst die zweite Form und meldet es als einen Stream, der frühzeitig endete.

Das Muster ist überall dasselbe:

  • Normale Wendungen funktionieren weiterhin. Nur die Komprimierung schlägt fehl.
  • Codex versucht es etwa fünfmal, dann gibt er auf. In den Protokollen eines Gateways dauerte jeder fehlgeschlagene Versuch 2 bis 13 Sekunden und verzeichnete null Tokens.
  • Das Fortsetzen der Sitzung stößt auf die gleiche Komprimierung, sodass die Sitzung feststeckt bleibt.
  • Eine frische Sitzung funktioniert, bis sie auf die gleichen Bedingungen stößt.

Der Auslöser: eine Suche in der Historie, kein Suchwerkzeug in der Anfrage

Codex hat ein integriertes Websuche-Tool. Wenn das Modell es verwendet, wird ein web_search_call Element in die Gesprächshistorie eingefügt. Jede spätere Anfrage sendet diese Historie zurück.

Normale Wendungen deklarieren das Tool in tools, sodass der Upstream die wiederholte Suche akzeptiert. Eine Komprimierungsanfrage ist anders. Codex sendet die gesamte Historie mit tools: [], da eine Zusammenfassung keine Tools benötigt. Das gilt für lokale Komprimierungen, die Codex für benutzerdefinierte Anbieter durchführt, und für remote compaction v2.

Um den 6. Oktober herum begann der ChatGPT Codex-Backend, Anfragen abzulehnen, die einen web_search_call wiederholen, aber web_search nicht deklarieren. Entwickler, die die Rohanfragen erfasst haben, haben es eingegrenzt. Das Ändern oder Entfernen der ID des Suchelements macht keinen Unterschied. Nur das Deklarieren eines Funktionswerkzeugs schlägt weiterhin fehl. Das Deklarieren von web_search lässt die gleiche Anfrage erfolgreich sein.

Das gleiche Ergebnis zeigt sich mit dem offiziellen, unveränderten codex-cli, das mit einem ChatGPT-Konto angemeldet ist. Eine Historie mit drei Suchelementen konnte nicht komprimiert werden. Die gleiche Historie, aus der nur diese Elemente entfernt wurden, komprimierte einwandfrei. Ein zweiter Berichterstatter in diesem Thread erfasste eine Komprimierungsanfrage mit einem web_search_call und tools: []. Das Hinzufügen einer web_search Deklaration behob das Problem, ebenso wie das Entfernen des Suchelements.

Das erklärt, warum es wie ein Problem mit der Kontextgröße aussieht. Komprimierungen laufen nur bei langen Sitzungen, und lange Sitzungen sind die, die wahrscheinlich irgendwann eine Suche verwendet haben. Die Websuche ist auch standardmäßig in Codex aktiviert (der Standardmodus ist "cached"), sodass eine Sitzung eine Suche enthalten kann, nach der der Benutzer nie gefragt hat.

Die Beweise

Mindestens vier Gruppen führten unabhängig A/B-Tests durch und erhielten das gleiche Ergebnis. Die untenstehenden Zeilen kombinieren Tests, die im openai/codex-Tracker und in den Issue-Trackern mehrerer Open-Source-Gateway-Projekte gepostet wurden. OpenAI hat die Regel nicht bestätigt oder auf keinen dieser Threads geantwortet.

Anfragehistorie Deklarierte Tools Ergebnis
Nur Nachrichten und Argumentation Keine Vollständig
Enthält die Ausgabe eines Funktionsaufrufs Keine Vollständig
Enthält einen web_search_call Keine Fehlgeschlagen
Enthält einen web_search_call Nur Funktionswerkzeug Fehlgeschlagen
Enthält einen web_search_call web_search Vollständig
Dasselbe, Suchelemente entfernt Keine Vollständig

Die Tests schließen die Größe aus. Ein Tester stellte die automatische Komprimierungsschwelle auf 2.000 Tokens mit -c model_auto_compact_token_limit=2000 ein. Eine Sitzung ohne Tool-Nutzung komprimierte einwandfrei. Eine Sitzung, die einmal gesucht hatte, schlug sechs Mal hintereinander fehl. Ein anderer Tester stellte fest, dass das Entfernen von Argumentationspunkten nicht half, während das Entfernen des einzelnen Suchelements half.

In einem Test wurde die Version mit web_search deklariert, die in 2,63 Sekunden abgeschlossen wurde und null neue Suchanfragen stellte. Das Deklarieren des Tools führt nicht dazu, dass das Modell erneut sucht.

Was die Community versucht hat und was tatsächlich funktioniert

Der LINUX DO-Thread, der diesen Beitrag angestoßen hat, durchlief die meisten der üblichen Vermutungen:

Vorschlag Hilft? Warum
Kontext verkleinern, früher komprimieren Nein Die Größe ist nicht der Auslöser
Über IP verbinden, nginx ändern Nein Der Fehler kommt von upstream
Wechsel zu WebSocket Unzuverlässig Der gleiche Anfrage-Body in beiden Fällen
Direkt bei ChatGPT anmelden Nein Offizieller Login schlägt ebenfalls fehl
Neue Sitzung, Kontext übergeben Überbrückungslösung Bricht nach einer Suche erneut zusammen
Websuche deaktivieren Ja, für neue Sitzungen Keine Suche, kein Auslöser
Web_search in der Anfrage deklarieren Ja Erfüllt die Überprüfung

Einige dieser Punkte benötigen mehr Erklärung.

Nginx und IP. Timeouts und inaktive Verbindungen können andere "stream disconnected"-Fehler verursachen, aber sie können diese Meldung nicht erzeugen. Die Betreiber der beteiligten Proxys bestätigten, dass die Meldung nicht vom Proxy generiert wird; sie kommt vom Upstream-Anbieter. Wenn die Meldung vorhanden ist, hat das Netzwerk die Anfrage durch und zurückgeleitet.

WebSocket. Die Gateway-Patches, die funktionierten, mussten den WebSocket-Pfad sowie HTTP abdecken, da WebSocket-Anfragen denselben Body tragen. Eine Sitzung, die nach dem Wechsel des Transports "wiederhergestellt" wurde, hatte höchstwahrscheinlich keine Suche in ihrer Historie.

Offizieller Login. Berichte im openai/codex-Tracker umfassen die Desktop-App und codex-cli, die direkt mit einem ChatGPT-Konto angemeldet sind, ohne dass ein Proxy beteiligt ist. Stand 10. Oktober 2026 erwähnt weder Codex 0.162.1 noch die 0.163.0-Alphas einen Fix, und die Probleme haben keine Antwort von den Betreuern erhalten.

Was Sie jetzt tun können

Websuche für neue Sitzungen deaktivieren

Deaktivieren Sie die Suche in ~/.codex/config.toml:

web_search = "disabled"

Die Codex-Konfigurationsreferenz listet vier Werte auf: disabled, cached (der Standard), indexed und live. Sitzungen, die mit --yolo oder einem anderen Sandbox-Standard mit vollem Zugriff gestartet werden, sind standardmäßig auf live eingestellt, also setzen Sie es ausdrücklich.

Wenden Sie dies auf neue Sitzungen an. Eine alte Sitzung hat bereits web_search_call Elemente in ihrer Historie. Mit deaktivierter Suche hören normale Wendungen auch auf, das Tool zu deklarieren, sodass diese Wendungen ebenfalls fehlschlagen können. Das folgt aus der oben genannten Regel, aber bisher hat das noch niemand getestet.

Der Nachteil ist, dass Codex nicht im Internet suchen kann. Für eine Sitzung, die eine Suche benötigt, öffnen Sie eine separate kurze Sitzung oder lassen Sie das Modell die Ergebnisse in eine Datei schreiben, die die lange Sitzung liest.

Rettung einer festgefahrenen Sitzung

Nichts auf Ihrer Seite wird eine festgefahrene Sitzung komprimieren, solange das Backend sich so verhält. Um die Arbeit zu behalten:

  1. Die festgefahrene Sitzung so belassen, wie sie ist. Ihre Historie ist weiterhin auf der Festplatte unter ~/.codex/sessions/.
  2. Starten Sie eine neue Sitzung mit deaktivierter Websuche.
  3. Weisen Sie sie auf die alte Sitzungsdatei hin oder fügen Sie eine kurze Übergabe hinzu: das Ziel, die geänderten Dateien, getroffene Entscheidungen und was noch übrig ist.
  4. Hören Sie auf, Eingabeaufforderungen an die alte Sitzung zu senden. Jeder Versuch wiederholt die Komprimierung und schlägt erneut fehl.

Wenn Sie Ihr eigenes Gateway betreiben

Die funktionierende Lösung folgt einer Regel. Wenn input einen web_search_call enthält und kein web_search* Tool deklariert ist, fügen Sie eines hinzu. Wenn der Anrufer keine Tools deklariert hat, setzen Sie tool_choice auf "none", damit das Tool nicht ausgeführt werden kann. Lassen Sie input unverändert.

def declare_replayed_web_search(body: dict) -> dict:
    """Lassen Sie den Upstream eine wiederholte web_search_call in einer anforderung ohne Werkzeuge akzeptieren."""
    items = body.get("input")
    if not isinstance(items, list):
        return body
    if not any(isinstance(i, dict) and i.get("type") == "web_search_call" for i in items):
        return body

    tools = body.get("tools") or []
    if any(isinstance(t, dict) and str(t.get("type", "")).startswith("web_search") for t in tools):
        return body

    caller_had_tools = bool(tools)
    # Nur im Cache: Die Deklaration existiert, um die Überprüfung zu erfüllen, nicht um zu suchen.
    body["tools"] = tools + [{"type": "web_search", "external_web_access": False}]
    if not caller_had_tools:
        body["tool_choice"] = "none"
    return body

Responses Lite-Anfragen sind eine Ausnahme. Sie geben einen 400 zurück, wenn web_search in den obersten tools steht. Die funktionierenden Patches setzen es stattdessen in das erste additional_tools Eingabeelement und halten alle nachfolgenden compaction_trigger zuletzt. Die Alternative, Suchelemente aus Komprimierungsanfragen zu entfernen, funktioniert ebenfalls, aber die Zusammenfassung verliert dann, was die Suche gefunden hat.

Wenn Sie nicht vom Abonnement-Backend abhängig sein möchten

Jeder Bericht, den wir gefunden haben, geht über ChatGPTs Abonnement-Backend, den Endpunkt, den Codex mit einem ChatGPT-Login verwendet. Seine Regeln sind nicht dokumentiert, und diese hat sich ohne Vorankündigung geändert.

Codex kann auch die öffentliche Responses-API mit einem API-Schlüssel verwenden. Wir haben bisher keinen Bericht über diesen Fehler auf diesem Weg gesehen, aber wir haben die Reproduktion dort auch nicht selbst durchgeführt, also betrachten Sie das als Beobachtung, nicht als Garantie. Um Codex mit einem AIHubMix-Schlüssel einzurichten, folgen Sie dem Codex CLI-Tutorial:

model = "gpt-6.1-sol"
model_provider = "aihubmix"

[model_providers.aihubmix]
name = "AIHubMix"
base_url = "https://aihubmix.com/v1"
wire_api = "responses"
env_key = "AIHUBMIX_API_KEY"

API-Preise gelten pro Token, nicht pro Abonnement. Die Tarife sind auf der gpt-6.1-sol Modellseite aufgeführt.

Checkliste

  • Der Fehlertext enthält "response protection is unavailable" oder die Komprimierung schlägt mit "stream closed before response.completed" fehl.
  • Normale Wendungen funktionieren weiterhin und nur die Komprimierung schlägt fehl.
  • Die Sitzung hat irgendwann eine Websuche verwendet, möglicherweise ohne gefragt zu werden.
  • Neue Sitzungen haben web_search auf deaktiviert gesetzt.
  • Festgefahrene Arbeiten wurden in eine neue Sitzung mit einer Übergabenotiz verschoben.
  • Ein Gateway, das Sie betreiben, fügt eine Websuche-Deklaration hinzu, wenn die Historie eine Suche enthält.
  • Nginx- und Proxy-Netzwerkeinstellungen wurden in Ruhe gelassen. Sie sind nicht die Ursache.

FAQ

Was bedeutet "response protection is unavailable" in Codex?
Es ist ein Fehler vom Codex-Backend von ChatGPT, nicht von Codex selbst oder Ihrem Proxy. Seit Anfang Oktober 2026 tritt er auf, wenn eine Anfrage eine frühere Websuche wiederholt, aber das Websuche-Tool nicht deklariert, was genau das ist, was eine Komprimierungsanfrage tut.

Ist mein Kontextfenster zu groß?
Nein. Tester haben es mit einer Komprimierungsschwelle von 2.000 Tokens reproduziert, und Sitzungen derselben Größe ohne eine Suche komprimieren normalerweise. Es sieht nur nach einer Größenfrage aus, weil die Komprimierung nur in langen Sitzungen durchgeführt wird.

Beeinflusst es die offizielle Codex-App mit einem ChatGPT-Login?
Ja. Benutzer der Desktop-App und codex-cli berichten darüber bei direkten ChatGPT-Logins ohne Proxy. Stand 10. Oktober 2026 erwähnt keine Codex-Version einen Fix.

Wie kann ich feststellen, ob eine Sitzung betroffen sein wird?
Wenn die Sitzung irgendwann eine Websuche verwendet hat, wird ihre nächste Komprimierung höchstwahrscheinlich fehlschlagen. Codex protokolliert jede Suche als ein web_search_call-Element in den Sitzungsdateien im .codex/sessions-Ordner.

Wird das Deaktivieren der Websuche eine Sitzung, die bereits festgefahren ist, beheben?
Wahrscheinlich nicht. Die alte Historie enthält weiterhin die Suche, und sobald die Suche deaktiviert ist, können normale Wendungen aufhören, das Tool zu deklarieren und ebenfalls fehlschlagen. Verwenden Sie die Einstellung für neue Sitzungen und verschieben Sie die Arbeit.

Hilft der Wechsel zu WebSocket oder das Ändern von nginx?
Nein. Der Anfrage-Body ist über beide Transportwege derselbe, und der Fehler kommt von upstream, sodass Netzwerkeinstellungen ihn nicht entfernen können. Andere Stream-Fehler können von Timeouts kommen, aber nicht dieser.

Passiert es, wenn Codex einen API-Schlüssel anstelle eines ChatGPT-Abonnements verwendet?
Alle bisherigen Berichte betreffen das Abonnement-Backend. Niemand hat es bei der öffentlichen Responses-API gemeldet, obwohl das nicht direkt getestet wurde.

Weiterlesen: die GPT-6.1 Sol-Serie

Quellen