fix(codex-link): only reject degenerate summaries, not short correct ones

The size-proportional minimum (input/250, cap 4000) rejected a correct summary:
a 646,955 byte thread (225k tokens, five labelled facts in a long log) was
summarized by the subscription model in 1501-1701 characters, the bridge demanded
2587, and Codex could not continue the thread on the selected model. The floor now
only catches broken output (input/2000, cap 300). Memory loss is prevented by who
writes the summary, not by its length.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
yilsemandClaude Opus 5.5 committed 2026-10-10 15:52:44 +03:00
1 parent 94e4aa2a74
commit 9739222919
2 files changed
+16 -10

No files matched your search

@@ -51,11 +51,13 @@ KISA_MESAJI = ("AstraBridge: Sohbet ozeti cok kisa cikti (%d karakter, en az %d
def en_az_karakter(girdi_bayt, ayar=None):
"""Bu buyuklukteki bir konusmanin ozeti en az kac karakter olmali.
Olcu: 10 Ekim 2026'da 1.018.151 baytlik sohbet 2201 karaktere indi ve hafiza kayboldu.
Kucuk sohbetlerde esik kuculur ki kisa ama dogru ozetler reddedilmesin."""
Yalniz bozuk/bos sayilacak kadar kisa ozeti yakalar; ozetin yeterliligini boyuttan cikarmaz.
Olcum (10 Ekim 2026, 646.955 baytlik gunluk + bes olgu): guclu modelin dogru ozeti 1500-1700
karakterdi; boyuta oranli yuksek esik (2587) bu dogru ozeti reddedip sohbeti kilitledi.
Hafiza kaybinin asil onlemi ozeti guclu modele yazdirmaktir (bridge.py _ozet_openai)."""
ayar = ayar or {}
tavan = int(ayar.get("en_az_tavan", 4000))
oran = max(1, int(ayar.get("en_az_oran", 250))) # her 250 bayt girdi icin 1 karakter
tavan = int(ayar.get("en_az_tavan", 300))
oran = max(1, int(ayar.get("en_az_oran", 2000))) # her 2000 bayt girdi icin 1 karakter
return max(0, min(tavan, int(girdi_bayt) // oran))
@@ -110,13 +110,17 @@ class Akis(unittest.TestCase):
self.assertEqual(o.ozet_metni(coz(a.feed(ham))[1]["item"]), "ozet metni")
def test_anormal_kisa_ozet_gecmisin_yerine_konmaz(self):
# 10 Ekim 2026: 1.018.151 baytlik sohbet 2201 karaktere indi; bu ozet kabul edilmemeli.
self.assertEqual(o.en_az_karakter(1018151), 4000)
self.assertEqual(o.en_az_karakter(100000), 400)
# Esik yalniz bozuk sayilacak kadar kisa ozeti yakalar. 10 Ekim 2026 olcumu: 646.955 baytlik
# sohbetin dogru ozeti 1501-1701 karakterdi ve boyuta oranli eski esik onu reddedip sohbeti kilitledi.
self.assertEqual(o.en_az_karakter(1018151), 300)
self.assertEqual(o.en_az_karakter(646955), 300)
self.assertEqual(o.en_az_karakter(100000), 50)
self.assertEqual(o.en_az_karakter(0), 0)
self.assertEqual(o.en_az_karakter(1018151, {"en_az_tavan": 1500}), 1500)
self.assertEqual(o.en_az_karakter(1018151, {"en_az_tavan": 1500, "en_az_oran": 250}), 1500)
for gercek_ozet in (1501, 1648, 1701):
self.assertGreater(gercek_ozet, o.en_az_karakter(646955))
ham = sse({"type": "response.created", "response": {"id": "r1"}},
{"type": "response.output_item.done", "item": self._mesaj("k" * 2201)},
{"type": "response.output_item.done", "item": self._mesaj("k" * 120)},
{"type": "response.completed", "response": {"id": "r1", "status": "completed"}})
a = o.OzetAkisi(tohum="7", en_az=o.en_az_karakter(1018151))
olaylar = coz(a.feed(ham) + a.flush())
@@ -126,7 +130,7 @@ class Akis(unittest.TestCase):
self.assertTrue(a.kisa)
self.assertIn("REDDEDILDI", a.sonuc_notu())
# Yeterli uzunlukta ozet ayni esikle kabul edilir; kucuk sohbetin kisa ozeti de reddedilmez.
for metin, esik in (("u" * 4000, o.en_az_karakter(1018151)), ("kisa ama dogru ozet", o.en_az_karakter(3000))):
for metin, esik in (("u" * 1501, o.en_az_karakter(646955)), ("kisa ama dogru ozet", o.en_az_karakter(3000))):
b = o.OzetAkisi(tohum="8", en_az=esik)
ham2 = sse({"type": "response.output_item.done", "item": self._mesaj(metin)},
{"type": "response.completed", "response": {"id": "r2"}})