SPB Git

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%
12.8 KB

# Alibaba Qwen (DashScope / Model Studio) — Provider Research

Research date: 2026-07-30. Live /models probe (151 models) from dashscope-intl.aliyuncs.com/compatible-mode/v1/models with a real key is the authoritative ID list. Official docs: Model Studio — Supported Models, Text generation models, Deep thinking, Vision models, Rate limits, Error codes.


# 1. Base URL & Endpoints

Zyquo Cloud uses the international (Singapore) OpenAI-compatible endpoint:

  • Base URL: https://dashscope-intl.aliyuncs.com/compatible-mode/v1
  • Chat completions: POST /chat/completions
  • Model listing: GET /models (verified live today — 151 models)

Other endpoints (documented, not used by the app):

  • China (Beijing) endpoint: https://dashscope.aliyuncs.com/compatible-mode/v1 — separate API keys, separate (60–70% cheaper) pricing, separate catalog. Do not mix keys across regions (a region-mismatched key returns 401 "Incorrect API key provided").
  • Native DashScope API: https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/text-generation/generation — not needed; the OpenAI-compatible mode covers everything Zyquo Cloud does.
  • An Anthropic-compatible mode also exists per the models page ("OpenAI-compatible, Anthropic-compatible, and DashScope" modes) — not used.

# 2. Authentication

Standard Bearer auth (confirmed by live probe):

text
Authorization: Bearer sk-...

Keys start with sk- and are region-bound (international console key for the intl endpoint).

# 3. Chat Model Catalog (text-generation chat models only)

Filtered from the live 151-model probe: image (qwen-image*, wan*, z-image*), TTS/ASR (qwen3-tts*, qwen3-asr*, tongyi-tingwu-slp), omni/realtime (qwen*-omni*, qwen3-s2s*), live-translate, machine-translation (qwen-mt-*), OCR (qwen-vl-ocr*), and embeddings (text-embedding-v3/v4) are excluded.

Pricing caveat: the official international docs pages do not render pricing tables to scrapers; USD prices below marked "(3p)" come from third-party trackers (VentureBeat, codersera, OpenRouter) and should be re-verified in the Model Studio console; treat as unverified. Note Qwen commercial models use tiered pricing by input length on some SKUs, which explains conflicting third-party numbers (e.g. qwen3.7-plus quoted at $0.32/$1.28 and $0.40/$1.60 per 1M in/out).

API ID Context Max output Price /1M in/out (USD) Vision Tools Thinking Notes
qwen3.7-max 1M unverified ~$2.50 / $7.50 (3p) no (text-only) yes on by default Flagship, agentic. Snapshots: -2026-05-17, -2026-05-20, -2026-06-08, plus qwen3.7-max-preview
qwen3.7-plus 1M 65,536 (3p) ~$0.32 / $1.28 (3p) yes (image+video, up to 2 h video) yes on by default Multimodal hybrid agent (screen reading / GUI ops). Snapshot -2026-05-26
qwen3.7-flash 1M 65,536 (3p) ~$0.03 / $0.13 (3p) yes yes hybrid Cheapest current-gen. Snapshot -2026-07-15
qwen3.6-plus 1M unverified unverified yes yes hybrid Snapshot -2026-04-02
qwen3.6-flash 1M unverified unverified yes (2 h / 2 GB video) yes hybrid "Near-flagship, same feature set as qwen3.7-plus at lower price". Snapshot -2026-04-16
qwen3.6-max-preview 256K unverified unverified no yes hybrid Preview
qwen3.5-plus 1M unverified unverified yes (image+video) yes on by default Snapshots -2026-02-15, -2026-04-20
qwen3.5-flash 1M unverified unverified yes yes hybrid Snapshot -2026-02-23
API ID Context Thinking Notes
qwen-max 128K off by default (enable_thinking) Alias; qwen3-max + snapshots -2025-09-23, -2026-01-23, qwen3-max-preview also live
qwen-plus 1M off by default Alias. Snapshots -2025-01-25-2025-12-01, qwen-plus-latest, qwen-plus-character (role-play variant)
qwen-turbo 1M off by default Legacy tier
qwen-flash 1M off by default Highest rate quota (5M TPM). qwen-flash-character variant

