@linxiraos/pi-catalog 1.2.0 → 1.3.0

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.
Files changed (127) hide show
  1. package/CHANGELOG.md +79 -0
  2. package/README.md +4 -2
  3. package/THIRD-PARTY-NOTICES.txt +55 -5
  4. package/dist/types/build.d.ts +3 -2
  5. package/dist/types/compat/auth-ids.d.ts +2 -2
  6. package/dist/types/compat/axes.d.ts +1 -1
  7. package/dist/types/compat/behavior.d.ts +5 -0
  8. package/dist/types/compat/catalog-endpoint.d.ts +8 -0
  9. package/dist/types/compat/image-tokenization.d.ts +9 -1
  10. package/dist/types/compat/judgment-images.d.ts +25 -0
  11. package/dist/types/compat/provider-ids.d.ts +1 -1
  12. package/dist/types/compat/request-compression.d.ts +23 -0
  13. package/dist/types/compat/request-size.d.ts +12 -3
  14. package/dist/types/compat/thinking-replay.d.ts +9 -0
  15. package/dist/types/compat/types.d.ts +4 -0
  16. package/dist/types/discovery/antigravity.d.ts +7 -0
  17. package/dist/types/model-cache.d.ts +7 -0
  18. package/dist/types/model-manager.d.ts +6 -0
  19. package/dist/types/model-thinking.d.ts +11 -1
  20. package/dist/types/models.d.ts +16 -1
  21. package/dist/types/pricing.d.ts +37 -1
  22. package/dist/types/provider-models/openai-compat.d.ts +18 -46
  23. package/dist/types/types.d.ts +63 -12
  24. package/dist/types/wire/codex.d.ts +2 -0
  25. package/package.json +6 -6
  26. package/src/build.d.ts +3 -2
  27. package/src/build.ts +159 -80
  28. package/src/compat/auth-ids.ts +2 -0
  29. package/src/compat/axes.d.ts +1 -1
  30. package/src/compat/axes.ts +129 -4
  31. package/src/compat/behavior.d.ts +5 -0
  32. package/src/compat/behavior.ts +9 -1
  33. package/src/compat/cascade.ts +4 -1
  34. package/src/compat/catalog-endpoint.ts +43 -0
  35. package/src/compat/image-tokenization.ts +28 -10
  36. package/src/compat/judgment-images.ts +83 -0
  37. package/src/compat/provider-ids.d.ts +1 -1
  38. package/src/compat/provider-ids.ts +1 -0
  39. package/src/compat/request-compression.ts +43 -0
  40. package/src/compat/request-size.ts +20 -5
  41. package/src/compat/resolve.ts +90 -53
  42. package/src/compat/rules/README.md +32 -3
  43. package/src/compat/rules/auth/_order.kdl +1 -1
  44. package/src/compat/rules/auth/google-antigravity.kdl +1 -1
  45. package/src/compat/rules/auth/sambanova.kdl +9 -0
  46. package/src/compat/rules/auth/stencil.kdl +1 -1
  47. package/src/compat/rules/classes/anthropic.kdl +42 -2
  48. package/src/compat/rules/classes/deepseek.kdl +4 -0
  49. package/src/compat/rules/classes/gemini.kdl +46 -2
  50. package/src/compat/rules/classes/meta.kdl +7 -0
  51. package/src/compat/rules/classes/minimax.kdl +11 -1
  52. package/src/compat/rules/classes/openai.kdl +34 -3
  53. package/src/compat/rules/classes/xai.kdl +26 -0
  54. package/src/compat/rules/providers/amazon-bedrock.kdl +1 -0
  55. package/src/compat/rules/providers/anthropic.kdl +23 -0
  56. package/src/compat/rules/providers/azure.kdl +2 -0
  57. package/src/compat/rules/providers/cerebras.kdl +3 -0
  58. package/src/compat/rules/providers/cline-pass.kdl +16 -0
  59. package/src/compat/rules/providers/commandcode.kdl +10 -0
  60. package/src/compat/rules/providers/cursor.kdl +50 -1
  61. package/src/compat/rules/providers/deepinfra.kdl +3 -1
  62. package/src/compat/rules/providers/devin.kdl +117 -6
  63. package/src/compat/rules/providers/factory-droid.kdl +6 -0
  64. package/src/compat/rules/providers/firepass.kdl +15 -0
  65. package/src/compat/rules/providers/fireworks.kdl +26 -0
  66. package/src/compat/rules/providers/github-copilot.kdl +24 -0
  67. package/src/compat/rules/providers/google-antigravity.kdl +37 -0
  68. package/src/compat/rules/providers/google-gemini-cli.kdl +1 -0
  69. package/src/compat/rules/providers/google-vertex.kdl +5 -0
  70. package/src/compat/rules/providers/google.kdl +1 -0
  71. package/src/compat/rules/providers/image-tokenization.kdl +2 -1
  72. package/src/compat/rules/providers/local.kdl +8 -1
  73. package/src/compat/rules/providers/meta.kdl +16 -0
  74. package/src/compat/rules/providers/moonshot.kdl +2 -0
  75. package/src/compat/rules/providers/muse-code.kdl +49 -0
  76. package/src/compat/rules/providers/native-tools.kdl +3 -0
  77. package/src/compat/rules/providers/ollama-cloud.kdl +10 -0
  78. package/src/compat/rules/providers/openai-codex.kdl +29 -5
  79. package/src/compat/rules/providers/openai.kdl +1 -0
  80. package/src/compat/rules/providers/opencode-go.kdl +35 -0
  81. package/src/compat/rules/providers/opencode-zen.kdl +4 -0
  82. package/src/compat/rules/providers/openrouter.kdl +19 -0
  83. package/src/compat/rules/providers/sambanova.kdl +60 -0
  84. package/src/compat/rules/providers/tool-call-names.kdl +37 -0
  85. package/src/compat/rules/providers/typesafe.kdl +11 -0
  86. package/src/compat/rules/providers/umans.kdl +7 -0
  87. package/src/compat/rules/providers/venice.kdl +7 -0
  88. package/src/compat/rules/providers/xai-oauth.kdl +16 -6
  89. package/src/compat/rules/providers/xai.kdl +3 -0
  90. package/src/compat/rules/providers/zai.kdl +5 -0
  91. package/src/compat/rules/runtime/behavior.kdl +128 -8
  92. package/src/compat/rules/taxonomy/_collapse.kdl +11 -0
  93. package/src/compat/rules/taxonomy/gemma.kdl +1 -0
  94. package/src/compat/rules/taxonomy/meta.kdl +7 -0
  95. package/src/compat/rules/taxonomy/openai.kdl +2 -0
  96. package/src/compat/rules.json +1 -1
  97. package/src/compat/thinking-replay.ts +33 -0
  98. package/src/compat/types.d.ts +4 -0
  99. package/src/compat/types.ts +4 -0
  100. package/src/discovery/antigravity.d.ts +7 -0
  101. package/src/discovery/antigravity.ts +13 -0
  102. package/src/discovery/codex.ts +0 -4
  103. package/src/discovery/cursor.ts +28 -20
  104. package/src/discovery/devin.ts +7 -8
  105. package/src/model-cache.d.ts +7 -0
  106. package/src/model-cache.ts +8 -0
  107. package/src/model-manager.d.ts +6 -0
  108. package/src/model-manager.ts +41 -21
  109. package/src/model-thinking.d.ts +80 -0
  110. package/src/model-thinking.ts +13 -1
  111. package/src/model-tokenizer.ts +7 -1
  112. package/src/models.d.ts +16 -1
  113. package/src/models.json +1 -1
  114. package/src/models.ts +26 -12
  115. package/src/pricing.d.ts +37 -1
  116. package/src/pricing.ts +123 -12
  117. package/src/provider-models/bundled-references.ts +5 -2
  118. package/src/provider-models/cache-provider-id.ts +1 -1
  119. package/src/provider-models/descriptors.ts +2 -0
  120. package/src/provider-models/google.ts +7 -1
  121. package/src/provider-models/openai-compat.d.ts +18 -46
  122. package/src/provider-models/openai-compat.ts +188 -104
  123. package/src/provider-models/special.ts +1 -0
  124. package/src/types.d.ts +63 -12
  125. package/src/types.ts +71 -9
  126. package/src/wire/codex.d.ts +2 -0
  127. package/src/wire/codex.ts +17 -0
