@monotykamary/pi-opencode-provider 1.0.6 → 1.0.8

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/README.md CHANGED
@@ -15,7 +15,7 @@ _GPT, Claude, Gemini, GLM, MiniMax, Kimi, DeepSeek — unified API for [pi](http
15
15
 
16
16
  ## Features
17
17
 
18
- - **60+ AI Models** including GPT-5.x Codex, Claude Opus/Sonnet/Haiku, Gemini 3.x, GLM, MiniMax, Kimi K2.5, and more
18
+ - **62+ AI Models** including GPT-5.x Codex, Claude Opus/Sonnet/Haiku, Gemini 3.x, GLM, MiniMax, Kimi K2.5, and more
19
19
  - **Multi-API Support** — uses the correct API protocol per model (Anthropic, OpenAI Responses, OpenAI Completions, Gemini)
20
20
  - **Cost Tracking** with per-model pricing for budget management
21
21
  - **Reasoning Models** with thinking level maps for proper effort control
@@ -77,20 +77,20 @@ pi
77
77
  | Big Pickle | Completions | Text | 200K | 32K | Free | Free |
78
78
  | Claude Fable 5 | Anthropic | Text + Image | 1.0M | 128K | $10.00 | $50.00 |
79
79
  | Claude Haiku 4.5 | Anthropic | Text + Image | 200K | 64K | $1.00 | $5.00 |
80
- | Claude Opus 4.1 | Anthropic | Text + Image | 200K | 32K | $15.00 | $75.00 |
81
80
  | Claude Opus 4.5 | Anthropic | Text + Image | 200K | 64K | $5.00 | $25.00 |
82
81
  | Claude Opus 4.6 | Anthropic | Text + Image | 1.0M | 128K | $5.00 | $25.00 |
83
82
  | Claude Opus 4.7 | Anthropic | Text + Image | 1.0M | 128K | $5.00 | $25.00 |
84
83
  | Claude Opus 4.8 | Anthropic | Text + Image | 1.0M | 128K | $5.00 | $25.00 |
85
84
  | Claude Opus 5 | Anthropic | Text + Image | 1.0M | 128K | $5.00 | $25.00 |
86
- | Claude Sonnet 4 | Anthropic | Text + Image | 1.0M | 64K | $3.00 | $15.00 |
87
- | Claude Sonnet 4.5 | Anthropic | Text + Image | 1.0M | 64K | $3.00 | $15.00 |
85
+ | Claude Sonnet 4 | Anthropic | Text + Image | 200K | 64K | $3.00 | $15.00 |
86
+ | Claude Sonnet 4.5 | Anthropic | Text + Image | 200K | 64K | $3.00 | $15.00 |
88
87
  | Claude Sonnet 4.6 | Anthropic | Text + Image | 1.0M | 64K | $3.00 | $15.00 |
89
88
  | Claude Sonnet 5 | Anthropic | Text + Image | 1.0M | 128K | $2.00 | $10.00 |
90
89
  | DeepSeek V4 Flash | Completions | Text | 1.0M | 384K | $0.14 | $0.28 |
91
90
  | DeepSeek V4 Flash Free | Completions | Text | 200K | 128K | Free | Free |
92
91
  | DeepSeek V4 Pro | Completions | Text | 1.0M | 384K | $1.74 | $3.84 |
93
92
  | Gemini 3 Flash | Gemini | Text + Image | 1.0M | 66K | $0.50 | $3.00 |
93
+ | Gemini 3 Pro | Gemini | Text + Image | 1.0M | 66K | $1.25 | $10.00 |
94
94
  | Gemini 3.1 Pro Preview | Gemini | Text + Image | 1.0M | 66K | $2.00 | $12.00 |
95
95
  | Gemini 3.5 Flash | Gemini | Text + Image | 1.0M | 66K | $1.50 | $9.00 |
96
96
  | Gemini 3.5 Flash Lite | Gemini | Text + Image | 1.0M | 66K | $0.30 | $2.50 |
@@ -109,29 +109,31 @@ pi
109
109
  | GPT-5.2 Codex | Responses | Text + Image | 400K | 128K | $1.75 | $14.00 |
110
110
  | GPT-5.3 Codex | Responses | Text + Image | 400K | 128K | $1.75 | $14.00 |
111
111
  | GPT-5.3 Codex Spark | Responses | Text | 128K | 128K | $1.75 | $14.00 |
112
- | GPT-5.4 | Responses | Text + Image | 1.1M | 128K | $2.50 | $15.00 |
112
+ | GPT-5.4 | Responses | Text + Image | 272K | 128K | $2.50 | $15.00 |
113
113
  | GPT-5.4 Mini | Responses | Text + Image | 400K | 128K | $0.75 | $4.50 |
114
114
  | GPT-5.4 Nano | Responses | Text + Image | 400K | 128K | $0.20 | $1.25 |
115
115
  | GPT-5.4 Pro | Responses | Text + Image | 1.1M | 128K | $30.00 | $180.00 |
116
116
  | GPT-5.5 | Responses | Text + Image | 1.1M | 128K | $5.00 | $30.00 |
117
117
  | GPT-5.5 Pro | Responses | Text + Image | 1.1M | 128K | $30.00 | $180.00 |
118
- | GPT-5.6 Luna | Responses | Text + Image | 1.1M | 128K | $1.00 | $6.00 |
118
+ | GPT-5.6 Luna | Responses | Text + Image | 1.1M | 128K | $0.20 | $1.20 |
119
119
  | GPT-5.6 Sol | Responses | Text + Image | 1.1M | 128K | $5.00 | $30.00 |
120
120
  | GPT-5.6 Terra | Responses | Text + Image | 1.1M | 128K | $2.50 | $15.00 |
121
121
  | Grok 4.5 | Responses | Text + Image | 500K | 500K | $2.00 | $6.00 |
122
122
  | Grok Build 0.1 | Completions | Text + Image | 256K | 256K | $1.00 | $2.00 |
123
+ | Grok Code | Completions | Text + Image | 256K | 256K | $1.00 | $2.00 |
124
+ | Hy3 Free | Completions | Text | 190K | 64K | Free | Free |
123
125
  | Kimi K2.5 | Completions | Text + Image | 262K | 66K | $0.60 | $3.00 |
124
126
  | Kimi K2.6 | Completions | Text + Image | 262K | 66K | $0.95 | $4.00 |
125
127
  | Kimi K2.7 Code | Completions | Text + Image | 262K | 262K | $0.95 | $4.00 |
126
128
  | Kimi K3 | Completions | Text + Image | 1.0M | 131K | $3.00 | $15.00 |
127
129
  | Laguna S 2.1 Free | Completions | Text | 256K | 32K | Free | Free |
128
- | Ling-3.0-flash Free | Completions | Text | 262K | 33K | Free | Free |
130
+ | Ling-3.0-tiny Free | Completions | Text | 262K | 33K | Free | Free |
129
131
  | MiMo V2.5 Free | Completions | Text + Image | 200K | 32K | Free | Free |
130
132
  | MiniMax-M2.5 | Completions | Text | 205K | 131K | $0.30 | $1.20 |
131
133
  | MiniMax-M2.7 | Completions | Text | 205K | 131K | $0.30 | $1.20 |
132
134
  | MiniMax-M3 | Completions | Text + Image | 512K | 128K | $0.30 | $1.20 |
133
135
  | Nemotron 3 Ultra Free | Completions | Text | 1.0M | 128K | Free | Free |
134
- | North Mini Code Free | Completions | Text | 256K | 64K | Free | Free |
136
+ | Nemotron 3.5 Lightning Free | Completions | Text | 262K | 262K | Free | Free |
135
137
  | Qwen3.5 Plus | Anthropic | Text + Image | 262K | 66K | $0.20 | $1.20 |
136
138
  | Qwen3.6 Plus | Anthropic | Text + Image | 262K | 66K | $0.50 | $3.00 |
137
139
  *Costs are per million tokens. Prices subject to change - check [opencode.ai](https://opencode.ai) for current pricing.*
@@ -1 +1,79 @@
1
- {}
1
+ {
2
+ "claude-opus-4-1": {
3
+ "id": "claude-opus-4-1",
4
+ "name": "Claude Opus 4.1",
5
+ "api": "anthropic-messages",
6
+ "baseUrl": "https://opencode.ai/zen",
7
+ "reasoning": true,
8
+ "input": [
9
+ "text",
10
+ "image"
11
+ ],
12
+ "cost": {
13
+ "input": 15,
14
+ "output": 75,
15
+ "cacheRead": 1.5,
16
+ "cacheWrite": 18.75
17
+ },
18
+ "contextWindow": 200000,
19
+ "maxTokens": 32000,
20
+ "deprecatedAt": "2026-08-07T02:00:18.924Z"
21
+ },
22
+ "ling-3.0-flash-free": {
23
+ "id": "ling-3.0-flash-free",
24
+ "name": "Ling-3.0-flash Free",
25
+ "api": "openai-completions",
26
+ "baseUrl": "https://opencode.ai/zen/v1",
27
+ "reasoning": true,
28
+ "input": [
29
+ "text"
30
+ ],
31
+ "cost": {
32
+ "input": 0,
33
+ "output": 0,
34
+ "cacheRead": 0,
35
+ "cacheWrite": 0
36
+ },
37
+ "contextWindow": 262144,
38
+ "maxTokens": 32768,
39
+ "deprecatedAt": "2026-08-08T02:00:18.268Z"
40
+ },
41
+ "north-mini-code-free": {
42
+ "id": "north-mini-code-free",
43
+ "name": "North Mini Code Free",
44
+ "api": "openai-completions",
45
+ "baseUrl": "https://opencode.ai/zen/v1",
46
+ "reasoning": true,
47
+ "input": [
48
+ "text"
49
+ ],
50
+ "cost": {
51
+ "input": 0,
52
+ "output": 0,
53
+ "cacheRead": 0,
54
+ "cacheWrite": 0
55
+ },
56
+ "contextWindow": 256000,
57
+ "maxTokens": 64000,
58
+ "deprecatedAt": "2026-08-12T02:00:24.970Z"
59
+ },
60
+ "longcat-2.0-free": {
61
+ "id": "longcat-2.0-free",
62
+ "name": "LongCat-2.0 Free",
63
+ "api": "openai-completions",
64
+ "baseUrl": "https://opencode.ai/zen/v1",
65
+ "reasoning": true,
66
+ "input": [
67
+ "text"
68
+ ],
69
+ "cost": {
70
+ "input": 0,
71
+ "output": 0,
72
+ "cacheRead": 0,
73
+ "cacheWrite": 0
74
+ },
75
+ "contextWindow": 1000000,
76
+ "maxTokens": 131072,
77
+ "deprecatedAt": "2026-08-12T06:38:24.559Z"
78
+ }
79
+ }
package/models.json CHANGED
@@ -355,24 +355,6 @@
355
355
  "contextWindow": 1000000,
356
356
  "maxTokens": 128000
357
357
  },
358
- {
359
- "id": "north-mini-code-free",
360
- "name": "North Mini Code Free",
361
- "api": "openai-completions",
362
- "baseUrl": "https://opencode.ai/zen/v1",
363
- "reasoning": true,
364
- "input": [
365
- "text"
366
- ],
367
- "cost": {
368
- "input": 0,
369
- "output": 0,
370
- "cacheRead": 0,
371
- "cacheWrite": 0
372
- },
373
- "contextWindow": 256000,
374
- "maxTokens": 64000
375
- },
376
358
  {
377
359
  "id": "glm-5.2",
378
360
  "name": "GLM-5.2",
@@ -391,24 +373,6 @@
391
373
  "contextWindow": 1000000,
392
374
  "maxTokens": 131072
393
375
  },
394
- {
395
- "id": "ling-3.0-flash-free",
396
- "name": "Ling-3.0-flash Free",
397
- "api": "openai-completions",
398
- "baseUrl": "https://opencode.ai/zen/v1",
399
- "reasoning": true,
400
- "input": [
401
- "text"
402
- ],
403
- "cost": {
404
- "input": 0,
405
- "output": 0,
406
- "cacheRead": 0,
407
- "cacheWrite": 0
408
- },
409
- "contextWindow": 262144,
410
- "maxTokens": 32768
411
- },
412
376
  {
413
377
  "id": "laguna-s-2.1-free",
414
378
  "name": "Laguna S 2.1 Free",
@@ -502,25 +466,6 @@
502
466
  "contextWindow": 1050000,
503
467
  "maxTokens": 128000
504
468
  },
505
- {
506
- "id": "claude-opus-4-1",
507
- "name": "Claude Opus 4.1",
508
- "api": "anthropic-messages",
509
- "baseUrl": "https://opencode.ai/zen",
510
- "reasoning": true,
511
- "input": [
512
- "text",
513
- "image"
514
- ],
515
- "cost": {
516
- "input": 15,
517
- "output": 75,
518
- "cacheRead": 1.5,
519
- "cacheWrite": 18.75
520
- },
521
- "contextWindow": 200000,
522
- "maxTokens": 32000
523
- },
524
469
  {
525
470
  "id": "minimax-m3",
526
471
  "name": "MiniMax-M3",
@@ -615,6 +560,24 @@
615
560
  "contextWindow": 1000000,
616
561
  "maxTokens": 384000
617
562
  },
563
+ {
564
+ "id": "ling-3.0-tiny-free",
565
+ "name": "Ling-3.0-tiny Free",
566
+ "api": "openai-completions",
567
+ "baseUrl": "https://opencode.ai/zen/v1",
568
+ "reasoning": true,
569
+ "input": [
570
+ "text"
571
+ ],
572
+ "cost": {
573
+ "input": 0,
574
+ "output": 0,
575
+ "cacheRead": 0,
576
+ "cacheWrite": 0
577
+ },
578
+ "contextWindow": 262144,
579
+ "maxTokens": 32768
580
+ },
618
581
  {
619
582
  "id": "gpt-5.4",
620
583
  "name": "GPT-5.4",
@@ -691,6 +654,24 @@
691
654
  "contextWindow": 1048576,
692
655
  "maxTokens": 65536
693
656
  },
657
+ {
658
+ "id": "hy3-free",
659
+ "name": "Hy3 Free",
660
+ "api": "openai-completions",
661
+ "baseUrl": "https://opencode.ai/zen/v1",
662
+ "reasoning": true,
663
+ "input": [
664
+ "text"
665
+ ],
666
+ "cost": {
667
+ "input": 0,
668
+ "output": 0,
669
+ "cacheRead": 0,
670
+ "cacheWrite": 0
671
+ },
672
+ "contextWindow": 190000,
673
+ "maxTokens": 64000
674
+ },
694
675
  {
695
676
  "id": "claude-sonnet-4",
696
677
  "name": "Claude Sonnet 4",
@@ -758,10 +739,10 @@
758
739
  "image"
759
740
  ],
760
741
  "cost": {
761
- "input": 1,
762
- "output": 6,
763
- "cacheRead": 0.1,
764
- "cacheWrite": 1.25
742
+ "input": 0.2,
743
+ "output": 1.2,
744
+ "cacheRead": 0.02,
745
+ "cacheWrite": 0.25
765
746
  },
766
747
  "contextWindow": 1050000,
767
748
  "maxTokens": 128000
@@ -901,7 +882,7 @@
901
882
  {
902
883
  "id": "grok-build-0.1",
903
884
  "name": "Grok Build 0.1",
904
- "api": "openai-completions",
885
+ "api": "openai-responses",
905
886
  "baseUrl": "https://opencode.ai/zen/v1",
906
887
  "reasoning": true,
907
888
  "input": [
@@ -1050,6 +1031,24 @@
1050
1031
  "contextWindow": 1000000,
1051
1032
  "maxTokens": 128000
1052
1033
  },
1034
+ {
1035
+ "id": "nemotron-3.5-lightning-free",
1036
+ "name": "Nemotron 3.5 Lightning Free",
1037
+ "api": "openai-completions",
1038
+ "baseUrl": "https://opencode.ai/zen/v1",
1039
+ "reasoning": true,
1040
+ "input": [
1041
+ "text"
1042
+ ],
1043
+ "cost": {
1044
+ "input": 0,
1045
+ "output": 0,
1046
+ "cacheRead": 0,
1047
+ "cacheWrite": 0
1048
+ },
1049
+ "contextWindow": 262144,
1050
+ "maxTokens": 262144
1051
+ },
1053
1052
  {
1054
1053
  "id": "nemotron-3-ultra-free",
1055
1054
  "name": "Nemotron 3 Ultra Free",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@monotykamary/pi-opencode-provider",
3
- "version": "1.0.6",
3
+ "version": "1.0.8",
4
4
  "description": "Opencode provider extension for pi - Access GPT, Claude, Gemini, GLM, MiniMax, Kimi and more through the opencode.ai API",
5
5
  "type": "module",
6
6
  "main": "index.ts",
package/patch.json CHANGED
@@ -1,49 +1,118 @@
1
1
  {
2
- "claude-opus-4-6": {
3
- "compat": {
4
- "forceAdaptiveThinking": true
5
- },
2
+ "gpt-5.1-codex-mini": {
6
3
  "thinkingLevelMap": {
7
- "max": "max"
4
+ "off": null,
5
+ "minimal": null,
6
+ "low": "low",
7
+ "medium": "medium",
8
+ "high": "high",
9
+ "xhigh": null,
10
+ "max": null
11
+ },
12
+ "compat": {
13
+ "sessionAffinityFormat": "openai-nosession",
14
+ "supportsOpenAIGrammarTools": true
8
15
  }
9
16
  },
10
- "claude-opus-4-7": {
17
+ "claude-sonnet-4-6": {
18
+ "thinkingLevelMap": {
19
+ "max": "max"
20
+ },
11
21
  "compat": {
12
22
  "forceAdaptiveThinking": true
13
- },
23
+ }
24
+ },
25
+ "gpt-5.5-pro": {
14
26
  "thinkingLevelMap": {
15
- "xhigh": "xhigh"
27
+ "off": null,
28
+ "minimal": null,
29
+ "low": null,
30
+ "medium": "medium",
31
+ "high": "high",
32
+ "xhigh": "xhigh",
33
+ "max": null
34
+ },
35
+ "compat": {
36
+ "sessionAffinityFormat": "openai-nosession",
37
+ "supportsOpenAIGrammarTools": true
16
38
  }
17
39
  },
18
- "claude-opus-4-8": {
40
+ "glm-5": {
19
41
  "compat": {
20
- "forceAdaptiveThinking": true
21
- },
42
+ "supportsStore": false,
43
+ "supportsDeveloperRole": false,
44
+ "maxTokensField": "max_tokens"
45
+ }
46
+ },
47
+ "gemini-3.5-flash": {
48
+ "thinkingLevelMap": {
49
+ "off": null
50
+ }
51
+ },
52
+ "gpt-5.3-codex-spark": {
22
53
  "thinkingLevelMap": {
54
+ "off": null,
23
55
  "xhigh": "xhigh"
24
56
  }
25
57
  },
26
- "deepseek-v4-flash-free": {
27
- "compat": {
28
- "requiresReasoningContentOnAssistantMessages": true,
29
- "thinkingFormat": "deepseek"
30
- },
58
+ "gpt-5.4-pro": {
31
59
  "thinkingLevelMap": {
60
+ "off": null,
32
61
  "minimal": null,
33
62
  "low": null,
34
- "medium": null,
63
+ "medium": "medium",
35
64
  "high": "high",
65
+ "xhigh": "xhigh",
66
+ "max": null
67
+ },
68
+ "compat": {
69
+ "sessionAffinityFormat": "openai-nosession",
70
+ "supportsOpenAIGrammarTools": true
71
+ }
72
+ },
73
+ "gpt-5.6-sol": {
74
+ "thinkingLevelMap": {
75
+ "off": null,
76
+ "minimal": null,
77
+ "low": "low",
78
+ "medium": "medium",
79
+ "high": "high",
80
+ "xhigh": "xhigh",
36
81
  "max": "max"
82
+ },
83
+ "compat": {
84
+ "sessionAffinityFormat": "openai-nosession",
85
+ "supportsOpenAIGrammarTools": true
37
86
  }
38
87
  },
39
- "gemini-3-flash": {
88
+ "glm-5.1": {
89
+ "compat": {
90
+ "supportsStore": false,
91
+ "supportsDeveloperRole": false,
92
+ "maxTokensField": "max_tokens"
93
+ }
94
+ },
95
+ "gemini-3.5-flash-lite": {
40
96
  "thinkingLevelMap": {
41
97
  "off": null
42
98
  }
43
99
  },
44
- "gemini-3-pro": {
100
+ "claude-opus-4-6": {
45
101
  "thinkingLevelMap": {
46
- "off": null
102
+ "max": "max"
103
+ },
104
+ "compat": {
105
+ "forceAdaptiveThinking": true
106
+ }
107
+ },
108
+ "claude-fable-5": {
109
+ "thinkingLevelMap": {
110
+ "off": null,
111
+ "xhigh": "xhigh",
112
+ "max": "max"
113
+ },
114
+ "compat": {
115
+ "forceAdaptiveThinking": true
47
116
  }
48
117
  },
49
118
  "gemini-3.1-pro": {
@@ -55,139 +124,540 @@
55
124
  "high": "HIGH"
56
125
  }
57
126
  },
58
- "gemini-3.5-flash": {
127
+ "deepseek-v4-flash": {
128
+ "name": "DeepSeek V4 Flash",
59
129
  "thinkingLevelMap": {
60
- "off": null
130
+ "off": null,
131
+ "minimal": null,
132
+ "low": null,
133
+ "medium": null,
134
+ "high": "high",
135
+ "xhigh": null,
136
+ "max": "max"
137
+ },
138
+ "compat": {
139
+ "supportsStore": false,
140
+ "supportsDeveloperRole": false,
141
+ "maxTokensField": "max_tokens",
142
+ "supportsLongCacheRetention": false,
143
+ "requiresReasoningContentOnAssistantMessages": true
61
144
  }
62
145
  },
63
- "gpt-5": {
146
+ "kimi-k2.5": {
147
+ "compat": {
148
+ "supportsStore": false,
149
+ "supportsDeveloperRole": false,
150
+ "maxTokensField": "max_tokens",
151
+ "supportsLongCacheRetention": false
152
+ }
153
+ },
154
+ "minimax-m2.7": {
155
+ "compat": {
156
+ "supportsStore": false,
157
+ "supportsDeveloperRole": false,
158
+ "maxTokensField": "max_tokens",
159
+ "supportsLongCacheRetention": false
160
+ }
161
+ },
162
+ "claude-opus-4-8": {
64
163
  "thinkingLevelMap": {
65
- "off": null
164
+ "xhigh": "xhigh",
165
+ "max": "max"
166
+ },
167
+ "compat": {
168
+ "forceAdaptiveThinking": true,
169
+ "supportsTemperature": false
66
170
  }
67
171
  },
68
- "gpt-5-codex": {
172
+ "north-mini-code-free": {
69
173
  "thinkingLevelMap": {
70
- "off": null
174
+ "off": "none",
175
+ "minimal": null,
176
+ "low": null,
177
+ "medium": null,
178
+ "high": "high",
179
+ "xhigh": null,
180
+ "max": null
181
+ },
182
+ "compat": {
183
+ "supportsStore": false,
184
+ "supportsDeveloperRole": false,
185
+ "maxTokensField": "max_tokens"
71
186
  }
72
187
  },
73
- "gpt-5-nano": {
188
+ "longcat-2.0-free": {
189
+ "compat": {
190
+ "supportsStore": false,
191
+ "supportsDeveloperRole": false,
192
+ "maxTokensField": "max_tokens"
193
+ }
194
+ },
195
+ "glm-5.2": {
74
196
  "thinkingLevelMap": {
75
- "off": null
197
+ "off": null,
198
+ "minimal": null,
199
+ "low": null,
200
+ "medium": null,
201
+ "high": "high",
202
+ "xhigh": null,
203
+ "max": "max"
204
+ },
205
+ "compat": {
206
+ "supportsStore": false,
207
+ "supportsDeveloperRole": false,
208
+ "maxTokensField": "max_tokens"
76
209
  }
77
210
  },
78
- "gpt-5.1": {
211
+ "ling-3.0-flash-free": {
79
212
  "thinkingLevelMap": {
80
- "off": null
213
+ "off": null,
214
+ "minimal": null,
215
+ "low": "low",
216
+ "medium": "medium",
217
+ "high": "high",
218
+ "xhigh": null,
219
+ "max": null
220
+ },
221
+ "compat": {
222
+ "supportsStore": false,
223
+ "supportsDeveloperRole": false,
224
+ "maxTokensField": "max_tokens"
81
225
  }
82
226
  },
83
- "gpt-5.1-codex": {
227
+ "laguna-s-2.1-free": {
84
228
  "thinkingLevelMap": {
85
- "off": null
229
+ "off": null,
230
+ "minimal": null,
231
+ "low": "low",
232
+ "medium": "medium",
233
+ "high": "high",
234
+ "xhigh": null,
235
+ "max": null
236
+ },
237
+ "compat": {
238
+ "supportsStore": false,
239
+ "supportsDeveloperRole": false,
240
+ "maxTokensField": "max_tokens"
86
241
  }
87
242
  },
88
- "gpt-5.1-codex-max": {
243
+ "deepseek-v4-flash-free": {
244
+ "name": "DeepSeek V4 Flash Free",
89
245
  "thinkingLevelMap": {
90
- "off": null
246
+ "off": null,
247
+ "minimal": null,
248
+ "low": null,
249
+ "medium": null,
250
+ "high": "high",
251
+ "xhigh": null,
252
+ "max": "max"
253
+ },
254
+ "compat": {
255
+ "supportsStore": false,
256
+ "supportsDeveloperRole": false,
257
+ "maxTokensField": "max_tokens",
258
+ "requiresReasoningContentOnAssistantMessages": true
91
259
  }
92
260
  },
93
- "gpt-5.1-codex-mini": {
261
+ "gemini-3-flash": {
94
262
  "thinkingLevelMap": {
95
263
  "off": null
96
264
  }
97
265
  },
98
- "gpt-5.2": {
266
+ "kimi-k2.6": {
267
+ "compat": {
268
+ "supportsStore": false,
269
+ "supportsDeveloperRole": false,
270
+ "thinkingFormat": "deepseek",
271
+ "supportsReasoningEffort": false,
272
+ "maxTokensField": "max_tokens",
273
+ "supportsLongCacheRetention": false
274
+ }
275
+ },
276
+ "gpt-5.5": {
99
277
  "thinkingLevelMap": {
100
278
  "off": null,
101
- "xhigh": "xhigh"
279
+ "minimal": null,
280
+ "low": "low",
281
+ "medium": "medium",
282
+ "high": "high",
283
+ "xhigh": "xhigh",
284
+ "max": null
285
+ },
286
+ "compat": {
287
+ "sessionAffinityFormat": "openai-nosession",
288
+ "supportsOpenAIGrammarTools": true
102
289
  }
103
290
  },
104
- "gpt-5.2-codex": {
291
+ "minimax-m3": {
292
+ "compat": {
293
+ "supportsStore": false,
294
+ "supportsDeveloperRole": false,
295
+ "maxTokensField": "max_tokens"
296
+ }
297
+ },
298
+ "gpt-5": {
105
299
  "thinkingLevelMap": {
106
300
  "off": null,
107
- "xhigh": "xhigh"
301
+ "minimal": "minimal",
302
+ "low": "low",
303
+ "medium": "medium",
304
+ "high": "high",
305
+ "xhigh": null,
306
+ "max": null
307
+ },
308
+ "compat": {
309
+ "sessionAffinityFormat": "openai-nosession",
310
+ "supportsOpenAIGrammarTools": true
108
311
  }
109
312
  },
110
- "gpt-5.3-codex": {
313
+ "gpt-5-codex": {
111
314
  "thinkingLevelMap": {
112
315
  "off": null,
113
- "xhigh": "xhigh"
316
+ "minimal": null,
317
+ "low": "low",
318
+ "medium": "medium",
319
+ "high": "high",
320
+ "xhigh": null,
321
+ "max": null
322
+ },
323
+ "compat": {
324
+ "sessionAffinityFormat": "openai-nosession",
325
+ "supportsOpenAIGrammarTools": true
114
326
  }
115
327
  },
116
- "gpt-5.3-codex-spark": {
328
+ "claude-sonnet-4-5": {
329
+ "contextWindow": 200000
330
+ },
331
+ "deepseek-v4-pro": {
117
332
  "thinkingLevelMap": {
118
333
  "off": null,
119
- "xhigh": "xhigh"
334
+ "minimal": null,
335
+ "low": null,
336
+ "medium": null,
337
+ "high": "high",
338
+ "xhigh": null,
339
+ "max": "max"
340
+ },
341
+ "compat": {
342
+ "supportsStore": false,
343
+ "supportsDeveloperRole": false,
344
+ "maxTokensField": "max_tokens",
345
+ "supportsLongCacheRetention": false,
346
+ "requiresReasoningContentOnAssistantMessages": true
120
347
  }
121
348
  },
122
349
  "gpt-5.4": {
350
+ "contextWindow": 272000,
123
351
  "thinkingLevelMap": {
124
352
  "off": null,
125
- "xhigh": "xhigh"
353
+ "minimal": null,
354
+ "low": "low",
355
+ "medium": "medium",
356
+ "high": "high",
357
+ "xhigh": "xhigh",
358
+ "max": null
359
+ },
360
+ "compat": {
361
+ "sessionAffinityFormat": "openai-nosession",
362
+ "supportsOpenAIGrammarTools": true
126
363
  }
127
364
  },
128
- "gpt-5.4-mini": {
365
+ "gpt-5.2-codex": {
129
366
  "thinkingLevelMap": {
130
367
  "off": null,
131
- "xhigh": "xhigh"
368
+ "minimal": null,
369
+ "low": "low",
370
+ "medium": "medium",
371
+ "high": "high",
372
+ "xhigh": "xhigh",
373
+ "max": null
374
+ },
375
+ "compat": {
376
+ "sessionAffinityFormat": "openai-nosession",
377
+ "supportsOpenAIGrammarTools": true
132
378
  }
133
379
  },
134
380
  "gpt-5.4-nano": {
135
381
  "thinkingLevelMap": {
136
382
  "off": null,
137
- "xhigh": "xhigh"
383
+ "minimal": null,
384
+ "low": "low",
385
+ "medium": "medium",
386
+ "high": "high",
387
+ "xhigh": "xhigh",
388
+ "max": null
389
+ },
390
+ "compat": {
391
+ "sessionAffinityFormat": "openai-nosession",
392
+ "supportsOpenAIGrammarTools": true
138
393
  }
139
394
  },
140
- "gpt-5.4-pro": {
395
+ "gemini-3.6-flash": {
396
+ "thinkingLevelMap": {
397
+ "off": null
398
+ }
399
+ },
400
+ "claude-sonnet-4": {
401
+ "contextWindow": 200000
402
+ },
403
+ "gpt-5.4-mini": {
141
404
  "thinkingLevelMap": {
142
405
  "off": null,
143
- "xhigh": "xhigh"
406
+ "minimal": null,
407
+ "low": "low",
408
+ "medium": "medium",
409
+ "high": "high",
410
+ "xhigh": "xhigh",
411
+ "max": null
412
+ },
413
+ "compat": {
414
+ "sessionAffinityFormat": "openai-nosession",
415
+ "supportsOpenAIGrammarTools": true
144
416
  }
145
417
  },
146
- "gpt-5.5": {
418
+ "minimax-m2.5": {
419
+ "compat": {
420
+ "supportsStore": false,
421
+ "supportsDeveloperRole": false,
422
+ "maxTokensField": "max_tokens"
423
+ }
424
+ },
425
+ "gpt-5.6-luna": {
147
426
  "thinkingLevelMap": {
148
427
  "off": null,
149
- "xhigh": "xhigh"
428
+ "minimal": null,
429
+ "low": "low",
430
+ "medium": "medium",
431
+ "high": "high",
432
+ "xhigh": "xhigh",
433
+ "max": "max"
434
+ },
435
+ "compat": {
436
+ "sessionAffinityFormat": "openai-nosession",
437
+ "supportsOpenAIGrammarTools": true
150
438
  }
151
439
  },
152
- "gpt-5.5-pro": {
440
+ "mimo-v2.5-free": {
441
+ "compat": {
442
+ "supportsStore": false,
443
+ "supportsDeveloperRole": false,
444
+ "maxTokensField": "max_tokens"
445
+ }
446
+ },
447
+ "gpt-5.2": {
448
+ "thinkingLevelMap": {
449
+ "off": null,
450
+ "minimal": null,
451
+ "low": "low",
452
+ "medium": "medium",
453
+ "high": "high",
454
+ "xhigh": "xhigh",
455
+ "max": null
456
+ },
457
+ "compat": {
458
+ "sessionAffinityFormat": "openai-nosession",
459
+ "supportsOpenAIGrammarTools": true
460
+ }
461
+ },
462
+ "gpt-5.3-codex": {
153
463
  "thinkingLevelMap": {
154
464
  "off": null,
465
+ "minimal": null,
466
+ "low": "low",
467
+ "medium": "medium",
468
+ "high": "high",
155
469
  "xhigh": "xhigh",
470
+ "max": null
471
+ },
472
+ "compat": {
473
+ "sessionAffinityFormat": "openai-nosession",
474
+ "supportsOpenAIGrammarTools": true
475
+ }
476
+ },
477
+ "grok-4.5": {
478
+ "thinkingLevelMap": {
479
+ "off": null,
156
480
  "minimal": null,
157
- "low": null
481
+ "low": "low",
482
+ "medium": "medium",
483
+ "high": "high",
484
+ "xhigh": null,
485
+ "max": null
486
+ },
487
+ "compat": {
488
+ "sessionAffinityFormat": "openai-nosession"
158
489
  }
159
490
  },
160
- "grok-build-0.1": {
491
+ "kimi-k2.7-code": {
161
492
  "compat": {
162
- "supportsReasoningEffort": false
493
+ "supportsStore": false,
494
+ "supportsDeveloperRole": false,
495
+ "maxTokensField": "max_tokens"
496
+ }
497
+ },
498
+ "gpt-5.1": {
499
+ "thinkingLevelMap": {
500
+ "off": null,
501
+ "minimal": null,
502
+ "low": "low",
503
+ "medium": "medium",
504
+ "high": "high",
505
+ "xhigh": null,
506
+ "max": null
163
507
  },
508
+ "compat": {
509
+ "sessionAffinityFormat": "openai-nosession",
510
+ "supportsOpenAIGrammarTools": true
511
+ }
512
+ },
513
+ "big-pickle": {
514
+ "compat": {
515
+ "supportsStore": false,
516
+ "supportsDeveloperRole": false,
517
+ "maxTokensField": "max_tokens"
518
+ }
519
+ },
520
+ "grok-build-0.1": {
521
+ "api": "openai-completions",
164
522
  "thinkingLevelMap": {
165
523
  "off": null,
166
524
  "minimal": null,
167
525
  "low": null,
168
526
  "medium": null
527
+ },
528
+ "compat": {
529
+ "supportsStore": false,
530
+ "supportsDeveloperRole": false,
531
+ "supportsReasoningEffort": false,
532
+ "maxTokensField": "max_tokens"
169
533
  }
170
534
  },
171
- "grok-code": {
535
+ "kimi-k3": {
536
+ "thinkingLevelMap": {
537
+ "off": null,
538
+ "minimal": null,
539
+ "low": null,
540
+ "medium": null,
541
+ "high": null,
542
+ "xhigh": null,
543
+ "max": "max"
544
+ },
172
545
  "compat": {
173
- "supportsReasoningEffort": false
546
+ "supportsStore": false,
547
+ "supportsDeveloperRole": false,
548
+ "maxTokensField": "max_tokens"
549
+ }
550
+ },
551
+ "gpt-5.1-codex": {
552
+ "thinkingLevelMap": {
553
+ "off": null,
554
+ "minimal": null,
555
+ "low": "low",
556
+ "medium": "medium",
557
+ "high": "high",
558
+ "xhigh": null,
559
+ "max": null
560
+ },
561
+ "compat": {
562
+ "sessionAffinityFormat": "openai-nosession",
563
+ "supportsOpenAIGrammarTools": true
564
+ }
565
+ },
566
+ "gpt-5-nano": {
567
+ "thinkingLevelMap": {
568
+ "off": null,
569
+ "minimal": "minimal",
570
+ "low": "low",
571
+ "medium": "medium",
572
+ "high": "high",
573
+ "xhigh": null,
574
+ "max": null
575
+ },
576
+ "compat": {
577
+ "sessionAffinityFormat": "openai-nosession",
578
+ "supportsOpenAIGrammarTools": true
579
+ }
580
+ },
581
+ "claude-opus-4-7": {
582
+ "thinkingLevelMap": {
583
+ "xhigh": "xhigh",
584
+ "max": "max"
585
+ },
586
+ "compat": {
587
+ "forceAdaptiveThinking": true,
588
+ "supportsTemperature": false
589
+ }
590
+ },
591
+ "gpt-5.6-terra": {
592
+ "thinkingLevelMap": {
593
+ "off": null,
594
+ "minimal": null,
595
+ "low": "low",
596
+ "medium": "medium",
597
+ "high": "high",
598
+ "xhigh": "xhigh",
599
+ "max": "max"
600
+ },
601
+ "compat": {
602
+ "sessionAffinityFormat": "openai-nosession",
603
+ "supportsOpenAIGrammarTools": true
604
+ }
605
+ },
606
+ "claude-sonnet-5": {
607
+ "thinkingLevelMap": {
608
+ "xhigh": "xhigh",
609
+ "max": "max"
610
+ },
611
+ "compat": {
612
+ "forceAdaptiveThinking": true
613
+ }
614
+ },
615
+ "nemotron-3-ultra-free": {
616
+ "compat": {
617
+ "supportsStore": false,
618
+ "supportsDeveloperRole": false,
619
+ "maxTokensField": "max_tokens"
620
+ }
621
+ },
622
+ "claude-opus-5": {
623
+ "thinkingLevelMap": {
624
+ "xhigh": "xhigh",
625
+ "max": "max"
174
626
  },
627
+ "compat": {
628
+ "forceAdaptiveThinking": true,
629
+ "supportsTemperature": false
630
+ }
631
+ },
632
+ "gpt-5.1-codex-max": {
175
633
  "thinkingLevelMap": {
176
634
  "off": null,
177
635
  "minimal": null,
178
- "low": null,
179
- "medium": null
636
+ "low": "low",
637
+ "medium": "medium",
638
+ "high": "high",
639
+ "xhigh": "xhigh",
640
+ "max": null
641
+ },
642
+ "compat": {
643
+ "sessionAffinityFormat": "openai-nosession",
644
+ "supportsOpenAIGrammarTools": true
180
645
  }
181
646
  },
182
- "kimi-k2.6": {
647
+ "gemini-3-pro": {
648
+ "thinkingLevelMap": {
649
+ "off": null
650
+ }
651
+ },
652
+ "grok-code": {
183
653
  "compat": {
184
- "thinkingFormat": "deepseek",
185
654
  "supportsReasoningEffort": false
186
655
  },
187
656
  "thinkingLevelMap": {
657
+ "off": null,
188
658
  "minimal": null,
189
659
  "low": null,
190
660
  "medium": null
191
661
  }
192
662
  }
193
- }
663
+ }
@@ -103,6 +103,46 @@ function convertModel(model) {
103
103
  };
104
104
  }
105
105
 
106
+ // Load a layered JSON model file.
107
+ function loadJson(fileName) {
108
+ try {
109
+ return JSON.parse(fs.readFileSync(path.join(process.cwd(), fileName), 'utf8'));
110
+ } catch {
111
+ return fileName === 'patch.json' ? {} : [];
112
+ }
113
+ }
114
+
115
+ // Deep-merge patch overrides into a model for README documentation. The
116
+ // generated models.json remains API-derived; only the displayed model map uses patches.
117
+ function applyPatch(model, patch) {
118
+ if (!patch) return model;
119
+ const result = { ...model };
120
+ for (const [key, value] of Object.entries(patch)) {
121
+ if (key === 'cost' || key === 'compat' || key === 'thinkingLevelMap') {
122
+ result[key] = { ...(result[key] || {}), ...value };
123
+ } else {
124
+ result[key] = value;
125
+ }
126
+ }
127
+ if (!result.reasoning) {
128
+ delete result.thinkingLevelMap;
129
+ if (result.compat?.thinkingFormat) delete result.compat.thinkingFormat;
130
+ }
131
+ return result;
132
+ }
133
+
134
+ // Merge API models, patches, and custom models in the same order as index.ts.
135
+ function buildModels(baseModels, customModels, patch) {
136
+ const byId = new Map(baseModels.map(model => [model.id, model]));
137
+ for (const [id, entry] of Object.entries(patch)) {
138
+ if (byId.has(id)) byId.set(id, applyPatch(byId.get(id), entry));
139
+ }
140
+ for (const model of customModels) {
141
+ byId.set(model.id, applyPatch(model, patch[model.id]));
142
+ }
143
+ return Array.from(byId.values());
144
+ }
145
+
106
146
  // Generate README model table row
107
147
  function generateReadmeRow(model) {
108
148
  const cost = model.cost || {};
@@ -240,8 +280,10 @@ async function main() {
240
280
  fs.writeFileSync(modelsPath, JSON.stringify(models, null, 2) + '\n');
241
281
  console.log(` Saved ${models.length} models to models.json`);
242
282
 
243
- // Update README
244
- updateReadme(models);
283
+ // Apply layered overrides for documentation: models.json → patch.json → custom-models.json.
284
+ const patch = loadJson('patch.json');
285
+ const customModels = Array.isArray(loadJson('custom-models.json')) ? loadJson('custom-models.json') : [];
286
+ updateReadme(buildModels(models, customModels, patch));
245
287
 
246
288
  console.log('\nDone!');
247
289
  } catch (error) {