@oh-my-pi/pi-catalog 18.2.11 → 18.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/README.md +1 -1
- package/THIRD-PARTY-NOTICES.txt +3 -3
- package/dist/types/compat/auth-ids.d.ts +1 -1
- package/dist/types/compat/fallback-credit.d.ts +7 -0
- package/dist/types/compat/output-limits.d.ts +5 -0
- package/dist/types/compat/provider-ids.d.ts +1 -1
- package/dist/types/compat/server-side-fallback.d.ts +7 -0
- package/dist/types/compat/types.d.ts +4 -0
- package/dist/types/discovery/cursor-proto.d.ts +1 -1
- package/dist/types/discovery/devin-proto.d.ts +1 -1
- package/dist/types/types.d.ts +37 -7
- package/package.json +8 -5
- package/src/compat/auth-ids.ts +1 -0
- package/src/compat/axes.ts +25 -0
- package/src/compat/fallback-credit.ts +13 -0
- package/src/compat/output-limits.ts +8 -0
- package/src/compat/provider-ids.ts +1 -0
- package/src/compat/resolve.ts +2 -0
- package/src/compat/rules/README.md +4 -0
- package/src/compat/rules/auth/anthropic.kdl +1 -0
- package/src/compat/rules/auth/apple.kdl +4 -0
- package/src/compat/rules/auth/openai-codex.kdl +1 -0
- package/src/compat/rules/auth/xai-oauth.kdl +1 -0
- package/src/compat/rules/classes/anthropic.kdl +46 -16
- package/src/compat/rules/classes/openai.kdl +3 -0
- package/src/compat/rules/providers/anthropic.kdl +15 -0
- package/src/compat/rules/providers/apple.kdl +8 -0
- package/src/compat/rules/providers/yolo-auto.kdl +8 -2
- package/src/compat/rules.json +1 -1
- package/src/compat/server-side-fallback.ts +13 -0
- package/src/compat/types.ts +4 -0
- package/src/discovery/codex.ts +29 -4
- package/src/discovery/cursor-proto.ts +1 -1
- package/src/discovery/devin-proto.ts +1 -1
- package/src/discovery/devin.ts +60 -1
- package/src/models.json +1 -1
- package/src/provider-models/cache-provider-id.ts +5 -0
- package/src/provider-models/openai-compat.ts +30 -7
- package/src/provider-models/special.ts +12 -2
- package/src/types.ts +39 -6
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,27 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [18.3.1] - 2026-09-25
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- Added compatibility flags for models that stop output at the context-window limit and models that support steering, including defaults for Claude 4.5+ and GPT-6+ models.
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- Fixed forced-tool requests for Claude Opus 5.5 so tool selection falls back gracefully when necessary.
|
|
14
|
+
- Added the provider-advertised `xhigh` reasoning level for Yolo-Auto Qwen3.8 models.
|
|
15
|
+
- Fixed Devin Fusion pairing requests failing with `no API providers are available` by routing them through the lead model with the lead's limits and pricing; pairings without an available lead are no longer listed ([#13000](https://github.com/can1357/oh-my-pi/pull/13000) by [@DarkPhilosophy](https://github.com/DarkPhilosophy)).
|
|
16
|
+
|
|
17
|
+
## [18.3.0] - 2026-09-24
|
|
18
|
+
|
|
19
|
+
### Added
|
|
20
|
+
|
|
21
|
+
- Added compaction support for the `claude-mythos-preview` model.
|
|
22
|
+
- Added provider and authentication rule definitions for on-device Apple Foundation Models.
|
|
23
|
+
- Added per-account discovery of Codex cyber access entitlements.
|
|
24
|
+
- Added `org-scoped-identity` and `oauth-token-env` authentication rules for providers.
|
|
25
|
+
|
|
5
26
|
## [18.2.11] - 2026-09-23
|
|
6
27
|
|
|
7
28
|
### Added
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @oh-my-pi/pi-catalog
|
|
2
2
|
|
|
3
|
-
Model catalog for [
|
|
3
|
+
Model catalog for [omp](https://github.com/can1357/oh-my-pi): bundled model database, provider discovery, model identity, classification, and equivalence.
|
|
4
4
|
|
|
5
5
|
## What's inside
|
|
6
6
|
|
package/THIRD-PARTY-NOTICES.txt
CHANGED
|
@@ -78,8 +78,8 @@ below.
|
|
|
78
78
|
uutils coreutils (https://github.com/uutils/coreutils), MIT
|
|
79
79
|
--------------------------------------------------------------------------------
|
|
80
80
|
Covers: base32, base64, basename, cat, cksum (shared checksum machinery),
|
|
81
|
-
b2sum, md5sum, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum, comm,
|
|
82
|
-
date, dirname, head, hostname, ln, ls, mkdir, mktemp, mv, nproc, paste,
|
|
81
|
+
b2sum, md5sum, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum, comm, cp,
|
|
82
|
+
cut, date, dirname, head, hostname, ln, ls, mkdir, mktemp, mv, nproc, paste,
|
|
83
83
|
printenv, readlink, realpath, rm, seq, sort, stat, tac, tail, tee, touch, tr,
|
|
84
84
|
truncate, uname, uniq, wc, whoami, yes.
|
|
85
85
|
|
|
@@ -293,7 +293,7 @@ MIT License
|
|
|
293
293
|
Copyright (c) 2026 Sander Land
|
|
294
294
|
(measured tokenizer vocabulary data, reconstruction model, and reference
|
|
295
295
|
implementation: https://github.com/sanderland/ctok)
|
|
296
|
-
Copyright (c) 2026 Can Bölük and the
|
|
296
|
+
Copyright (c) 2026 Can Bölük and the omp contributors
|
|
297
297
|
Copyright (c) 2026 Stencil Labs, Inc.
|
|
298
298
|
(Rust implementation and the compact binary vocabulary encoding in
|
|
299
299
|
crates/pi-natives/src/utok/claude)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/** Every provider with an `auth/<id>.kdl` policy. */
|
|
2
|
-
export type AuthProviderId = "abliteration" | "aiand" | "aimlapi" | "alibaba-coding-plan" | "alibaba-token-plan" | "amazon-bedrock" | "anthropic" | "azure" | "baseten" | "bedrock-mantle" | "cerebras" | "charm-hyper" | "cline-pass" | "cloudflare-ai-gateway" | "commandcode" | "coreweave" | "cursor" | "deepinfra" | "deepseek" | "devin" | "exa" | "firepass" | "fireworks" | "github-copilot" | "gitlab-duo" | "gitlab-duo-agent" | "gmi-cloud" | "google" | "google-antigravity" | "google-gemini-cli" | "google-vertex" | "groq" | "huggingface" | "kagi" | "kilo" | "kimi-code" | "litellm" | "llama.cpp" | "lm-studio" | "local" | "meta" | "minimax" | "minimax-code" | "minimax-code-cn" | "mistral" | "moonshot" | "muse-code" | "nanogpt" | "novita" | "nvidia" | "ollama" | "ollama-cloud" | "openai" | "openai-codex" | "openai-codex-device" | "opencode-go" | "opencode-zen" | "openrouter" | "parallel" | "perplexity" | "qianfan" | "qwen-portal" | "sakana" | "siliconflow" | "siliconflow-cn" | "singularityapi-dev" | "singularityapi-tech" | "stencil" | "stepfun" | "synthetic" | "tavily" | "together" | "typesafe" | "umans" | "venice" | "vercel-ai-gateway" | "vllm" | "wafer-serverless" | "web" | "xai" | "xai-oauth" | "xiaomi" | "xiaomi-token-plan-ams" | "xiaomi-token-plan-cn" | "xiaomi-token-plan-sgp" | "yolo-auto" | "zai" | "zai-coding-plan" | "zenmux" | "zhipu-coding-plan";
|
|
2
|
+
export type AuthProviderId = "abliteration" | "aiand" | "aimlapi" | "alibaba-coding-plan" | "alibaba-token-plan" | "amazon-bedrock" | "anthropic" | "apple" | "azure" | "baseten" | "bedrock-mantle" | "cerebras" | "charm-hyper" | "cline-pass" | "cloudflare-ai-gateway" | "commandcode" | "coreweave" | "cursor" | "deepinfra" | "deepseek" | "devin" | "exa" | "firepass" | "fireworks" | "github-copilot" | "gitlab-duo" | "gitlab-duo-agent" | "gmi-cloud" | "google" | "google-antigravity" | "google-gemini-cli" | "google-vertex" | "groq" | "huggingface" | "kagi" | "kilo" | "kimi-code" | "litellm" | "llama.cpp" | "lm-studio" | "local" | "meta" | "minimax" | "minimax-code" | "minimax-code-cn" | "mistral" | "moonshot" | "muse-code" | "nanogpt" | "novita" | "nvidia" | "ollama" | "ollama-cloud" | "openai" | "openai-codex" | "openai-codex-device" | "opencode-go" | "opencode-zen" | "openrouter" | "parallel" | "perplexity" | "qianfan" | "qwen-portal" | "sakana" | "siliconflow" | "siliconflow-cn" | "singularityapi-dev" | "singularityapi-tech" | "stencil" | "stepfun" | "synthetic" | "tavily" | "together" | "typesafe" | "umans" | "venice" | "vercel-ai-gateway" | "vllm" | "wafer-serverless" | "web" | "xai" | "xai-oauth" | "xiaomi" | "xiaomi-token-plan-ams" | "xiaomi-token-plan-cn" | "xiaomi-token-plan-sgp" | "yolo-auto" | "zai" | "zai-coding-plan" | "zenmux" | "zhipu-coding-plan";
|
|
3
3
|
/** Providers whose policy declares a `login` flow (the `/login` roster). */
|
|
4
4
|
export type LoginProviderId = "abliteration" | "aiand" | "alibaba-coding-plan" | "alibaba-token-plan" | "anthropic" | "baseten" | "cerebras" | "charm-hyper" | "cline-pass" | "cloudflare-ai-gateway" | "commandcode" | "coreweave" | "cursor" | "deepinfra" | "deepseek" | "devin" | "exa" | "firepass" | "fireworks" | "github-copilot" | "gitlab-duo" | "gitlab-duo-agent" | "gmi-cloud" | "google-antigravity" | "google-gemini-cli" | "huggingface" | "kagi" | "kilo" | "kimi-code" | "litellm" | "llama.cpp" | "lm-studio" | "meta" | "minimax-code" | "minimax-code-cn" | "moonshot" | "muse-code" | "nanogpt" | "novita" | "nvidia" | "ollama" | "ollama-cloud" | "openai-codex" | "openai-codex-device" | "opencode-go" | "opencode-zen" | "openrouter" | "parallel" | "perplexity" | "qianfan" | "qwen-portal" | "sakana" | "siliconflow" | "siliconflow-cn" | "singularityapi-dev" | "singularityapi-tech" | "stencil" | "stepfun" | "synthetic" | "tavily" | "together" | "typesafe" | "umans" | "venice" | "vercel-ai-gateway" | "vllm" | "wafer-serverless" | "xai" | "xai-oauth" | "xiaomi" | "xiaomi-token-plan-ams" | "xiaomi-token-plan-cn" | "xiaomi-token-plan-sgp" | "yolo-auto" | "zai" | "zai-coding-plan" | "zenmux" | "zhipu-coding-plan";
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Model } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Model ids on which a refusal's Anthropic fallback-credit token may be
|
|
4
|
+
* redeemed, authored on the `fallback-credit-targets` catalog axis. Empty when
|
|
5
|
+
* no rule assigns targets (the model cannot redeem credit on any fallback).
|
|
6
|
+
*/
|
|
7
|
+
export declare function fallbackCreditTargets(model: Model): readonly string[];
|
|
@@ -1,3 +1,8 @@
|
|
|
1
1
|
import type { Model } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Whether the host truncates generation at the context window rather than
|
|
4
|
+
* rejecting prompt + output cap overflow; the output fitter skips these models.
|
|
5
|
+
*/
|
|
6
|
+
export declare function stopsOutputAtContextWindow(model: Model): boolean;
|
|
2
7
|
/** Whether discovery and transport policy allow preserving a caller's output cap. */
|
|
3
8
|
export declare function supportsOutputTokenLimit(model: Model): boolean;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/** Every chat-model provider with a catalog entry (`default-model` in its provider rules). */
|
|
2
|
-
export type KnownProvider = "abliteration" | "aiand" | "aimlapi" | "alibaba-coding-plan" | "alibaba-token-plan" | "amazon-bedrock" | "anthropic" | "azure" | "baseten" | "bedrock-mantle" | "cerebras" | "charm-hyper" | "cline-pass" | "cloudflare-ai-gateway" | "commandcode" | "coreweave" | "cursor" | "deepinfra" | "deepseek" | "devin" | "firepass" | "fireworks" | "github-copilot" | "gitlab-duo" | "gitlab-duo-agent" | "gmi-cloud" | "google" | "google-antigravity" | "google-gemini-cli" | "google-vertex" | "groq" | "huggingface" | "kilo" | "kimi-code" | "litellm" | "lm-studio" | "local" | "meta" | "minimax" | "minimax-code" | "minimax-code-cn" | "mistral" | "moonshot" | "muse-code" | "nanogpt" | "novita" | "nvidia" | "ollama" | "ollama-cloud" | "openai" | "openai-codex" | "opencode-go" | "opencode-zen" | "openrouter" | "qianfan" | "qwen-portal" | "sakana" | "siliconflow" | "siliconflow-cn" | "singularityapi-dev" | "singularityapi-tech" | "stepfun" | "synthetic" | "together" | "typesafe" | "umans" | "venice" | "vercel-ai-gateway" | "vllm" | "wafer-serverless" | "web" | "xai" | "xai-oauth" | "xiaomi" | "xiaomi-token-plan-ams" | "xiaomi-token-plan-cn" | "xiaomi-token-plan-sgp" | "yolo-auto" | "zai" | "zenmux" | "zhipu-coding-plan";
|
|
2
|
+
export type KnownProvider = "abliteration" | "aiand" | "aimlapi" | "alibaba-coding-plan" | "alibaba-token-plan" | "amazon-bedrock" | "anthropic" | "apple" | "azure" | "baseten" | "bedrock-mantle" | "cerebras" | "charm-hyper" | "cline-pass" | "cloudflare-ai-gateway" | "commandcode" | "coreweave" | "cursor" | "deepinfra" | "deepseek" | "devin" | "firepass" | "fireworks" | "github-copilot" | "gitlab-duo" | "gitlab-duo-agent" | "gmi-cloud" | "google" | "google-antigravity" | "google-gemini-cli" | "google-vertex" | "groq" | "huggingface" | "kilo" | "kimi-code" | "litellm" | "lm-studio" | "local" | "meta" | "minimax" | "minimax-code" | "minimax-code-cn" | "mistral" | "moonshot" | "muse-code" | "nanogpt" | "novita" | "nvidia" | "ollama" | "ollama-cloud" | "openai" | "openai-codex" | "opencode-go" | "opencode-zen" | "openrouter" | "qianfan" | "qwen-portal" | "sakana" | "siliconflow" | "siliconflow-cn" | "singularityapi-dev" | "singularityapi-tech" | "stepfun" | "synthetic" | "together" | "typesafe" | "umans" | "venice" | "vercel-ai-gateway" | "vllm" | "wafer-serverless" | "web" | "xai" | "xai-oauth" | "xiaomi" | "xiaomi-token-plan-ams" | "xiaomi-token-plan-cn" | "xiaomi-token-plan-sgp" | "yolo-auto" | "zai" | "zenmux" | "zhipu-coding-plan";
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Model } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Ordered model ids for Anthropic's server-side refusal `fallbacks` chain,
|
|
4
|
+
* authored on the `server-side-fallback-models` catalog axis. Empty when no
|
|
5
|
+
* rule assigns a chain (the model or host does not support the feature).
|
|
6
|
+
*/
|
|
7
|
+
export declare function serverSideFallbackModels(model: Model): readonly string[];
|
|
@@ -530,6 +530,10 @@ export interface CompiledAuthProvider {
|
|
|
530
530
|
hook: string;
|
|
531
531
|
};
|
|
532
532
|
allowsMissingApiKey?: boolean;
|
|
533
|
+
/** Qualify credential and usage-report identity by org when an email may have multiple subscriptions. */
|
|
534
|
+
orgScopedIdentity?: boolean;
|
|
535
|
+
/** Environment variables carrying this provider's own OAuth bearer, excluding borrowed API-key aliases. */
|
|
536
|
+
oauthTokenEnv?: string[];
|
|
533
537
|
/** APIs whose provider transport resolves credentials without a stored account. */
|
|
534
538
|
nativeAuthApis?: string[];
|
|
535
539
|
available?: boolean;
|
package/dist/types/types.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import type { ModelIdentity } from "./compat/types.js";
|
|
|
2
2
|
import type { Effort } from "./effort.js";
|
|
3
3
|
export type { FetchImpl } from "@oh-my-pi/pi-utils";
|
|
4
4
|
export type { KnownProvider } from "./provider-models/descriptors.js";
|
|
5
|
-
export type KnownApi = "openai-completions" | "openai-responses" | "openrouter" | "openai-codex-responses" | "azure-openai-responses" | "anthropic-messages" | "bedrock-converse-stream" | "google-generative-ai" | "google-gemini-cli" | "google-vertex" | "ollama-chat" | "cursor-agent" | "gitlab-duo-agent" | "devin-agent";
|
|
5
|
+
export type KnownApi = "openai-completions" | "openai-responses" | "openrouter" | "openai-codex-responses" | "azure-openai-responses" | "anthropic-messages" | "bedrock-converse-stream" | "google-generative-ai" | "google-gemini-cli" | "google-vertex" | "ollama-chat" | "cursor-agent" | "gitlab-duo-agent" | "devin-agent" | "apple-foundation-models";
|
|
6
6
|
export type Api = KnownApi | (string & {});
|
|
7
7
|
/** Catalog kinds used to isolate role-specific runners from session chat models. */
|
|
8
8
|
export declare const MODEL_KINDS: readonly ["chat", "tiny", "image", "tts", "stt", "search", "judge", "embedding", "rerank", "video"];
|
|
@@ -401,6 +401,13 @@ export interface OpenAICompat {
|
|
|
401
401
|
* sent as the top-level `reasoning.effort`.
|
|
402
402
|
*/
|
|
403
403
|
supportsConfigurationUpdate?: boolean;
|
|
404
|
+
/**
|
|
405
|
+
* Whether the Responses WebSocket accepts `response.steer`, which queues user
|
|
406
|
+
* input into the in-flight response (GPT-6 family). Default: rule-detected.
|
|
407
|
+
* Set `false` for proxies that reject the event; steering then waits for the
|
|
408
|
+
* next request boundary.
|
|
409
|
+
*/
|
|
410
|
+
supportsSteering?: boolean;
|
|
404
411
|
/** Whether streamed reasoning deltas for the same field may repeat the full cumulative text snapshot. Default: false. */
|
|
405
412
|
reasoningDeltasMayBeCumulative?: boolean;
|
|
406
413
|
/** Strip leaked DeepSeek chat-template special tokens from visible content deltas. Default: auto-detected. */
|
|
@@ -441,17 +448,17 @@ export interface AnthropicCompat {
|
|
|
441
448
|
/** Whether thinking requests may include `context_management` and its beta header. Default: true. */
|
|
442
449
|
supportsContextManagement?: boolean;
|
|
443
450
|
/**
|
|
444
|
-
* Whether the model
|
|
445
|
-
* (`compact-2026-
|
|
446
|
-
*
|
|
447
|
-
* adaptive-thinking generation onward and rejects older lines. Default: false.
|
|
451
|
+
* Whether the model and host support Anthropic on-demand compaction
|
|
452
|
+
* (`compact-2026-09-04` requests and signed replay). Enabled on Opus 4.6+,
|
|
453
|
+
* Sonnet 4.6+, Fable/Mythos 5+ on supported hosts. Default: false.
|
|
448
454
|
*/
|
|
449
455
|
supportsServerCompaction?: boolean;
|
|
450
456
|
/**
|
|
451
457
|
* Whether the model is served by the first-party Anthropic provider (its
|
|
452
458
|
* default route is the official API). Rule-owned on the provider; the
|
|
453
459
|
* compaction transport pairs it with a per-request effective-URL check
|
|
454
|
-
* because reroutes leave it stale-true.
|
|
460
|
+
* because reroutes leave it stale-true. Vertex is selected by its provider
|
|
461
|
+
* contract instead. Default: false.
|
|
455
462
|
*/
|
|
456
463
|
firstPartyProvider?: boolean;
|
|
457
464
|
/**
|
|
@@ -727,7 +734,7 @@ export interface ResolvedOpenAISharedCompat {
|
|
|
727
734
|
* `buildModel`; request handlers read fields and never detect, resolve, or
|
|
728
735
|
* allocate.
|
|
729
736
|
*/
|
|
730
|
-
export type ResolvedOpenAICompat = ResolvedOpenAISharedCompat & Required<Omit<OpenAICompat, "supportsDeveloperRole" | "supportsReasoningEffort" | "reasoningEffortMap" | "supportsReasoningParams" | "supportsReasoningSummary" | "supportsSamplingParams" | "supportsPenaltyAndStopParams" | "thinkingFormat" | "kimiApiFormat" | "reasoningDisableMode" | "omitReasoningEffort" | "includeEncryptedReasoning" | "filterReasoningHistory" | "disableReasoningOnForcedToolChoice" | "disableReasoningOnToolChoice" | "disableReasoningWithTools" | "supportsToolChoice" | "supportsForcedToolChoice" | "supportsNamedToolChoice" | "reasoningContentField" | "requiresReasoningContentForToolCalls" | "requiresReasoningContentForAllAssistantTurns" | "allowsSyntheticReasoningContentForToolCalls" | "replayReasoningContent" | "qwenPreserveThinking" | "qwenTemplateReasoningEffort" | "requiresThinkingAsText" | "requiresMistralToolIds" | "requiresToolResultName" | "requiresAssistantAfterToolResult" | "requiresAssistantContentForToolCalls" | "stripDeepseekSpecialTokens" | "streamMarkupHealingPattern" | "reasoningDeltasMayBeCumulative" | "emptyLengthFinishIsContextError" | "usesOpenAIToolCallIdLimit" | "promptCacheSessionHeader" | "supportsPromptCacheBreakpoints" | "promptCacheBreakpointTtl" | "openRouterRouting" | "isOpenRouterHost" | "supportsStrictMode" | "supportsLongPromptCacheRetention" | "alwaysSendMaxTokens" | "clampOutputToModelMax" | "wireModelIdMode" | "vercelGatewayRouting" | "extraBody" | "toolStrictMode" | "toolSchemaFlavor" | "streamFirstEventTimeoutMs" | "streamIdleTimeoutMs" | "streamRevision" | "cacheControlFormat" | "thinkingKeep" | "strictResponsesPairing" | "supportsImageDetailOriginal" | "supportsConfigurationUpdate" | "stripImageInput" | "thinkingLoopGuard" | "whenThinking">> & {
|
|
737
|
+
export type ResolvedOpenAICompat = ResolvedOpenAISharedCompat & Required<Omit<OpenAICompat, "supportsDeveloperRole" | "supportsReasoningEffort" | "reasoningEffortMap" | "supportsReasoningParams" | "supportsReasoningSummary" | "supportsSamplingParams" | "supportsPenaltyAndStopParams" | "thinkingFormat" | "kimiApiFormat" | "reasoningDisableMode" | "omitReasoningEffort" | "includeEncryptedReasoning" | "filterReasoningHistory" | "disableReasoningOnForcedToolChoice" | "disableReasoningOnToolChoice" | "disableReasoningWithTools" | "supportsToolChoice" | "supportsForcedToolChoice" | "supportsNamedToolChoice" | "reasoningContentField" | "requiresReasoningContentForToolCalls" | "requiresReasoningContentForAllAssistantTurns" | "allowsSyntheticReasoningContentForToolCalls" | "replayReasoningContent" | "qwenPreserveThinking" | "qwenTemplateReasoningEffort" | "requiresThinkingAsText" | "requiresMistralToolIds" | "requiresToolResultName" | "requiresAssistantAfterToolResult" | "requiresAssistantContentForToolCalls" | "stripDeepseekSpecialTokens" | "streamMarkupHealingPattern" | "reasoningDeltasMayBeCumulative" | "emptyLengthFinishIsContextError" | "usesOpenAIToolCallIdLimit" | "promptCacheSessionHeader" | "supportsPromptCacheBreakpoints" | "promptCacheBreakpointTtl" | "openRouterRouting" | "isOpenRouterHost" | "supportsStrictMode" | "supportsLongPromptCacheRetention" | "alwaysSendMaxTokens" | "clampOutputToModelMax" | "wireModelIdMode" | "vercelGatewayRouting" | "extraBody" | "toolStrictMode" | "toolSchemaFlavor" | "streamFirstEventTimeoutMs" | "streamIdleTimeoutMs" | "streamRevision" | "cacheControlFormat" | "thinkingKeep" | "strictResponsesPairing" | "supportsImageDetailOriginal" | "supportsConfigurationUpdate" | "supportsSteering" | "stripImageInput" | "thinkingLoopGuard" | "whenThinking">> & {
|
|
731
738
|
vercelGatewayRouting?: OpenAICompat["vercelGatewayRouting"];
|
|
732
739
|
extraBody?: OpenAICompat["extraBody"];
|
|
733
740
|
cacheControlFormat?: OpenAICompat["cacheControlFormat"];
|
|
@@ -761,6 +768,11 @@ export interface ResolvedOpenAIResponsesCompat extends ResolvedOpenAISharedCompa
|
|
|
761
768
|
* the item type with 400.
|
|
762
769
|
*/
|
|
763
770
|
supportsConfigurationUpdate: boolean;
|
|
771
|
+
/**
|
|
772
|
+
* Whether the WebSocket transport may send `response.steer` to deliver user
|
|
773
|
+
* input into the in-flight response. Rule-owned: GPT-6 family.
|
|
774
|
+
*/
|
|
775
|
+
supportsSteering: boolean;
|
|
764
776
|
/** Inject the `# Juice: 0 !important` developer item when reasoning is forced off (gpt-5.6+). */
|
|
765
777
|
requiresReasoningOffJuiceInstruction: boolean;
|
|
766
778
|
/**
|
|
@@ -953,6 +965,15 @@ export interface ModelCost extends TokenCost {
|
|
|
953
965
|
* `"deepseek-v3"`; Kimi K2 through K3 share `"kimi-k2"`.
|
|
954
966
|
*/
|
|
955
967
|
export type ModelTokenizer = "claude-v3" | "claude-v47" | "claude-v5" | "claude-v5-sonnet" | "qwen3" | "deepseek-v3" | "kimi-k2" | "glm5";
|
|
968
|
+
/** One account's discovered entitlements on a model; see {@link Model.accountAccess}. */
|
|
969
|
+
export interface ModelAccountAccess {
|
|
970
|
+
/**
|
|
971
|
+
* Codex `available_access_programs.cyber`: cyber access programs this account
|
|
972
|
+
* may request on the model (`standard`, `daybreak_blue`, `daybreak_red`).
|
|
973
|
+
* Absent when the backend reported no program metadata.
|
|
974
|
+
*/
|
|
975
|
+
cyberPrograms?: readonly string[];
|
|
976
|
+
}
|
|
956
977
|
export interface Model<TApi extends Api = Api> {
|
|
957
978
|
id: string;
|
|
958
979
|
/** Role-specific runner capability; omitted for ordinary chat models. */
|
|
@@ -1046,6 +1067,15 @@ export interface Model<TApi extends Api = Api> {
|
|
|
1046
1067
|
* their single wire id) and on bundled snapshots that predate discovery.
|
|
1047
1068
|
*/
|
|
1048
1069
|
cursorMaxModeRoutes?: Readonly<Record<string, boolean>>;
|
|
1070
|
+
/**
|
|
1071
|
+
* Per-account availability recorded by multi-account discovery: provider
|
|
1072
|
+
* account id (Codex: ChatGPT `chatgpt_account_id`) → that account's
|
|
1073
|
+
* entitlements on this model. An account appears only when its own catalog
|
|
1074
|
+
* lists the model, so credential selection can route account-gated models
|
|
1075
|
+
* (e.g. `gpt-daybreak-blue-latest`) straight to eligible accounts. Absent on
|
|
1076
|
+
* bundled/config rows and on single-account discovery.
|
|
1077
|
+
*/
|
|
1078
|
+
accountAccess?: Readonly<Record<string, ModelAccountAccess>>;
|
|
1049
1079
|
cost: ModelCost;
|
|
1050
1080
|
/** Premium Copilot requests charged per user-initiated request (defaults to 1). */
|
|
1051
1081
|
premiumMultiplier?: number;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oh-my-pi/pi-catalog",
|
|
3
|
-
"version": "18.
|
|
3
|
+
"version": "18.3.1",
|
|
4
4
|
"description": "Model catalog for omp: bundled model database, provider discovery descriptors, model identity, classification, and equivalence",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai",
|
|
@@ -14,7 +14,10 @@
|
|
|
14
14
|
"url": "https://github.com/can1357/oh-my-pi/issues"
|
|
15
15
|
},
|
|
16
16
|
"license": "MIT",
|
|
17
|
-
"author":
|
|
17
|
+
"author": {
|
|
18
|
+
"name": "Stencil Labs, Inc.",
|
|
19
|
+
"url": "https://stencil.so"
|
|
20
|
+
},
|
|
18
21
|
"repository": {
|
|
19
22
|
"type": "git",
|
|
20
23
|
"url": "git+https://github.com/can1357/oh-my-pi.git",
|
|
@@ -90,12 +93,12 @@
|
|
|
90
93
|
"gen:proto": "bun scripts/generate-protocols.ts"
|
|
91
94
|
},
|
|
92
95
|
"dependencies": {
|
|
93
|
-
"@oh-my-pi/omptype": "18.
|
|
94
|
-
"@oh-my-pi/pi-utils": "18.
|
|
96
|
+
"@oh-my-pi/omptype": "18.3.1",
|
|
97
|
+
"@oh-my-pi/pi-utils": "18.3.1"
|
|
95
98
|
},
|
|
96
99
|
"devDependencies": {
|
|
97
100
|
"@bgotink/kdl": "0.4.0",
|
|
98
|
-
"@oh-my-pi/pi-ai": "18.
|
|
101
|
+
"@oh-my-pi/pi-ai": "18.3.1",
|
|
99
102
|
"@types/bun": "^1.3.14"
|
|
100
103
|
},
|
|
101
104
|
"engines": {
|
package/src/compat/auth-ids.ts
CHANGED
package/src/compat/axes.ts
CHANGED
|
@@ -139,6 +139,7 @@ export const AXES: Readonly<Record<string, AxisDef>> = {
|
|
|
139
139
|
"requires-reasoning-off-juice-instruction": wire("requiresReasoningOffJuiceInstruction", ["openai-responses"]),
|
|
140
140
|
"supports-all-turns-reasoning-context": wire("supportsAllTurnsReasoningContext", ["openai-responses"]),
|
|
141
141
|
"supports-configuration-update": wire("supportsConfigurationUpdate", ["openai-responses"]),
|
|
142
|
+
"supports-steering": wire("supportsSteering", ["openai-responses"]),
|
|
142
143
|
"strip-deepseek-special-tokens": wire("stripDeepseekSpecialTokens", OAI),
|
|
143
144
|
"stream-markup-healing-pattern": wire("streamMarkupHealingPattern", OAI, "scalar", [
|
|
144
145
|
"kimi",
|
|
@@ -303,6 +304,18 @@ export const AXES: Readonly<Record<string, AxisDef>> = {
|
|
|
303
304
|
shape: "scalar",
|
|
304
305
|
values: [true, false],
|
|
305
306
|
},
|
|
307
|
+
/**
|
|
308
|
+
* The host accepts a prompt plus `max_tokens` beyond the context window and
|
|
309
|
+
* ends generation at the window (Anthropic `model_context_window_exceeded`)
|
|
310
|
+
* instead of rejecting the request, so callers must not lower the output cap
|
|
311
|
+
* to fit the window.
|
|
312
|
+
*/
|
|
313
|
+
"stops-output-at-context-window": {
|
|
314
|
+
key: "stopsOutputAtContextWindow",
|
|
315
|
+
set: "catalog",
|
|
316
|
+
shape: "scalar",
|
|
317
|
+
values: [true, false],
|
|
318
|
+
},
|
|
306
319
|
"clamp-context-override": { key: "clampContextOverride", set: "catalog", shape: "scalar" },
|
|
307
320
|
"context-promotion-target": { key: "contextPromotionTarget", set: "catalog", shape: "scalar" },
|
|
308
321
|
"context-window-floor": { key: "contextWindowFloor", set: "catalog", shape: "scalar" },
|
|
@@ -335,6 +348,18 @@ export const AXES: Readonly<Record<string, AxisDef>> = {
|
|
|
335
348
|
shape: "scalar",
|
|
336
349
|
},
|
|
337
350
|
"supports-assistant-prefill": { key: "supportsAssistantPrefill", set: "catalog", shape: "scalar" },
|
|
351
|
+
/**
|
|
352
|
+
* Ordered Anthropic model ids forwarded as the server-side `fallbacks`
|
|
353
|
+
* chain when the user opts in. Each must appear in the requested model's
|
|
354
|
+
* `allowed_fallback_models` (GET /v1/models/{id}); anything else is a 400.
|
|
355
|
+
*/
|
|
356
|
+
"server-side-fallback-models": { key: "serverSideFallbackModels", set: "catalog", shape: "array" },
|
|
357
|
+
/**
|
|
358
|
+
* Anthropic model ids a refusal's `fallback_credit_token` may be redeemed
|
|
359
|
+
* on (the refused model's permitted fallback targets). Unordered; a retry
|
|
360
|
+
* on any other model cannot redeem the credit.
|
|
361
|
+
*/
|
|
362
|
+
"fallback-credit-targets": { key: "fallbackCreditTargets", set: "catalog", shape: "array" },
|
|
338
363
|
priority: { key: "priority", set: "catalog", shape: "scalar" },
|
|
339
364
|
"service-tier-cost": { key: "serviceTierCost", set: "catalog", shape: "object" },
|
|
340
365
|
"time-based-cost": { key: "timeBased", set: "catalog", shape: "object" },
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Model } from "../types";
|
|
2
|
+
import { resolveCatalogPolicy } from "./catalog-policy";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Model ids on which a refusal's Anthropic fallback-credit token may be
|
|
6
|
+
* redeemed, authored on the `fallback-credit-targets` catalog axis. Empty when
|
|
7
|
+
* no rule assigns targets (the model cannot redeem credit on any fallback).
|
|
8
|
+
*/
|
|
9
|
+
export function fallbackCreditTargets(model: Model): readonly string[] {
|
|
10
|
+
const value = resolveCatalogPolicy(model).fallbackCreditTargets;
|
|
11
|
+
if (!Array.isArray(value)) return [];
|
|
12
|
+
return value.filter((entry): entry is string => typeof entry === "string");
|
|
13
|
+
}
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import type { Model } from "../types";
|
|
2
2
|
import { resolveCatalogPolicy } from "./catalog-policy";
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Whether the host truncates generation at the context window rather than
|
|
6
|
+
* rejecting prompt + output cap overflow; the output fitter skips these models.
|
|
7
|
+
*/
|
|
8
|
+
export function stopsOutputAtContextWindow(model: Model): boolean {
|
|
9
|
+
return resolveCatalogPolicy(model).stopsOutputAtContextWindow === true;
|
|
10
|
+
}
|
|
11
|
+
|
|
4
12
|
/** Whether discovery and transport policy allow preserving a caller's output cap. */
|
|
5
13
|
export function supportsOutputTokenLimit(model: Model): boolean {
|
|
6
14
|
const policy = resolveCatalogPolicy(model);
|
package/src/compat/resolve.ts
CHANGED
|
@@ -726,6 +726,7 @@ function resolveOpenAIResponsesPolicy(
|
|
|
726
726
|
supportsReasoningSummary: !isXaiHost,
|
|
727
727
|
supportsAllTurnsReasoningContext: false,
|
|
728
728
|
supportsConfigurationUpdate: false,
|
|
729
|
+
supportsSteering: false,
|
|
729
730
|
requiresReasoningOffJuiceInstruction: false,
|
|
730
731
|
stripImageInput: false,
|
|
731
732
|
thinkingLoopGuard: undefined,
|
|
@@ -832,6 +833,7 @@ function pickResponsesOnly(compat: ResolvedOpenAIResponsesCompat): ResponsesOnly
|
|
|
832
833
|
supportsObfuscationOptOut: compat.supportsObfuscationOptOut,
|
|
833
834
|
supportsAllTurnsReasoningContext: compat.supportsAllTurnsReasoningContext,
|
|
834
835
|
supportsConfigurationUpdate: compat.supportsConfigurationUpdate,
|
|
836
|
+
supportsSteering: compat.supportsSteering,
|
|
835
837
|
officialEndpoint: compat.officialEndpoint,
|
|
836
838
|
harmonyLeakMitigation: compat.harmonyLeakMitigation,
|
|
837
839
|
cacheControlFormat: compat.cacheControlFormat,
|
|
@@ -346,12 +346,16 @@ auth "anthropic" {
|
|
|
346
346
|
expiry "jwt-or-never" // session-JWT expiry policy
|
|
347
347
|
result "api-key" // OAuth login persists only credentials.access as a plain API key
|
|
348
348
|
allows-missing-api-key #true
|
|
349
|
+
org-scoped-identity #true // qualify credential/report identity by org (one email can have multiple subscriptions)
|
|
350
|
+
oauth-token-env "PROVIDER_OAUTH_TOKEN" // dedicated OAuth bearer env vars, excluding borrowed API-key aliases in provider env
|
|
349
351
|
native-auth-api "bedrock-converse-stream" // provider transport resolves auth; scan plans pin this API without secrets
|
|
350
352
|
available #false
|
|
351
353
|
show-in-login-list #false
|
|
352
354
|
}
|
|
353
355
|
```
|
|
354
356
|
|
|
357
|
+
`org-scoped-identity #true` keeps credentials and usage reports for different organizations separate even when they share an email; absent or `#false` uses ordinary account identity. `oauth-token-env` takes one or more ordered, non-empty env names carrying this provider's own OAuth bearer. When present, availability ignores other provider-env aliases, and usage probes accept only stored OAuth credentials or the first set bearer from that list; absent providers keep the ordinary API-key env behavior.
|
|
358
|
+
|
|
355
359
|
Login kinds:
|
|
356
360
|
|
|
357
361
|
- `login "api-key" { auth-url "…"; instructions "…"; prompt "…" placeholder="…"; empty-fallback "…"; normalize "strip-bearer"; validate … }` — `validate "chat-completions" base-url= model= tolerate-model-denied= max-tokens-field= max-tokens=`, `validate "anthropic-messages" base-url= model=`, or `validate "models-endpoint" url= base-url-env= headers-hook=`; all accept `label=` (error-message label, defaults to `name`) and `optional=#true` (only auth failures reject).
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// Device authorization and token refresh adapted from NousResearch/hermes-agent (MIT).
|
|
2
2
|
auth "xai-oauth" {
|
|
3
3
|
name "xAI Grok OAuth (SuperGrok or X Premium+)"
|
|
4
|
+
oauth-token-env "XAI_OAUTH_TOKEN"
|
|
4
5
|
login "device-code" {
|
|
5
6
|
client-id "b1a00492-073a-47ea-816f-4c329264a828"
|
|
6
7
|
scopes "openid" "profile" "email" "offline_access" "grok-cli:access" "api:access"
|
|
@@ -7,28 +7,58 @@ class "anthropic" {
|
|
|
7
7
|
thinking-prefix-binding #true
|
|
8
8
|
}
|
|
9
9
|
}
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
10
|
+
// On-demand compaction (compact-2026-09-04) is available on the Claude
|
|
11
|
+
// API and Vertex, not Amazon Bedrock or unverified gateway deployments.
|
|
12
|
+
// Foundry / Claude Platform on AWS are first-party Anthropic routes whose
|
|
13
|
+
// effective URLs are checked at request time.
|
|
14
|
+
on "anthropic" "google-vertex" {
|
|
15
|
+
family "fable" {
|
|
16
|
+
revision ">=5" {
|
|
17
|
+
supports-server-compaction #true
|
|
18
|
+
}
|
|
17
19
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
20
|
+
family "mythos" {
|
|
21
|
+
revision ">=5" {
|
|
22
|
+
supports-server-compaction #true
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
family "opus" {
|
|
26
|
+
revision ">=4.6" {
|
|
27
|
+
supports-server-compaction #true
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
family "sonnet" {
|
|
31
|
+
revision ">=4.6" {
|
|
32
|
+
supports-server-compaction #true
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
models "claude-mythos-preview" {
|
|
21
36
|
supports-server-compaction #true
|
|
22
37
|
}
|
|
23
38
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
39
|
+
// Sonnet 4.5 and newer end generation with `model_context_window_exceeded`
|
|
40
|
+
// when prompt + max_tokens overruns the window, instead of a 400, so the
|
|
41
|
+
// full output cap can be requested without sizing the prompt. Verified for
|
|
42
|
+
// the Claude API only:
|
|
43
|
+
// https://platform.claude.com/docs/en/build-with-claude/handling-stop-reasons#model-context-window-exceeded
|
|
44
|
+
on "anthropic" {
|
|
45
|
+
revision ">=4.5" {
|
|
46
|
+
stops-output-at-context-window #true
|
|
27
47
|
}
|
|
28
48
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
49
|
+
// Opus 5.5 rejects forced tool selection the way Fable/Mythos do — a
|
|
50
|
+
// `tool_choice` of `tool` or `any` fails the request with 400
|
|
51
|
+
// `invalid_request_error`: `tool_choice: type "tool" and "any" are not
|
|
52
|
+
// supported for this model`. The transport downgrades the selector to
|
|
53
|
+
// `auto` so the tool stays offered instead of the turn dying.
|
|
54
|
+
//
|
|
55
|
+
// Upper-bounded on purpose: separator-collapsed ids parse their revision
|
|
56
|
+
// as a whole number (`claude-opus-45` is Opus 4.5, revision 45), so an
|
|
57
|
+
// open `>=5.5` would silently catch them, and a later Opus generation has
|
|
58
|
+
// to be re-verified against the API before it inherits the restriction.
|
|
59
|
+
family "opus" {
|
|
60
|
+
revision ">=5.5 <6" {
|
|
61
|
+
supports-forced-tool-choice #false
|
|
32
62
|
}
|
|
33
63
|
}
|
|
34
64
|
on "anthropic" "cloudflare-ai-gateway" "google-vertex" {
|
|
@@ -37,8 +37,11 @@ class "openai" {
|
|
|
37
37
|
revision "=5.6" {
|
|
38
38
|
delegation-bias "gated"
|
|
39
39
|
}
|
|
40
|
+
// GPT-6 accepts `response.steer` over the Responses WebSocket: user input
|
|
41
|
+
// joins the in-flight response instead of waiting for the next request.
|
|
40
42
|
revision ">=6" {
|
|
41
43
|
delegation-bias "restrained"
|
|
44
|
+
supports-steering #true
|
|
42
45
|
}
|
|
43
46
|
// GPT-6 Astra changes reasoning effort mid-conversation through a
|
|
44
47
|
// `configuration_update` input item so the request-level effort (and the
|
|
@@ -58,6 +58,21 @@ provider "anthropic" {
|
|
|
58
58
|
revision ">=3.7 <4.6" {
|
|
59
59
|
thinking-efforts "minimal" "low" "medium" "high" "xhigh"
|
|
60
60
|
}
|
|
61
|
+
// Server-side refusal fallback chain (opt-in via
|
|
62
|
+
// `providers.anthropic.serverSideFallback`). Targets must be in the
|
|
63
|
+
// model's `allowed_fallback_models` on GET /v1/models/{id}; Fable 5 and
|
|
64
|
+
// 5.1 publish ["claude-opus-4-8", "claude-opus-5"] (2026-09-24).
|
|
65
|
+
// `claude-opus-5-5` is rejected with a 400 (#13059).
|
|
66
|
+
family "fable" {
|
|
67
|
+
server-side-fallback-models "claude-opus-5"
|
|
68
|
+
// Fallback-credit redemption targets: the refused model's permitted
|
|
69
|
+
// fallback targets. Fable 5 and 5.1 → Opus 4.8 and Opus 5
|
|
70
|
+
// (https://platform.claude.com/docs/en/build-with-claude/fallback-credit).
|
|
71
|
+
fallback-credit-targets "claude-opus-4-8" "claude-opus-5"
|
|
72
|
+
}
|
|
73
|
+
family "mythos" {
|
|
74
|
+
server-side-fallback-models "claude-opus-5"
|
|
75
|
+
}
|
|
61
76
|
}
|
|
62
77
|
// residue: taxonomy ranks and exact globs do not isolate these models.
|
|
63
78
|
models "*20240229" "claude-3-7-sonnet-20250219" {
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// Apple Foundation Models: the on-device system language model (macOS 27+,
|
|
2
|
+
// Apple silicon), bridged in-process by pi-natives. Models are discovered at
|
|
3
|
+
// runtime from the model's availability; nothing is bundled.
|
|
4
|
+
|
|
5
|
+
provider "apple" {
|
|
6
|
+
default-model "on-device"
|
|
7
|
+
allow-unauthenticated #true
|
|
8
|
+
}
|
|
@@ -37,7 +37,7 @@ provider "yolo-auto" {
|
|
|
37
37
|
cost input=0 output=0 cache-read=0 cache-write=0
|
|
38
38
|
limits context=262144 max-tokens=131072
|
|
39
39
|
thinking-mode "effort"
|
|
40
|
-
thinking-efforts "minimal" "low" "medium" "high"
|
|
40
|
+
thinking-efforts "minimal" "low" "medium" "high" "xhigh"
|
|
41
41
|
supports-developer-role #false
|
|
42
42
|
supports-store #false
|
|
43
43
|
supports-reasoning-effort #true
|
|
@@ -50,7 +50,7 @@ provider "yolo-auto" {
|
|
|
50
50
|
cost input=0 output=0 cache-read=0 cache-write=0
|
|
51
51
|
limits context=262144 max-tokens=131072
|
|
52
52
|
thinking-mode "effort"
|
|
53
|
-
thinking-efforts "minimal" "low" "medium" "high"
|
|
53
|
+
thinking-efforts "minimal" "low" "medium" "high" "xhigh"
|
|
54
54
|
supports-developer-role #false
|
|
55
55
|
supports-store #false
|
|
56
56
|
supports-reasoning-effort #true
|
|
@@ -61,6 +61,12 @@ provider "yolo-auto" {
|
|
|
61
61
|
|
|
62
62
|
supports-developer-role #false
|
|
63
63
|
supports-store #false
|
|
64
|
+
// Live /v1/models advertises `thinking: minimal..xhigh` for the Qwen3.8
|
|
65
|
+
// rows; the cascade rule carries it into the regenerated bundle, whose
|
|
66
|
+
// thinking re-bake ignores seed-level ladders.
|
|
67
|
+
models "qwen3.8-flash" "yolo" "qwen3.8-27b" {
|
|
68
|
+
thinking-efforts "minimal" "low" "medium" "high" "xhigh"
|
|
69
|
+
}
|
|
64
70
|
models "deepseek-flash-v4" {
|
|
65
71
|
disable-reasoning-on-tool-choice #true
|
|
66
72
|
max-tokens-field "max_completion_tokens"
|