@@ -8,12 +8,27 @@ provider "cursor" {
8
8
  }
9
9
 
10
10
  thinking-mode "effort"
11
- // Cursor's default route selects a differently priced backing model per request.
11
+ // Cursor relays its upstream's image count (Claude 600, GPT 1,500) and took
12
+ // a 64 MB body; 60 images at the 500 KiB resize target stay near 31 MB.
13
+ image-count-budget 60
14
+ // Cursor's default route selects a differently priced backing model per
15
+ // request, Claude and GPT included, so it keeps Claude's image count and
16
+ // their 1024px edge; Gemini and Composer read 1024px pages as well as
17
+ // larger ones.
12
18
  models "default" {
13
19
  pricing-status "variable"
20
+ image-count-budget 20
21
+ image-max-edge 1024
14
22
  }
15
23
 
24
+ // Cursor re-encodes every image for its Claude and GPT upstreams to fit
25
+ // 1024×1024 before the model reads it; Gemini and Composer read larger
26
+ // images as sent.
16
27
  class "anthropic" {
28
+ image-max-edge 1024
29
+ // Past 20 images Claude rejects any image edge over 3,000 px, checked
30
+ // before Cursor downsizes.
31
+ image-count-budget 20
17
32
  family "fable" {
18
33
  requires-cursor-tool-schema-projection #true
19
34
  // Cursor advertised Context window 300k (Max 1M recovered elsewhere).
@@ -56,6 +71,8 @@ provider "cursor" {
56
71
  }
57
72
  }
58
73
  class "openai" {
74
+ // GPT images are fitted to 1024×1024 like Claude's (see above).
75
+ image-max-edge 1024
59
76
  revision ">=5.6 <5.7" {
60
77
  // Cursor advertised GPT-5.6 Sol/Terra/Luna Context window 272k;
61
78
  // raises unlabeled -fast variants from the 200k default.
@@ -433,6 +450,26 @@ provider "cursor" {
433
450
  cache-write 0
434
451
  }
435
452
  }
453
+ // Gemini 4 Argon: $2/$10, cache read $0.10. Other Models bill at the
454
+ // model's API price, so the card follows Google's list-price increase to
455
+ // $4/$20, cache read $0.20, from 2026-12-01 (midnight US Pacific).
456
+ models "gemini-4-argon" {
457
+ cost-patch {
458
+ input 2.0
459
+ output 10.0
460
+ cache-read 0.1
461
+ cache-write 0
462
+ effective-rates {
463
+ list-price {
464
+ effective-from "2026-12-01T08:00:00Z"
465
+ input 4.0
466
+ output 20.0
467
+ cache-read 0.2
468
+ cache-write 0
469
+ }
470
+ }
471
+ }
472
+ }
436
473
  // GLM 5.2: $1.40/$4.40, cache read $0.26.
437
474
  models "glm-5.2" {
438
475
  cost-patch {
@@ -711,3 +748,15 @@ provider "cursor" {
711
748
  }
712
749
  }
713
750
  }
751
+
752
+ // The same 1024px edge for targets that name only Cursor's wire (`{ api, id }`,
753
+ // no host). priority=-1: a fallback, so the equally specific provider rule
754
+ // above wins when both match.
755
+ on-api "cursor-agent" {
756
+ class "anthropic" priority=-1 {
757
+ image-max-edge 1024
758
+ }
759
+ class "openai" priority=-1 {
760
+ image-max-edge 1024
761
+ }
762
+ }
@@ -1,4 +1,4 @@
1
- // Catalog entry for "deepinfra"; no deployment-contract compat rules are needed.
1
+ // Catalog entry for "deepinfra".
2
2
 
3
3
  provider "deepinfra" {
4
4
  default-model "deepseek-ai/DeepSeek-V4-Flash-0731"
@@ -9,6 +9,8 @@ provider "deepinfra" {
9
9
  image "openai-images"
10
10
  tts "openai-speech"
11
11
  }
12
+ // Same-provider image-generation swap target for chat models.
13
+ image-model "black-forest-labs/FLUX-2-pro"
12
14
 
13
15
  seed base-url="https://api.deepinfra.com/v1/openai" bundle="always" {
14
16
  model "black-forest-labs/FLUX-2-pro" name="FLUX.2 Pro" api="openai-images" {
@@ -1,4 +1,4 @@
1
- // Catalog entry for "devin"; no deployment-contract compat rules are needed.
1
+ // Catalog entry and deployment contract for "devin".
2
2
 
3
3
  provider "devin" {
4
4
  default-model "swe-1-6"
@@ -45,7 +45,7 @@ provider "devin" {
45
45
  // (PRO reports $0 for SWE-2, SWE-1.7, and GLM-5.2 High). `cost-fallback`
46
46
  // seeds the enterprise-tier list price only when upstream reports no
47
47
  // token price, so accounts whose discovery does carry dimensions keep
48
- // their real rates.
48
+ // their real rates. None of these models publishes a cache-write rate.
49
49
 
50
50
  // SWE-2: enterprise promo is 75% off list through 2026-12-31; list
51
51
  // pricing ($3/$15, $0.30 cache read) applies from 2027-01-01.
@@ -54,14 +54,14 @@ provider "devin" {
54
54
  input 0.75
55
55
  output 3.75
56
56
  cache-read 0.075
57
- cache-write 0.75
57
+ cache-write 0
58
58
  effective-rates {
59
59
  list-price {
60
60
  effective-from "2027-01-01T00:00:00Z"
61
61
  input 3
62
62
  output 15
63
63
  cache-read 0.3
64
- cache-write 3
64
+ cache-write 0
65
65
  }
66
66
  }
67
67
  }
@@ -74,7 +74,7 @@ provider "devin" {
74
74
  input 0.5
75
75
  output 2.5
76
76
  cache-read 0.2
77
- cache-write 0.5
77
+ cache-write 0
78
78
  }
79
79
  }
80
80
  models "glm-5-2" {
@@ -82,7 +82,118 @@ provider "devin" {
82
82
  input 1.4
83
83
  output 4.4
84
84
  cache-read 0.26
85
- cache-write 1.4
85
+ cache-write 0
86
86
  }
87
87
  }
88
+
89
+ // Cache-write rates come from Devin's published price card
90
+ // (https://docs.devin.ai/desktop/models, `modelCostData`);
91
+ // `GetCliModelConfigs` and the v2alpha models endpoint carry none. Chat
92
+ // usage reports cache-write tokens for Claude and GPT-5.6+ (Gemini
93
+ // reports none), and the card bills them at 1.25x input. Earlier GPT,
94
+ // Grok, Kimi, GLM, DeepSeek, and SWE rows publish no cache-write rate.
95
+ // The GPT selector stops at the next major generation, like the tiers
96
+ // below, so an unpublished generation records no cache-write price.
97
+ class "anthropic" {
98
+ cache-write-rate 1.25
99
+ }
100
+ class "openai" {
101
+ family "gpt" {
102
+ revision ">=5.6 <7" {
103
+ cache-write-rate 1.25
104
+ }
105
+ }
106
+ }
107
+ // residue: Adaptive is a router uid with no model identity; its card
108
+ // bills cache writes at the input rate.
109
+ models "adaptive" {
110
+ cache-write-rate 1.0
111
+ }
112
+
113
+ // Long-context tiers come from the same page's `longContextFamilies`,
114
+ // which no Devin endpoint carries. A tier bills the whole request once
115
+ // total prompt tokens (uncached input, cache reads, and cache writes)
116
+ // exceed the threshold. GPT and Gemini Pro tiers double input and cache
117
+ // rates and raise output 1.5x; Grok doubles every leg. Cache writes
118
+ // follow `cache-write-rate`. Each selector stops at the next major
119
+ // generation, and Gemini Pro skips 3.0: the page lists GPT 5.4–6.1,
120
+ // Gemini 2.5 and 3.1 Pro, and Grok 4.5–4.7, so an unlisted generation
121
+ // carries no tier.
122
+ class "openai" {
123
+ family "gpt" {
124
+ // Every GPT-6 lane, Fast (`-priority`) lanes included.
125
+ revision ">=6 <7" {
126
+ long-context-cost {
127
+ input-threshold 272000
128
+ multiplier 2.0
129
+ output-multiplier 1.5
130
+ }
131
+ // mini and nano share the class rank but have no published tier.
132
+ models token="mini" {
133
+ long-context-cost {}
134
+ }
135
+ models token="nano" {
136
+ long-context-cost {}
137
+ }
138
+ }
139
+ }
140
+ }
141
+ // residue: GPT-5.4 through 5.6 tiers cover only the standard lanes; the
142
+ // Fast (`-priority`) lanes and GPT-5.4 mini share their class rank.
143
+ models "gpt-5-4" "gpt-5-4-none" "gpt-5-4-low" "gpt-5-4-medium" "gpt-5-4-high" "gpt-5-4-xhigh" \
144
+ "gpt-5-5" "gpt-5-5-none" "gpt-5-5-low" "gpt-5-5-medium" "gpt-5-5-high" "gpt-5-5-xhigh" \
145
+ "gpt-5-6-sol" "gpt-5-6-sol-none" "gpt-5-6-sol-low" "gpt-5-6-sol-medium" "gpt-5-6-sol-high" \
146
+ "gpt-5-6-sol-xhigh" "gpt-5-6-sol-max" \
147
+ "gpt-5-6-terra" "gpt-5-6-terra-none" "gpt-5-6-terra-low" "gpt-5-6-terra-medium" "gpt-5-6-terra-high" \
148
+ "gpt-5-6-terra-xhigh" "gpt-5-6-terra-max" \
149
+ "gpt-5-6-luna" "gpt-5-6-luna-none" "gpt-5-6-luna-low" "gpt-5-6-luna-medium" "gpt-5-6-luna-high" \
150
+ "gpt-5-6-luna-xhigh" "gpt-5-6-luna-max" {
151
+ long-context-cost {
152
+ input-threshold 272000
153
+ multiplier 2.0
154
+ output-multiplier 1.5
155
+ }
156
+ }
157
+ class "gemini" {
158
+ family "pro" {
159
+ revision ">=2.5 <3" {
160
+ long-context-cost {
161
+ input-threshold 200000
162
+ multiplier 2.0
163
+ output-multiplier 1.5
164
+ }
165
+ }
166
+ revision ">=3.1 <4" {
167
+ long-context-cost {
168
+ input-threshold 200000
169
+ multiplier 2.0
170
+ output-multiplier 1.5
171
+ }
172
+ }
173
+ }
174
+ }
175
+ // residue: Gemini 2.5 Pro's legacy uid carries no model identity.
176
+ models "MODEL_GOOGLE_GEMINI_2_5_PRO" {
177
+ long-context-cost {
178
+ input-threshold 200000
179
+ multiplier 2.0
180
+ output-multiplier 1.5
181
+ }
182
+ }
183
+ class "xai" {
184
+ family "grok" {
185
+ revision ">=4.5 <5" {
186
+ long-context-cost {
187
+ input-threshold 200000
188
+ multiplier 2.0
189
+ }
190
+ }
191
+ }
192
+ }
193
+ }
194
+
195
+ // Devin's Cascade catalog reports each model's thinking surface; a row
196
+ // without one carries no reasoning ladder.
197
+ on-api "devin-agent" {
198
+ trust-explicit-thinking-only #true
88
199
  }
@@ -691,6 +691,12 @@ provider "factory-droid" {
691
691
  thinking-requires-effort #true
692
692
  thinking-default-level "medium"
693
693
  }
694
+ // The native 922K window is authoritative; the class-wide gpt-5.4 1M patch does not apply.
695
+ class "openai" {
696
+ models "gpt-5.4" {
697
+ limits-patch {}
698
+ }
699
+ }
694
700
  models "gpt-5.4-fast" {
695
701
  routing-family "openai"
696
702
  upstream-rotation "openai" "azure_openai"
@@ -38,4 +38,19 @@ provider "firepass" {
38
38
  thinking-mode "effort"
39
39
  thinking-efforts "low" "high" "max"
40
40
  }
41
+ // The Fire Pass router shares Fireworks' 32,768 Kimi K2 output cap (#1849).
42
+ class "kimi" {
43
+ family "k2" {
44
+ max-tokens-ceiling 32768
45
+ }
46
+ family "k2.5" {
47
+ max-tokens-ceiling 32768
48
+ }
49
+ family "k2.6" {
50
+ max-tokens-ceiling 32768
51
+ }
52
+ family "k2-thinking" {
53
+ max-tokens-ceiling 32768
54
+ }
55
+ }
41
56
  }
@@ -24,6 +24,32 @@ provider "fireworks" priority=-1 {
24
24
  class "unknown" {
25
25
  thinking-efforts "minimal" "low" "medium" "high" "xhigh"
26
26
  }
27
+ // Replaces the Fireworks Kimi output caps in provider-models/openai-compat.ts
28
+ // (#1849). The K2 family ships long reasoning traces Fireworks bounds at
29
+ // 32,768 output tokens; the control plane reports no output budget, so the
30
+ // cap is also the fallback. K2.7-Code serves its full 65,536 (verified with
31
+ // a 58,971-token completion), which seeds rows that report none.
32
+ class "kimi" {
33
+ family "k2" {
34
+ max-tokens-fallback 32768
35
+ max-tokens-ceiling 32768
36
+ }
37
+ family "k2.5" {
38
+ max-tokens-fallback 32768
39
+ max-tokens-ceiling 32768
40
+ }
41
+ family "k2.6" {
42
+ max-tokens-fallback 32768
43
+ max-tokens-ceiling 32768
44
+ }
45
+ family "k2-thinking" {
46
+ max-tokens-fallback 32768
47
+ max-tokens-ceiling 32768
48
+ }
49
+ family "k2.7-code" {
50
+ max-tokens-fallback 65536
51
+ }
52
+ }
27
53
  // residue: taxonomy ranks and exact globs do not isolate these models.
28
54
  models "deepseek-v4-flash" {
29
55
  requires-reasoning-content-for-all-assistant-turns #true
@@ -14,6 +14,30 @@ provider "github-copilot" {
14
14
  // not belong to this connection`: a resumed session rebuilds prior turns
15
15
  // until its first response.
16
16
  connection-bound-native-history #true
17
+ // Per-plan API hosts the Copilot token resolves to; the bundled base URL
18
+ // is `api.githubcopilot.com`.
19
+ endpoint-hosts "api.individual.githubcopilot.com" "api.business.githubcopilot.com" \
20
+ "api.enterprise.githubcopilot.com"
21
+ // `/chat/completions`, `/responses` and `/v1/messages` decode zstd, br and
22
+ // gzip request bodies (deflate is rejected), probed live 2026-10. GHE.com
23
+ // tenants (`copilot-api.<tenant>.ghe.com`) are unverified and stay plain.
24
+ request-encodings "zstd" "gzip"
25
+ request-encoding-rejection "invalid_request_body|[Ff]ailed to (?:parse|read) request"
26
+ // Replaces the provider-keyed strict Responses tool-call/result pairing.
27
+ strict-responses-pairing #true
28
+ // Replaces the provider check that disabled reasoning params on chat completions.
29
+ on-api "openai-completions" {
30
+ supports-reasoning-params #false
31
+ }
32
+ // Copilot caps GPT-5.4 below the lineage's 1M window (model-limits in
33
+ // runtime/behavior.kdl), so the class-wide window patch and uncapped
34
+ // window do not apply here.
35
+ class "openai" {
36
+ models "gpt-5.4" {
37
+ limits-patch {}
38
+ long-context-window-uncapped #false
39
+ }
40
+ }
17
41
  class "anthropic" {
18
42
  revision ">=4 <4.6" {
19
43
  thinking-efforts "minimal" "low" "medium" "high" "xhigh"
@@ -9,6 +9,9 @@ provider "google-antigravity" {
9
9
  image "google-gemini-cli"
10
10
  }
11
11
  web-search "gemini"
12
+ // No size rejection up to a 64 MB body; 60 images at the 500 KiB resize
13
+ // target stay near 41 MB. Gemini counts images only against its context.
14
+ image-count-budget 60
12
15
 
13
16
  seed api="google-gemini-cli" base-url="https://daily-cloudcode-pa.googleapis.com" bundle="always" {
14
17
  model "gemini-3-pro-image" name="Gemini 3 Pro Image" {
@@ -26,6 +29,29 @@ provider "google-antigravity" {
26
29
  preserves-max-output-tokens #false
27
30
 
28
31
  class "anthropic" {
32
+ // Claude here is Vertex Anthropic: one image whose base64 passes
33
+ // 5,242,880 bytes is a 400 "image exceeds 5 MB maximum" (half the
34
+ // direct API's 10 MiB), and 8001 px is a 400 like on the direct API.
35
+ // Declaring the contract makes the Cloud Code Assist wire clamp images
36
+ // for Claude the way `anthropic-messages` does; Gemini on the same
37
+ // gateway has no such limits and keeps them unset.
38
+ max-image-dimension 8000
39
+ max-image-payload-bytes 5242880
40
+ // The Claude upstream rejects a message over 30 MB and, past 20 images,
41
+ // any image edge over 3,000 px. The clamp above caps each image; with no
42
+ // byte budget on this wire, the count bounds the body.
43
+ image-count-budget 20
44
+ // Cache-warmer lifetime. Claude here is Vertex Anthropic, whose prompt
45
+ // cache has a five-minute default TTL refreshed on every hit; this wire
46
+ // sends no `cache_control`, so the 1h tier is never requested.
47
+ // https://docs.cloud.google.com/gemini-enterprise-agent-platform/models/partner-models/claude/prompt-caching
48
+ // Gemini declares none: its implicit cache keeps entries for a
49
+ // load-dependent time ("caches always deleted within 24 hours"), so no
50
+ // fixed lifetime exists to warm against.
51
+ // https://cloud.google.com/blog/products/ai-machine-learning/vertex-ai-context-caching
52
+ prompt-cache {
53
+ short 300
54
+ }
29
55
  family "opus" {
30
56
  thinking-mode "budget"
31
57
  }
@@ -59,6 +85,17 @@ provider "google-antigravity" {
59
85
  }
60
86
  }
61
87
  }
88
+ // Cloud Code Assist bills a Gemini 2.5 or 3.x image a fixed 1,089 tokens
89
+ // from 32px to 2048px (extreme strips bill less); priority=1 outranks the
90
+ // lineage's 1,120 at equal specificity. verified: billing matched this rule
91
+ // on Gemini 2.5 Flash Lite, 3.1 Flash Lite and 3.8 Flash.
92
+ class "gemini" priority=1 {
93
+ image-tokenization {
94
+ regime "fixed"
95
+ verified #true
96
+ tokens 1089
97
+ }
98
+ }
62
99
  // residue: taxonomy ranks and exact globs do not isolate these models.
63
100
  models "claude-opus-4-6" {
64
101
  thinking-efforts "minimal" "low" "medium" "high"
@@ -2,6 +2,7 @@
2
2
 
3
3
  provider "google-gemini-cli" {
4
4
  default-model "gemini-3.1-pro-preview"
5
+ image-count-budget 200
5
6
 
6
7
  class "gemini" {
7
8
  // Cloud Code Assist rejects an unsigned first function call; the bypass
@@ -3,6 +3,7 @@
3
3
  provider "google-vertex" {
4
4
  default-model "gemini-3.1-pro-preview"
5
5
  allow-unauthenticated #true
6
+ image-count-budget 200
6
7
 
7
8
  // Replaces google-shared.ts stripping functionCall/functionResponse ids for Vertex.
8
9
  supports-function-part-id #false
@@ -27,6 +28,10 @@ provider "google-vertex" {
27
28
  }
28
29
  }
29
30
  class "anthropic" {
31
+ // Vertex rawPredict honors `cache_control.ttl: "1h"` (writes bill to
32
+ // `ephemeral_1h_input_tokens`, entries outlive 5m) without any beta; the
33
+ // `extended-cache-ttl-2025-04-11` beta is rejected in `anthropic_beta`.
34
+ supports-long-cache-retention #true
30
35
  revision ">=4.5 <4.6" {
31
36
  thinking-efforts "minimal" "low" "medium" "high" "xhigh"
32
37
  }
@@ -7,6 +7,7 @@ provider "google" {
7
7
  image "google-generative-ai"
8
8
  }
9
9
  web-search "gemini"
10
+ image-count-budget 200
10
11
 
11
12
  class "unknown" {
12
13
  thinking-efforts "minimal" "low" "medium" "high"
@@ -1,6 +1,7 @@
1
1
  // Image billing for readers whose lineage has no `image-tokenization` rule in
2
2
  // classes/*.kdl, by the wire API carrying the request. priority=-1: these are
3
- // fallbacks, so a class-wide lineage rule (same specificity) always wins.
3
+ // fallbacks, so a class-wide lineage rule (same specificity) always wins. None
4
+ // is `verified`: nobody measured the billing of the readers they price.
4
5
 
5
6
  // OpenAI-compatible wires bill like GPT-5.5: 32px patches × 1.2, `auto` sized
6
7
  // like `original`.
@@ -19,6 +19,13 @@ provider "local" {
19
19
  limits
20
20
  supports-tools #false
21
21
  }
22
+ model "nemotron-streaming-en-0.6b" name="Nemotron Speech 0.6B (Streaming English)" {
23
+ reasoning #false
24
+ input "text"
25
+ cost input=0 output=0 cache-read=0 cache-write=0
26
+ limits
27
+ supports-tools #false
28
+ }
22
29
  model "whisper-base" name="Whisper Base" {
23
30
  reasoning #false
24
31
  input "text"
@@ -101,7 +108,7 @@ provider "local" {
101
108
  models "kokoro" {
102
109
  kind "tts"
103
110
  }
104
- models "parakeet-tdt-0.6b-v3" "whisper-*" {
111
+ models "parakeet-tdt-0.6b-v3" "nemotron-streaming-en-0.6b" "whisper-*" {
105
112
  kind "stt"
106
113
  }
107
114
  models "lfm*" "falcon-*" "qwen*" "llama3.2:3b" "gemma-3-1b" {
@@ -54,6 +54,19 @@ provider "meta" {
54
54
  supports-reasoning-effort #true
55
55
  include-encrypted-reasoning #true
56
56
  }
57
+ // Muse Wonder: dev.meta.ai/docs/models + pricing-rate-limits (2026-10-12).
58
+ // `max` documented; no contributor tier on Model API. Meta publishes no
59
+ // output cap, so it takes the Muse Spark ceiling.
60
+ model "muse-wonder-1.0" name="Muse Wonder" {
61
+ reasoning #true
62
+ input "text" "image"
63
+ cost input=4 output=20 cache-read=0.2 cache-write=0
64
+ limits context=1048576 max-tokens=131072
65
+ thinking-mode "effort"
66
+ thinking-efforts "minimal" "low" "medium" "high" "xhigh" "max"
67
+ supports-reasoning-effort #true
68
+ include-encrypted-reasoning #true
69
+ }
57
70
  model "muse-spark-1.3-contributor" name="Muse Spark 1.3 (C)" {
58
71
  reasoning #true
59
72
  input "text" "image"
@@ -72,7 +85,10 @@ provider "meta" {
72
85
  // api.meta.ai/v1 accepts only tool_choice "auto"; "none", "required" and named
73
86
  // choices are rejected with 400 (verified 2026-09-10), so omit the field.
74
87
  supports-tool-choice #false
88
+ // `/v1/models` carries no capability metadata: an id no seed or taxonomy
89
+ // knows is offered this ladder for the user to opt into.
75
90
  class "unknown" {
91
+ thinking-unverified #true
76
92
  thinking-efforts "minimal" "low" "medium" "high" "xhigh"
77
93
  thinking-mode "effort"
78
94
  }
@@ -6,6 +6,8 @@ provider "moonshot" {
6
6
  // as a fallback so China users need not learn MOONSHOT_API_KEY. (#2883)
7
7
  env "MOONSHOT_API_KEY" "KIMI_API_KEY"
8
8
  discovery label="Moonshot"
9
+ // Moonshot's China platform, selected with MOONSHOT_BASE_URL (#2883).
10
+ endpoint-hosts "api.moonshot.cn"
9
11
 
10
12
  class "kimi" {
11
13
  // Replaces the Moonshot Kimi thinking-format branch.
@@ -6,6 +6,46 @@ provider "muse-code" {
6
6
 
7
7
  // Muse Code shares Meta Model API's model capabilities and equivalent token pricing.
8
8
  seed api="openai-responses" base-url="https://api.meta.ai/v1" bundle="always" {
9
+ // Subscription-only rows: Model API serves neither Muse Wonder Full nor a
10
+ // Wonder contributor tier, so no published SKU prices them; costs are
11
+ // API-equivalent spend. Standard rows carry Muse Wonder's Standard-mode
12
+ // list price ($4/$0.20/$20; an estimate for Wonder Full). Contributor rows
13
+ // carry the measured subscription-meter burn: Wonder contributor moved
14
+ // the meter 1% per ~61-64K input / ~12K output tokens vs ~23-25K / ~4.8K
15
+ // for standard Wonder, i.e. $1.45-1.63 input and $7.55-8.00 output at the
16
+ // $4/$20 list (measured 2026-10-13, #15522). Cached input is unmeasured
17
+ // and takes the same 0.4x ratio. All accept image input and the `max`
18
+ // effort over the subscription key (verified 2026-10-12).
19
+ model "muse-wonder-1.0-contributor" name="Muse Wonder (C)" {
20
+ reasoning #true
21
+ input "text" "image"
22
+ cost input=1.6 output=8 cache-read=0.08 cache-write=0
23
+ limits context=1048576 max-tokens=131072
24
+ thinking-mode "effort"
25
+ thinking-efforts "minimal" "low" "medium" "high" "xhigh" "max"
26
+ supports-reasoning-effort #true
27
+ include-encrypted-reasoning #true
28
+ }
29
+ model "muse-wonder-full-1.0" name="Muse Wonder Full" {
30
+ reasoning #true
31
+ input "text" "image"
32
+ cost input=4 output=20 cache-read=0.2 cache-write=0
33
+ limits context=1048576 max-tokens=131072
34
+ thinking-mode "effort"
35
+ thinking-efforts "minimal" "low" "medium" "high" "xhigh" "max"
36
+ supports-reasoning-effort #true
37
+ include-encrypted-reasoning #true
38
+ }
39
+ model "muse-wonder-full-1.0-contributor" name="Muse Wonder Full (C)" {
40
+ reasoning #true
41
+ input "text" "image"
42
+ cost input=1.6 output=8 cache-read=0.08 cache-write=0
43
+ limits context=1048576 max-tokens=131072
44
+ thinking-mode "effort"
45
+ thinking-efforts "minimal" "low" "medium" "high" "xhigh" "max"
46
+ supports-reasoning-effort #true
47
+ include-encrypted-reasoning #true
48
+ }
9
49
  models-from "meta"
10
50
  }
11
51
 
@@ -27,7 +67,16 @@ provider "muse-code" {
27
67
  // `custom` tools are rejected with 400 "`custom` tools are not supported
28
68
  // on this endpoint", so apply-patch must stay a function tool here.
29
69
  edit-prompt-variant "compact"
70
+ on-api "openai-responses" {
71
+ // Spark 1.3 Contributor warmed siblings hit 10/10 vs 0/10 with per-child keys (2026-10-12).
72
+ // Meta documents shared-prefix prompt_cache_key routing; keep the opt-in on these exact Muse Code IDs.
73
+ models "muse-spark-1.3" "muse-spark-1.3-contributor" "muse-wonder-1.0" "muse-wonder-1.0-contributor" "muse-wonder-full-1.0" "muse-wonder-full-1.0-contributor" {
74
+ task-sibling-prompt-cache #true
75
+ }
76
+ }
77
+ // Same capability-less `/v1/models` as Meta: unknown ids are opt-in.
30
78
  class "unknown" {
79
+ thinking-unverified #true
31
80
  thinking-efforts "minimal" "low" "medium" "high" "xhigh"
32
81
  thinking-mode "effort"
33
82
  }
@@ -1,4 +1,7 @@
1
1
  // Cursor always exposes server-owned native operations, even with an empty tool catalog.
2
2
  on-api "cursor-agent" {
3
3
  requires-native-tools #true
4
+ // MCP schemas live in Cursor's server-side catalog and enter model context
5
+ // only when dynamically selected, not as a fixed cost on every turn.
6
+ tool-schemas-in-context #false
4
7
  }
@@ -5,9 +5,14 @@ provider "ollama-cloud" {
5
5
  env "OLLAMA_CLOUD_API_KEY"
6
6
  discovery label="Ollama Cloud" oauth-provider="ollama-cloud"
7
7
 
8
+ // Legacy deployments can reject assistant thinking history (#1000).
9
+ strip-thinking-history #true
8
10
  thinking-mode "effort"
9
11
  // Same runtime as local Ollama: a trailing assistant turn is continued verbatim.
10
12
  supports-assistant-prefill #true
13
+ // Replaces the provider checks in model-registry.ts and the generator:
14
+ // never send a caller output limit.
15
+ omit-max-output-tokens #true
11
16
  class "unknown" {
12
17
  thinking-efforts "minimal" "low" "medium" "high"
13
18
  }
@@ -20,7 +25,12 @@ provider "ollama-cloud" {
20
25
  thinking-efforts "minimal" "low" "medium" "high"
21
26
  }
22
27
  // residue: taxonomy ranks and exact globs do not isolate these models.
28
+ // #9693 verifies thinking history for these GLM-5.2 wire IDs only.
23
29
  models "glm-5.2" {
30
+ strip-thinking-history #false
24
31
  thinking-efforts "high" "max"
25
32
  }
33
+ models "glm-5.2:cloud" {
34
+ strip-thinking-history #false
35
+ }
26
36
  }