· kaynak dev.to (home feed)
Ollama Responses API konuşma geçmişini sessizce düşürüyor ve yine de success dönüyor
Ollama 0.34.0, Responses endpoint'inde previous_response_id'yi kabul ediyor, 200 completed dönerken modele yalnızca en yeni turu iletiyor; Codex gibi stateful istemciler tüm bağlamı sessizce kaybediyor.

Ollama'nın Responses endpoint'inde sessiz bir arıza
Ollama'nın OpenAI uyumlu /v1/responses endpoint'i previous_response_id parametresini kabul ediyor, HTTP 200 ve "completed" durumuyla yanıt veriyor ve sonra daha önceki konuşma hiç yaşanmamış gibi cevaplıyor — dev.to'daki ayrıntılı bir yazıya göre böyle. Hiçbir şey başarısız olmuyor ve yanıt makul görünüyor; model sadece, istemcinin sahip olduğunu düşündüğü konuşmanın aksine bağlamsız, bambaşka bir konuşmaya cevap veriyor.
Yazar, Ollama 0.34.0'ı Debian 13 üzerinde, yalnızca CPU ile qwen2.5:1.5b çalıştırarak test etti. İlk turda modele gizli bir kelime söylendi — PINEAPPLE — ve "OK" yanıtı alındı. İkinci turda o yanıta id ile atıfta bulunulup gizli kelimenin ne olduğu soruldu; model "password" diye cevap verdi. İki kontrol deneyi nedeni netleştirdi: tüm konuşmayı satır içi vererek sormak 68 input token'a mal oldu ve doğru şekilde "PINEAPPLE" döndürdü; hiç geçmiş vermeden sormak ise 41 token'a mal oldu ve previous_response_id'li istekle aynı "password" tahminini üretti — o da tam 41 token'dı. Kullanım sayıları ipucu veren şey: stateful görünümlü istek, tıpkı bağlamsız bir istek gibi faturalandırılmıştı.
Tool-calling döngülerinde daha kötü
Arıza araçlarla birlikte daha keskin bir biçim alıyor. Yazar, modele bir check aracını bir kez çağırmasını ve sonra tam olarak "DONE" demesini buyurdu. Model function call'u yaydıktan sonra istemci aracı çalıştırdı ve protokolün öngördüğü şeyi geri gönderdi — previous_response_id artı function_call_output. Ollama 200 döndü; yanıt nazik, konuyla ilgili ve yanlıştı ("Test başarıyla geçti! Başka bir konuda yardımcı olabilir miyim?") ve 144 input token'dı — ilk turdaki sayıyla aynı. Tüm geçmişi yeniden gönderen kontrol ise 179 token'a mal oldu ve doğru şekilde "DONE" dedi.
dev.to'daki yazı, soruşturmayı başlatan yukarı akış raporunu aynı proxy'nin arkasındaki barındırılmış bir :cloud modeline bağlıyor; bu model, aynı bağlamsız araç sonucu için sıfır input token'la boş bir çıktı döndürmüş — Codex Desktop da bunu düzgünce tamamlanmış bir tur olarak ele almış. O boş çıktı belirtisi yerel bir modelle yeniden üretilmedi ve yazar barındırılmış bir modeli test etmedi. Yeniden üretilen şey temel sorundu: bağlam gitmişti ve yetim kalmış bir araç sonucuyla arka ucun ne yaptığı arka uca kalmıştı.
Kök neden
Ollama 0.34.0'daki openai/responses.go dosyasında istek struct'ında previous_response_id için hiçbir alan yok. Go'nun encoding/ paketi, DisallowUnknownFields ayarlanmadıkça bilinmeyen anahtarları sessizce atar ve Ollama bunu ayarlamıyor; dolayısıyla parametre, herhangi bir handler çalışmadan önce yok oluyor. Yanıt struct'ı ise alanı tanımlıyor ve "Not supported" yazan bir kod yorumuyla onu açıkça nil'e ayarlıyor; yani her yanıt previous_response_id: null taşıyor. O null, alışverişteki tek dürüst sinyal ve hiçbir istemci onu geri okumuyor, çünkü OpenAI'nin kendi implementasyonu gönderdiğiniz id'yi yankılıyor. Alanı implementasyon talebi olan ollama/ollama#15954'nin Mayıs'tan beri açık olduğu bildiriliyor.
Codex proxy yolu
Aynı kayıp, ollama launch codex komutunun Codex Desktop için kurduğu proxy yolu /api/codex/v1/responses üzerinden de yaşanıyor. Yazıya göre bu ayrı bir implementasyon değil, bir router: ~/.codex/ollama-launch-codex-routing. dosyasında listelenen modeller Ollama'nın kendi /v1/responses endpoint'ine, geri kalan her şey OpenAI'ye iletiliyor. Düşürme işlemi paylaşılan handler'da aşağı akışta gerçekleştiği için proxy parametreyi tam olarak aynı şekilde atıyor. Yönlendirme dosyası olmayan temiz bir kurulum 503 döndürüyor; bu da hatayla ilgisiz.
Çözüm
Ollama alanı implementasyon edene kadar istemciler sunucu tarafı duruma güvenmeyi bırakmalı ve her turda tüm konuşmayı input içinde yeniden göndermeli — önceki mesajlar, function call ve function output birlikte. Bu desen testlerde her iki yolda da işe yaradı. OpenAI uyumlu istemcilerin çoğu zaten böyle davranıyor; risk altındakiler Responses API'nin stateful moduna göre geliştirilenler, öne çıkan örnek ise Codex. Yazar ayrıca rastgele bir gizli kelime eken, onu previous_response_id üzerinden soran ve hatayı herhangi bir Responses sunucusunda tespit etmek için token sayılarını karşılaştıran kısa bir doğrulama betiği yayınladı.
Neden önemli
Bu, AI altyapısındaki en zor hata sınıfı: başarı döndüren bozulmuş bir sözleşme. Loglar 200, completed ve tutarlı bir yanıt gösteriyor, dolayısıyla hiçbir şey alarm vermiyor — oysa stateful agent'ler önceki her turu sessizce kaybediyor, döngü ortasında talimatları unutuyor ve hiçbir yerden gelmeyen araç sonuçlarının etrafında varsayımlar üretiyor. Codex veya başka Responses-native istemciler arkasında Ollama çalıştıran herkes gizli kelime testini yapmalı ve ollama/ollama#15954 ele alınana kadar tam geçmişli isteklere geçmelidir.
- #ollama
- #llm
- #api-bug
- #codex
- #openai-compatibility