Kopru: son katmanin dondurdugu oldugu gibi gider, sarmalayici yok

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
yilsemandClaude Opus 5.5 committed 2026-10-11 10:43:00 +03:00
1 parent 06039b904d
commit 8fbbe226db
2 files changed
+17 -11

No files matched your search

+5 -9
View File
@@ -882,7 +882,7 @@ class H(http.server.BaseHTTPRequestHandler):
self.end_headers()
else:
self._akis_basligi(resp, resp.status)
kalan, son_yazi, son_hata = list(sira), time.time(), ""
kalan, son_yazi, son_govde = list(sira), time.time(), b""
def w(b):
if b:
@@ -930,9 +930,8 @@ class H(http.server.BaseHTTPRequestHandler):
try:
yeni = ac(ad)
except Exception as e:
govde = e.read().decode("utf-8", "replace") if hasattr(e, "read") else ""
son_hata = f"{ad}: {e} {govde}".strip()
log(f"{tag} katman denetimi: {ad} acilamadi ({son_hata[:300]})")
son_govde = e.read() if hasattr(e, "read") else b""
log(f"{tag} katman denetimi: {ad} acilamadi ({type(e).__name__}: {e} {son_govde[:200]!r})")
if yeni is None:
break
resp, rewriter, tag = yeni
@@ -940,11 +939,8 @@ class H(http.server.BaseHTTPRequestHandler):
if not kalan:
return self._stream(resp, resp.status, tag, rewriter, izle, basliksiz=True)
if gecmedi:
# Siradakine gecilen adimda onceki model bir sey soyleyemez: son katmanin kendi hatasi gider.
log(f"{tag} katman denetimi: son katman da acilamadi, onun hatasi veriliyor")
olay = {"type": "response.failed", "response": {"id": "resp_astrabridge_katman", "object": "response",
"status": "failed", "output": [], "error": {"code": "katman_hatasi", "message": son_hata}}}
w(b"event: response.failed\ndata: " + json.dumps(olay, ensure_ascii=False).encode("utf-8") + b"\n\n")
# Son katman ne dondurduyse o gider, hicbir sey eklenmez; dondurmediyse hicbir sey gitmez.
w(son_govde)
else:
for chunk in parcalar:
if izle is not None:
@@ -263,8 +263,18 @@ class Akis(unittest.TestCase):
self.calistir(sse("Bunu yapamam."))
self.assertEqual(self.opened, ["Katman-2", "Katman-3", "Katman-4"])
self.assertNotIn(b"yapamam", self.h.wfile.getvalue())
self.assertIn(b"response.failed", self.sent())
self.assertIn(b"Katman-4: acilamadi", self.sent()) # the last layer's own error reaches the user
self.assertEqual(self.sent(), b"") # the last layer said nothing: nothing is added
def test_the_last_layers_own_error_body_is_delivered_untouched(self):
class Hata(Exception):
def read(self):
return b'{"error": {"message": "katman 4 hatasi"}}'
self.puanlar = [{"ret": 0.9, "sart": 0.0}]
def ac(ad):
raise Hata("HTTP 400")
self.h._denetimli_akis(Yanit(sse("Bunu yapamam.")), "[1]", None, None, "yap", ["Katman-4"], ac)
self.assertEqual(self.sent(), b'{"error": {"message": "katman 4 hatasi"}}')
def test_unreachable_jev_keeps_the_answer(self):
self.puanlar = [None]