# z.ai provider (Anthropic-compatible passthrough) ## Idea Support z.ai (GLM) as an optional upstream for **Anthropic-compatible requests** (`/v1/messages`), without applying any Google/Gemini-specific transformations when z.ai is selected. This keeps compatibility high (request/response shapes stay Anthropic-like) and avoids coupling z.ai traffic to the Google account pool. ## Result We added an optional “z.ai provider” that: - Is configured in proxy settings (`proxy.zai.*`). - Can be enabled/disabled and used via dispatch modes. - Forwards `/v1/messages` and `/v1/messages/count_tokens` to a z.ai Anthropic-compatible base URL. - Streams responses back without parsing SSE. ## Configuration Schema: `src-tauri/src/proxy/config.rs` - `ZaiConfig` in `src-tauri/src/proxy/config.rs` - `ZaiDispatchMode` in `src-tauri/src/proxy/config.rs` Key fields: - `proxy.zai.enabled` - `proxy.zai.base_url` (default `https://api.z.ai/api/anthropic`) - `proxy.zai.api_key` - `proxy.zai.dispatch_mode`: - `off` - `exclusive` - `pooled` - `fallback` - `proxy.zai.models` default mapping for `claude-*` request models: - `opus`, `sonnet`, `haiku` ## Routing logic Entry point: [`src-tauri/src/proxy/handlers/claude.rs`](../../src-tauri/src/proxy/handlers/claude.rs) - `handle_messages(...)` decides whether to route the request to z.ai or to the existing Google-backed flow. - `pooled` mode uses round-robin across `(google_accounts + 1)` slots, where slot `0` is z.ai. ## Upstream implementation Provider implementation: [`src-tauri/src/proxy/providers/zai_anthropic.rs`](../../src-tauri/src/proxy/providers/zai_anthropic.rs) - Forwarding is conservative about headers (does not forward the proxy’s own auth key). - Injects z.ai auth (`Authorization` / `x-api-key`) and forwards the request body as-is. - Uses the global upstream proxy config when configured. ## Validation 1) Enable z.ai in the UI (`src/pages/ApiProxy.tsx`) and set `dispatch_mode=exclusive`. - UI: [`src/pages/ApiProxy.tsx`](../../src/pages/ApiProxy.tsx) 2) Start the proxy. 3) Send a normal Anthropic request to `POST /v1/messages`. 4) Verify the request is served by z.ai (and Google accounts are not involved for this endpoint in exclusive mode).