@linxiraos/pi-catalog 1.1.26 → 1.2.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 (128) hide show
  1. package/CHANGELOG.md +4 -6
  2. package/dist/types/compat/auth-ids.d.ts +2 -2
  3. package/dist/types/compat/collapse.d.ts +7 -0
  4. package/dist/types/compat/image-tokenization.d.ts +52 -0
  5. package/dist/types/compat/judgment-questions.d.ts +7 -0
  6. package/dist/types/compat/prompt-cache-lookback.d.ts +7 -0
  7. package/dist/types/compat/provider-ids.d.ts +1 -1
  8. package/dist/types/compat/reasoning-carry.d.ts +21 -0
  9. package/dist/types/compat/request-size.d.ts +7 -0
  10. package/dist/types/compat/taxonomy.d.ts +0 -10
  11. package/dist/types/compat/types.d.ts +4 -0
  12. package/dist/types/discovery/antigravity.d.ts +13 -3
  13. package/dist/types/hosts.d.ts +4 -0
  14. package/dist/types/model-cache.d.ts +6 -0
  15. package/dist/types/model-manager.d.ts +16 -0
  16. package/dist/types/provider-models/account-access.d.ts +11 -0
  17. package/dist/types/provider-models/google.d.ts +23 -1
  18. package/dist/types/provider-models/openai-compat.d.ts +19 -1
  19. package/dist/types/provider-models/special.d.ts +8 -0
  20. package/dist/types/types.d.ts +134 -23
  21. package/dist/types/wire/cloudflare-ai-gateway.d.ts +0 -10
  22. package/dist/types/wire/cloudflare.d.ts +10 -0
  23. package/dist/types/wire/factory-droid.d.ts +1 -1
  24. package/dist/types/wire/gemini-headers.d.ts +6 -3
  25. package/package.json +4 -4
  26. package/src/build.ts +39 -35
  27. package/src/compat/auth-ids.ts +6 -0
  28. package/src/compat/axes.ts +43 -5
  29. package/src/compat/cascade.ts +6 -1
  30. package/src/compat/collapse.d.ts +7 -0
  31. package/src/compat/collapse.ts +11 -0
  32. package/src/compat/image-tokenization.ts +166 -0
  33. package/src/compat/judgment-questions.ts +12 -0
  34. package/src/compat/prompt-cache-lookback.ts +23 -0
  35. package/src/compat/provider-ids.d.ts +1 -1
  36. package/src/compat/provider-ids.ts +3 -0
  37. package/src/compat/reasoning-carry.ts +64 -0
  38. package/src/compat/request-size.ts +25 -0
  39. package/src/compat/resolve.ts +36 -25
  40. package/src/compat/rules/README.md +13 -3
  41. package/src/compat/rules/auth/_order.kdl +2 -2
  42. package/src/compat/rules/auth/cloudflare-workers-ai.kdl +9 -0
  43. package/src/compat/rules/auth/coralbricks.kdl +13 -0
  44. package/src/compat/rules/auth/minimax-code-cn.kdl +1 -1
  45. package/src/compat/rules/auth/minimax-code.kdl +1 -1
  46. package/src/compat/rules/auth/openai-codex.kdl +1 -1
  47. package/src/compat/rules/auth/snowflake.kdl +11 -0
  48. package/src/compat/rules/auth/stencil.kdl +1 -1
  49. package/src/compat/rules/classes/anthropic.kdl +188 -7
  50. package/src/compat/rules/classes/deepseek.kdl +11 -3
  51. package/src/compat/rules/classes/gemini.kdl +12 -0
  52. package/src/compat/rules/classes/glm.kdl +17 -8
  53. package/src/compat/rules/classes/kimi.kdl +15 -0
  54. package/src/compat/rules/classes/meta.kdl +4 -4
  55. package/src/compat/rules/classes/minimax.kdl +31 -1
  56. package/src/compat/rules/classes/openai.kdl +114 -4
  57. package/src/compat/rules/classes/qwen.kdl +2 -1
  58. package/src/compat/rules/providers/abliteration.kdl +7 -0
  59. package/src/compat/rules/providers/amazon-bedrock.kdl +0 -7
  60. package/src/compat/rules/providers/anthropic.kdl +13 -0
  61. package/src/compat/rules/providers/apple.kdl +1 -0
  62. package/src/compat/rules/providers/cloudflare-workers-ai.kdl +34 -0
  63. package/src/compat/rules/providers/coralbricks.kdl +62 -0
  64. package/src/compat/rules/providers/cursor.kdl +28 -8
  65. package/src/compat/rules/providers/devin.kdl +2 -2
  66. package/src/compat/rules/providers/factory-droid.kdl +77 -13
  67. package/src/compat/rules/providers/github-copilot.kdl +29 -0
  68. package/src/compat/rules/providers/google-antigravity.kdl +8 -1
  69. package/src/compat/rules/providers/groq.kdl +21 -0
  70. package/src/compat/rules/providers/image-tokenization.kdl +42 -0
  71. package/src/compat/rules/providers/judgment-questions.kdl +53 -0
  72. package/src/compat/rules/providers/litellm.kdl +4 -1
  73. package/src/compat/rules/providers/meta.kdl +3 -3
  74. package/src/compat/rules/providers/minimax-code-cn.kdl +10 -5
  75. package/src/compat/rules/providers/minimax-code.kdl +10 -5
  76. package/src/compat/rules/providers/mistral.kdl +25 -1
  77. package/src/compat/rules/providers/moonshot.kdl +11 -0
  78. package/src/compat/rules/providers/muse-code.kdl +7 -0
  79. package/src/compat/rules/providers/ollama.kdl +3 -0
  80. package/src/compat/rules/providers/openai-codex.kdl +18 -13
  81. package/src/compat/rules/providers/openai.kdl +22 -0
  82. package/src/compat/rules/providers/opencode-go.kdl +11 -0
  83. package/src/compat/rules/providers/opencode-zen.kdl +20 -0
  84. package/src/compat/rules/providers/openrouter.kdl +6 -0
  85. package/src/compat/rules/providers/snowflake.kdl +135 -0
  86. package/src/compat/rules/providers/tool-result-images.kdl +16 -0
  87. package/src/compat/rules/providers/zhipu-coding-plan.kdl +10 -0
  88. package/src/compat/rules/runtime/behavior.kdl +8 -5
  89. package/src/compat/rules/taxonomy/_collapse.kdl +52 -2
  90. package/src/compat/rules/taxonomy/deepseek.kdl +4 -0
  91. package/src/compat/rules/taxonomy/kimi.kdl +5 -0
  92. package/src/compat/rules.json +1 -1
  93. package/src/compat/taxonomy.d.ts +0 -10
  94. package/src/compat/taxonomy.ts +3 -3
  95. package/src/compat/types.d.ts +4 -0
  96. package/src/compat/types.ts +4 -0
  97. package/src/discovery/antigravity.d.ts +13 -3
  98. package/src/discovery/antigravity.ts +33 -17
  99. package/src/discovery/cursor.ts +28 -4
  100. package/src/discovery/devin.ts +20 -2
  101. package/src/hosts.d.ts +4 -0
  102. package/src/hosts.ts +2 -0
  103. package/src/model-cache.d.ts +6 -0
  104. package/src/model-cache.ts +123 -47
  105. package/src/model-manager.d.ts +16 -0
  106. package/src/model-manager.ts +107 -41
  107. package/src/model-tokenizer.ts +3 -0
  108. package/src/models.json +1 -1
  109. package/src/provider-models/account-access.d.ts +11 -0
  110. package/src/provider-models/account-access.ts +30 -0
  111. package/src/provider-models/cache-provider-id.ts +13 -6
  112. package/src/provider-models/cline-pass.ts +33 -0
  113. package/src/provider-models/descriptors.ts +4 -0
  114. package/src/provider-models/google.d.ts +23 -1
  115. package/src/provider-models/google.ts +72 -14
  116. package/src/provider-models/openai-compat.d.ts +19 -1
  117. package/src/provider-models/openai-compat.ts +281 -42
  118. package/src/provider-models/special.d.ts +8 -0
  119. package/src/provider-models/special.ts +26 -22
  120. package/src/types.d.ts +134 -23
  121. package/src/types.ts +183 -20
  122. package/src/wire/cloudflare-ai-gateway.d.ts +0 -10
  123. package/src/wire/cloudflare-ai-gateway.ts +0 -36
  124. package/src/wire/cloudflare.ts +40 -0
  125. package/src/wire/factory-droid.d.ts +1 -1
  126. package/src/wire/factory-droid.ts +1 -1
  127. package/src/wire/gemini-headers.d.ts +6 -3
  128. package/src/wire/gemini-headers.ts +39 -21
