diff --git a/llmcore.py b/llmcore.py index df10cda1..a374d8eb 100644 --- a/llmcore.py +++ b/llmcore.py @@ -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)