fix(codex-bridge): preserve tool model and stream preparation without Jev fallback
This commit is contained in:
1 parent
8fbbe226db
commit
3726d2a553
6 files changed
+118
-14
No files matched your search
@@ -127,6 +127,7 @@ class Akis(unittest.TestCase):
|
||||
sahte.sor = self.sor
|
||||
sahte.karar = jev_denetim.karar
|
||||
sahte.komutlar = jev_denetim.komutlar
|
||||
sahte.hazirlik_mi = jev_denetim.hazirlik_mi
|
||||
env = {"jev_denetim": sahte, "yarim": yarim, "time": time, "http": __import__("http.client"),
|
||||
"log": self.logs.append, "RESP_HOP": set(), "json": json}
|
||||
adlar = ("_akis_basligi", "_denetimli_akis", "_stream")
|
||||
@@ -216,17 +217,56 @@ class Akis(unittest.TestCase):
|
||||
KOMUT = (b'event: response.output_item.done\ndata: {"type": "response.output_item.done", "item": '
|
||||
b'{"type": "function_call", "name": "shell", "arguments": "{\\"cmd\\": \\"dir\\"}"}}\n\n')
|
||||
|
||||
def test_a_step_without_text_is_asked_with_its_tool_calls(self):
|
||||
def test_a_step_without_text_passes_without_jev(self):
|
||||
body = self.KOMUT + sse()
|
||||
self.calistir(body)
|
||||
self.assertEqual(self.sent(), body)
|
||||
self.assertEqual(self.asked, ['[komut] shell: {"cmd": "dir"}'])
|
||||
self.assertEqual(self.asked, [])
|
||||
self.assertEqual(self.opened, [])
|
||||
|
||||
def test_a_blocked_step_without_text_goes_to_the_next_layer(self):
|
||||
def test_tool_step_cannot_be_replaced_even_if_jev_would_refuse(self):
|
||||
self.puanlar = [{"ret": 0.9, "sart": 0.0}]
|
||||
self.calistir(self.KOMUT + sse())
|
||||
self.assertEqual(self.opened, ["Katman-2"])
|
||||
self.assertEqual(self.sent(), self.cevap["Katman-2"])
|
||||
body = self.KOMUT + sse()
|
||||
self.calistir(body)
|
||||
self.assertEqual(self.opened, [])
|
||||
self.assertEqual(self.asked, [])
|
||||
self.assertEqual(self.sent(), body)
|
||||
|
||||
def test_tool_event_reaches_client_before_upstream_finishes(self):
|
||||
first = (b'data: {"type":"response.output_item.added","item":'
|
||||
b'{"type":"function_call","name":"shell","arguments":""}}\n\n')
|
||||
owner = self
|
||||
|
||||
class Streaming(Yanit):
|
||||
def __init__(self):
|
||||
super().__init__(b'')
|
||||
self.parts = [first, owner.KOMUT + sse()]
|
||||
self.reads = 0
|
||||
|
||||
def read1(self, n):
|
||||
self.reads += 1
|
||||
if self.reads == 2:
|
||||
owner.assertIn(first, owner.h.wfile.getvalue())
|
||||
owner.assertEqual(owner.asked, [])
|
||||
owner.assertEqual(owner.opened, [])
|
||||
return super().read1(n)
|
||||
|
||||
self.h._denetimli_akis(Streaming(), '[1]', None, None, 'yap', ['Katman-1'], self.ac)
|
||||
self.assertEqual(self.sent(), first + self.KOMUT + sse())
|
||||
|
||||
def test_text_with_a_tool_call_is_preparation_not_a_final_refusal(self):
|
||||
body = sse('Önce dosyaları inceleyeceğim.') + self.KOMUT
|
||||
self.calistir(body)
|
||||
self.assertEqual(self.sent(), body)
|
||||
self.assertEqual(self.asked, [])
|
||||
self.assertEqual(self.opened, [])
|
||||
|
||||
def test_explicit_commentary_passes_without_jev(self):
|
||||
body = (b'data: {"type":"response.output_item.added","item":'
|
||||
b'{"type":"message","role":"assistant","phase":"commentary"}}\n\n' + sse('Araştırıyorum.'))
|
||||
self.calistir(body)
|
||||
self.assertEqual(self.sent(), body)
|
||||
self.assertEqual(self.asked, [])
|
||||
|
||||
def test_an_empty_step_of_the_selected_model_goes_to_the_next_layer(self):
|
||||
self.calistir(sse()) # no text, no tool call
|
||||
|
||||
Reference in new issue
Block a user