# Coder family

API ID Context Thinking Notes
qwen3-coder-plus 1M no Snapshots -2025-07-22, -2025-09-23; alias qwen-coder-plus also live
qwen3-coder-flash 1M no Cheap coding
qwen3-coder-next unverified no Newest; "repository-level code understanding, multi-turn tool interactions" (newly-released models)
qwen3-coder-480b-a35b-instruct 256K (unverified) no Open-weights hosted

# Vision-language chat models

Legacy qwen-vl-max / qwen-vl-plus are live but the docs mark them "Legacy … no longer recommended". Prefer qwen3-vl or the multimodal qwen3.5+/3.6+/3.7-plus/flash models.

API ID Context Max output Thinking Notes
qwen3-vl-plus 1M 64K hybrid Video up to 1 h / 2 GB. Snapshots -2025-09-23, -2025-12-19
qwen3-vl-flash 1M 64K hybrid Snapshots -2025-10-15, -2026-01-22
qwen3-vl-235b-a22b-instruct 128K (unverified) no Open-weights hosted
qwen3-vl-235b-a22b-thinking 128K (unverified) always Open-weights hosted
qvq-max 128K (unverified) always (visual reasoning) Streaming-only reasoning output
qwen-vl-max, qwen-vl-plus 32K (unverified) no Legacy

# Reasoning-only

API ID Context Notes
qwq-plus 128K Always thinks — cannot be disabled; snapshot -2025-03-05. Streaming only (unverified for current build)

# Open-weights Qwen hosted on DashScope

API ID Context Thinking
qwen3.5-397b-a17b unverified (likely 256K+) on by default (deep-thinking doc: "Qwen3.5 open-source variants" think by default)
qwen3.5-122b-a10b unverified on by default
qwen3.5-35b-a3b unverified on by default
qwen3.5-27b unverified on by default
qwen3.6-35b-a3b, qwen3.6-27b unverified hybrid (unverified)
qwen3-235b-a22b 128K hybrid via enable_thinking; streaming-only (non-streaming calls error, per deep-thinking doc)
qwen3-235b-a22b-instruct-2507 256K (unverified) no
qwen3-235b-a22b-thinking-2507 256K (unverified) always
qwen3-30b-a3b (+ -instruct-2507, -thinking-2507) 128K/256K (unverified) as suffixed
qwen3-next-80b-a3b-instruct / -thinking 256K (unverified) as suffixed
qwen3-32b, qwen3-14b, qwen3-8b 128K (unverified) hybrid
qwen2-7b-instruct 32K (unverified) no — legacy

# Third-party models hosted on DashScope (all in live probe)

API ID Context Thinking Notes
deepseek-v4-pro 1M yes (enable_thinking, off by default) "Large-scale MoE, strong general reasoning"
deepseek-v4-flash 1M yes (off by default)
deepseek-v3.2 128K (unverified) yes (off by default)
glm-5.2 198K on by default (GLM series)
glm-5.2-fast-preview 198K (unverified) on by default
glm-5.1 200K, max output 128K on by default
kimi-k2.7-code 256K (unverified here; 262,144 on Moonshot direct) yes Same model Moonshot serves
ccai-pro unverified unverified In live probe; not found in public docs — unverified/unknown, exclude from catalog until identified

# 4. Request / Response Format

Fully OpenAI-compatible on /compatible-mode/v1. Minimal request:

json
POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions
Authorization: Bearer sk-...
Content-Type: application/json

{
  "model": "qwen3.7-plus",
  "messages": [{ "role": "user", "content": "Hello" }]
}

