
# Zyquo Router
### One local endpoint. Every AI provider. Spec-exact.
*Turn your Mac into a private LLM gateway — 170 models from 12 providers behind a single OpenAI-compatible API.*
[](https://github.com/spboucher-ai/zyquo-router/releases/latest)
[](#-requirements)
[](#%EF%B8%8F-building-from-source)
[](LICENSE)
[](https://github.com/spboucher-ai/zyquo-router/releases)
[](#-installation)
[](#-installation)
[](#%EF%B8%8F-architecture)
[](#%EF%B8%8F-architecture)
`Anthropic` · `OpenAI` · `xAI` · `Mistral` · `Google Gemini` · `Alibaba Qwen` · `DeepSeek` · `Kimi` · `Perplexity` · `Together AI` · `DeepInfra` · `Cerebras`
---
## 📖 Table of Contents
- [Why Zyquo Router](#-why-zyquo-router)
- [Features](#-features)
- [Screenshots](#-screenshots)
- [Installation](#-installation)
- [Requirements](#-requirements)
- [Usage](#-usage)
- [Architecture](#%EF%B8%8F-architecture)
- [Building from Source](#%EF%B8%8F-building-from-source)
- [Verification](#-verification)
- [Roadmap](#-roadmap)
- [Contributing](#-contributing)
- [License](#-license)
- [Author](#-author)
---
## 💡 Why Zyquo Router
Every AI provider speaks a slightly different dialect. Anthropic wants `x-api-key` and
content blocks; Gemini wants `contents/parts` and camelCase; Mistral renames `seed`;
Perplexity ends its streams with a non-spec event. Your tools — SDKs, CLIs, IDE plugins,
agents — mostly speak **one** dialect: the OpenAI API.
**Zyquo Router** runs a tiny, native gateway on your Mac. You store your provider keys
once in an encrypted vault, pick a port, press **Start** — and everything that can talk
to OpenAI can now talk to *twelve providers* through `http://localhost:8787/v1`, with
per-request model routing, live traffic inspection, and cost tracking.
Think **OpenRouter / LiteLLM — but native, local, private, and gorgeous.**
- 🔒 **Private by design** — keys never leave your Mac; requests go straight from your
machine to the provider. No middleman, no telemetry, no accounts.
- 🎯 **Spec-exact** — byte-exact `chat.completion.chunk` SSE streams that the official
OpenAI Python and JS SDKs parse **unmodified** (verified across all 170 models).
- 🖥 **A real Mac app** — SwiftUI control room with a menu bar extra, not a Docker
container with a YAML file.
---
## ✨ Features
### 🌐 The Gateway
| Capability | Details |
|---|---|
| **OpenAI-compatible API** | `POST /v1/chat/completions` (streaming + non-streaming), `GET /v1/models`, `GET /v1/models/{id}`, `GET /health` |
| **170 models, 12 providers** | Full catalog with context windows, capabilities, and per-Mtok pricing under the `x_zyquo` extension key |
| **Namespaced routing** | `provider/model-id` (e.g. `anthropic/claude-sonnet-4-5`, `deepinfra/meta-llama/Llama-4-Maverick`); bare IDs accepted when unambiguous |
| **Aliases** | Friendly names — `fast` → `cerebras/…`, `best` → `anthropic/…` |
| **Fallback chains** | Ordered model lists tried on upstream failure; the response honestly reports the model that answered |
| **Full translation** | Anthropic Messages API and Gemini `generateContent` translated bidirectionally: system extraction, turn merging, tools ⇄ `tool_use`/`functionCall`, images, finish-reason and usage normalization |
| **Tool calling** | Streamed `tool_calls` argument deltas in exact OpenAI shape, from all three wire formats |
| **Vision** | `image_url` content parts (data-URI base64 and remote URLs where supported) |
| **Reasoning models** | Thinking output normalized to `reasoning_content` (DeepSeek convention) — works with Claude thinking, Gemini thoughts, DeepSeek-R1, Qwen, Magistral, Perplexity `