Preserve native Codex history and add configurable cross-model compression
Separate encrypted reasoning from actual compaction, stop migration after native return, and retain full history and recent exchanges. Add typed settings, Gemini fallback, verified provider windows, bounded summaries and durable concurrent checkpoints. Validation: 245 bridge tests plus focused concurrency tests; 71 settings/connection tests; 66 supplementary tests; TypeScript checks; renderer and Electron bundles; real primary/native/fallback summary probes and 700K input acceptance.
This commit is contained in:
1 parent
1c6e3656b8
commit
91ecad8e5c
27 files changed
+1119
-117
No files matched your search
@@ -356,6 +356,8 @@ class H(http.server.BaseHTTPRequestHandler):
|
||||
self.send_header("Transfer-Encoding", "chunked")
|
||||
self.end_headers()
|
||||
toplam = 0
|
||||
event_tail = b""
|
||||
completed = False
|
||||
try:
|
||||
while True:
|
||||
try:
|
||||
@@ -368,6 +370,16 @@ class H(http.server.BaseHTTPRequestHandler):
|
||||
if not parca:
|
||||
break
|
||||
toplam += len(parca)
|
||||
if getattr(self, "_native_return_scope", None):
|
||||
event_tail += parca
|
||||
while b"\n" in event_tail:
|
||||
line, event_tail = event_tail.split(b"\n", 1)
|
||||
if line.startswith(b"data:"):
|
||||
try:
|
||||
event = json.loads(line[5:])
|
||||
completed = completed or event.get("type") == "response.completed"
|
||||
except (ValueError, AttributeError):
|
||||
pass
|
||||
self.wfile.write(b"%x\r\n" % len(parca) + parca + b"\r\n")
|
||||
self.wfile.flush()
|
||||
self.wfile.write(b"0\r\n\r\n")
|
||||
@@ -378,6 +390,8 @@ class H(http.server.BaseHTTPRequestHandler):
|
||||
return True
|
||||
if not sessiz:
|
||||
log(f"{tag} bitti status={durum} {toplam} bayt")
|
||||
if completed and getattr(self, "_native_return_scope", None):
|
||||
remember_transfer(*self._native_return_scope)
|
||||
return True
|
||||
|
||||
def _transfer_begin(self):
|
||||
@@ -438,6 +452,7 @@ class H(http.server.BaseHTTPRequestHandler):
|
||||
return result["value"], started
|
||||
|
||||
def _isle(self):
|
||||
self._native_return_scope = None
|
||||
with kilit:
|
||||
sira[0] += 1
|
||||
n = sira[0]
|
||||
@@ -467,9 +482,9 @@ class H(http.server.BaseHTTPRequestHandler):
|
||||
thread = str(req.get("prompt_cache_key") or "")
|
||||
scope = hashlib.sha256((str(self.headers.get("chatgpt-account-id") or "") + "|" + thread).encode()).hexdigest()
|
||||
source = TRANSFERS.get(scope) if thread else None
|
||||
mixed = bool(source) or gecis_context.foreign(req)
|
||||
if external and thread:
|
||||
remember_transfer(scope, model)
|
||||
# A completed return to the subscription ends migration. Historical
|
||||
# foreign IDs must not keep later native turns in the preparer.
|
||||
mixed = ek_model_mu(source or "") or (source is None and gecis_context.foreign(req))
|
||||
if external or mixed:
|
||||
try:
|
||||
normalized = gecis_context.normalize(req)
|
||||
@@ -481,13 +496,14 @@ class H(http.server.BaseHTTPRequestHandler):
|
||||
prepared, started = self._prepare(normalized, source)
|
||||
if prepared is None:
|
||||
return
|
||||
if "compaction" in prepared:
|
||||
if "compaction" in prepared or "compaction_items" in prepared:
|
||||
if not started:
|
||||
self._transfer_begin()
|
||||
item = prepared["compaction"]
|
||||
for event in ({"type": "response.output_item.done", "output_index": 0, "item": item},
|
||||
{"type": "response.completed", "response": {"id": "resp_aiturk_compact", "object": "response",
|
||||
"status": "completed", "output": [item]}}):
|
||||
items = prepared.get("compaction_items") or [prepared["compaction"]]
|
||||
events = [{"type": "response.output_item.done", "output_index": index, "item": item} for index, item in enumerate(items)]
|
||||
events.append({"type": "response.completed", "response": {"id": "resp_aiturk_compact", "object": "response",
|
||||
"status": "completed", "output": items}})
|
||||
for event in events:
|
||||
self._transfer_chunk(b"event: " + event["type"].encode() + b"\ndata: " + json.dumps(event, ensure_ascii=False).encode() + b"\n\n")
|
||||
self.wfile.write(b"0\r\n\r\n")
|
||||
self.wfile.flush()
|
||||
@@ -497,8 +513,12 @@ class H(http.server.BaseHTTPRequestHandler):
|
||||
started = False
|
||||
changed = normalized != req
|
||||
body = json.dumps(normalized, ensure_ascii=False).encode() if changed else govde
|
||||
if external and thread:
|
||||
remember_transfer(scope, model)
|
||||
self._native_return_scope = (scope, model) if thread and not external else None
|
||||
return self._ilet(n, KOPRU if external else CHATGPT, yol, body,
|
||||
f"{'KOPRU' if external else 'OZGUN'} {model}", rewritten=changed, started=started)
|
||||
self._native_return_scope = (scope, model) if thread else None
|
||||
return self._ilet(n, CHATGPT, yol, govde, f"OZGUN {model or '?'}")
|
||||
if self.command == "GET" and "/models" in yol:
|
||||
# Ek modeller listede gorunsun diye liste koprüden istenir; kopru cevap vermezse chatgpt.com'un listesi.
|
||||
|
||||
Reference in new issue
Block a user