spb/zyquo-cloud Public MIT
Native macOS AI chat client for 12 cloud providers — your keys, every cloud model, one beautiful chat.
Swift 97.4%
Shell 1.7%
Makefile 1%
1<!--2 live-probes.md3 Zyquo Cloud4 Author: Simon-Pierre Boucher5 Mail: contact@spboucher.ai6-->78# Live API probes — 2026-07-30 (real keys, ground truth)910All 12 providers were probed live today. **Every key authenticated and every provider returned a11successful streamed chat completion (HTTP 200).** Raw captures in `/tmp/zyquo-probe/` (models JSON12+ `sse/*.txt`).1314## `/models` listing results1516| Provider | Endpoint | Result |17|---|---|---|18| OpenAI | `GET https://api.openai.com/v1/models` (Bearer) | 200 — 132 models |19| Anthropic | `GET https://api.anthropic.com/v1/models?limit=100` (x-api-key + anthropic-version) | 200 — 11 models |20| xAI | `GET https://api.x.ai/v1/models` (Bearer) | 200 — 10 models |21| Mistral | `GET https://api.mistral.ai/v1/models` (Bearer) | 200 — 60 models |22| Gemini | `GET https://generativelanguage.googleapis.com/v1beta/models?key=…` | 200 — 41 generateContent-capable |23| Qwen/DashScope | `GET https://dashscope-intl.aliyuncs.com/compatible-mode/v1/models` (Bearer) | 200 — 151 models |24| DeepSeek | `GET https://api.deepseek.com/models` (Bearer) | 200 — 2 models: `deepseek-v4-flash`, `deepseek-v4-pro` |25| Kimi/Moonshot | `GET https://api.moonshot.ai/v1/models` (Bearer) | 200 — 12 models (kimi-k2.5/k2.6/k2.7-code[-highspeed]/k3, moonshot-v1 family) |26| Perplexity | `GET https://api.perplexity.ai/models` | **404 — no models endpoint** (catalog must be built-in from docs) |27| Together | `GET https://api.together.xyz/v1/models` (Bearer) | 200 — large catalog (~400KB JSON, embeds `context_length` + `pricing`) |28| DeepInfra | `GET https://api.deepinfra.com/v1/openai/models` (Bearer) | 200 — 174 models |29| Cerebras | `GET https://api.cerebras.ai/v1/models` (Bearer) | 200 — 3 models: `gemma-4-31b`, `gpt-oss-120b`, `zai-glm-4.7` |3031## Streaming chat completion smoke test (all HTTP 200)3233Model used per provider: OpenAI `gpt-4o-mini`, Anthropic `claude-haiku-4-5-20251001`, xAI `grok-4.3`,34Mistral `mistral-small-latest`, Gemini-compat `gemini-flash-latest`, Qwen `qwen-flash`,35DeepSeek `deepseek-v4-flash`, Kimi `kimi-k2.5`, Perplexity `sonar`,36Together `meta-llama/Llama-3.3-70B-Instruct-Turbo`, DeepInfra `deepseek-ai/DeepSeek-V4-Flash`,37Cerebras `gpt-oss-120b`.3839## SSE shape observations (captured live)4041- **OpenAI**: `chat.completion.chunk` deltas; with `stream_options:{include_usage:true}` the final42 pre-`[DONE]` chunk has empty `choices` and a full `usage` object (incl. `completion_tokens_details.reasoning_tokens`).43 Chunks carry an `obfuscation` padding field — ignore unknown fields when decoding.44- **Anthropic**: named SSE events observed: `message_start`, `content_block_start`,45 `content_block_delta`, `content_block_stop`, `message_delta`, `message_stop`, plus `ping` events.46- **DeepSeek**: `deepseek-v4-flash` emits `delta.reasoning_content` string deltas **by default**47 (22 reasoning deltas before the answer in a trivial prompt), then `delta.content`. Both fields48 present on every delta (one is null).49- **Perplexity**: chunks include `citations` (array of URLs) and `search_results` alongside50 `choices` and `usage`; each chunk also duplicates a cumulative `message` next to `delta`.51- **Gemini (OpenAI-compat endpoint)**: works with Bearer auth; deltas can include52 `extra_content.google.thought_signature` (opaque base64) — must be tolerated/ignored;53 `finish_reason:"length"` seen when max_tokens hit mid-thought.54- **Qwen (compat-mode intl)**: standard OpenAI chunk shape; `usage` null until final chunk.55- **Kimi, Mistral, xAI, Together, DeepInfra, Cerebras**: standard OpenAI-style chunks, `data: [DONE]` terminator.5657## Consequences for the app58591. `deepseek-v4-flash` / `v4-pro` replace the old `deepseek-chat` / `deepseek-reasoner` aliases in the catalog60 (verify alias behavior in Phase 7 — the old aliases may still route).612. Perplexity requires a fully built-in catalog (no dynamic refresh).623. Cerebras `/models` returns fewer models than docs may list — treat docs as the catalog source, `/models` as availability check.634. JSON decoders must ignore unknown fields everywhere (OpenAI `obfuscation`, Gemini `extra_content`, Perplexity extras).645. Reasoning-delta handling needed for: DeepSeek (`reasoning_content`), Qwen thinking models, Anthropic (`thinking_delta`), Gemini (thought signatures).65