- Parsed live named efforts, mandatory-thinking state, and model protocol metadata.
- Sent native Kimi named efforts and adaptive Anthropic override efforts without generic token budgets.
Fixes#5893
Invalidated rich-v4 rows so upgraded clients immediately refresh models with corrected per-model pricing instead of serving stale zero-cost entries until TTL expiry.
mapLiteLLMRichEntry read token limits and capabilities from LiteLLM's
rich model_info but hardcoded cost to the bundled reference or a zero
sentinel, so any model absent from the bundled catalog / models.dev
displayed as free even when LiteLLM reported real pricing.
Read input_cost_per_token / output_cost_per_token (and cache costs) via
getLiteLLMCost, converting per-token to per-million, and carry cost
through the cross-endpoint merge in fetchLiteLLMRichModels. Fall back to
the bundled reference only when LiteLLM omits cost.
Fixes#5818
Skipped recording 401 rich-endpoint failures as fallback diagnostics so the caller's auth-retry path (withAuth refresh/sibling rotation) is not pre-empted by a warning from a stale first credential.
Kept 403 and other non-retryable failures warn-worthy.
Fixes#5801
Logged one actionable warning per LiteLLM management base when rich metadata discovery fails, while keeping missing 404 routes silent.
Documented metadata-route permissions and covered forbidden versus absent endpoints.
Fixes#5801
Reinstates the catalog regeneration (glm-4.5 reasoning/effort metadata,
refreshed pricing and limits) that the previous commit wrongly rolled
back. The three failing tests were pinned to stale upstream metadata;
they now assert the durable contracts instead: K2.7-Code stays above
the 32,768 K2-family cap and tracks the bundled reference, and K3
asserts effort-mode metadata while the wire-body test remains the
binding reasoning_effort=max contract.
- Updated models.json to set maxTokens to 65536 for Kimi K2.7-Code entries.
- Adjusted openai-compat logic to use a new 65,536 ceiling for K2.7-Code while preserving the 32,768 cap for older K2 models.
- Modified tests to verify the new token limit and ensure K2.7-Code models are excluded from the older cap.
The generic OpenAI-compatible output policy capped native K3 requests at 64,000 tokens even though its catalog metadata advertises Moonshot’s 131,072-token output limit.
- Generalized the Chat Completions provider clamp resolver.
- Allowed native moonshot/kimi-k3 to clamp against model.maxTokens.
- Preserved the existing 64k default for other OpenAI-compatible models and the existing raised GLM-5.2 reasoning clamp.
- Covered default and explicit 131,072-token K3 requests on the wire.
Fixes#5756
Native Kimi K3 always reasons via reasoning_effort: "max" and is newly marked
requiresEffort. The Kimi-family disableReasoningOnForcedToolChoice rule (added
for the K2.x Moonshot 400 "tool_choice 'specified' is incompatible with
thinking enabled", #827) applies only to the binary thinking block K3 never
sends, so it wrongly stripped K3's effort on forced-tool turns — e.g. plan-mode
toolChoice: "required" — leaving mandatory reasoning off on the wire.
- Exempted native K3 from disableReasoningOnForcedToolChoice.
- Added a regression test asserting reasoning_effort=max survives a forced
tool_choice turn while no thinking block is emitted.
Fixes#5756
Native moonshot/kimi-k3 is dynamically discovered but has no bundled or
models.dev reference, so mapWithBundledReference fell through to the generic
dynamic defaults: zero token cost, null limits, text-only input, and no
reasoning. /models then labeled the paid model "Free".
- Added isKimiK3ModelId identity helper for any-namespace K3 ids.
- Stamped Moonshot's official K3 pricing ($3 input / $0.30 cache-hit / $15
output), 1,048,576-token context, 131,072 default max output, image input,
and always-on reasoning in the moonshot discovery mapper.
- Routed native K3 reasoning through OpenAI-style reasoning_effort: "max"
instead of the K2.x binary thinking: { type } block, which K3 does not use.
- Widened the 300s reasoning stream-idle floor to cover native K3.
Fixes#5756
- Repointed the Umans models.dev descriptor to published PAYG rates.
- Backfilled authoritative discovery rows and the Flash technical alias.
- Added runtime, descriptor, and bundled catalog regression coverage.
Fixes#5733
The generation-time policy pin only corrected the bundled JSON. Logged-in
Codex users hit fetchCodexModels() at runtime, and mergeDynamicModel prefers
any positive dynamic contextWindow over the bundled one, so the 272000
discovery fallback re-overwrote the 372000 bundle on every live refresh.
Made the Codex discovery context_window fallback SKU-aware: GPT-5.6
luna/sol/terra now fall back to 372000 (their upstream hard capacity) when
upstream omits the field, matching the generation-time policy.
Fixes#5705
Codex discovery falls back to DEFAULT_CONTEXT_WINDOW (272000) when upstream
omits context_window, which overwrote the previously-bundled 372000 hard
capacity for openai-codex gpt-5.6 luna/sol/terra on regen. OpenAI's Codex
model registry declares context_window = max_context_window = 372000, and a
direct Responses request with 350,317 input tokens completes, proving 272K is
not the route's hard cap.
Pinned these SKUs to 372000 in applyOpenAICatalogPolicy and refreshed the
bundled entries.
Fixes#5705
GitHub Copilot's mai-code-1-flash-picker (and other mai-* models) are
served only through the /responses endpoint; the classifier routed them
to /chat/completions, which returned 400 unsupported_api_for_model.
Added the mai- prefix to isCopilotResponsesModelId so both dynamic
discovery (inferCopilotApi) and bundled resolution
(COPILOT_API_RESOLUTION_RULES) select openai-responses, and updated the
bundled models.json entry to match.
Fixes#5612
- Added resolved sampling-parameter compatibility for OpenAI o-series and GPT-5+ models.
- Stopped Responses and Chat Completions payloads from forwarding temperature and related controls to restricted models.
- Added catalog and wire-payload regressions for GitHub Copilot GPT-5.6 Luna.
Fixes#5606
The `zai` provider descriptor mapped the models.dev `zai-coding-plan`
key, which reports all-$0 subscription rates, so 13 of 14 GLM SKUs
showed token cost as "Free" in /models. The models.dev `zai`
pay-as-you-go key carries the real per-token rates for the identical
model ids, matching how other subscription providers surface comparison
pricing.
- Point the `zai` descriptor at the `zai` models.dev key.
- Regenerate the bundled zai cost blocks from the PAYG rates.
- Add issue-5598 regression test against the descriptor + mapper.
Fixes#5598
Keyed the non-official eager opt-in on resolved officialEndpoint provenance instead of a baseUrl equality check, so runtime provider baseUrl overrides that reroute canonical Anthropic models no longer leak eager_input_streaming even when the spec baked a resolved official compat block.
Fixes#5572
Kept strict custom proxies free of both eager_input_streaming and the legacy fine-grained tool-streaming beta while preserving the official API fallback.
Fixes#5572
Authoritative OpenCode model catalogs now use credential-and-endpoint-specific cache namespaces so one account cannot reuse another account's entitlements.
Fixes#4769
Native Kimi K2.7 Code (kimi-k2.7-code / kimi-k2.7-code-highspeed) reasons
for minutes before the first stream event like K2.6, but the
streamIdleTimeoutMs branch in buildOpenAICompat gated only on
isKimiK26ModelId, so K2.7 Code fell through to the 120s default and
aborted on long reasoning turns. Match matchesKimiK27CodeFamily in the
same branch and rename the constant to KIMI_REASONING_STREAM_IDLE_TIMEOUT_MS.
Fixes#4836
GLM-5.x coding-plan SKUs idle for minutes mid-reasoning, so they get a
600s stream idle-timeout floor instead of the 120s default. That floor
was gated to the native Z.AI/Zhipu hosts only, so GLM-5.2 served through
the OpenCode Go/Zen gateways fell back to the 120s watchdog and stalled
with "OpenAI completions stream stalled while waiting for the next event"
during the slow /plan writing phase.
Fixes#4758
Z.ai's Anthropic-compatible proxy (api.z.ai/api/anthropic) serves GLM-5.2
with the same two-tier high/max reasoning scale as Umans, but the catalog
predicate only matched provider 'umans'. The bundled zai/glm-5.2 entry
derived mode:'budget' with five synthetic effort tiers, so
output_config.effort was never emitted on the wire — only
thinking.budget_tokens.
Generalized isUmansGlm52ReasoningEffortModel to
isAnthropicMessagesGlm52ReasoningEffortModel, matching both 'umans' and
'zai' providers. Regenerated models.json from the updated policy.
Recognized SAP AI Core hai-proxy Claude ids in claude-<version>-<kind> order so Anthropic thinking and capability inference stay on the adaptive path.
Fixes#5069
Treat GitHub Copilot discovery input as authoritative during model merges so explicit supports.vision=false is not OR-upgraded from bundled references.
Fixes#4779
- Introduced `Max` as a first-class reasoning effort tier across all packages, including AI providers, coding agent configurations, and RPC protocols.
- Refactored model effort ladders to use wire-exact mappings and removed legacy effort aliasing (e.g., `max-to-xhigh` mapping).
- Updated model registry and provider configurations to support `Max` tier routing, color themes, and UI icon associations.
- Expanded test suites to provide end-to-end coverage for the new reasoning tier, including updated compatibility and fallback scenarios.
- Corrected Novita pricing from ten-thousandths of a dollar per million tokens.
- Validated pasted keys against the authenticated balance endpoint.
- Made live discovery authoritative and excluded models without positive output limits.