llmcore: fix empty-response not triggering mixin failover; distinct default UA for NativeOAISession

This commit is contained in:
Liang Jiaqing committed 2026-06-10 20:25:51 +08:00
1 parent fb69e768b3
commit 920f7e3f2b
1 file changed
+5 -3
+5 -3
View File
@@ -381,13 +381,13 @@ def _stream_with_retry(sess, url, headers, payload, parse_fn):
yield err; return [{"type": "text", "text": err}]
gen = parse_fn(r)
try:
while True: streamed = True; yield next(gen)
while True: chunk = next(gen); streamed = True; yield chunk
except StopIteration as e:
if not e.value and not streamed: raise requests.ConnectionError("empty response")
return e.value or []
except (requests.Timeout, requests.ConnectionError) as e:
#pathlib.Path(__file__).parent.joinpath('temp','bad_requests.json').write_text(json.dumps({"url":url,"headers":headers,"payload":payload,"err":str(e),"t":time.time()},ensure_ascii=False),encoding='utf-8')
err = f"!!!Error: {type(e).__name__}"
err = f"!!!Error: {type(e).__name__}: {e}" if str(e) else f"!!!Error: {type(e).__name__}"
if attempt < sess.max_retries:
d = _delay(None, attempt)
print(f"[LLM Retry] {type(e).__name__}, retry in {d:.1f}s ({attempt+1}/{sess.max_retries+1})")
@@ -660,6 +660,7 @@ def _fix_messages(messages):
return merged
class NativeClaudeSession(BaseSession):
native_ua = "claude-cli/2.1.152 (native, cli)"
def __init__(self, cfg):
super().__init__(cfg)
self.fake_cc_system_prompt = cfg.get("fake_cc_system_prompt", False)
@@ -667,7 +668,7 @@ class NativeClaudeSession(BaseSession):
self._account_uuid = str(uuid.uuid4())
self._device_id = uuid.uuid4().hex + uuid.uuid4().hex[:32]
self.tools = None
if self.user_agent == self.default_ua: self.user_agent = "claude-cli/2.1.152 (native, cli)"
if self.user_agent == self.default_ua: self.user_agent = self.native_ua
def raw_ask(self, messages):
if self.max_tokens is None: self.max_tokens = 8192
model = self.model
@@ -738,6 +739,7 @@ class NativeClaudeSession(BaseSession):
return MockResponse(thinking, content, tool_calls, str(content_blocks))
class NativeOAISession(NativeClaudeSession):
native_ua = "codex_cli_rs/0.1.2025062000 (Windows 11 10.0.26100; x86_64) Windows_Terminal"
def raw_ask(self, messages):
messages = _fix_messages(messages)
messages = _ensure_thinking_blocks(messages, self.model)