Response is the standard OpenAI chat.completion object (choices[0].message.content, usage.prompt_tokens/completion_tokens/total_tokens). Deviations:

  • Thinking models add message.reasoning_content (and delta.reasoning_content when streaming) alongside content (deep-thinking doc).
  • Vision input uses standard OpenAI parts: {"type":"image_url","image_url":{"url":"data:image/png;base64,..."}} (https URLs also accepted). Video via video_url parts on video-capable models.
  • Some open-weights thinking models are streaming-only — non-streaming calls return a 400.

# 5. Streaming (SSE)

Standard OpenAI SSE: data: {chunk} lines, terminated by data: [DONE]. Add "stream_options": {"include_usage": true} to get usage in the final chunk.

Thinking models stream in two phases: chunks first carry delta.reasoning_content (with content null), then reasoning_content goes null and delta.content carries the answer. Zyquo Cloud's collapsible "Thinking…" section maps directly to reasoning_content deltas.

incremental_output is a native DashScope-API parameter (must be enabled there for proper delta streaming); in OpenAI-compatible mode incremental deltas are the default and no such parameter is sent. Important compat-mode constraint (from the error-code doc): enable_thinking: true requires stream: true — a non-streaming call with thinking enabled returns a 400 parameter error.

# 6. Special Parameters

  • enable_thinking (bool) — turn reasoning on/off for hybrid models. Defaults (deep-thinking doc):
    • Default on: qwen3.7-max/plus series, qwen3.5 open-weights, GLM series.
    • Default off: qwen3 commercial (qwen-max/plus/flash/turbo, qwen3-max…), DeepSeek v3.2/v4.
    • Always on (cannot disable): qwq-plus, qvq, *-thinking-* models.
  • thinking_budget (int) — cap reasoning tokens; "when the limit is reached, the model stops reasoning and responds immediately".
  • preserve_thinking (bool, supported models) — feeds prior turns' reasoning_content back into context.
  • Sampling bounds (from error docs): temperature[0.0, 2.0), top_p(0.0, 1.0]. presence_penalty, max_tokens, stop, tools/tool_choice, response_format: {"type":"json_object"} supported (JSON mode not available on thinking output — unverified detail).
  • Translation-specific translation_options applies only to qwen-mt-* models — not applicable to Zyquo Cloud (MT models excluded).
  • vl_high_resolution_images (bool) for VL models — unverified in compat mode.

# 7. Rate Limits & Errors

Limits are account-level (all keys/workspaces aggregated), RPM + TPM, with RPS/TPS enforcement at RPM/60 (rate-limit doc). Singapore examples: qwen3.7-max 600 RPM / 1M TPM; qwen-plus 600 RPM / 1.5M TPM; qwen-flash 600 RPM / 5M TPM. Stable aliases get higher quotas than dated snapshots. Recovery "within one minute"; TPM can be temporarily raised in the console.

Errors are OpenAI-shaped JSON (error.code/message/type) with meaningful HTTP statuses (error-code doc):

  • 401 InvalidApiKey — "Incorrect API key provided" (also fires on region mismatch)
  • 429 — RateQuota (RPM), AllocationQuota (TPM), BurstRate ("Request rate increased too quickly") → retry with exponential backoff
  • 400 — parameter errors (enable_thinking without stream; temperature/top_p out of range), DataInspectionFailed (content filter on input or output)
  • 403/404 — model not activated in workspace / deprecated model ID

# 8. /models Listing

Yes. GET /compatible-mode/v1/models (Bearer auth) — verified live today, 151 entries. Shape is the OpenAI list format, minimal fields only:

json
{ "object": "list",
  "data": [ { "id": "qwen3.7-flash", "object": "model", "created": 1785147332, "owned_by": "system" } ] }

No capability/context metadata is returned — Zyquo Cloud must join IDs against the built-in catalog and can use the endpoint for "Refresh from API" diffing only.