model_list:
# ── Anthropic ──────────────────────────────────────────────────
# Sprint 10 Task 1.2 (2026-04-21): Sonnet 4.6 dated-snapshot suffix
# `-20250514` was never a valid Claude API ID for the 4.6 family (docs
# list plain `claude-sonnet-4-6` as current ID + alias as of 2026-04-21
# per https://platform.claude.com/docs/en/docs/about-claude/models/overview).
# Repointed to the plain alias. Migration note: ops/litellm/README.md.
# refs sprint-10-brief §1.1
- model_name: claude-sonnet-4-6
litellm_params:
model: anthropic/claude-sonnet-4-6
api_key: os.environ/ANTHROPIC_API_KEY
- model_name: claude-opus-4-6
litellm_params:
model: anthropic/claude-opus-4-6
api_key: os.environ/ANTHROPIC_API_KEY
- model_name: claude-haiku-4-5
litellm_params:
model: anthropic/claude-haiku-4-5-20251001
api_key: os.environ/ANTHROPIC_API_KEY
# Legacy aliases (backwards compat). Both now point to the plain
# `claude-sonnet-4-6` alias per Sprint 10 Task 1.2 (see note above).
- model_name: claude-3-5-sonnet-20241022
litellm_params:
model: anthropic/claude-sonnet-4-6
api_key: os.environ/ANTHROPIC_API_KEY
- model_name: anthropic/claude-sonnet-4-6
litellm_params:
model: anthropic/claude-sonnet-4-6
api_key: os.environ/ANTHROPIC_API_KEY
- model_name: anthropic/claude-opus-4.6
litellm_params:
model: anthropic/claude-opus-4-6
api_key: os.environ/ANTHROPIC_API_KEY
# ── OpenAI ─────────────────────────────────────────────────────
- model_name: gpt-4o
litellm_params:
model: openai/gpt-4o
api_key: os.environ/OPENAI_API_KEY
- model_name: gpt-4o-mini
litellm_params:
model: openai/gpt-4o-mini
api_key: os.environ/OPENAI_API_KEY
- model_name: o3
litellm_params:
model: openai/o3
api_key: os.environ/OPENAI_API_KEY
# ── Google Gemini ──────────────────────────────────────────────
# Use stable slug (not dated preview). Google deprecated -preview-05-20
# and -preview-06-05 — verified 2026-04-21 via live /v1beta/models list.
- model_name: gemini-2.5-pro
litellm_params:
model: gemini/gemini-2.5-pro
api_key: os.environ/GEMINI_API_KEY
- model_name: gemini-2.5-flash
litellm_params:
model: gemini/gemini-2.5-flash
api_key: os.environ/GEMINI_API_KEY
# ── xAI (Grok) ────────────────────────────────────────────────
- model_name: grok-3
litellm_params:
model: xai/grok-3
api_key: os.environ/XAI_API_KEY
- model_name: grok-3-mini
litellm_params:
model: xai/grok-3-mini
api_key: os.environ/XAI_API_KEY
# ── DeepSeek ───────────────────────────────────────────────────
- model_name: deepseek-chat
litellm_params:
model: deepseek/deepseek-chat
api_key: os.environ/DEEPSEEK_API_KEY
- model_name: deepseek-reasoner
litellm_params:
model: deepseek/deepseek-reasoner
api_key: os.environ/DEEPSEEK_API_KEY
# ── Perplexity ─────────────────────────────────────────────────
- model_name: perplexity-sonar
litellm_params:
model: perplexity/sonar
api_key: os.environ/PERPLEXITY_API_KEY
- model_name: perplexity-sonar-pro
litellm_params:
model: perplexity/sonar-pro
api_key: os.environ/PERPLEXITY_API_KEY
# ── OpenRouter (fallback to any model) ─────────────────────────
- model_name: openrouter/auto
litellm_params:
model: openrouter/auto
api_key: os.environ/OPENROUTER_API_KEY
# OpenRouter-routed aliases — usable when native provider key is missing
- model_name: claude-opus-4-7-via-openrouter
litellm_params:
model: openrouter/anthropic/claude-opus-4.7
api_key: os.environ/OPENROUTER_API_KEY
- model_name: claude-sonnet-4-6-via-openrouter
litellm_params:
model: openrouter/anthropic/claude-sonnet-4.6
api_key: os.environ/OPENROUTER_API_KEY
# ── Moonshot / Kimi ────────────────────────────────────────────
# Legacy endpoint (kept for backwards compatibility)
- model_name: moonshot-v1
litellm_params:
model: moonshot/moonshot-v1-128k
api_key: os.environ/MOONSHOT_API_KEY
# Current Kimi K2 family — routed via OpenRouter because the slugs
# moonshotai/kimi-k2.5, kimi-k2-thinking, kimi-k2.6 are all live on
# openrouter.ai/api/v1/models (verified 2026-04-21). Native
# platform.moonshot.cn slugs differ (kimi-k2-0905 etc) and the API
# surface drifts; OR normalizes.
- model_name: kimi-k2
litellm_params:
model: openrouter/moonshotai/kimi-k2
api_key: os.environ/OPENROUTER_API_KEY
- model_name: kimi-k2.5
litellm_params:
model: openrouter/moonshotai/kimi-k2.5
api_key: os.environ/OPENROUTER_API_KEY
# Reasoning variant (chain-of-thought exposed). Keep ...
# tags in message history — see the MiniMax M2.7 note below.
- model_name: kimi-k2-thinking
litellm_params:
model: openrouter/moonshotai/kimi-k2-thinking
api_key: os.environ/OPENROUTER_API_KEY
# Kimi K2.6 — Moonshot's latest (added 2026-04-21). OR slug verified.
- model_name: kimi-k2.6
litellm_params:
model: openrouter/moonshotai/kimi-k2.6
api_key: os.environ/OPENROUTER_API_KEY
# Native Moonshot fallback (used if OR is rate-limited). The user's
# MOONSHOT_API_KEY is registered on the intl tenant (api.moonshot.ai,
# NOT api.moonshot.cn — the .cn endpoint returned empty on probe
# 2026-04-21). Using `moonshot-v1-auto` instead of pinning to a k2.x
# variant: kimi-k2.6 enforces temperature=1 at the API layer, which
# breaks generic smoke tests and deterministic eval harnesses. The
# `-auto` slug lets Moonshot pick the right variant and accepts
# standard temperature ranges.
- model_name: kimi-k2-native
litellm_params:
model: openai/moonshot-v1-auto
api_base: https://api.moonshot.ai/v1
api_key: os.environ/MOONSHOT_API_KEY
# UI aliases — providers.ts surfaces `kimi-2.5` and `kimi-2.5-thinking`
# in the Waggle UI model picker. Route them to the live OR entries so
# the UI doesn't 404.
- model_name: kimi-2.5
litellm_params:
model: openrouter/moonshotai/kimi-k2.5
api_key: os.environ/OPENROUTER_API_KEY
- model_name: kimi-2.5-thinking
litellm_params:
model: openrouter/moonshotai/kimi-k2-thinking
api_key: os.environ/OPENROUTER_API_KEY
# ── Alibaba / Qwen ────────────────────────────────────────────
# Sprint 10 Task 1.4 (2026-04-21): classic DashScope Model Studio API
# key (sk-…) provisioned on the intl tenant. Smoke-verified: target
# `qwen3.6-35b-a3b` returns HTTP 200 on
# https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions
# with reasoning_content populated (thinking mode default on). The
# mainland endpoint `dashscope.aliyuncs.com` returns 401 invalid_api_key
# — the provisioned key is intl-bound. Failover policy documented in
# ops/litellm/README.md §Sprint-10-Task-1.4.
# refs sprint-10-brief §1.4
- model_name: qwen-max
litellm_params:
model: openrouter/qwen/qwen-max
api_key: os.environ/OPENROUTER_API_KEY
# ── Qwen3.6-35B-A3B canonical + dual-route (primary + fallback) ──
#
# Canonical alias routes to DashScope-intl direct as primary. The
# 3.6-35B slug IS live on the intl tenant (verified 2026-04-21 Sprint
# 10 Task 1.4 smoke). Earlier comment asserting the slug was "not live
# on any public API" was wrong on the intl tenant — only the mainland
# DashScope and OpenRouter catalogs lacked the exact slug.
#
# Callers should prefer the canonical `qwen3.6-35b-a3b` alias — it
# routes to DashScope-intl native, giving us the real 3.6 model
# rather than the Qwen3.5-35B-A3B OpenRouter fallback. If DashScope
# rate-limits or is unavailable, caller-side retry should fall back
# to `qwen3.6-35b-a3b-via-openrouter` (bridge route, one-minor regress
# to 3.5 until OR carries 3.6).
- model_name: qwen3.6-35b-a3b
litellm_params:
model: openai/qwen3.6-35b-a3b
api_base: https://dashscope-intl.aliyuncs.com/compatible-mode/v1
api_key: os.environ/DASHSCOPE_API_KEY
# Explicit DashScope alias (same target, stable naming for operator
# scripts that want to pin to DashScope irrespective of canonical
# alias flips).
- model_name: qwen3.6-35b-a3b-via-dashscope
litellm_params:
model: openai/qwen3.6-35b-a3b
api_base: https://dashscope-intl.aliyuncs.com/compatible-mode/v1
api_key: os.environ/DASHSCOPE_API_KEY
# Sprint 12 Task 2 C3 Stage 2 Mini Retry v3 (2026-04-23): -direct suffix
# alias expected by the v3 brief §0.2 alias roster. Same route as the
# `qwen3.6-35b-a3b-via-dashscope` sibling above, but with the Stage 2
# LOCKED config materialized as explicit LiteLLM params:
# - extra_body.enable_thinking: true (per models.json `stage2Config`)
# - max_tokens: 16000 (Mini Retry v3 §2.1 — reduced
# from v2 64000 to avoid DashScope tail-latency timeouts)
# 2026-05-26 fix: 0/15 fail rate at N=160 vs 86.5% Sonnet baseline was
# caused by thinking NOT actually defaulting on through this route —
# verbose-but-imprecise output failed user_message_checker. Forcing
# thinking on at the LiteLLM layer is the durable fix and matches the
# stage2Config metadata that always claimed this behavior.
- model_name: qwen3.6-35b-a3b-via-dashscope-direct
litellm_params:
model: openai/qwen3.6-35b-a3b
api_base: https://dashscope-intl.aliyuncs.com/compatible-mode/v1
api_key: os.environ/DASHSCOPE_API_KEY
max_tokens: 16000
extra_body:
enable_thinking: true
# OpenRouter bridge — failover when DashScope rate-limits or is
# unavailable. Note: OpenRouter's Qwen catalog does NOT have the exact
# 3.6-35b-a3b slug — this route lands on qwen3.5-35b-a3b, so it's a
# one-minor-version regression. Acceptable for transient failover,
# not for primary use.
- model_name: qwen3.6-35b-a3b-via-openrouter
litellm_params:
model: openrouter/qwen/qwen3.5-35b-a3b
api_key: os.environ/OPENROUTER_API_KEY
# Sibling alias that points to Qwen3.5-35B-A3B directly (no ambiguity).
- model_name: qwen3.5-35b-a3b
litellm_params:
model: openrouter/qwen/qwen3.5-35b-a3b
api_key: os.environ/OPENROUTER_API_KEY
# ── Mistral ────────────────────────────────────────────────────
- model_name: mistral-large-latest
litellm_params:
model: mistral/mistral-large-latest
api_key: os.environ/MISTRAL_API_KEY
- model_name: mistral-small-latest
litellm_params:
model: mistral/mistral-small-latest
api_key: os.environ/MISTRAL_API_KEY
- model_name: codestral-latest
litellm_params:
model: mistral/codestral-latest
api_key: os.environ/MISTRAL_API_KEY
# ── MiniMax ────────────────────────────────────────────────────
# `abab6.5s-chat` was deprecated by MiniMax (confirmed 2026-04-21 via
# 400 "unknown model" response). Repointed to MiniMax-M1, the nearest
# current successor. The `minimax-01` alias is preserved for any
# callers using the provider.ts UI slug.
- model_name: minimax-01
litellm_params:
model: openai/MiniMax-M1
api_base: https://api.minimaxi.chat/v1
api_key: os.environ/MINIMAX_API_KEY
- model_name: minimax-2.7
litellm_params:
model: openai/MiniMax-Text-01
api_base: https://api.minimaxi.chat/v1
api_key: os.environ/MINIMAX_API_KEY
# ── GLM / Zhipu ────────────────────────────────────────────────
- model_name: glm-4-plus
litellm_params:
model: openai/glm-4-plus
api_base: https://open.bigmodel.cn/api/paas/v4
api_key: os.environ/ZHIPU_API_KEY
- model_name: glm-5
litellm_params:
model: openai/glm-5
api_base: https://open.bigmodel.cn/api/paas/v4
api_key: os.environ/ZHIPU_API_KEY
# ── Tavily (search — not LLM, but here for completeness) ───────
# Tavily is consumed by Waggle search routes, not LiteLLM.
# ── Added for PromptAssembler eval (v4) ────────────────────────
# Spec: docs/specs/PROMPT-ASSEMBLER-V4.md §11.2
# Claude Opus 4.7 — native Anthropic. Plain family alias verified via
# /v1/models probe 2026-04-17 (brief's speculative date suffix 20260416
# returned 404; plain alias resolves).
- model_name: claude-opus-4-7
litellm_params:
model: anthropic/claude-opus-4-7
api_key: os.environ/ANTHROPIC_API_KEY
# Gemma 4 31B Dense — OpenRouter (verified live 2026-04-17)
- model_name: gemma-4-31b
litellm_params:
model: openrouter/google/gemma-4-31b-it
api_key: os.environ/OPENROUTER_API_KEY
# Gemma 4 26B MoE (3.8B active) — OpenRouter
# NOTE: live OpenRouter slug is `google/gemma-4-26b-a4b-it` (a4b middle)
# vs brief's suggested `gemma-4-26b-it`. Substitution logged 2026-04-17.
- model_name: gemma-4-26b-moe
litellm_params:
model: openrouter/google/gemma-4-26b-a4b-it
api_key: os.environ/OPENROUTER_API_KEY
# Qwen3-30B-A3B (30B total / 3B active) — OpenRouter
# NOTE: live slug is `qwen/qwen3-30b-a3b-instruct-2507` (date-tagged)
# vs brief's suggested `qwen3-30b-a3b-instruct`. Substitution logged.
- model_name: qwen3-30b-a3b
litellm_params:
model: openrouter/qwen/qwen3-30b-a3b-instruct-2507
api_key: os.environ/OPENROUTER_API_KEY
# ── Qwen3.6-35B-A3B LOCKED decision (2026-04-19) ──────────────
# Canonical engine for Waggle Pro/Teams default + KVARK prod +
# Track 2 benchmarks (H-42 / H-43 / H-44). Per LOCKED decision:
# D:\Projects\PM-Waggle-OS\decisions\2026-04-19-target-model-qwen35b-locked.md
# 35B total / 3B active MoE, Apache-2.0, 262K native / 1M YaRN.
# Thinking mode default ON, togglable via `enable_thinking: false`.
# HF source (verified 2026-04-19):
# https://huggingface.co/Qwen/Qwen3.6-35B-A3B
#
# The canonical `qwen3.6-35b-a3b` routing ENTRY lives above in the
# Alibaba/Qwen section (next to its dashscope + openrouter siblings).
# DashScope-intl direct is primary as of Sprint 10 Task 1.4
# (2026-04-21). This comment block stays here as the LOCKED decision
# memo anchor — do not duplicate the route entry.
# ── Added for PromptAssembler v5 eval ──────────────────────────
# Spec: v5 brief §11.2. Entries verified live via provider docs on
# 2026-04-17. Eval harness runs a slug probe at start and logs any
# substitutions. Cost is deliberately high for this run — v5 uses a
# 4-model frontier judge ensemble to avoid same-family judge bias
# from v4 (Sonnet 4.6 judging Claude candidates).
# ── Judge panel (4 frontier models, 4 different labs) ──
# Gemini 3.1 Pro — Google's frontier (released Feb 19, 2026)
# Current SOTA on GPQA Diamond (94.3%), LMArena #1 (1501 Elo).
# Neutral to all candidate families.
#
# Manifest v5 §5.2 addendum (2026-04-24, Stage 3 rekick): rpm: 20 applied
# after §1.3 Gate P+ probe FAIL (24/50 HTTP 429) revealed Google per-model
# preview cap of 25 RPM on generate_requests_per_model for this upstream.
# 20 < 25 Google cap with 5 RPM margin for burst variance. This is the
# single permitted §11 code-freeze exception in v5 per PM P4 path. See
# benchmarks/preregistration/manifest-v5-preregistration.md §5.2 and §11.
- model_name: gemini-3.1-pro
litellm_params:
model: gemini/gemini-3.1-pro-preview
api_key: os.environ/GEMINI_API_KEY
rpm: 20
# Sprint 12 Task 2 C3 Stage 2 Mini Retry v3 (2026-04-23): -preview suffix
# alias expected by the v3 brief §0.2 alias roster (judge_tie_breaker).
# Same upstream as `gemini-3.1-pro` above — alias name encodes the
# "-preview" provenance explicitly for manifest audit clarity.
#
# Manifest v5 Fold-in 3.5b (2026-04-24): defensive-mirror rpm: 20 applied
# here as well because this alias shares the same Google upstream bucket
# (`gemini/gemini-3.1-pro-preview` at 25 RPM per-model cap) with the
# primary `gemini-3.1-pro` alias (edited in Step 2). Isolation sweep
# found non-zero (dormant) references to this alias in repo-wide grep,
# so defensive posture per PM brief Fold-in 3.5b decision tree.
- model_name: gemini-3.1-pro-preview
litellm_params:
model: gemini/gemini-3.1-pro-preview
api_key: os.environ/GEMINI_API_KEY
rpm: 20
# GPT-5.4 — OpenAI's flagship (released Mar 5, 2026)
# Strong judgment on structured outputs. Neutral to all candidates.
- model_name: gpt-5.4
litellm_params:
model: openai/gpt-5.4
api_key: os.environ/OPENAI_API_KEY
# GPT-5.4 Pro — stronger variant. Held in reserve as ensemble fallback
# per brief §11.2 ("GPT-5.4 Pro optional fallback"). Not called by default.
- model_name: gpt-5.4-pro
litellm_params:
model: openai/gpt-5.4-pro
api_key: os.environ/OPENAI_API_KEY
# Grok 4.20 — xAI frontier with reasoning toggle (released Mar 31, 2026)
# 2M context, lowest hallucination rate on market. Fully outside
# Claude/Qwen/Gemma training lineage.
- model_name: grok-4.20
litellm_params:
model: xai/grok-4.20
api_key: os.environ/XAI_API_KEY
# MiniMax M2.7 — SOTA agentic reasoning (released Apr 2026)
# 56.22% SWE-Pro, beats Opus 4.6 on agentic benchmarks. Chinese lab,
# maximally different training lineage from Western frontier. Per
# brief: the existing `minimax-2.7` alias above points to the older
# MiniMax-Text-01 endpoint — this new entry routes to the M2.7 API.
# Note: MiniMax uses interleaved thinking; keep ...
# tags in message history to preserve scoring quality.
- model_name: minimax-m2.7
litellm_params:
model: openai/MiniMax-M2.7
api_base: https://api.minimaxi.chat/v1
api_key: os.environ/MINIMAX_API_KEY
# ── Manifest v6 judge ensemble swap (2026-04-24) ──────────────────
# Added under v6 Phase 1 Commit 2 authority on PM ratification of
# §1.3g-§1.3h-C sequence closure. v6 supersedes v5 §11 freeze on
# litellm-config.yaml (single permitted amendment; Gemini rpm:20
# entry retained above as orphan audit artefact).
# Anchor: benchmarks/preregistration/manifest-v6-preregistration.md
# v6 selection rationale documented in §0.5 delta log (MD) + judge_ensemble
# block (YAML). All v5 aliases retained; v6 additions are orthogonal.
# v6 primary_judge_3 — MiniMax M2.7 via OpenRouter.
# §1.3h verified: direct routes (api.minimaxi.com + api.minimax.chat v2)
# fail 401 on MINIMAX_GROUP_ID + Bearer auth; OR fallback 7/7 parse.
# OR catalog slug verified live 2026-04-24: minimax/minimax-m2.7
# @ 196K ctx, $0.30 prompt / $1.20 completion per 1M tokens.
- model_name: minimax-m27-via-openrouter
litellm_params:
model: openrouter/minimax/minimax-m2.7
api_key: os.environ/OPENROUTER_API_KEY
# v6 backup_judge — Kimi K2.6 via Moonshot direct.
# §1.3g verified: direct route (api.moonshot.ai/v1, intl tenant) stable.
# Moonshot catalog verified live 2026-04-24: kimi-k2.6.
# Per-instance failover on primary_judge_3 (MiniMax) failure per v6 §5.2
# (API error / parse failure / 60s timeout). If both fail same instance
# -> judge_ensemble_fail (evaluator_loss in denominator, §9).
# Routed as OpenAI-compatible via api_base override (same pattern as
# kimi-k2-native above); LiteLLM's moonshot/ provider prefix not used
# because the openai/ prefix + api_base is proven stable per v5 config.
- model_name: kimi-k26-direct
litellm_params:
model: openai/kimi-k2.6
api_base: https://api.moonshot.ai/v1
api_key: os.environ/MOONSHOT_API_KEY
# ── Small-model additions for v5 eval (candidate, not judge) ──
# Qwen3-30B-A3B Thinking variant — dedicated reasoning mode.
# v4 used the instruct variant above; v5's H condition tests this
# thinking variant to measure whether reasoning mode flips PA's
# benefit direction (the publishable claim if it does).
# OpenRouter slug verified 2026-04-17: 131K context.
- model_name: qwen3-30b-a3b-thinking
litellm_params:
model: openrouter/qwen/qwen3-30b-a3b-thinking-2507
api_key: os.environ/OPENROUTER_API_KEY
# ── Genspark ───────────────────────────────────────────────────
# Added 2026-04-21. Genspark's gsk-* token is a JWT whose payload
# references `claude_big_model` / `claude_middle_model` / `claude_small_model`
# fields — i.e. they run a Claude-compatible proxy. Endpoint slug below
# is a best-effort based on their public docs; validate with a smoke
# call after first use. The user's key is in vault + .env as
# GENSPARK_API_KEY but this route is NOT wired into Waggle UI yet.
- model_name: genspark-claude
litellm_params:
model: anthropic/claude-sonnet-4-5-20250929
api_base: https://api.genspark.ai/anthropic/v1
api_key: os.environ/GENSPARK_API_KEY
litellm_settings:
drop_params: true
request_timeout: 120