@oh-my-pi/pi-catalog 18.2.9 → 18.2.11

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 CHANGED
@@ -2,6 +2,19 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [18.2.11] - 2026-09-23
6
+
7
+ ### Added
8
+
9
+ - Added built-in StepFun provider support for the step-5-preview model, including live model discovery.
10
+
11
+ ### Fixed
12
+
13
+ - Fixed cost estimation for OpenAI Codex GPT-6 Sol and Luna models across standard and worker routes.
14
+ - Fixed GitHub Copilot Grok 4.x models failing to make requests.
15
+
16
+ ## [18.2.10] - 2026-09-22
17
+
5
18
  ### Changed
6
19
 
7
20
  - Updated default models for anthropic, amazon-bedrock, cloudflare-ai-gateway, kilo, litellm, opencode-zen, vercel-ai-gateway, and zenmux to claude-opus-5-5
@@ -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" | "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" | "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
- 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" | "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";
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";
@@ -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" | "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" | "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";
@@ -476,6 +476,31 @@ export interface YoloAutoModelManagerConfig {
476
476
  * code change.
477
477
  */
478
478
  export declare function yoloAutoModelManagerOptions(config?: YoloAutoModelManagerConfig): ModelManagerOptions<"openai-completions">;
479
+ /**
480
+ * StepFun discovery configuration: the API key plus optional base-URL and
481
+ * fetch overrides. Consumed by {@link stepfunModelManagerOptions}, and exported
482
+ * for extensions and tests that construct the manager directly.
483
+ */
484
+ export interface StepfunModelManagerConfig {
485
+ apiKey?: string;
486
+ baseUrl?: string;
487
+ fetch?: FetchImpl;
488
+ }
489
+ /**
490
+ * Whether a StepFun `/v1/models` id is a chat model omp can route. StepFun's
491
+ * roster interleaves its audio and image SKUs with the chat models; the
492
+ * exclusion policy itself lives in `runtime/behavior.kdl` (`exclude-models
493
+ * provider="stepfun"`), not here.
494
+ */
495
+ export declare function isStepfunChatModelId(id: string): boolean;
496
+ /**
497
+ * StepFun model manager: plain OpenAI-compatible chat completions at
498
+ * `api.stepfun.ai/v1`. A successful `/v1/models` snapshot is authoritative over
499
+ * the bundled seed rows (`providers/stepfun.kdl`), so a model StepFun retires
500
+ * leaves the picker instead of lingering as a dead seed row, while models added
501
+ * later become selectable without an omp release.
502
+ */
503
+ export declare function stepfunModelManagerOptions(config?: StepfunModelManagerConfig): ModelManagerOptions<"openai-completions">;
479
504
  export interface QwenPortalModelManagerConfig {
480
505
  apiKey?: string;
481
506
  baseUrl?: string;
@@ -4,12 +4,13 @@
4
4
  export declare const CODEX_BASE_URL = "https://chatgpt.com/backend-api";
5
5
  /**
6
6
  * Pinned OpenAI Codex client version (corresponds to @openai/codex package version).
7
+ * Updated from npm by `bun run check-spoofed-versions --update`.
7
8
  *
8
9
  * The backend version-gates model availability against this value on both
9
- * `/models?client_version=` and `/responses` (`gpt-6-astra` requires ≥ 0.153.0);
10
- * an older pin silently hides newer SKUs from discovery.
10
+ * `/models?client_version=` and `/responses`; 0.155.1 exposes GPT-6 Sol and Luna.
11
+ * An older pin silently hides newer SKUs from discovery.
11
12
  */
12
- export declare const CODEX_CLIENT_VERSION = "0.153.0";
13
+ export declare const CODEX_CLIENT_VERSION = "0.155.1";
13
14
  export declare const OPENAI_HEADERS: {
14
15
  readonly BETA: "OpenAI-Beta";
15
16
  /** Codex feature-negotiation header; values identify opt-in wire protocols. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oh-my-pi/pi-catalog",
3
- "version": "18.2.9",
3
+ "version": "18.2.11",
4
4
  "description": "Model catalog for omp: bundled model database, provider discovery descriptors, model identity, classification, and equivalence",
5
5
  "keywords": [
6
6
  "ai",
@@ -90,12 +90,12 @@
90
90
  "gen:proto": "bun scripts/generate-protocols.ts"
91
91
  },
92
92
  "dependencies": {
93
- "@oh-my-pi/omptype": "18.2.9",
94
- "@oh-my-pi/pi-utils": "18.2.9"
93
+ "@oh-my-pi/omptype": "18.2.11",
94
+ "@oh-my-pi/pi-utils": "18.2.11"
95
95
  },
96
96
  "devDependencies": {
97
97
  "@bgotink/kdl": "0.4.0",
98
- "@oh-my-pi/pi-ai": "18.2.9",
98
+ "@oh-my-pi/pi-ai": "18.2.11",
99
99
  "@types/bun": "^1.3.14"
100
100
  },
101
101
  "engines": {
@@ -70,6 +70,7 @@ export type AuthProviderId =
70
70
  | "singularityapi-dev"
71
71
  | "singularityapi-tech"
72
72
  | "stencil"
73
+ | "stepfun"
73
74
  | "synthetic"
74
75
  | "tavily"
75
76
  | "together"
@@ -151,6 +152,7 @@ export type LoginProviderId =
151
152
  | "singularityapi-dev"
152
153
  | "singularityapi-tech"
153
154
  | "stencil"
155
+ | "stepfun"
154
156
  | "synthetic"
155
157
  | "tavily"
156
158
  | "together"
@@ -63,6 +63,7 @@ export type KnownProvider =
63
63
  | "siliconflow-cn"
64
64
  | "singularityapi-dev"
65
65
  | "singularityapi-tech"
66
+ | "stepfun"
66
67
  | "synthetic"
67
68
  | "together"
68
69
  | "typesafe"
@@ -5,7 +5,7 @@ login-order "openai-codex" "anthropic" "zai" "zai-coding-plan" "kimi-code" "open
5
5
  "cursor" "devin" "google-antigravity" "google-gemini-cli" "openai-codex-device" "xai" "xai-oauth" \
6
6
  "gitlab-duo" "gitlab-duo-agent" "alibaba-coding-plan" "alibaba-token-plan" "aiand" "abliteration" "zhipu-coding-plan" \
7
7
  "umans" "qwen-portal" "sakana" "minimax-code" "minimax-code-cn" "xiaomi" "xiaomi-token-plan-sgp" \
8
- "xiaomi-token-plan-ams" "xiaomi-token-plan-cn" "firepass" "cline-pass" "commandcode" "charm-hyper" "deepseek" "muse-code" "meta" "moonshot" \
8
+ "xiaomi-token-plan-ams" "xiaomi-token-plan-cn" "firepass" "cline-pass" "commandcode" "charm-hyper" "deepseek" "stepfun" "muse-code" "meta" "moonshot" \
9
9
  "cerebras" "baseten" "fireworks" "together" "nvidia" "novita" "deepinfra" "huggingface" "perplexity" \
10
10
  "qianfan" "venice" "siliconflow" "siliconflow-cn" "synthetic" "nanogpt" "wafer-serverless" "coreweave" \
11
11
  "vercel-ai-gateway" "cloudflare-ai-gateway" "litellm" "kilo" "zenmux" "opencode-zen" "opencode-go" \
@@ -0,0 +1,13 @@
1
+ auth "stepfun" {
2
+ name "StepFun"
3
+ login "api-key" {
4
+ auth-url "https://platform.stepfun.ai/interface-key"
5
+ instructions "Copy your API key from the StepFun Open Platform"
6
+ // StepFun keys are unprefixed opaque strings (no `sk-` prefix), so the
7
+ // placeholder must not teach a credential shape the console never issues.
8
+ prompt "Paste your StepFun API key" placeholder="..."
9
+ // A real auth rejection (401/403) is fatal; any other validation-endpoint
10
+ // failure is non-fatal — skip validation and trust the supplied key.
11
+ validate "chat-completions" label="StepFun" base-url="https://api.stepfun.ai/v1" model="step-5-preview" optional=#true
12
+ }
13
+ }
@@ -80,6 +80,22 @@ provider "openai-codex" {
80
80
  }
81
81
  max-context-window 922000
82
82
  }
83
+ models "gpt-6-sol" "gpt-6-sol-wm" {
84
+ cost-patch {
85
+ input 2.0
86
+ output 10.0
87
+ cache-read 0.2
88
+ cache-write 0
89
+ }
90
+ }
91
+ models "gpt-6-luna" "gpt-6-luna-wm" {
92
+ cost-patch {
93
+ input 0.1
94
+ output 0.5
95
+ cache-read 0.01
96
+ cache-write 0
97
+ }
98
+ }
83
99
  class "openai" {
84
100
  revision ">=5.3 <5.7" {
85
101
  thinking-mode "effort"
@@ -0,0 +1,95 @@
1
+ // Provider-wire compat for "stepfun" (StepFun Open Platform, api.stepfun.ai).
2
+
3
+ provider "stepfun" {
4
+ default-model "step-5-preview"
5
+ env "STEPFUN_API_KEY"
6
+ // A successful `/v1/models` snapshot is the deployment truth, so it replaces
7
+ // the bundled seed rather than merging: StepFun retiring an id must remove
8
+ // it from the picker instead of leaving a dead seed row selectable.
9
+ dynamic-models-authoritative #true
10
+ // StepFun's own endpoint is the deployment truth: relay hosts serve the same
11
+ // ids with stray output ceilings and broader ladders, so the generator must
12
+ // not backfill limits or capabilities from same-id rows elsewhere.
13
+ skip-cross-provider-reference-fills #true
14
+ discovery label="StepFun"
15
+
16
+ // StepFun's OpenAI-compatible chat roster, bundled so the provider is
17
+ // selectable without a generation-time API key. The provider is not
18
+ // authoritative, so runtime `/v1/models` discovery merges additively; that
19
+ // endpoint also serves non-chat SKUs (StepAudio TTS/ASR, image models),
20
+ // which runtime/behavior.kdl excludes from the chat picker.
21
+ // Limits and per-model facts follow StepFun's published model cards, as
22
+ // catalogued on models.dev (`providers/stepfun-ai` + `models/stepfun`). The
23
+ // API accepts `max_tokens` far above any real cap (2M probes return 200), so
24
+ // a live probe cannot establish the ceiling, and the docs page's "64k max
25
+ // output" prose is not a limit the endpoint enforces either.
26
+ // Pricing is StepFun's published list price:
27
+ // https://platform.stepfun.ai/docs/en/guides/pricing/details
28
+ // (models.dev still carries the pre-June step-3.7-flash rates).
29
+ // A cache miss already covers writing the prefix into the cache ("the
30
+ // cache-miss input price includes writing new content to the cache"), so
31
+ // there is no separate cache-write tariff.
32
+ seed api="openai-completions" base-url="https://api.stepfun.ai/v1" bundle="always" {
33
+ // 1M context, input, and output. Input is text/image/video; video has no
34
+ // catalog representation, so the multimodal row declares text + image.
35
+ model "step-5-preview" name="Step 5 Preview" {
36
+ reasoning #true
37
+ input "text" "image"
38
+ cost input=1.0 output=2.7 cache-read=0.05 cache-write=0
39
+ limits context=1000000 max-tokens=1000000
40
+ thinking-mode "effort"
41
+ thinking-efforts "low" "medium" "high"
42
+ }
43
+ // Multimodal agent/coding SKU.
44
+ model "step-3.7-flash" name="Step 3.7 Flash" {
45
+ reasoning #true
46
+ input "text" "image"
47
+ cost input=0.2 output=1.15 cache-read=0.04 cache-write=0
48
+ limits context=256000 max-tokens=256000
49
+ thinking-mode "effort"
50
+ thinking-efforts "low" "medium" "high"
51
+ }
52
+ model "step-3.5-flash" name="Step 3.5 Flash" {
53
+ reasoning #true
54
+ input "text"
55
+ cost input=0.1 output=0.3 cache-read=0.02 cache-write=0
56
+ limits context=256000 max-tokens=256000
57
+ thinking-mode "effort"
58
+ thinking-efforts "low" "medium" "high"
59
+ }
60
+ model "step-3.5-flash-2603" name="Step 3.5 Flash 2603" {
61
+ reasoning #true
62
+ input "text"
63
+ cost input=0.1 output=0.3 cache-read=0.02 cache-write=0
64
+ limits context=256000 max-tokens=256000
65
+ thinking-mode "effort"
66
+ thinking-efforts "low" "medium" "high"
67
+ }
68
+ }
69
+
70
+ // StepFun's Chat Completions API documents `max_tokens` (default INF) and
71
+ // never the `max_completion_tokens` spelling the OpenAI baseline assumes.
72
+ max-tokens-field "max_tokens"
73
+
74
+ // StepFun's own API exposes the three-tier `reasoning_effort` ladder, while
75
+ // the shared stepfun class ladder (minimal…xhigh) documents relay hosts
76
+ // (OpenRouter, NanoGPT, NVIDIA, …). The provider scope therefore owns the
77
+ // exact set for models discovered at runtime, where no seed row declares
78
+ // thinking explicitly. Scoped by family, not revision: the stepfun taxonomy
79
+ // extracts no revision, and a family-scoped rule still cannot reach the
80
+ // class rule's `on` host list.
81
+ // Verified 2026-09-23 against
82
+ // `POST https://api.stepfun.ai/v1/chat/completions`: low/medium/high all
83
+ // return 200 on every model above, and `/v1/models` reports
84
+ // `reasoning_effort_support_list: ["low","medium","high"]` — the docs page
85
+ // still claims `step-3.5-flash-2603` accepts low/high only.
86
+ // Only reasoning models resolve a ladder (`resolveOverIndex` gates thinking
87
+ // on the target's reasoning fact), so a future non-reasoning StepFun SKU
88
+ // stays unaffected.
89
+ class "stepfun" {
90
+ family "step" {
91
+ thinking-mode "effort"
92
+ thinking-efforts "low" "medium" "high"
93
+ }
94
+ }
95
+ }
@@ -138,6 +138,9 @@ behavior {
138
138
  exclude-models provider="xiaomi-token-plan-ams" substring="-tts" substring="-asr"
139
139
  exclude-models provider="xiaomi-token-plan-cn" substring="-tts" substring="-asr"
140
140
  exclude-models provider="xiaomi-token-plan-sgp" substring="-tts" substring="-asr"
141
+ // Text-chat transports cannot serve StepFun's audio-only and image-editing
142
+ // SKUs, which its /v1/models roster interleaves with the chat models.
143
+ exclude-models provider="stepfun" prefix="stepaudio-" prefix="step-image-" prefix="step-tts-" prefix="step-2x-large"
141
144
  // SuperGrok's roster interleaves media models the chat picker cannot
142
145
  // serve; the dedicated tool surfaces route them instead.
143
146
  exclude-models provider="xai-oauth" exact="grok-imagine-image-quality" exact="grok-imagine-image-2.0" \
@@ -169,11 +172,16 @@ behavior {
169
172
  prefix="qwen-audio-" prefix="qwen-image-" prefix="text-embedding-" prefix="wan2.7-"
170
173
  // Copilot's /models listing carries no transport field; route Claude ids
171
174
  // to Anthropic Messages, the reviewed Responses roster to Responses, and
172
- // everything else to chat completions.
175
+ // everything else to chat completions. Every Grok Copilot has served since
176
+ // 4.5 is Responses-only (chat completions answers 400
177
+ // unsupported_api_for_model), so the line is matched by prefix — including
178
+ // the synthesized `-1m` long-context siblings — instead of one exact id per
179
+ // revision (#7096, #8807, #12901). grok-code-fast-1 carries no 4.x revision
180
+ // and stays on chat completions.
173
181
  api-routes provider="github-copilot" default="openai-completions" {
174
182
  route "anthropic-messages" glob="claude-haiku-*" glob="claude-sonnet-*" glob="claude-opus-*" \
175
183
  glob="claude-fable-*" glob="claude-mythos-*"
176
- route "openai-responses" exact="grok-4.5" exact="grok-4.6" prefix="gpt-5" prefix="gpt-6" prefix="oswe" prefix="mai-"
184
+ route "openai-responses" prefix="grok-4." prefix="gpt-5" prefix="gpt-6" prefix="oswe" prefix="mai-"
177
185
  }
178
186
  // Command Code serves Claude models through its Anthropic-compatible
179
187
  // Messages endpoint and every other model through chat completions.