@@ -111,6 +111,12 @@ provider "factory-droid" {
111
111
  cost input=0 output=0 cache-read=0 cache-write=0
112
112
  limits context=180000 max-tokens=32000
113
113
  }
114
+ model "claude-haiku-5-5" name="Haiku 5.5" {
115
+ reasoning #true
116
+ input "text" "image"
117
+ cost input=0 output=0 cache-read=0 cache-write=0
118
+ limits context=872000 max-tokens=128000
119
+ }
114
120
  model "claude-haiku-4-5-20251001" name="Haiku 4.5" {
115
121
  reasoning #true
116
122
  input "text" "image"
@@ -273,6 +279,12 @@ provider "factory-droid" {
273
279
  cost input=0 output=0 cache-read=0 cache-write=0
274
280
  limits context=1007232 max-tokens=32768
275
281
  }
282
+ model "mistral-large-4" name="Mistral Large 4" {
283
+ reasoning #true
284
+ input "text" "image"
285
+ cost input=0 output=0 cache-read=0 cache-write=0
286
+ limits context=524288 max-tokens=64000
287
+ }
276
288
  model "mistral-medium-3.5" name="Mistral Medium 3.5" {
277
289
  reasoning #true
278
290
  input "text" "image"
@@ -400,7 +412,7 @@ provider "factory-droid" {
400
412
  models "claude-fable-5.1" {
401
413
  routing-family "anthropic"
402
414
  upstream-rotation "anthropic" "vertex_anthropic" "bedrock_anthropic"
403
- region-upstreams-eu
415
+ region-upstreams-eu "vertex_anthropic"
404
416
  credit-rates { input 4; output 5; cache-read 0.025 }
405
417
  thinking-efforts "low" "medium" "high" "xhigh" "max"
406
418
  thinking-requires-effort #false
@@ -410,7 +422,7 @@ provider "factory-droid" {
410
422
  models "claude-fable-5" {
411
423
  routing-family "anthropic"
412
424
  upstream-rotation "anthropic" "vertex_anthropic" "bedrock_anthropic"
413
- region-upstreams-eu
425
+ region-upstreams-eu "vertex_anthropic"
414
426
  credit-rates { input 4; output 5 }
415
427
  list-price-from "anthropic"
416
428
  thinking-efforts "low" "medium" "high" "xhigh" "max"
@@ -439,7 +451,7 @@ provider "factory-droid" {
439
451
  models "claude-opus-5" {
440
452
  routing-family "anthropic"
441
453
  upstream-rotation "anthropic" "vertex_anthropic" "bedrock_anthropic" "azure_anthropic" "snowflake"
442
- region-upstreams-eu "bedrock_anthropic"
454
+ region-upstreams-eu "vertex_anthropic" "bedrock_anthropic"
443
455
  credit-rates { input 2 }
444
456
  list-price-from "anthropic"
445
457
  thinking-efforts "low" "medium" "high" "xhigh" "max"
@@ -458,7 +470,7 @@ provider "factory-droid" {
458
470
  models "claude-opus-4-8" {
459
471
  routing-family "anthropic"
460
472
  upstream-rotation "anthropic" "vertex_anthropic" "bedrock_anthropic" "azure_anthropic" "snowflake"
461
- region-upstreams-eu "bedrock_anthropic"
473
+ region-upstreams-eu "vertex_anthropic" "bedrock_anthropic"
462
474
  credit-rates { input 2 }
463
475
  list-price-from "anthropic"
464
476
  thinking-efforts "low" "medium" "high" "xhigh" "max"
@@ -477,7 +489,7 @@ provider "factory-droid" {
477
489
  models "claude-opus-4-7" {
478
490
  routing-family "anthropic"
479
491
  upstream-rotation "anthropic" "vertex_anthropic" "bedrock_anthropic"
480
- region-upstreams-eu "bedrock_anthropic"
492
+ region-upstreams-eu "vertex_anthropic" "bedrock_anthropic"
481
493
  credit-rates { input 2 }
482
494
  list-price-from "anthropic"
483
495
  thinking-efforts "low" "medium" "high" "xhigh" "max"
@@ -506,9 +518,10 @@ provider "factory-droid" {
506
518
  models "claude-sonnet-5-5" {
507
519
  routing-family "anthropic"
508
520
  upstream-rotation "anthropic" "vertex_anthropic" "bedrock_anthropic" "azure_anthropic"
509
- credit-rates { input 0.8; output 5 }
521
+ credit-rates { input 0.8; output 5; cache-read 0.05 }
522
+ list-price-from "anthropic"
510
523
  thinking-efforts "low" "medium" "high" "xhigh" "max"
511
- thinking-requires-effort #true
524
+ thinking-requires-effort #false
512
525
  thinking-default-level "high"
513
526
  entitlement { feature-flag "claude_sonnet_5_5" }
514
527
  }
@@ -540,6 +553,16 @@ provider "factory-droid" {
540
553
  thinking-requires-effort #false
541
554
  default-reasoning-off #true
542
555
  }
556
+ models "claude-haiku-5-5" {
557
+ routing-family "anthropic"
558
+ upstream-rotation "anthropic" "vertex_anthropic" "bedrock_anthropic" "azure_anthropic"
559
+ credit-rates { input 0.04; output 5 }
560
+ list-price-from "anthropic"
561
+ thinking-efforts "low" "medium" "high" "xhigh" "max"
562
+ thinking-requires-effort #false
563
+ thinking-default-level "medium"
564
+ entitlement { feature-flag "claude_haiku_5_5" }
565
+ }
543
566
  models "claude-haiku-4-5-20251001" {
544
567
  routing-family "anthropic"
545
568
  upstream-rotation "anthropic" "vertex_anthropic" "bedrock_anthropic"
@@ -562,7 +585,7 @@ provider "factory-droid" {
562
585
  }
563
586
  models "gpt-6.1-sol" {
564
587
  routing-family "openai"
565
- upstream-rotation "openai"
588
+ upstream-rotation "openai" "bedrock_openai" "databricks"
566
589
  region-upstreams-eu "openai"
567
590
  credit-rates { input 0.8; output 5; cache-read 0.05 }
568
591
  thinking-efforts "low" "medium" "high" "xhigh" "max"
@@ -589,7 +612,6 @@ provider "factory-droid" {
589
612
  thinking-efforts "low" "medium" "high" "xhigh" "max"
590
613
  thinking-requires-effort #false
591
614
  thinking-default-level "medium"
592
- entitlement { feature-flag "gpt_6_luna" }
593
615
  }
594
616
  models "gpt-5.6-sol" {
595
617
  routing-family "openai"
@@ -749,6 +771,7 @@ provider "factory-droid" {
749
771
  models "gemini-3.8-flash" {
750
772
  routing-family "google"
751
773
  upstream-rotation "google"
774
+ region-upstreams-eu "google"
752
775
  credit-rates { input 0.6; output 5 }
753
776
  list-price-from "google"
754
777
  thinking-efforts "low" "medium" "high"
@@ -758,6 +781,7 @@ provider "factory-droid" {
758
781
  models "gemini-3.7-flash" {
759
782
  routing-family "google"
760
783
  upstream-rotation "google"
784
+ region-upstreams-eu "google"
761
785
  credit-rates { input 0.6; output 5 }
762
786
  list-price-from "google"
763
787
  thinking-efforts "low" "medium" "high"
@@ -767,6 +791,7 @@ provider "factory-droid" {
767
791
  models "gemini-3.6-flash" {
768
792
  routing-family "google"
769
793
  upstream-rotation "google"
794
+ region-upstreams-eu "google"
770
795
  credit-rates { input 0.6; output 5 }
771
796
  list-price-from "google"
772
797
  thinking-efforts "low" "medium" "high"
@@ -776,6 +801,7 @@ provider "factory-droid" {
776
801
  models "gemini-3.5-flash" {
777
802
  routing-family "google"
778
803
  upstream-rotation "google"
804
+ region-upstreams-eu "google"
779
805
  credit-rates { input 0.6 }
780
806
  list-price-from "google"
781
807
  thinking-efforts "minimal" "low" "medium" "high"
@@ -801,6 +827,19 @@ provider "factory-droid" {
801
827
  thinking-requires-effort #false
802
828
  thinking-default-level "high"
803
829
  }
830
+ // Factory bills the Standard list-price ceiling, above the bundled Mistral
831
+ // row, so no list price is borrowed.
832
+ models "mistral-large-4" {
833
+ routing-family "factory"
834
+ upstream-rotation "mistral"
835
+ region-upstreams-us
836
+ region-upstreams-eu "mistral"
837
+ credit-rates { input 0.544; output 3.08; cache-read 0.103 }
838
+ thinking-efforts "high"
839
+ thinking-requires-effort #false
840
+ thinking-default-level "high"
841
+ entitlement { feature-flag "mistral_large_4" }
842
+ }
804
843
  models "mistral-medium-3.5" {
805
844
  routing-family "factory"
806
845
  upstream-rotation "mistral"
@@ -889,7 +928,6 @@ provider "factory-droid" {
889
928
  thinking-efforts "low" "high" "max"
890
929
  thinking-requires-effort #false
891
930
  thinking-default-level "high"
892
- entitlement { feature-flag "deepseek_v4_1_flash" }
893
931
  }
894
932
  models "deepseek-v4-flash-0731" {
895
933
  routing-family "factory"
@@ -999,7 +1037,8 @@ provider "factory-droid" {
999
1037
  // Native declares every Responses tool `strict: false`; the field must reach the wire.
1000
1038
  supports-strict-mode #true
1001
1039
  }
1002
- models "glm-*" "kimi-*" "deepseek-*" "nemotron-*" "inkling" "mistral-medium-3.5" "qwen3.8-max" "minimax-m3" {
1040
+ models "glm-*" "kimi-*" "deepseek-*" "nemotron-*" "inkling" "mistral-medium-3.5" "mistral-large-4" "qwen3.8-max" \
1041
+ "minimax-m3" {
1003
1042
  clamp-output-to-model-max #true
1004
1043
  completions-reasoning-mode "none"
1005
1044
  completions-reasoning-history "omit"
@@ -1039,7 +1078,7 @@ provider "factory-droid" {
1039
1078
  }
1040
1079
  // The replay codec follows the selected route, including EU GLM routes.
1041
1080
  on-upstream "mistral" {
1042
- models "glm-*" "mistral-medium-3.5" {
1081
+ models "glm-*" "mistral-medium-3.5" "mistral-large-4" {
1043
1082
  completions-reasoning-mode "effort"
1044
1083
  completions-reasoning-history "omit"
1045
1084
  mistral-reasoning-content-parts #true
@@ -1058,6 +1097,7 @@ provider "factory-droid" {
1058
1097
  // Messages contract on every Factory Anthropic route: non-thinking-led
1059
1098
  // history drops thinking, disabled thinking omits the field, and the effort
1060
1099
  // beta rides only where the route requires it alongside output effort.
1100
+ // Where disabled thinking is sent, replayed history drops its thinking.
1061
1101
  on-api "anthropic-messages" {
1062
1102
  strip-thinking-history #true
1063
1103
  disabled-thinking "omit"
@@ -1073,6 +1113,12 @@ provider "factory-droid" {
1073
1113
  disabled-thinking "disabled"
1074
1114
  }
1075
1115
  }
1116
+ // Adaptive models the registry marks `supportsDisabledThinking` send the
1117
+ // explicit disabled form at Off on every upstream.
1118
+ models "claude-sonnet-4-6" "claude-sonnet-5" "claude-opus-4-6" "claude-opus-4-7" "claude-opus-4-8" \
1119
+ "claude-opus-4-8-fast" "claude-opus-5" "claude-opus-5-fast" "claude-haiku-5-5" {
1120
+ disabled-thinking "disabled"
1121
+ }
1076
1122
  models "claude-*" "atlas-07-21" "aster-07-15" {
1077
1123
  anthropic-thinking "adaptive-summarized"
1078
1124
  }
@@ -1091,9 +1137,15 @@ provider "factory-droid" {
1091
1137
  anthropic-thinking "budget-effort"
1092
1138
  }
1093
1139
  // Always-thinking models keep adaptive thinking on disabled turns, on every upstream.
1094
- models "claude-fable-5.1" "claude-opus-5-5" "claude-opus-5-5-fast" "claude-sonnet-5-5" {
1140
+ models "claude-fable-5.1" "claude-opus-5-5" "claude-opus-5-5-fast" {
1095
1141
  disabled-thinking "adaptive"
1096
1142
  }
1143
+ // Sonnet 5.5 rejects `disabled`: Off is `between_tools`, pinned to high
1144
+ // effort because `between_tools` rejects xhigh and max.
1145
+ models "claude-sonnet-5-5" {
1146
+ disabled-thinking "between-tools"
1147
+ between-tools-effort "high"
1148
+ }
1097
1149
  // Fast tiers are distinct SKUs served with `speed: "fast"`.
1098
1150
  models "claude-opus-5-5-fast" "claude-opus-5-fast" "claude-opus-4-8-fast" {
1099
1151
  fast-mode #true
@@ -1113,6 +1165,13 @@ provider "factory-droid" {
1113
1165
  on-upstream "bedrock_anthropic" {
1114
1166
  anthropic-tool-streaming-beta #true
1115
1167
  }
1168
+ // Azure Foundry enforces the preserved-thinking prefix check on Factory's
1169
+ // account, so prefix-bound models (`thinking-prefix-binding`) ask it to drop
1170
+ // stale signed blocks instead of failing. The other Anthropic upstreams
1171
+ // predate default enforcement; the field would opt them into it.
1172
+ on-upstream "azure_anthropic" {
1173
+ supports-thinking-binding-controls #true
1174
+ }
1116
1175
  // xAI and Google sessions lock their upstream.
1117
1176
  on-upstream "xai" "google" {
1118
1177
  routing-session-lock #true
@@ -1132,6 +1191,11 @@ provider "factory-droid" {
1132
1191
  reasoning-disable-mode "none-effort"
1133
1192
  }
1134
1193
  }
1194
+ // GPT models whose ladder has an Off/None rung send the literal `none`
1195
+ // tier on every upstream.
1196
+ models "gpt-5.2" "gpt-5.6-sol" "gpt-5.6-sol-fast" "gpt-5.6-terra" "gpt-5.6-luna" "gpt-6-sol" "gpt-6-luna" {
1197
+ reasoning-disable-mode "none-effort"
1198
+ }
1135
1199
  models "gpt-*" {
1136
1200
  omit-max-output-tokens #true
1137
1201
  responses-verbosity "low"
@@ -10,6 +10,10 @@ provider "github-copilot" {
10
10
  // tool schemas and does not support the context-management beta or field.
11
11
  disable-strict-tools #true
12
12
  supports-context-management #false
13
+ // Responses items from an earlier connection answer `401 input item does
14
+ // not belong to this connection`: a resumed session rebuilds prior turns
15
+ // until its first response.
16
+ connection-bound-native-history #true
13
17
  class "anthropic" {
14
18
  revision ">=4 <4.6" {
15
19
  thinking-efforts "minimal" "low" "medium" "high" "xhigh"
@@ -76,4 +80,29 @@ provider "github-copilot" {
76
80
  }
77
81
  max-context-window 1050000
78
82
  }
83
+ // Claude Haiku 5.5: `billing.token_prices` reports its input/output rates
84
+ // but no cache legs, so discovered rows priced cache reads and writes at
85
+ // $0. Copilot's rate card bills $0.01 read / $0.125 write up to 100K and
86
+ // $0.05 / $0.625 on the long tier (the `-1m` sibling).
87
+ // https://docs.github.com/en/copilot/reference/copilot-billing/models-and-pricing
88
+ // Copilot serves that tier as the `-1m` row (promotion target of the base
89
+ // row), so both rows opt out of the class-wide 100K 5x band: the base row
90
+ // would otherwise bill the band on top of the promotion, and the `-1m`
91
+ // row would charge 5x twice.
92
+ models "claude-haiku-5.5" {
93
+ cost-patch {
94
+ cache-read 0.01
95
+ cache-write 0.125
96
+ }
97
+ long-context-cost {
98
+ }
99
+ }
100
+ models "claude-haiku-5.5-1m" {
101
+ cost-patch {
102
+ cache-read 0.05
103
+ cache-write 0.625
104
+ }
105
+ long-context-cost {
106
+ }
107
+ }
79
108
  }
@@ -2,6 +2,9 @@
2
2
 
3
3
  provider "google-antigravity" {
4
4
  default-model "gemini-3.1-pro"
5
+ // `fetchAvailableModels` is the account's served roster; bundled rows it
6
+ // omits (e.g. Claude 5.5 on plans without it) 404 on every request (#14328).
7
+ dynamic-models-authoritative #true
5
8
  kind-apis {
6
9
  image "google-gemini-cli"
7
10
  }
@@ -64,7 +67,11 @@ provider "google-antigravity" {
64
67
  models "gemini-3-pro" {
65
68
  thinking-mode "google-level"
66
69
  }
67
- models "gemini-3-pro-image" {
70
+ // Antigravity discovery lists image SKUs beside chat models with no output
71
+ // modality, so they would build as chat. Accounts advertise either SKU in
72
+ // `imageGenerationModelIds` (gemini-3.1-flash-image replaced
73
+ // gemini-3-pro-image on some accounts, #11106).
74
+ models "gemini-3-pro-image" "gemini-3.1-flash-image" {
68
75
  kind "image"
69
76
  }
70
77
  // residue: taxonomy ranks and exact globs do not isolate these models.
@@ -4,8 +4,29 @@ provider "groq" {
4
4
  default-model "openai/gpt-oss-120b"
5
5
  env "GROQ_API_KEY"
6
6
 
7
+ // Groq validates assistant message properties and refuses `reasoning_content`
8
+ // (400 "property 'reasoning_content' is unsupported"), so the Kimi lineage's
9
+ // tool-call replay field, real or the "." placeholder, is never sent here.
10
+ requires-reasoning-content-for-tool-calls #false
7
11
  thinking-mode "effort"
8
12
  class "unknown" {
9
13
  thinking-efforts "minimal" "low" "medium" "high" "xhigh"
10
14
  }
15
+ // Groq accepts OpenAI `reasoning_effort` for Qwen, with `none` as its off
16
+ // value, not Qwen-native `enable_thinking` (400 "property 'enable_thinking'
17
+ // is unsupported"). Its documented Qwen ladder (Qwen 3.8) is low/medium/high;
18
+ // `minimal` answers 400 "invalid Qwen3.8 reasoning_effort".
19
+ class "qwen" {
20
+ thinking-format "openai"
21
+ reasoning-disable-mode "none-effort"
22
+ thinking-efforts "low" "medium" "high"
23
+ }
24
+ // Qwen 3.6 only takes `default` (thinking) or `none` (off), per its Groq
25
+ // model card.
26
+ models "qwen/qwen3.6-27b" {
27
+ thinking-efforts "high"
28
+ thinking-effort-map {
29
+ high "default"
30
+ }
31
+ }
11
32
  }
@@ -0,0 +1,42 @@
1
+ // Image billing for readers whose lineage has no `image-tokenization` rule in
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.
4
+
5
+ // OpenAI-compatible wires bill like GPT-5.5: 32px patches × 1.2, `auto` sized
6
+ // like `original`.
7
+ on-api "openai-completions" "openai-responses" "openai-codex-responses" "azure-openai-responses" priority=-1 {
8
+ image-tokenization {
9
+ regime "openai-patch"
10
+ multiplier 1.2
11
+ auto "original"
12
+ low {
13
+ max-edge 512
14
+ }
15
+ high {
16
+ max-edge 2048
17
+ patch-budget 2500
18
+ }
19
+ original {
20
+ max-edge 6000
21
+ patch-budget 10000
22
+ }
23
+ }
24
+ }
25
+
26
+ // Google wires bill Gemini 3's fixed `media_resolution` budget per image.
27
+ on-api "google-generative-ai" "google-gemini-cli" "google-vertex" priority=-1 {
28
+ image-tokenization {
29
+ regime "fixed"
30
+ tokens 1120
31
+ }
32
+ }
33
+
34
+ // Anthropic wires and every other adapter bill Claude's high-res tier, the
35
+ // largest per-image bill, so an unpriced reader is never undercounted.
36
+ on-api "anthropic-messages" "bedrock-converse-stream" "openrouter" "ollama-chat" "cursor-agent" "factory-droid-agent" "gitlab-duo-agent" "devin-agent" "apple-foundation-models" priority=-1 {
37
+ image-tokenization {
38
+ regime "anthropic-patch"
39
+ max-edge 2576
40
+ max-tokens 4784
41
+ }
42
+ }
@@ -0,0 +1,53 @@
1
+ // Most questions one System One judgment request may carry. A server that
2
+ // validates the `questions` map rejects an oversized request (HTTP 400/422)
3
+ // before judging anything, so the judge splits larger requests. Scoped by
4
+ // adapter, not provider name: self-hosted servers are user-configured judge
5
+ // rows under arbitrary provider ids.
6
+ //
7
+ // Unassigned, verified without a count cap (token budget only): TypeSafe jev
8
+ // (docs.typesafe.ai/models: 64k tokens per request), the same jev behind
9
+ // OpenRouter Decisions, Command Code and OpenCode Zen, Kev
10
+ // (github.com/jaredpalmer/kev: "A request may carry any number of
11
+ // questions"), and wev / OpenJev-4B (github.com/alanhuangyoo/OpenJev, which
12
+ // answers under any requested name).
13
+ //
14
+ // Unassigned: OpenAI Decisions (`openai-decisions`); its guide
15
+ // (developers.openai.com/api/docs/guides/decisions) documents no question cap.
16
+ //
17
+ // Not isolatable: openjev-sglang (github.com/ekzhang/openjev-sglang) caps at
18
+ // 64 but answers as `jev-latest` or its upstream model name, the same ids as
19
+ // uncapped hosts.
20
+ on-api "typesafe" "openrouter-decisions" {
21
+ // residue: no taxonomy class covers self-hosted OpenJEV deployments. An
22
+ // `openjev-*` gateway answered HTTP 422 `at most 16 items`
23
+ // (https://github.com/can1357/oh-my-pi/issues/15081); which server that is
24
+ // remains unidentified, so unknown OpenJEV ids keep the smallest cap
25
+ // observed. Over-splitting costs requests; under-splitting fails them.
26
+ models "*openjev*" {
27
+ judgment-questions-max 16
28
+ }
29
+ // residue: razorback16/openjev and its Swift port (Algorythm-Canada/
30
+ // OpenJevSwift) reject more than OPENJEV_MAX_QUESTIONS, default 256, with
31
+ // `at most 256 questions per request`. These are the wire names their
32
+ // DiffusionGemma, Laya, Verdict and JevK5 backends answer under; exact ids
33
+ // outrank the glob above.
34
+ models "openjev-latest" "openjev-0.1" "laya-1.0" "verdict-1.4" "jevk5-0.2" {
35
+ judgment-questions-max 256
36
+ }
37
+ }
38
+ // Cloudflare Clef, Clef Flash and Clef Omni: the Workers AI input schema
39
+ // bounds `questions` to 1-64 entries (`maxProperties: 64`,
40
+ // developers.cloudflare.com/workers-ai/models/clef, /clef-flash, /clef-omni).
41
+ on-api "workers-ai-systemone" {
42
+ models "@cf/cloudflare/clef*" {
43
+ judgment-questions-max 64
44
+ }
45
+ }
46
+ // OpenRouter Decisions serves its `cloudflare/clef*` rows from Workers AI (and
47
+ // PrimeIntellect, whose cap is unpublished), so the Workers AI schema's 64
48
+ // applies; scoped apart from the TypeSafe block above.
49
+ on-api "openrouter-decisions" {
50
+ models "cloudflare/clef*" {
51
+ judgment-questions-max 64
52
+ }
53
+ }
@@ -1,7 +1,10 @@
1
- // Catalog entry for "litellm"; no deployment-contract compat rules are needed.
1
+ // Provider-wire compat for "litellm".
2
2
 
3
3
  provider "litellm" {
4
4
  default-model "claude-opus-5-5"
5
5
  env "LITELLM_API_KEY"
6
6
  discovery label="LiteLLM" allow-unauthenticated=#true
7
+
8
+ // The proxy groups request logs into sessions by this header.
9
+ session-header "x-litellm-session-id"
7
10
  }
@@ -42,8 +42,8 @@ provider "meta" {
42
42
  supports-reasoning-effort #true
43
43
  include-encrypted-reasoning #true
44
44
  }
45
- // Meta documents the `max` effort tier for Muse Spark 1.3 (standard) only;
46
- // contributor tiers and other revisions stay on the 5-tier ladder.
45
+ // Meta documents the `max` effort tier for Muse Spark 1.3 standard and
46
+ // contributor tiers; other revisions stay on the 5-tier ladder.
47
47
  model "muse-spark-1.3" name="Muse Spark 1.3" {
48
48
  reasoning #true
49
49
  input "text" "image"
@@ -60,7 +60,7 @@ provider "meta" {
60
60
  cost input=0.1 output=0.2 cache-read=0.002 cache-write=0
61
61
  limits context=1048576 max-tokens=131072
62
62
  thinking-mode "effort"
63
- thinking-efforts "minimal" "low" "medium" "high" "xhigh"
63
+ thinking-efforts "minimal" "low" "medium" "high" "xhigh" "max"
64
64
  supports-reasoning-effort #true
65
65
  include-encrypted-reasoning #true
66
66
  }
@@ -6,11 +6,16 @@ provider "minimax-code-cn" priority=1 {
6
6
 
7
7
  // Replaces the provider-id regex in both OpenAI baselines.
8
8
  reasoning-deltas-may-be-cumulative #true
9
- class "minimax" {
9
+ // residue: the legacy lightning SKUs survive only as previous-snapshot rows
10
+ // on the OpenAI-compatible route (models.dev and both live model lists omit
11
+ // them), so they keep that route's effort-mode thinking instead of the
12
+ // Anthropic adaptive rules the rest of the plan uses.
13
+ models "MiniMax-M2.1-lightning" "MiniMax-M2.5-lightning" {
10
14
  thinking-mode "effort"
11
- }
12
- // residue: taxonomy ranks and exact globs do not isolate these models.
13
- models "MiniMax-M3" {
14
- thinking-efforts "minimal" "low" "medium" "high"
15
+ thinking-effort-map {
16
+ low "low"
17
+ medium "medium"
18
+ high "high"
19
+ }
15
20
  }
16
21
  }
@@ -6,11 +6,16 @@ provider "minimax-code" priority=1 {
6
6
 
7
7
  // Replaces the provider-id regex in both OpenAI baselines.
8
8
  reasoning-deltas-may-be-cumulative #true
9
- class "minimax" {
9
+ // residue: the legacy lightning SKUs survive only as previous-snapshot rows
10
+ // on the OpenAI-compatible route (models.dev and both live model lists omit
11
+ // them), so they keep that route's effort-mode thinking instead of the
12
+ // Anthropic adaptive rules the rest of the plan uses.
13
+ models "MiniMax-M2.1-lightning" "MiniMax-M2.5-lightning" {
10
14
  thinking-mode "effort"
11
- }
12
- // residue: taxonomy ranks and exact globs do not isolate these models.
13
- models "MiniMax-M3" {
14
- thinking-efforts "minimal" "low" "medium" "high"
15
+ thinking-effort-map {
16
+ low "low"
17
+ medium "medium"
18
+ high "high"
19
+ }
15
20
  }
16
21
  }
@@ -4,7 +4,31 @@ provider "mistral" {
4
4
  default-model "devstral-medium-latest"
5
5
  env "MISTRAL_API_KEY"
6
6
 
7
- thinking-mode "effort"
7
+ // Public-preview aliases and current USD / 1M token pricing:
8
+ // https://docs.mistral.ai/models/mistral-large-4-0 (2026-10-06).
9
+ // Public preview is 50% off: input $0.68, output $2.09, cached input $0.07.
10
+ // List prices: input $1.36, output $4.18, cached input $0.14; update when preview ends.
11
+ // No separate maximum output-token limit is published.
12
+ seed api="openai-completions" base-url="https://api.mistral.ai/v1" bundle="always" {
13
+ model "mistral-large-4" name="Mistral Large 4" {
14
+ reasoning #true
15
+ input "text" "image"
16
+ cost input=0.68 output=2.09 cache-read=0.07 cache-write=0
17
+ limits context=1000000
18
+ }
19
+ model "mistral-large-4-0" name="Mistral Large 4" {
20
+ reasoning #true
21
+ input "text" "image"
22
+ cost input=0.68 output=2.09 cache-read=0.07 cache-write=0
23
+ limits context=1000000
24
+ }
25
+ }
26
+
27
+ // Mistral's chat-completions endpoint derives cache affinity from the
28
+ // top-level `prompt_cache_key` (https://docs.mistral.ai/studio/conversations/advanced/prompt-caching);
29
+ // without it, requests only hit replica-local implicit cache. Same shape as
30
+ // the kimi-code rule (#6049).
31
+ supports-prompt-cache-key #true
8
32
  class "unknown" {
9
33
  thinking-efforts "minimal" "low" "medium" "high" "xhigh"
10
34
  }
@@ -31,6 +31,17 @@ provider "moonshot" {
31
31
  input-modalities "text" "image"
32
32
  }
33
33
  }
34
+ // stencil.so reports a $3 K3 cache write; Moonshot bills only cache hits
35
+ // ($0.30) and misses (the $3 input rate), with no cache-write charge.
36
+ // https://platform.moonshot.ai/docs/pricing/chat-k3
37
+ models "kimi-k3" {
38
+ cost-patch {
39
+ input 3.0
40
+ output 15.0
41
+ cache-read 0.3
42
+ cache-write 0.0
43
+ }
44
+ }
34
45
  // The /models roster carries no modality metadata for the named vision/vl
35
46
  // SKUs; the bounded id token is the census signal.
36
47
  models token="vision" {
@@ -15,6 +15,13 @@ provider "muse-code" {
15
15
  // api.meta.ai/v1 accepts only tool_choice "auto"; "none", "required" and named
16
16
  // choices are rejected with 400 (verified 2026-09-10), so omit the field.
17
17
  supports-tool-choice #false
18
+ // Results can be stored so a dropped stream is recovered: verified 2026-09-29
19
+ // against api.meta.ai/v1, a stored run keeps generating after the client
20
+ // socket dies and `GET /responses/{id}` returns it once finished (~60s for
21
+ // a high-effort turn), while `store: false` runs 404 forever. Storage is
22
+ // opt-in (privacy: stored runs retain prompts/outputs on Meta's side): omp
23
+ // setting providers.muse-code.storeResponses or PI_MUSE_STORE_RESPONSES=1.
24
+ store-responses #true
18
25
  // Subscription tier bills per request; the compact edit prompt cuts the
19
26
  // recurring tool-schema bytes. Verified 2026-09-05 against api.meta.ai/v1:
20
27
  // `custom` tools are rejected with 400 "`custom` tools are not supported
@@ -13,6 +13,9 @@ provider "ollama" priority=-1 {
13
13
  // Replaces both Ollama empty-length finish baselines.
14
14
  empty-length-finish-is-context-error #true
15
15
  thinking-efforts "low" "medium" "high" "max"
16
+ // Ollama's OpenAI-compatible endpoints accept effort "none" to turn thinking
17
+ // off; the lowest ladder effort ("low") still thinks on e.g. Gemma 4.
18
+ reasoning-disable-mode "none-effort"
16
19
  // Ollama continues a trailing assistant turn verbatim on /api/chat and
17
20
  // /v1/responses alike; callers use it to commit an output prefix.
18
21
  supports-assistant-prefill #true