feat: align z.ai headers with OpenClaw, enable OpenRouter caching (PR #4 from cobra91)

feat: align z.ai headers with OpenClaw, enable OpenRouter caching
This commit is contained in:
Roman | RyzenAdvanced
2026-05-25 22:22:16 +04:00
committed by GitHub
Unverified

View File

@@ -1300,6 +1300,27 @@ def forwarded_headers(request_headers, extra=None, browser_ua=False):
headers.update(extra) headers.update(extra)
return headers return headers
def _openrouter_extra():
if not TARGET_URL:
return {}
if "z.ai" in TARGET_URL:
return {
"HTTP-Referer": "https://openclaw.ai",
"X-OpenRouter-Title": "OpenClaw",
"X-OpenRouter-Categories":
"cli-agent,cloud-agent,programming-app,creative-writing,"
"writing-assistant,general-chat,personal-agent",
}
if "openrouter.ai" in TARGET_URL:
return {
"HTTP-Referer": "https://chats-llm.com",
"X-OpenRouter-Title": "Chats-LLM",
"X-OpenRouter-Categories": "general-chat, ide-extension",
"X-OpenRouter-Cache": "true",
}
return {}
_MAX_INPUT_ITEMS = 30 _MAX_INPUT_ITEMS = 30
_MAX_TOOL_OUTPUT_CHARS = 8000 _MAX_TOOL_OUTPUT_CHARS = 8000
_COMPACT_KEEP_RECENT = 10 _COMPACT_KEEP_RECENT = 10
@@ -4450,6 +4471,7 @@ class Handler(http.server.BaseHTTPRequestHandler):
fwd = forwarded_headers(self.headers, { fwd = forwarded_headers(self.headers, {
"Content-Type": "application/json", "Content-Type": "application/json",
"Authorization": f"Bearer {effective_key}", "Authorization": f"Bearer {effective_key}",
**_openrouter_extra(),
}, browser_ua=True) }, browser_ua=True)
print(f"[{self._session_id}] POST {target} model={model} stream={stream} items={len(input_data) if isinstance(input_data,list) else 1}", file=sys.stderr) print(f"[{self._session_id}] POST {target} model={model} stream={stream} items={len(input_data) if isinstance(input_data,list) else 1}", file=sys.stderr)
chat_body_b = json.dumps(chat_body).encode() chat_body_b = json.dumps(chat_body).encode()
@@ -5087,6 +5109,7 @@ class Handler(http.server.BaseHTTPRequestHandler):
fwd = forwarded_headers(self.headers, { fwd = forwarded_headers(self.headers, {
"Content-Type": "application/json", "Content-Type": "application/json",
"Authorization": f"Bearer {r_key}", "Authorization": f"Bearer {r_key}",
**_openrouter_extra(),
}, browser_ua=True) }, browser_ua=True)
print(f"[{self._session_id}] trying route '{route.get('name', r_url)}' model={r_model}", file=sys.stderr) print(f"[{self._session_id}] trying route '{route.get('name', r_url)}' model={r_model}", file=sys.stderr)
req = urllib.request.Request(target, data=json.dumps(chat_body).encode(), headers=fwd) req = urllib.request.Request(target, data=json.dumps(chat_body).encode(), headers=fwd)
@@ -5349,6 +5372,7 @@ class Handler(http.server.BaseHTTPRequestHandler):
"Content-Type": "application/json", "Content-Type": "application/json",
"x-api-key": API_KEY, "x-api-key": API_KEY,
"anthropic-version": "2023-06-01", "anthropic-version": "2023-06-01",
**_openrouter_extra(),
}), }),
) )
self._forward(req, stream, model, self._forward(req, stream, model,
@@ -5416,7 +5440,7 @@ class Handler(http.server.BaseHTTPRequestHandler):
"threadId": thread_id, "threadId": thread_id,
} }
fwd = forwarded_headers(self.headers, headers_extra, browser_ua=True) fwd = forwarded_headers(self.headers, {**headers_extra, **_openrouter_extra()}, browser_ua=True)
print(f"[{self._session_id}] POST {target} model={model} stream={stream} attempt={attempt} [command-code]", file=sys.stderr) print(f"[{self._session_id}] POST {target} model={model} stream={stream} attempt={attempt} [command-code]", file=sys.stderr)
req = urllib.request.Request( req = urllib.request.Request(
target, target,
@@ -5950,7 +5974,7 @@ class Handler(http.server.BaseHTTPRequestHandler):
req_body["reasoning_effort"] = REASONING_EFFORT req_body["reasoning_effort"] = REASONING_EFFORT
req_body_b = json.dumps(req_body).encode() req_body_b = json.dumps(req_body).encode()
fwd = forwarded_headers(self.headers, headers_extra, browser_ua=True) fwd = forwarded_headers(self.headers, {**headers_extra, **_openrouter_extra()}, browser_ua=True)
print(f"[auto-sense] POST {target} model={model} attempt={attempt} schema={schema.hints()}", file=sys.stderr) print(f"[auto-sense] POST {target} model={model} attempt={attempt} schema={schema.hints()}", file=sys.stderr)
req = urllib.request.Request(target, data=req_body_b, headers=fwd) req = urllib.request.Request(target, data=req_body_b, headers=fwd)