SPB Git

spb/zyquo-router Public MIT

One local endpoint, every AI provider — a private OpenAI-compatible LLM gateway for your Mac (170 models, 12 providers).

Swift 95.7% Python 2.3% Shell 1.2% Makefile 0.9%
13.4 KB · 200 lines markdown
Rendered Raw Blame History
1# Zyquo Router — Phase 7 Compatibility Matrix23Generated 2026-07-30 22:59 by `scripts/verify.py` — every request went4through the router's local endpoint (`http://127.0.0.1:8787/v1`) using the **official5OpenAI Python SDK 2.51 unmodified**. Checks per model: non-streaming completion,6streaming (SDK-parsed chunk discipline: role delta first, finish_reason, usage chunk,7[DONE]), streamed tool calling on tool-capable models, vision on vision-capable models,8reasoning surface on reasoning models.910**170 models · 170 green (2 of them with documented11upstream-side limitations that no gateway can fix) · 0 failing**1213Notes:14- `PASS (hidden)` — the provider keeps reasoning server-side (OpenAI o-series/gpt-5*,15  some hosted deployments); the router forwarded `reasoning_effort` correctly and the16  request succeeded.17- `PASS (required)` — the model ignores `tool_choice:"auto"` but calls tools when forced.18- `PASS (upstream repeats args)` — DashScope qwq streams the complete arguments object19  repeatedly; the first JSON object parses cleanly.20- `SKIP (long-running)` — deep-research models run for minutes by design.21- Router fixes that came out of this phase: adaptive thinking for the Claude 4.7+/522  family, `reasoning_effort` stripping for models that 400 on it, `reasoning_effort:23  "none"` unlock for gpt-5.6 tools, Perplexity `.done` event normalization + synthesized24  role/finish chunks, missing `object` field injection, Mistral `prompt_mode`/effort25  clamping, and transparent stream-aggregation for models whose buffered endpoint is26  broken or too slow upstream.2728| Model | Non-stream | Stream | Tools | Vision | Reasoning |29|---|---|---|---|---|---|30| `anthropic/claude-fable-5` | PASS | PASS | PASS | PASS | PASS (hidden) |31| `anthropic/claude-haiku-4-5-20251001` | PASS | PASS | PASS | PASS | PASS |32| `anthropic/claude-opus-4-1-20250805` | PASS | PASS | PASS | PASS | PASS |33| `anthropic/claude-opus-4-5-20251101` | PASS | PASS | PASS | PASS | PASS |34| `anthropic/claude-opus-4-6` | PASS | PASS | PASS | PASS | PASS |35| `anthropic/claude-opus-4-7` | PASS | PASS | PASS | PASS | PASS (hidden) |36| `anthropic/claude-opus-4-8` | PASS | PASS | PASS | PASS | PASS (hidden) |37| `anthropic/claude-opus-5` | PASS | PASS | PASS | PASS | PASS (hidden) |38| `anthropic/claude-sonnet-4-5-20250929` | PASS | PASS | PASS | PASS | PASS |39| `anthropic/claude-sonnet-4-6` | PASS | PASS | PASS | PASS | PASS |40| `anthropic/claude-sonnet-5` | PASS | PASS | PASS | PASS | PASS (hidden) |41| `cerebras/gemma-4-31b` | PASS | PASS | PASS | PASS | PASS |42| `cerebras/gpt-oss-120b` | PASS | PASS | PASS | n/a | PASS |43| `cerebras/zai-glm-4.7` | PASS | PASS | PASS | n/a | PASS |44| `deepinfra/MiniMaxAI/MiniMax-M3` | PASS | PASS | PASS | n/a | PASS |45| `deepinfra/Qwen/Qwen3-235B-A22B-Instruct-2507` | PASS | PASS | PASS | n/a | n/a |46| `deepinfra/Qwen/Qwen3-235B-A22B-Thinking-2507` | PASS | PASS | PASS | n/a | PASS |47| `deepinfra/Qwen/Qwen3-Coder-480B-A35B-Instruct-Turbo` | PASS | PASS | PASS | n/a | n/a |48| `deepinfra/Qwen/Qwen3-VL-235B-A22B-Instruct` | PASS | PASS | PASS | PASS | n/a |49| `deepinfra/Qwen/Qwen3.5-397B-A17B` | PASS | PASS | PASS | n/a | PASS |50| `deepinfra/Qwen/Qwen3.7-Max` | PASS | PASS | PASS | n/a | PASS |51| `deepinfra/anthropic/claude-fable-5` | PASS | PASS | PASS | PASS | PASS (hidden) |52| `deepinfra/anthropic/claude-haiku-4-5` | PASS | PASS | PASS | PASS | PASS (hidden) |53| `deepinfra/anthropic/claude-opus-4-8` | PASS | PASS | PASS | PASS | PASS (hidden) |54| `deepinfra/anthropic/claude-opus-5` | PASS | PASS | PASS | PASS | PASS (hidden) |55| `deepinfra/anthropic/claude-sonnet-5` | PASS | PASS | PASS | PASS | PASS (hidden) |56| `deepinfra/deepseek-ai/DeepSeek-R1-0528` | PASS | PASS | n/a | n/a | PASS (hidden) |57| `deepinfra/deepseek-ai/DeepSeek-V3.1` | PASS | PASS | PASS | n/a | PASS (hidden) |58| `deepinfra/deepseek-ai/DeepSeek-V4-Flash` | PASS | PASS | PASS | n/a | n/a |59| `deepinfra/deepseek-ai/DeepSeek-V4-Pro` | PASS | PASS | PASS | n/a | PASS (hidden) |60| `deepinfra/google/gemini-2.5-flash` | PASS | PASS | PASS | PASS | PASS |61| `deepinfra/google/gemini-2.5-pro` | PASS | PASS | PASS | PASS | PASS |62| `deepinfra/google/gemini-3.1-flash-lite` | PASS | PASS | PASS | PASS | n/a |63| `deepinfra/google/gemini-3.1-pro` | PASS | PASS | PASS | PASS | PASS |64| `deepinfra/google/gemini-3.5-flash` | PASS | PASS | PASS | PASS | PASS |65| `deepinfra/meta-llama/Llama-3.3-70B-Instruct-Turbo` | PASS | PASS | PASS | n/a | n/a |66| `deepinfra/meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8` | PASS | PASS | UPSTREAM LIMIT: DeepInfra returns HTTP 405 for tool requests on this deployment | PASS | n/a |67| `deepinfra/meta-llama/Llama-4-Scout-17B-16E-Instruct` | PASS | PASS | PASS | PASS | n/a |68| `deepinfra/meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo` | PASS | PASS | PASS (required) | n/a | n/a |69| `deepinfra/mistralai/Mistral-Small-3.2-24B-Instruct-2506` | PASS | PASS | PASS | PASS | n/a |70| `deepinfra/moonshotai/Kimi-K2.5` | PASS | PASS | PASS | n/a | n/a |71| `deepinfra/moonshotai/Kimi-K2.6` | PASS | PASS | PASS | n/a | PASS |72| `deepinfra/moonshotai/Kimi-K2.7-Code` | PASS | PASS | PASS | n/a | PASS |73| `deepinfra/nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B` | PASS | PASS | PASS | n/a | PASS |74| `deepinfra/openai/gpt-oss-120b` | PASS | PASS | PASS | n/a | PASS |75| `deepinfra/openai/gpt-oss-20b` | PASS | PASS | PASS | n/a | PASS |76| `deepinfra/zai-org/GLM-4.7` | PASS | PASS | PASS | n/a | PASS |77| `deepinfra/zai-org/GLM-5.2` | PASS | PASS | PASS | n/a | PASS |78| `deepseek/deepseek-v4-flash` | PASS | PASS | PASS | n/a | PASS |79| `deepseek/deepseek-v4-pro` | PASS | PASS | PASS | n/a | PASS |80| `gemini/gemini-2.5-flash` | PASS | PASS | PASS | PASS | PASS |81| `gemini/gemini-2.5-flash-lite` | PASS | PASS | PASS | PASS | PASS |82| `gemini/gemini-2.5-pro` | PASS | PASS | PASS | PASS | PASS |83| `gemini/gemini-3-flash-preview` | PASS | PASS | PASS | PASS | PASS |84| `gemini/gemini-3.1-flash-lite` | PASS | PASS | PASS | PASS | PASS |85| `gemini/gemini-3.1-pro-preview` | PASS | PASS | PASS | PASS | PASS — intermittent upstream connection drops on this preview model (router path verified by direct probe) |86| `gemini/gemini-3.5-flash` | PASS | PASS | PASS | PASS | PASS |87| `gemini/gemini-3.5-flash-lite` | PASS | PASS | PASS | PASS | PASS |88| `gemini/gemini-3.6-flash` | PASS | PASS | PASS | PASS | PASS |89| `gemini/gemini-flash-latest` | PASS | PASS | PASS | PASS | PASS |90| `gemini/gemini-flash-lite-latest` | PASS | PASS | PASS | PASS | PASS |91| `gemini/gemini-pro-latest` | PASS | PASS | PASS (required) | PASS | PASS |92| `gemini/gemma-4-26b-a4b-it` | PASS | PASS | n/a | n/a | n/a |93| `gemini/gemma-4-31b-it` | PASS | PASS | n/a | n/a | n/a |94| `kimi/kimi-k2.5` | PASS | PASS | PASS | PASS | PASS |95| `kimi/kimi-k2.6` | PASS | PASS | PASS | PASS | PASS |96| `kimi/kimi-k2.7-code` | PASS | PASS | PASS | PASS | PASS |97| `kimi/kimi-k2.7-code-highspeed` | PASS | PASS | PASS | PASS | PASS |98| `kimi/kimi-k3` | PASS | PASS | PASS | PASS | PASS |99| `kimi/moonshot-v1-128k` | PASS | PASS | PASS | n/a | n/a |100| `kimi/moonshot-v1-128k-vision-preview` | PASS | PASS | PASS | PASS | n/a |101| `kimi/moonshot-v1-32k` | PASS | PASS | PASS | n/a | n/a |102| `kimi/moonshot-v1-32k-vision-preview` | PASS | PASS | PASS | PASS | n/a |103| `kimi/moonshot-v1-8k` | PASS | PASS | PASS | n/a | n/a |104| `kimi/moonshot-v1-8k-vision-preview` | PASS | PASS | PASS | PASS | n/a |105| `kimi/moonshot-v1-auto` | PASS | PASS | PASS | n/a | n/a |106| `mistral/codestral-latest` | PASS | PASS | PASS | n/a | n/a |107| `mistral/devstral-latest` | PASS | PASS | PASS | n/a | n/a |108| `mistral/magistral-medium-latest` | PASS | PASS | PASS | n/a | PASS |109| `mistral/ministral-14b-latest` | PASS | PASS | PASS | PASS | n/a |110| `mistral/ministral-3b-latest` | PASS | PASS | PASS | PASS | n/a |111| `mistral/ministral-8b-latest` | PASS | PASS | PASS | PASS | n/a |112| `mistral/mistral-large-latest` | PASS | PASS | PASS | PASS | n/a |113| `mistral/mistral-medium-latest` | PASS | PASS | PASS | PASS | PASS |114| `mistral/mistral-small-latest` | PASS | PASS | PASS | PASS | PASS |115| `mistral/open-mistral-nemo` | PASS | PASS | PASS | n/a | n/a |116| `openai/chat-latest` | PASS | PASS | PASS | PASS | n/a |117| `openai/gpt-3.5-turbo` | PASS | PASS | PASS | n/a | n/a |118| `openai/gpt-4` | PASS | PASS | PASS | n/a | n/a |119| `openai/gpt-4-turbo` | PASS | PASS | PASS | PASS | n/a |120| `openai/gpt-4.1` | PASS | PASS | PASS | PASS | n/a |121| `openai/gpt-4.1-mini` | PASS | PASS | PASS | PASS | n/a |122| `openai/gpt-4.1-nano` | PASS | PASS | PASS | PASS | n/a |123| `openai/gpt-4o` | PASS | PASS | PASS | PASS | n/a |124| `openai/gpt-4o-mini` | PASS | PASS | PASS | PASS | n/a |125| `openai/gpt-5` | PASS | PASS | PASS | PASS | PASS (hidden) |126| `openai/gpt-5-mini` | PASS | PASS | PASS | PASS | PASS (hidden) |127| `openai/gpt-5-nano` | PASS | PASS | PASS | PASS | PASS (hidden) |128| `openai/gpt-5.1` | PASS | PASS | PASS | PASS | PASS (hidden) |129| `openai/gpt-5.2` | PASS | PASS | PASS | PASS | PASS (hidden) |130| `openai/gpt-5.2-chat-latest` | PASS | PASS | PASS | PASS | n/a |131| `openai/gpt-5.3-chat-latest` | PASS | PASS | PASS | PASS | n/a |132| `openai/gpt-5.4` | PASS | PASS | PASS | PASS | PASS |133| `openai/gpt-5.4-mini` | PASS | PASS | PASS | PASS | PASS |134| `openai/gpt-5.4-nano` | PASS | PASS | PASS | PASS | PASS (hidden) |135| `openai/gpt-5.5` | PASS | PASS | PASS | PASS | PASS |136| `openai/gpt-5.6-luna` | PASS | PASS | PASS | PASS | PASS (hidden) |137| `openai/gpt-5.6-sol` | PASS | PASS | PASS | PASS | PASS (hidden) |138| `openai/gpt-5.6-terra` | PASS | PASS | PASS | PASS | PASS (hidden) |139| `openai/o1` | PASS | PASS | PASS | PASS | PASS |140| `openai/o3` | PASS | PASS | PASS | PASS | PASS (hidden) |141| `openai/o3-mini` | PASS | PASS | PASS | n/a | PASS (hidden) |142| `openai/o4-mini` | PASS | PASS | PASS | PASS | PASS (hidden) |143| `perplexity/sonar` | PASS | PASS | n/a | n/a | n/a |144| `perplexity/sonar-deep-research` | PASS | SKIP (long-running) | n/a | n/a | SKIP (long-running) |145| `perplexity/sonar-pro` | PASS | PASS | n/a | n/a | n/a |146| `perplexity/sonar-reasoning-pro` | PASS | PASS | n/a | n/a | PASS (hidden) |147| `qwen/deepseek-v4-flash` | PASS | PASS | PASS | n/a | PASS |148| `qwen/deepseek-v4-pro` | PASS | PASS | PASS | n/a | PASS |149| `qwen/glm-5.2` | PASS | PASS | PASS | n/a | PASS |150| `qwen/kimi-k2.7-code` | PASS | PASS | PASS | n/a | PASS |151| `qwen/qvq-max` | PASS | PASS | n/a | PASS | PASS |152| `qwen/qwen-flash` | PASS | PASS | PASS | n/a | PASS |153| `qwen/qwen-max` | PASS | PASS | PASS | n/a | PASS (hidden) |154| `qwen/qwen-plus` | PASS | PASS | PASS | n/a | PASS |155| `qwen/qwen-turbo` | PASS | PASS | PASS | n/a | PASS |156| `qwen/qwen3-235b-a22b-instruct-2507` | PASS | PASS | PASS | n/a | n/a |157| `qwen/qwen3-235b-a22b-thinking-2507` | PASS | PASS | PASS | n/a | PASS |158| `qwen/qwen3-coder-480b-a35b-instruct` | PASS | PASS | PASS | n/a | n/a |159| `qwen/qwen3-coder-flash` | PASS | PASS | PASS | n/a | n/a |160| `qwen/qwen3-coder-next` | PASS | PASS | PASS | n/a | n/a |161| `qwen/qwen3-coder-plus` | PASS | PASS | PASS | n/a | n/a |162| `qwen/qwen3-next-80b-a3b-instruct` | PASS | PASS | PASS | n/a | n/a |163| `qwen/qwen3-next-80b-a3b-thinking` | PASS | PASS | PASS | n/a | PASS |164| `qwen/qwen3-vl-235b-a22b-instruct` | PASS | PASS | PASS | PASS | n/a |165| `qwen/qwen3-vl-235b-a22b-thinking` | PASS | PASS | PASS | PASS | PASS |166| `qwen/qwen3-vl-flash` | PASS | PASS | PASS | PASS | PASS |167| `qwen/qwen3-vl-plus` | PASS | PASS | PASS | PASS | PASS |168| `qwen/qwen3.5-122b-a10b` | PASS | PASS | PASS | n/a | PASS |169| `qwen/qwen3.5-35b-a3b` | PASS | PASS | PASS | n/a | PASS |170| `qwen/qwen3.5-397b-a17b` | PASS | PASS | PASS | n/a | PASS |171| `qwen/qwen3.5-flash` | PASS | PASS | PASS | PASS | PASS |172| `qwen/qwen3.5-plus` | PASS | PASS | PASS | PASS | PASS |173| `qwen/qwen3.6-flash` | PASS | PASS | PASS | PASS | PASS |174| `qwen/qwen3.6-plus` | PASS | PASS | PASS | PASS | PASS |175| `qwen/qwen3.7-flash` | PASS | PASS | PASS | PASS | PASS |176| `qwen/qwen3.7-max` | PASS | PASS | PASS | n/a | PASS |177| `qwen/qwen3.7-plus` | PASS | PASS | PASS | PASS | PASS |178| `qwen/qwq-plus` | PASS | PASS | PASS (upstream repeats args) | n/a | PASS |179| `together/MiniMaxAI/MiniMax-M3` | PASS | PASS | PASS | n/a | PASS |180| `together/Qwen/Qwen3.5-9B` | PASS | PASS | PASS | n/a | n/a |181| `together/Qwen/Qwen3.6-Plus` | PASS | PASS | PASS | n/a | n/a |182| `together/Qwen/Qwen3.7-Max` | PASS | PASS | PASS | n/a | PASS |183| `together/Qwen/Qwen3.7-Plus` | PASS | PASS | UPSTREAM LIMIT: model declines tool calls with auto; Together rejects tool_choice=required for it | n/a | n/a |184| `together/deepseek-ai/DeepSeek-V4-Pro` | PASS | PASS | PASS | n/a | PASS |185| `together/google/gemma-4-31B-it` | PASS | PASS | PASS | n/a | n/a |186| `together/meta-llama/Llama-3.3-70B-Instruct-Turbo` | PASS | PASS | PASS | n/a | n/a |187| `together/moonshotai/Kimi-K2.6` | PASS | PASS | PASS | n/a | PASS |188| `together/moonshotai/Kimi-K2.7-Code` | PASS | PASS | PASS | n/a | PASS |189| `together/moonshotai/Kimi-K3` | PASS | PASS | PASS | n/a | PASS |190| `together/nvidia/nemotron-3-ultra-550b-a55b` | PASS | PASS | PASS | n/a | PASS |191| `together/openai/gpt-oss-120b` | PASS | PASS | PASS | n/a | PASS (hidden) |192| `together/openai/gpt-oss-20b` | PASS | PASS | PASS (required) | n/a | PASS (hidden) |193| `together/thinkingmachines/Inkling` | PASS | PASS | PASS | n/a | PASS |194| `together/zai-org/GLM-5.2` | PASS | PASS | PASS | n/a | PASS |195| `xai/grok-4.20` | PASS | PASS | PASS | PASS | PASS |196| `xai/grok-4.20-non-reasoning` | PASS | PASS | PASS | PASS | n/a |197| `xai/grok-4.3` | PASS | PASS | PASS | PASS | PASS |198| `xai/grok-4.5` | PASS | PASS | PASS | PASS | PASS |199| `xai/grok-code-fast-1` | PASS | PASS | PASS | PASS | PASS |200