Codex bir Responses akışını okuyordu veya açmaya çalışıyordu ve response.completed olayı gelmeden sona erdi: bağlantı kapandı, sessiz kaldı, ağ düzeyinde bozuldu veya sunucu bir hata bildirdi. Codex bunu varsayılan olarak beş kez kendi başına yeniden dener. İki noktadan sonra yazdırılan neden, bunlardan hangisinin gerçekleştiğini söyler ve nereye bakılacağını belirler.
Hata
# Codex CLI, once its retries are spent
■ stream disconnected before completion: stream closed before response.completed
# While it retries (VS Code extension, an early-2026 build)
Reconnecting... 1/5
stream disconnected before completion: error sending request for url (https://…/responses)
# The reason after the colon varies, and it is the diagnosis:
# stream closed before response.completed
# idle timeout waiting for SSE
# error sending request (Codex before 0.156 adds: for url (…))
# An error occurred while processing your request. You can retry your request, …
# Incomplete response returned, reason: max_output_tokensNedenler ve çözümler özeti
| Neden | Çözüm |
|---|---|
| VPN, proxy, güvenlik duvarı veya TLS denetleyen bir ara cihaz bağlantıyı kapattı | Başka bir ağdan yeniden deneyin; hata durursa API ana makinesini bu proxy veya denetimden muaf tutun. |
| Sunucu yanıtın ortasında başarısız oldu — neden, sunucunun kendi iletisidir | Yerel olarak değiştirilecek bir şey yok: Codex'in yeniden denemesine izin verin, sağlayıcının durumunu kontrol edin ve daha sonra tekrar deneyin. |
| stream_idle_timeout_ms süresi boyunca (varsayılan olarak 300.000 ms) hiçbir şey gelmedi | Takılmış bir üst akış veya arabelleğe alan bir proxy; zaman aşımını yalnızca sessizlik meşruysa artırın. |
| Akışları response.completed olmadan sonlandıran özel bir sağlayıcı | Üzerinde curl -N çalıştırın: her başarılı yanıtın bu olayla sona ermesi gerekir. |
| Yanıt kasıtlı olarak sonlandırıldı — "Incomplete response returned" | Nedende bir token sınırı, içerik filtresi veya başka bir durdurma belirtiliyor. Yeniden deneme genellikle bunu tekrarlar; bu nedenle isteği değiştirin. |
İki noktadan sonraki nedeni okuyun
Codex, daha belirli bir teşhis olmadan erken sona eren akışlar için bu tek hatayı kullanır ve nedeni ekler. Kaynağında, basitçe sona eren bir akış "stream closed before response.completed"; stream_idle_timeout_ms süresinden uzun sessiz kalan bir akış "idle timeout waiting for SSE" (yerleşik OpenAI sağlayıcısının kullandığı WebSocket aktarımında "idle timeout waiting for websocket"); kablo üzerinde bozulan bir istek HTTP istemcisinin "error sending request" ifadesini (0.156'dan önceki derlemelerde URL de eklenir); genel bir response.failed olayı ise iki noktadan sonra sunucunun iletisini verir. Codex 0.148'den beri hiç açılamayan bir bağlantı — DNS, TLS veya reddedilen bir bağlantı noktası — ayrı bir "Connection failed" hatası olarak raporlanır; güncel derlemeler ağ için beklerken bunu yeniden denemeye devam eder.
stream closed before response.completed the connection ended with no terminal event:
network path, server, or a provider that
never sends response.completed
idle timeout waiting for SSE no event for stream_idle_timeout_ms
error sending request the request broke on the wire: a reset, a
proxy or a middlebox (before 0.148, also
a connection that never opened)
…error decoding response body the body broke mid-read: network or middlebox
An error occurred while processing… the server's own response.failed message
Incomplete response returned, reason: … the server stopped it: a token cap, a content
filter, or whatever the reason namesCodex'in zaten neyi yeniden denediğini bilin ve sağlayıcıya göre ayarlayın
İki yeniden deneme bütçesi geçerlidir. request_max_retries (varsayılan 4), herhangi bir akış oluşmadan önceki HTTP isteğini kapsar; Codex burada 5xx yanıtlarını ve aktarım hatalarını yeniden dener, ancak 429'ları yeniden denemez. stream_max_retries (varsayılan 5), bu sayfadaki her şeyi kapsar: her yeniden deneme konuşma turunu yeniden gönderir; "Reconnecting... 1/5" bunu sayar ve bütçe tükendiğinde hata ekranda kalır, konuşma turu durur. Her ikisi de 100 ile sınırlıdır ve ikisi de bir [model_providers.<id>] bloğunda bulunur. Yerleşik openai sağlayıcı kimliği ayrılmıştır ve yeniden tanımlanamaz; dolayısıyla bunlar özel sağlayıcılar için ayarlardır.
model = "gpt-5-6-sol"
model_provider = "kunavo"
[model_providers.kunavo]
name = "Kunavo"
base_url = "https://api.kunavo.com/v1"
env_key = "KUNAVO_API_KEY"
# wire_api defaults to "responses", the only supported value
stream_max_retries = 10 # dropped or failed streams (default 5, max 100)
request_max_retries = 4 # 5xx and network errors before streaming (default 4, max 100)
stream_idle_timeout_ms = 300000 # silence before giving up (default 300000)Akışı Codex olmadan yeniden üretin
Bir Responses akışı tek bir sonlandırıcı olayla sona erer ve Codex bunun response.completed olmasını gerektirir. Aynı tür isteği aynı makineden curl ile gönderin. Codex bağlantıyı kesmeye devam ederken işlem her seferinde tamamlanıyorsa Codex derlemesine ve açık sorunlarına bakın; curl de bozuluyorsa sağlayıcıyı suçlamadan önce başka bir ağdan tekrarlayın. Hataların ne zaman oluştuğunu not edin: her çalıştırmada aynı geçen sürede gerçekleşen bir kopma, sorunlu bir ağdan çok yol üzerindeki bir zamanlayıcıya işaret eder.
curl -sN https://api.kunavo.com/v1/responses \
-H "Authorization: Bearer $KUNAVO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-5-6-sol","stream":true,
"input":"Write a 600-word story about a lighthouse keeper."}' \
| grep -oE '"type": ?"response\.(completed|failed|incomplete)"'
# a healthy run prints exactly one line: "type":"response.completed"Önce ağ yolunu devreden çıkarın, sonra sağlayıcıyı kontrol edin
Bir sonuca varmadan önce ikinci bir ağdan test edin. OpenAI forumunda bir kullanıcının iş makinesindeki hataları, şirketin Zscaler'ını devre dışı bırakır bırakmaz durdu; GPT-5.6 başlığında bir kullanıcının hataları VPN veya telefon erişim noktasıyla düzelirken diğerininki ağ değiştirdikten sonra da sürdü. Başka bir ağ sorunu çözerse zaman aşımlarını artırmak yerine API ana makinesini proxy veya TLS denetiminden muaf tutun. Özel bir sağlayıcı için codex doctor, yapılandırmanın yüklenip yüklenmediğini ve sağlayıcının anahtar değişkeninin mevcut olup olmadığını bildirir; sağlayıcının Responses API'sini sunması gerekir, çünkü wire_api'nin başka bir değeri yoktur ve sağlayıcı Responses WebSocket aktarımını çalıştırmıyorsa supports_websockets ayarlanmadan bırakılmalıdır. curl temiz biçimde tamamlanıyor ve Codex hâlâ başarısız oluyorsa, 23 Eylül 2026'da açık olan ve Codex dışında doğru biçimde akış gerçekleştiren özel Responses sağlayıcılarında bu hatayı bildiren openai/codex sorunları #41340 veya #41989'a yeniden üretiminizi ekleyin.
Kunavo üzerinden çağrı yapıyorsanız
Kunavo üzerinden bir GPT modelinin /v1/responses akışı, üst akışın kendi olay akışıdır ve kare kare aktarılır: yalnızca model kimliği yeniden yazılır, Kunavo keepalive olayı eklemez. İlk çıktı olayı gelene kadar, en fazla 30 saniye boyunca akış tutulur; bu nedenle o aşamada hata veren, zaman aşımına uğrayan veya bağlantıyı kapatan bir üst akış, yapılandırılmış başka bir kanal varsa modelin sonraki kanalında yine denenebilir. Hiçbiri hizmet vermiyorsa Codex akış yerine HTTP hatası alır — üst akış hata verdiğinde, hiç yanıt vermediğinde veya Kunavo'nun kendi anahtarını reddettiğinde 502; neden JSON kodunda bulunur, örneğin upstream_524 veya upstream_403 (diğer üst akış 4xx kodları kendi durumunu korur) — Codex bunu bu ileti olarak değil, unexpected status 502 Bad Gateway: Upstream provider error olarak yazdırır ve yine dener. İlk çıktı olayından sonra çıktı kopyalanmadan hiçbir şey yeniden denenemez: üst akıştaki response.failed olduğu gibi aktarılır; bu nedenle Codex bunu doğrudan OpenAI'dan gelmiş gibi ele alır (genel bir hata iletisi iki noktadan sonra yazdırır) ve yanıtın ortasında kopan üst akış bağlantısı Kunavo'nun akışını sonlandırıcı olay olmadan bitirir; Codex bunu stream closed before response.completed olarak bildirir. Her iki durumda da Codex'in kendi yeniden denemeleri devreye girer. Kunavo tarafında akış devam ettiği sürece onu sınırlayan hiçbir şey yoktur — 240 saniyelik sınır yalnızca üst akış başlıklarını beklemeyi kapsar — ancak sessizlik akışı bitirir: Kunavo 300 saniye boyunca hiçbir şey göndermeyen bir üst akışı okumayı durdurur; bu, Codex'in varsayılan boşta kalma süresiyle aynıdır ve kenar katmanı 600 saniye boyunca hiç bayt taşımayan bağlantıyı kapatır. Bu hataların her biri sıfır maliyetle kaydedilir. Yukarıda ayarlanan sağlayıcı bloğu şu yerde kuruludur: Codex CLI entegrasyon sayfası.
Sık sorulan sorular
“stream closed before response.completed” ne anlama gelir?
HTTP yanıtı başladı ve bağlantı, Codex'in beklediği response.completed olayı gelmeden sona erdi. Bir şey onu erken kapattı: yoldaki bir proxy veya güvenlik duvarı, sunucu ya da bu olayı hiç göndermeyen özel bir uç nokta.
Codex “stream disconnected before completion” hatasını otomatik olarak yeniden dener mi?
Evet. Codex dönüşü stream_max_retries sayısı kadar (varsayılan 5, en fazla 100) yeniden gönderir ve bunu yaparken Reconnecting... 1/5 gösterir. Bütçe tükendiğinde hata ekranda kalır ve dönüş durur; başka bir ileti göndermek yeni bir istek başlatır.
stream_idle_timeout_ms değerini artırmalı mıyım?
Yalnızca neden "idle timeout waiting for SSE" ise ve sessizlik meşruysa. Bağlantının sessiz kalmak yerine sona erdiği "stream closed before response.completed" için hiçbir etkisi yoktur. Kunavo üzerinden, akış başladıktan sonra 300000'in üzerindeki değerler işe yaramaz: Kunavo 300 saniye boyunca hiçbir şey göndermeyen bir üst akışı okumayı durdurur ve akışınızı sonlandırır.
Codex neden “Incomplete response returned, reason: max_output_tokens” diyor?
Sunucu yanıtı token sınırında durdurdu ve bunu bir response.incomplete olayıyla bildirdi. Codex bunu aynı hata altında raporlar ve yeniden dener; aynı dönüşün yeniden denenmesi genellikle aynı sınıra ulaşır. Bu nedenle görevi bölün veya daha büyük çıktı sınırına sahip bir model kullanın. Kunavo üzerinden bir Claude modelinin maksimum token nedeniyle durması Codex'e aynı şekilde ulaşır.
Yeniden denemeler için ücretlendirilir miyim?
Her yeniden deneme yeni bir istektir. Kunavo üzerinden üst akışta başarısız olan bir GPT çağrısı — akıştan önceki hata, response.failed veya kopan bağlantı — sıfır maliyetle kaydedilir. Codex vazgeçtiğinde üst akış çalışmaya devam ediyorsa, bir deneme üst akışın ürettiğini bildirdiği miktar için ücretlendirilir; çünkü bu iş yapılmıştır.
İlgili kılavuzlar
- Codex CLI 401 hatası: doğru kimlik doğrulama yolunu düzeltme
- LLM akış hataları — SSE kesilmeleri, takılan akışlar ve eksik kullanım bilgileri
- Codex CLI API anahtarı — çalışan özel sağlayıcı kurulumu
Hata anlamlarına ilişkin daha fazla bilgi hata referansı bölümünde; anahtar almak kayıt ve kimlik doğrulama kılavuzu üzerinden bir dakika sürer.