· reAPI Team
stream disconnected before completion: stream closed before response.completed
Codex hat das Ende eines Streams erreicht, ohne den Abschluss zu akzeptieren. Prüfen Sie vor einem neuen Versuch Fehlertext, Endereignis, Timeout und Protokoll.

„stream disconnected before completion: stream closed before response.completed“ bedeutet, dass Codex das Ende eines Antwortstreams erreicht hat, ohne ein Abschlussereignis zu akzeptieren. Die Meldung zeigt, an welcher Stelle die Verarbeitung endete, nicht welcher Rechner den Fehler verursachte. Im am 22. Oktober 2026 untersuchten SSE-Reader von Codex ist sie der Rückfall für das Streamende. Transportfehler, Leerlauf-Timeouts und zuvor empfangene Serverfehler haben eigene Verarbeitungspfade.[1]
Lies den vollständigen Zusatz, bevor du Einstellungen änderst. Ein geschlossener Stream braucht eine Ereignisspur, ein Leerlauf-Timeout Zeitmessungen und ein Ratenlimit Angaben zur begrenzten Ressource. Wenn du reAPI evaluierst, lies zuerst die GPT-6-Astra-Anfragedokumentation: Sie beschreibt Chat Completions. Eine funktionierende Chat-Completions-Anfrage belegt keine Kompatibilität mit dem Responses-Protokoll von Codex.[2][3]
Hier beginnen
- Sichere vor einem erneuten Versuch die vollständige Fehlermeldung, Clientversion, Zeitstempel und Request-ID. Zugangsdaten und private Prompts gehören nicht in geteilte Berichte.
- Prüfe bei einem vorzeitigen Ende, ob die empfangenen SSE-Daten ein gültiges, akzeptiertes Abschlussereignis enthalten. HTTP-Erfolg oder sichtbarer Text allein reichen nicht.[1]
- Miss bei
idle timeout waiting for SSEden Abstand zwischen den Ereignissen. Die dokumentierte Leerlaufsteuerung ist von den Wiederholungszählern für Requests und Streams getrennt.[2] - Beachte bei einem vorübergehenden Ratenlimit den Wiederholungshinweis des Dienstes und reduziere die betreffende Last. Kontingent- oder Abrechnungsfehler erfordern stattdessen eine Maßnahme am Konto.[4]
stream disconnected before completion: stream closed before response.completed
Der Quellcode erlaubt eine engere Aussage als „dein Internet ist kaputt“. Die SSE-Schleife liest Ereignisse, deserialisiert deren JSON und übergibt erkannte Ereignisse an den Responses-Handler. Gibt dieser eine abgeschlossene Antwort zurück, endet die Schleife erfolgreich. Endet die Eingabe vorher, liefert sie einen gespeicherten Antwortfehler zurück, sofern vorhanden; andernfalls erscheint die Meldung über den geschlossenen Stream.[1]
Bei der Auswertung einer Ereignisspur helfen folgende Unterschiede:
| Beobachtung | Was sie belegt | Nächster Diagnoseschritt |
|---|---|---|
| Text kam an, dann endete der Stream | Ein Teil der Ausgabe erreichte den Client | Abschlussereignis und dessen JSON-Inhalt suchen |
| HTTP-Erfolg ohne akzeptierten Abschluss | Der HTTP-Request war auf dieser Ebene erfolgreich | Ereignisfolge prüfen, statt die Aufgabe als abgeschlossen anzusehen |
| Ein Payload sieht wie ein Abschluss aus | Bytes mit Abschlusscharakter kamen an | Ereignistyp, erforderliche Antwortfelder und Parser der installierten Clientversion prüfen |
| Vor EOF wurde ein Serverfehler gespeichert | Der Dienst lieferte einen Fehler | Diesen Fehler untersuchen, bevor das Streamende als eigener Netzwerkfehler gilt |
Das sind Auslegungen des untersuchten Parsers, keine Ergebnisse eines Live-Aufrufs an reAPI. Der Artikel verwendet die unveränderliche Quellrevision c2d5ea52. So kannst du das Verhalten mit deinem installierten Client vergleichen, statt identisches Verhalten aller Codex-Versionen anzunehmen.[1]
Fehlerhafte Daten benötigen eine eigene Prüfung. In dieser Revision wird ein Ereignis protokolliert und übersprungen, wenn seine anfängliche JSON-Deserialisierung scheitert. Ein erkanntes Abschlussereignis mit ungültigem Antwortobjekt nimmt dagegen einen anderen Fehlerpfad. Die Zeichenfolge response.completed in einem Log belegt deshalb nicht, dass Codex sie akzeptiert hat. Umgekehrt beweist ein geschlossener Stream allein nicht, dass der Server das Ereignis ausgelassen hat: Vergleiche gesendete und tatsächlich beim Client empfangene Daten.[1]
Prüfe bei einem eigenen Endpunkt das dokumentierte Protokoll, bevor du die Wiederholungszahl erhöhst. Die aktuelle Konfigurationsreferenz führt responses als unterstützten Wert für wire_api auf und beschreibt WebSocket-Unterstützung als separate Anbieterfähigkeit. Dass ein Endpunkt OpenAI-förmiges Chat-Completions-JSON annimmt, macht ihn allein noch nicht zu einem funktionierenden Responses-Endpunkt.[2]
Unsere vorgeschlagene Reproduktion ist bewusst klein: zuerst eine reine Textanfrage, dann dieselbe Anfrage mit Streaming, danach die ursprünglich fehlgeschlagene Tool-Interaktion. Halte Endpunkt, Schlüssel und Modell dabei konstant. Notiere, was sich bei jedem Schritt ändert. Das ist eine Diagnosemethode, keine Zusage, dass jeder Anbieter alle drei Tests unterstützt. Führen Tests zu Verbrauchskosten, führe nur die für dieses Konto genehmigten Tests aus.
stream disconnected before completion: transport error: network error: error decoding response body
Diese Suchanfrage beschreibt einen Transportfehler beziehungsweise einen Fehler beim Lesen des Antwortkörpers. Der SSE-Reader von Codex kann einen Fehler des eingehenden Ereignisstreams melden, bevor er das nächste verwendbare Ereignis erhält. Das unterscheidet sich vom normalen Streamende oben.[1]
Behandle die einzelnen Bestandteile als Untersuchungspunkte, nicht als Liste bewiesener Ursachen. Erfasse den endgültigen Endpunkthost, die Clientversion, den HTTP-Status, falls verfügbar, die vergangene Zeit und ob Antwortereignisse ankamen. Ändere dann jeweils nur eine Bedingung, etwa einen anderen freigegebenen Netzwerkpfad oder den Aufruf desselben Endpunkts außerhalb des betroffenen Clients. Ein erfolgreicher Browseraufruf einer Website prüft nicht den konkreten authentifizierten Stream, der fehlgeschlagen ist.
OpenAIs Fehlerhilfe empfiehlt für API-Verbindungsfehler Prüfungen der Netzwerkeinstellungen, Proxy-Konfiguration, SSL-Zertifikate und Firewallregeln. Das sind auszuführende Prüfungen, keine Diagnose deiner konkreten Fehlermeldung.[5] Lass die Zertifikatsprüfung aktiviert. Wird das Netzwerk von einer Organisation verwaltet, nutze deren freigegebene Konfiguration statt eines unpassenden Proxy-Workarounds.
Übermittle einem Gatewaybetreiber eine bereinigte Anfragestruktur und den zuletzt empfangenen Ereignistyp. Ein Screenshot, der nur „disconnected“ zeigt, entfernt die für ihn wichtige Unterscheidung. Bewahre die Originalspur lokal auf und teile eine reduzierte Fassung ohne Authentifizierungsheader, private Eingaben und Tool-Ausgaben.
stream disconnected before completion: idle timeout waiting for sse
Ein Leerlauf-Timeout bedeutet, dass die Wartezeit auf das nächste SSE-Ereignis das konfigurierte Intervall überschritten hat. Das ist etwas anderes als eine insgesamt lange Antwortdauer: Eine lange laufende Antwort, die weiter Ereignisse liefert, hat ein anderes Zeitmuster als ein stiller Stream.[1]
Die am 22. Oktober 2026 geprüfte Konfigurationsreferenz trennt drei Einstellungen:[2]
| Anbietereinstellung | Dokumentierter Geltungsbereich |
|---|---|
stream_idle_timeout_ms | Leerlaufwartezeit auf SSE-Ereignisse in Millisekunden |
stream_max_retries | Anzahl der Wiederholungen bei SSE-Unterbrechungen |
request_max_retries | Anzahl der Wiederholungen von HTTP-Requests |
Ein größeres Leerlaufintervall verlängert die Wartezeit des Clients. Es kann weder einen inkompatiblen Endpunkt zur Ausgabe von Responses-Ereignissen bringen noch verlorene Bytes wiederherstellen. Höhere Wiederholungszahlen ändern die Anzahl der Versuche, nicht die Ursache des ersten Fehlers.
Miss, bevor du Werte anpasst. Erfasse Antwortbeginn, Ankunft jedes Ereignisses und den Zeitpunkt der Fehlermeldung. Ist das Client-Timeout die beobachtete Grenze, prüfe es zusammen mit dem dokumentierten Verhalten des Dienstes. Schließt die Verbindung früher, untersuche stattdessen diesen Abbruch. Leite aus einem fehlgeschlagenen Turn kein universelles Timeout für alle Modelle, Netzwerke und Gateways ab.
rate limit exceeded: upstream rate limit exceeded, please retry later
Die Meldung zeigt eine Begrenzung irgendwo auf dem Anfrageweg an. Ihr Wortlaut allein identifiziert weder das Konto noch die begrenzte Ressource oder den Rücksetzzeitpunkt. Leite aus „upstream“ keinen bestimmten Lieferanten ab und nimm nicht an, dass mehr Guthaben jede Ratenlimit-Antwort behebt.
OpenAIs Dokumentation für die direkte API unterscheidet Anfrage- und Tokenlimits, vorübergehende Überlastung sowie Kontingent- und Ausgabenbedingungen. Sie dokumentiert Antwortheader für Ratenlimits. Wird bei einer vorübergehenden Bedingung Retry-After mitgeliefert, bezeichnet es die Mindestwartezeit. Kontobedingungen, die eine Maßnahme erfordern, lassen sich laut Dokumentation nicht durch Wiederholungen lösen.[4] Das ist OpenAIs dokumentierte Semantik. Verwende die Dokumentation und Header des Endpunkts, den du tatsächlich aufrufst.
| Beleg vom tatsächlichen Endpunkt | Angemessene Reaktion |
|---|---|
| Vorübergehendes Limit mit Wiederholungshinweis | Mindestens die angegebene Zeit warten, dann innerhalb einer begrenzten Strategie erneut versuchen |
| Anfragerate erschöpft | Anfragerate aller Worker reduzieren, die dieses Limit teilen |
| Tokenrate erschöpft | Tokenbedarf und Anfragezahl überprüfen |
| Kontingent-, Abrechnungs- oder Ausgabenlimit | Kontobedingung lösen, bevor die Last erneut gesendet wird |
| Allgemeine Meldung ohne begrenzte Ressource | Request-ID sammeln und Betreiber um Identifikation der Grenze bitten |
OpenAI empfiehlt exponentielles Backoff mit Zufallskomponente, wenn kein passender Wiederholungshinweis vorliegt, und weist darauf hin, dass erfolglose Requests zum Ratenlimit beitragen können. Berücksichtige SDK-Wiederholungen, bevor du eine weitere Schleife in der Anwendung einbaust.[4] Eine Wiederholungsstrategie braucht eine Abbruchbedingung. Eine abgewiesene Aufgabe darf keine unbegrenzte Folge neuer Requests auslösen.
Prüfe bei einer Agentenaufgabe außerdem, was bereits geschehen ist. Lies den Working-Tree-Diff und den Toolverlauf, bevor du den Agenten einen unterbrochenen Vorgang wiederholen lässt. Eine fehlgeschlagene Schlussantwort belegt nicht, dass alle früheren Tool-Aktionen ebenfalls scheiterten. Dieser Abgleich ist eine Betriebsempfehlung gegen doppelte Arbeit, keine Behauptung, Codex könne externe Aktionen automatisch zurückrollen.
Why does my Codex stream disconnect before completion and the stream closed before the response is completed?
Im untersuchten SSE-Pfad erreichte der Client das Eingabeende, ohne einen Abschluss erfolgreich zurückzugeben und ohne einen spezifischeren gespeicherten Fehler. Vergleiche die empfangene Spur mit der Spur des Dienstes, um festzustellen, ob das Abschlussereignis fehlte, ungültig war oder unterwegs verloren ging. Die Meldung allein entscheidet nicht zwischen diesen Erklärungen.[1]
Why does Codex keep disconnecting?
Wiederholte Fehler brauchen einen reproduzierbaren Vergleich: Halte Clientversion, Modell und Endpunkt konstant, erfasse den vollständigen Fehler und ändere jeweils eine Bedingung. Unterscheide zuerst vorzeitiges Streamende, Transportfehler, Leerlauf-Timeout und Ablehnung durch den Dienst. Mehr Wiederholungen vor dieser Unterscheidung können denselben Fehler ohne zusätzlichen Erkenntnisgewinn wiederholen.
codex request timed out
Ermittle, welche Komponente das Timeout meldete. Die Codex-Anbieterkonfiguration bietet ein SSE-Leerlaufintervall; ein API-Client kann zusätzlich einen Request-Timeout melden. OpenAIs API-Hilfe nennt Netzwerk- und serverseitige Faktoren, die bei Timeouts zu untersuchen sind. Sie macht einen Timeout nicht zum Beweis einer bestimmten Ursache.[2][5]
resume stream unavailable
Lies dies weder als Garantie, dass sich eine Antwort fortsetzen lässt, noch als Beweis, dass alle erledigten Arbeiten verloren sind. Notiere Clientversion und vollständigen Fehler, sichere die Unterhaltung und prüfe ausgeführte Tool-Aktionen. Die geprüften Quellen belegen keinen universellen Wiederherstellungsbefehl für genau diese Meldung. Deshalb wird hier keiner vorgeschrieben.
Wenn du als Nächstes Modell oder Endpunkt wechselst, erklärt der GPT-6-Astra-Migrationsleitfaden, wie du Modellerkennung, Protokolländerungen und Toolvalidierung trennst. Das aktuelle reAPI-Angebot steht auf der Modellseite. Weder Modellname noch Preisangabe ersetzen eine erfolgreiche durchgängige Codex-Kompatibilitätsprüfung.
Quellen geprüft am 22. Oktober 2026
- OpenAI. Codex Responses SSE implementation, Revision
c2d5ea52e1b7ab11ee2d71dc44ea1ef00f9c8eb3. Quellcode und zugehörige Tests. - OpenAI. Configuration Reference, Anbieterprotokoll, Timeout- und Wiederholungseinstellungen. Konfigurationsreferenz.
- reAPI. GPT-6-Astra-Anfragedokumentation. Veröffentlichter Anfragevertrag; Implementierungsdokumentation lokal geprüft, kein Live-Generierungstest.
- OpenAI. Rate limits, Antwortheader und Wiederholungshinweise. API-Ratenlimits.
- OpenAI. Error codes, API-Verbindungs- und Timeoutfehler. API-Fehlerhilfe.