@oh-my-pi/pi-ai 13.3.2 → 13.3.4

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@oh-my-pi/pi-ai",
4
- "version": "13.3.2",
4
+ "version": "13.3.4",
5
5
  "description": "Unified LLM API with automatic model discovery and provider configuration",
6
6
  "homepage": "https://github.com/can1357/oh-my-pi",
7
7
  "author": "Can Boluk",
@@ -38,19 +38,19 @@
38
38
  },
39
39
  "dependencies": {
40
40
  "@anthropic-ai/sdk": "^0.78",
41
- "@aws-sdk/client-bedrock-runtime": "^3.995",
41
+ "@aws-sdk/client-bedrock-runtime": "^3.998",
42
42
  "@bufbuild/protobuf": "^2.11",
43
43
  "@connectrpc/connect": "^2.1",
44
44
  "@connectrpc/connect-node": "^2.1",
45
- "@google/genai": "^1.42",
45
+ "@google/genai": "^1.43",
46
46
  "@mistralai/mistralai": "^1.14",
47
- "@oh-my-pi/pi-utils": "13.3.2",
47
+ "@oh-my-pi/pi-utils": "13.3.4",
48
48
  "@sinclair/typebox": "^0.34",
49
49
  "@smithy/node-http-handler": "^4.4",
50
50
  "ajv": "^8.18",
51
51
  "ajv-formats": "^3.0",
52
52
  "chalk": "^5.6",
53
- "openai": "^6.22",
53
+ "openai": "^6.25",
54
54
  "partial-json": "^0.1",
55
55
  "zod": "^4.3",
56
56
  "zod-to-json-schema": "^3.25"
package/src/models.json CHANGED
@@ -2664,6 +2664,26 @@
2664
2664
  "contextWindow": 272000,
2665
2665
  "maxTokens": 128000
2666
2666
  },
2667
+ "gpt-5.3-codex": {
2668
+ "id": "gpt-5.3-codex",
2669
+ "name": "GPT-5.3 Codex",
2670
+ "api": "openai-responses",
2671
+ "provider": "opencode",
2672
+ "baseUrl": "https://opencode.ai/zen/v1",
2673
+ "reasoning": true,
2674
+ "input": [
2675
+ "text",
2676
+ "image"
2677
+ ],
2678
+ "cost": {
2679
+ "input": 1.75,
2680
+ "output": 14,
2681
+ "cacheRead": 0.175,
2682
+ "cacheWrite": 0
2683
+ },
2684
+ "contextWindow": 272000,
2685
+ "maxTokens": 128000
2686
+ },
2667
2687
  "kimi-k2": {
2668
2688
  "id": "kimi-k2",
2669
2689
  "name": "Kimi K2",
@@ -7581,6 +7601,7 @@
7581
7601
  "contextWindow": 196608,
7582
7602
  "maxTokens": 128000,
7583
7603
  "compat": {
7604
+ "supportsStore": false,
7584
7605
  "supportsDeveloperRole": false,
7585
7606
  "thinkingFormat": "zai",
7586
7607
  "reasoningContentField": "reasoning_content"
@@ -7605,6 +7626,7 @@
7605
7626
  "contextWindow": 204800,
7606
7627
  "maxTokens": 131072,
7607
7628
  "compat": {
7629
+ "supportsStore": false,
7608
7630
  "supportsDeveloperRole": false,
7609
7631
  "thinkingFormat": "zai",
7610
7632
  "reasoningContentField": "reasoning_content"
@@ -7653,6 +7675,7 @@
7653
7675
  "contextWindow": 204800,
7654
7676
  "maxTokens": 131072,
7655
7677
  "compat": {
7678
+ "supportsStore": false,
7656
7679
  "supportsDeveloperRole": false,
7657
7680
  "thinkingFormat": "zai",
7658
7681
  "reasoningContentField": "reasoning_content"
@@ -7677,6 +7700,7 @@
7677
7700
  "contextWindow": 204800,
7678
7701
  "maxTokens": 131072,
7679
7702
  "compat": {
7703
+ "supportsStore": false,
7680
7704
  "supportsDeveloperRole": false,
7681
7705
  "thinkingFormat": "zai",
7682
7706
  "reasoningContentField": "reasoning_content"
@@ -7727,6 +7751,7 @@
7727
7751
  "contextWindow": 196608,
7728
7752
  "maxTokens": 128000,
7729
7753
  "compat": {
7754
+ "supportsStore": false,
7730
7755
  "supportsDeveloperRole": false,
7731
7756
  "thinkingFormat": "zai",
7732
7757
  "reasoningContentField": "reasoning_content"
@@ -7751,6 +7776,7 @@
7751
7776
  "contextWindow": 204800,
7752
7777
  "maxTokens": 131072,
7753
7778
  "compat": {
7779
+ "supportsStore": false,
7754
7780
  "supportsDeveloperRole": false,
7755
7781
  "thinkingFormat": "zai",
7756
7782
  "reasoningContentField": "reasoning_content"
@@ -7799,6 +7825,7 @@
7799
7825
  "contextWindow": 204800,
7800
7826
  "maxTokens": 131072,
7801
7827
  "compat": {
7828
+ "supportsStore": false,
7802
7829
  "supportsDeveloperRole": false,
7803
7830
  "thinkingFormat": "zai",
7804
7831
  "reasoningContentField": "reasoning_content"
@@ -7823,6 +7850,7 @@
7823
7850
  "contextWindow": 204800,
7824
7851
  "maxTokens": 131072,
7825
7852
  "compat": {
7853
+ "supportsStore": false,
7826
7854
  "supportsDeveloperRole": false,
7827
7855
  "thinkingFormat": "zai",
7828
7856
  "reasoningContentField": "reasoning_content"
@@ -8105,6 +8133,25 @@
8105
8133
  "contextWindow": 222222,
8106
8134
  "maxTokens": 8888
8107
8135
  },
8136
+ "aion-labs/aion-2.0": {
8137
+ "id": "aion-labs/aion-2.0",
8138
+ "name": "aion-labs/aion-2.0",
8139
+ "api": "openai-completions",
8140
+ "provider": "nanogpt",
8141
+ "baseUrl": "https://nano-gpt.com/api/v1",
8142
+ "reasoning": false,
8143
+ "input": [
8144
+ "text"
8145
+ ],
8146
+ "cost": {
8147
+ "input": 0,
8148
+ "output": 0,
8149
+ "cacheRead": 0,
8150
+ "cacheWrite": 0
8151
+ },
8152
+ "contextWindow": 222222,
8153
+ "maxTokens": 8888
8154
+ },
8108
8155
  "aion-labs/aion-rp-llama-3.1-8b": {
8109
8156
  "id": "aion-labs/aion-rp-llama-3.1-8b",
8110
8157
  "name": "aion-labs/aion-rp-llama-3.1-8b",
@@ -12488,6 +12535,25 @@
12488
12535
  "contextWindow": 222222,
12489
12536
  "maxTokens": 8888
12490
12537
  },
12538
+ "liquid/lfm-2-24b-a2b": {
12539
+ "id": "liquid/lfm-2-24b-a2b",
12540
+ "name": "liquid/lfm-2-24b-a2b",
12541
+ "api": "openai-completions",
12542
+ "provider": "nanogpt",
12543
+ "baseUrl": "https://nano-gpt.com/api/v1",
12544
+ "reasoning": false,
12545
+ "input": [
12546
+ "text"
12547
+ ],
12548
+ "cost": {
12549
+ "input": 0,
12550
+ "output": 0,
12551
+ "cacheRead": 0,
12552
+ "cacheWrite": 0
12553
+ },
12554
+ "contextWindow": 222222,
12555
+ "maxTokens": 8888
12556
+ },
12491
12557
  "Llama-3.3-70B-Anthrobomination": {
12492
12558
  "id": "Llama-3.3-70B-Anthrobomination",
12493
12559
  "name": "Llama-3.3-70B-Anthrobomination",
@@ -15242,6 +15308,25 @@
15242
15308
  "contextWindow": 400000,
15243
15309
  "maxTokens": 128000
15244
15310
  },
15311
+ "openai/gpt-5.3-codex": {
15312
+ "id": "openai/gpt-5.3-codex",
15313
+ "name": "openai/gpt-5.3-codex",
15314
+ "api": "openai-completions",
15315
+ "provider": "nanogpt",
15316
+ "baseUrl": "https://nano-gpt.com/api/v1",
15317
+ "reasoning": false,
15318
+ "input": [
15319
+ "text"
15320
+ ],
15321
+ "cost": {
15322
+ "input": 0,
15323
+ "output": 0,
15324
+ "cacheRead": 0,
15325
+ "cacheWrite": 0
15326
+ },
15327
+ "contextWindow": 272000,
15328
+ "maxTokens": 8888
15329
+ },
15245
15330
  "openai/gpt-oss-120b": {
15246
15331
  "id": "openai/gpt-oss-120b",
15247
15332
  "name": "GPT OSS 120B",
@@ -16237,6 +16322,158 @@
16237
16322
  "contextWindow": 222222,
16238
16323
  "maxTokens": 8888
16239
16324
  },
16325
+ "qwen3.5-122b-a10b": {
16326
+ "id": "qwen3.5-122b-a10b",
16327
+ "name": "qwen3.5-122b-a10b",
16328
+ "api": "openai-completions",
16329
+ "provider": "nanogpt",
16330
+ "baseUrl": "https://nano-gpt.com/api/v1",
16331
+ "reasoning": false,
16332
+ "input": [
16333
+ "text"
16334
+ ],
16335
+ "cost": {
16336
+ "input": 0,
16337
+ "output": 0,
16338
+ "cacheRead": 0,
16339
+ "cacheWrite": 0
16340
+ },
16341
+ "contextWindow": 222222,
16342
+ "maxTokens": 8888
16343
+ },
16344
+ "qwen3.5-122b-a10b:thinking": {
16345
+ "id": "qwen3.5-122b-a10b:thinking",
16346
+ "name": "qwen3.5-122b-a10b:thinking",
16347
+ "api": "openai-completions",
16348
+ "provider": "nanogpt",
16349
+ "baseUrl": "https://nano-gpt.com/api/v1",
16350
+ "reasoning": false,
16351
+ "input": [
16352
+ "text"
16353
+ ],
16354
+ "cost": {
16355
+ "input": 0,
16356
+ "output": 0,
16357
+ "cacheRead": 0,
16358
+ "cacheWrite": 0
16359
+ },
16360
+ "contextWindow": 222222,
16361
+ "maxTokens": 8888
16362
+ },
16363
+ "qwen3.5-27b": {
16364
+ "id": "qwen3.5-27b",
16365
+ "name": "qwen3.5-27b",
16366
+ "api": "openai-completions",
16367
+ "provider": "nanogpt",
16368
+ "baseUrl": "https://nano-gpt.com/api/v1",
16369
+ "reasoning": false,
16370
+ "input": [
16371
+ "text"
16372
+ ],
16373
+ "cost": {
16374
+ "input": 0,
16375
+ "output": 0,
16376
+ "cacheRead": 0,
16377
+ "cacheWrite": 0
16378
+ },
16379
+ "contextWindow": 222222,
16380
+ "maxTokens": 8888
16381
+ },
16382
+ "qwen3.5-27b:thinking": {
16383
+ "id": "qwen3.5-27b:thinking",
16384
+ "name": "qwen3.5-27b:thinking",
16385
+ "api": "openai-completions",
16386
+ "provider": "nanogpt",
16387
+ "baseUrl": "https://nano-gpt.com/api/v1",
16388
+ "reasoning": false,
16389
+ "input": [
16390
+ "text"
16391
+ ],
16392
+ "cost": {
16393
+ "input": 0,
16394
+ "output": 0,
16395
+ "cacheRead": 0,
16396
+ "cacheWrite": 0
16397
+ },
16398
+ "contextWindow": 222222,
16399
+ "maxTokens": 8888
16400
+ },
16401
+ "qwen3.5-35b-a3b": {
16402
+ "id": "qwen3.5-35b-a3b",
16403
+ "name": "qwen3.5-35b-a3b",
16404
+ "api": "openai-completions",
16405
+ "provider": "nanogpt",
16406
+ "baseUrl": "https://nano-gpt.com/api/v1",
16407
+ "reasoning": false,
16408
+ "input": [
16409
+ "text"
16410
+ ],
16411
+ "cost": {
16412
+ "input": 0,
16413
+ "output": 0,
16414
+ "cacheRead": 0,
16415
+ "cacheWrite": 0
16416
+ },
16417
+ "contextWindow": 222222,
16418
+ "maxTokens": 8888
16419
+ },
16420
+ "qwen3.5-35b-a3b:thinking": {
16421
+ "id": "qwen3.5-35b-a3b:thinking",
16422
+ "name": "qwen3.5-35b-a3b:thinking",
16423
+ "api": "openai-completions",
16424
+ "provider": "nanogpt",
16425
+ "baseUrl": "https://nano-gpt.com/api/v1",
16426
+ "reasoning": false,
16427
+ "input": [
16428
+ "text"
16429
+ ],
16430
+ "cost": {
16431
+ "input": 0,
16432
+ "output": 0,
16433
+ "cacheRead": 0,
16434
+ "cacheWrite": 0
16435
+ },
16436
+ "contextWindow": 222222,
16437
+ "maxTokens": 8888
16438
+ },
16439
+ "qwen3.5-flash": {
16440
+ "id": "qwen3.5-flash",
16441
+ "name": "qwen3.5-flash",
16442
+ "api": "openai-completions",
16443
+ "provider": "nanogpt",
16444
+ "baseUrl": "https://nano-gpt.com/api/v1",
16445
+ "reasoning": false,
16446
+ "input": [
16447
+ "text"
16448
+ ],
16449
+ "cost": {
16450
+ "input": 0,
16451
+ "output": 0,
16452
+ "cacheRead": 0,
16453
+ "cacheWrite": 0
16454
+ },
16455
+ "contextWindow": 222222,
16456
+ "maxTokens": 8888
16457
+ },
16458
+ "qwen3.5-flash:thinking": {
16459
+ "id": "qwen3.5-flash:thinking",
16460
+ "name": "qwen3.5-flash:thinking",
16461
+ "api": "openai-completions",
16462
+ "provider": "nanogpt",
16463
+ "baseUrl": "https://nano-gpt.com/api/v1",
16464
+ "reasoning": false,
16465
+ "input": [
16466
+ "text"
16467
+ ],
16468
+ "cost": {
16469
+ "input": 0,
16470
+ "output": 0,
16471
+ "cacheRead": 0,
16472
+ "cacheWrite": 0
16473
+ },
16474
+ "contextWindow": 222222,
16475
+ "maxTokens": 8888
16476
+ },
16240
16477
  "qwq-32b": {
16241
16478
  "id": "qwq-32b",
16242
16479
  "name": "qwq-32b",
@@ -19332,13 +19569,13 @@
19332
19569
  "text"
19333
19570
  ],
19334
19571
  "cost": {
19335
- "input": 0.26,
19336
- "output": 0.38,
19572
+ "input": 0.25,
19573
+ "output": 0.39999999999999997,
19337
19574
  "cacheRead": 0.13,
19338
19575
  "cacheWrite": 0
19339
19576
  },
19340
19577
  "contextWindow": 163840,
19341
- "maxTokens": 8888
19578
+ "maxTokens": 163840
19342
19579
  },
19343
19580
  "deepseek/deepseek-v3.2-exp": {
19344
19581
  "id": "deepseek/deepseek-v3.2-exp",
@@ -19599,6 +19836,26 @@
19599
19836
  "contextWindow": 1048576,
19600
19837
  "maxTokens": 65536
19601
19838
  },
19839
+ "google/gemini-3.1-pro-preview-customtools": {
19840
+ "id": "google/gemini-3.1-pro-preview-customtools",
19841
+ "name": "Google: Gemini 3.1 Pro Preview Custom Tools",
19842
+ "api": "openai-completions",
19843
+ "provider": "openrouter",
19844
+ "baseUrl": "https://openrouter.ai/api/v1",
19845
+ "reasoning": true,
19846
+ "input": [
19847
+ "text",
19848
+ "image"
19849
+ ],
19850
+ "cost": {
19851
+ "input": 2,
19852
+ "output": 12,
19853
+ "cacheRead": 0.19999999999999998,
19854
+ "cacheWrite": 0.375
19855
+ },
19856
+ "contextWindow": 1048576,
19857
+ "maxTokens": 65536
19858
+ },
19602
19859
  "google/gemma-3-27b-it": {
19603
19860
  "id": "google/gemma-3-27b-it",
19604
19861
  "name": "Gemma-3-27B-IT",
@@ -19696,6 +19953,25 @@
19696
19953
  "contextWindow": 256000,
19697
19954
  "maxTokens": 128000
19698
19955
  },
19956
+ "meituan/longcat-flash-chat": {
19957
+ "id": "meituan/longcat-flash-chat",
19958
+ "name": "Meituan: LongCat Flash Chat",
19959
+ "api": "openai-completions",
19960
+ "provider": "openrouter",
19961
+ "baseUrl": "https://openrouter.ai/api/v1",
19962
+ "reasoning": false,
19963
+ "input": [
19964
+ "text"
19965
+ ],
19966
+ "cost": {
19967
+ "input": 0.19999999999999998,
19968
+ "output": 0.7999999999999999,
19969
+ "cacheRead": 0.19999999999999998,
19970
+ "cacheWrite": 0
19971
+ },
19972
+ "contextWindow": 131072,
19973
+ "maxTokens": 32768
19974
+ },
19699
19975
  "meta-llama/llama-3-8b-instruct": {
19700
19976
  "id": "meta-llama/llama-3-8b-instruct",
19701
19977
  "name": "Meta: Llama 3 8B Instruct",
@@ -21371,6 +21647,26 @@
21371
21647
  "contextWindow": 400000,
21372
21648
  "maxTokens": 128000
21373
21649
  },
21650
+ "openai/gpt-5.3-codex": {
21651
+ "id": "openai/gpt-5.3-codex",
21652
+ "name": "OpenAI: GPT-5.3-Codex",
21653
+ "api": "openai-completions",
21654
+ "provider": "openrouter",
21655
+ "baseUrl": "https://openrouter.ai/api/v1",
21656
+ "reasoning": true,
21657
+ "input": [
21658
+ "text",
21659
+ "image"
21660
+ ],
21661
+ "cost": {
21662
+ "input": 1.75,
21663
+ "output": 14,
21664
+ "cacheRead": 0.175,
21665
+ "cacheWrite": 0
21666
+ },
21667
+ "contextWindow": 272000,
21668
+ "maxTokens": 128000
21669
+ },
21374
21670
  "openai/gpt-oss-120b": {
21375
21671
  "id": "openai/gpt-oss-120b",
21376
21672
  "name": "GPT OSS 120B",
@@ -22471,6 +22767,66 @@
22471
22767
  "contextWindow": 131072,
22472
22768
  "maxTokens": 32768
22473
22769
  },
22770
+ "qwen/qwen3.5-122b-a10b": {
22771
+ "id": "qwen/qwen3.5-122b-a10b",
22772
+ "name": "Qwen: Qwen3.5-122B-A10B",
22773
+ "api": "openai-completions",
22774
+ "provider": "openrouter",
22775
+ "baseUrl": "https://openrouter.ai/api/v1",
22776
+ "reasoning": true,
22777
+ "input": [
22778
+ "text",
22779
+ "image"
22780
+ ],
22781
+ "cost": {
22782
+ "input": 0.39999999999999997,
22783
+ "output": 3.1999999999999997,
22784
+ "cacheRead": 0,
22785
+ "cacheWrite": 0
22786
+ },
22787
+ "contextWindow": 262144,
22788
+ "maxTokens": 65536
22789
+ },
22790
+ "qwen/qwen3.5-27b": {
22791
+ "id": "qwen/qwen3.5-27b",
22792
+ "name": "Qwen: Qwen3.5-27B",
22793
+ "api": "openai-completions",
22794
+ "provider": "openrouter",
22795
+ "baseUrl": "https://openrouter.ai/api/v1",
22796
+ "reasoning": true,
22797
+ "input": [
22798
+ "text",
22799
+ "image"
22800
+ ],
22801
+ "cost": {
22802
+ "input": 0.3,
22803
+ "output": 2.4,
22804
+ "cacheRead": 0,
22805
+ "cacheWrite": 0
22806
+ },
22807
+ "contextWindow": 262144,
22808
+ "maxTokens": 65536
22809
+ },
22810
+ "qwen/qwen3.5-35b-a3b": {
22811
+ "id": "qwen/qwen3.5-35b-a3b",
22812
+ "name": "Qwen: Qwen3.5-35B-A3B",
22813
+ "api": "openai-completions",
22814
+ "provider": "openrouter",
22815
+ "baseUrl": "https://openrouter.ai/api/v1",
22816
+ "reasoning": true,
22817
+ "input": [
22818
+ "text",
22819
+ "image"
22820
+ ],
22821
+ "cost": {
22822
+ "input": 0.25,
22823
+ "output": 2,
22824
+ "cacheRead": 0,
22825
+ "cacheWrite": 0
22826
+ },
22827
+ "contextWindow": 262144,
22828
+ "maxTokens": 65536
22829
+ },
22474
22830
  "qwen/qwen3.5-397b-a17b": {
22475
22831
  "id": "qwen/qwen3.5-397b-a17b",
22476
22832
  "name": "Qwen: Qwen3.5 397B A17B",
@@ -22483,14 +22839,34 @@
22483
22839
  "image"
22484
22840
  ],
22485
22841
  "cost": {
22486
- "input": 0.15,
22487
- "output": 1,
22488
- "cacheRead": 0.15,
22842
+ "input": 0.55,
22843
+ "output": 3.5,
22844
+ "cacheRead": 0.55,
22489
22845
  "cacheWrite": 0
22490
22846
  },
22491
22847
  "contextWindow": 262144,
22492
22848
  "maxTokens": 65536
22493
22849
  },
22850
+ "qwen/qwen3.5-flash-02-23": {
22851
+ "id": "qwen/qwen3.5-flash-02-23",
22852
+ "name": "Qwen: Qwen3.5-Flash",
22853
+ "api": "openai-completions",
22854
+ "provider": "openrouter",
22855
+ "baseUrl": "https://openrouter.ai/api/v1",
22856
+ "reasoning": true,
22857
+ "input": [
22858
+ "text",
22859
+ "image"
22860
+ ],
22861
+ "cost": {
22862
+ "input": 0.09999999999999999,
22863
+ "output": 0.39999999999999997,
22864
+ "cacheRead": 0,
22865
+ "cacheWrite": 0
22866
+ },
22867
+ "contextWindow": 1000000,
22868
+ "maxTokens": 65536
22869
+ },
22494
22870
  "qwen/qwen3.5-plus-02-15": {
22495
22871
  "id": "qwen/qwen3.5-plus-02-15",
22496
22872
  "name": "Qwen: Qwen3.5 Plus 2026-02-15",
@@ -23065,13 +23441,13 @@
23065
23441
  "text"
23066
23442
  ],
23067
23443
  "cost": {
23068
- "input": 0.38,
23069
- "output": 1.7,
23070
- "cacheRead": 0.19,
23444
+ "input": 0.3,
23445
+ "output": 1.4,
23446
+ "cacheRead": 0.15,
23071
23447
  "cacheWrite": 0
23072
23448
  },
23073
23449
  "contextWindow": 202752,
23074
- "maxTokens": 65535
23450
+ "maxTokens": 8888
23075
23451
  },
23076
23452
  "z-ai/glm-4.7-flash": {
23077
23453
  "id": "z-ai/glm-4.7-flash",
@@ -23105,7 +23481,7 @@
23105
23481
  "cost": {
23106
23482
  "input": 0.95,
23107
23483
  "output": 2.5500000000000003,
23108
- "cacheRead": 0,
23484
+ "cacheRead": 0.19999999999999998,
23109
23485
  "cacheWrite": 0
23110
23486
  },
23111
23487
  "contextWindow": 204800,
@@ -25863,6 +26239,25 @@
25863
26239
  "contextWindow": 196608,
25864
26240
  "maxTokens": 8192
25865
26241
  },
26242
+ "hf:MiniMaxAI/MiniMax-M2.5": {
26243
+ "id": "hf:MiniMaxAI/MiniMax-M2.5",
26244
+ "name": "MiniMaxAI/MiniMax-M2.5",
26245
+ "api": "openai-completions",
26246
+ "provider": "synthetic",
26247
+ "baseUrl": "https://api.synthetic.new/openai/v1",
26248
+ "reasoning": false,
26249
+ "input": [
26250
+ "text"
26251
+ ],
26252
+ "cost": {
26253
+ "input": 0,
26254
+ "output": 0,
26255
+ "cacheRead": 0,
26256
+ "cacheWrite": 0
26257
+ },
26258
+ "contextWindow": 191488,
26259
+ "maxTokens": 8192
26260
+ },
25866
26261
  "hf:moonshotai/Kimi-K2-Instruct-0905": {
25867
26262
  "id": "hf:moonshotai/Kimi-K2-Instruct-0905",
25868
26263
  "name": "moonshotai/Kimi-K2-Instruct-0905",
@@ -26464,6 +26859,28 @@
26464
26859
  "supportsUsageInStreaming": false
26465
26860
  }
26466
26861
  },
26862
+ "nvidia-nemotron-3-nano-30b-a3b": {
26863
+ "id": "nvidia-nemotron-3-nano-30b-a3b",
26864
+ "name": "nvidia-nemotron-3-nano-30b-a3b",
26865
+ "api": "openai-completions",
26866
+ "provider": "venice",
26867
+ "baseUrl": "https://api.venice.ai/api/v1",
26868
+ "reasoning": false,
26869
+ "input": [
26870
+ "text"
26871
+ ],
26872
+ "cost": {
26873
+ "input": 0,
26874
+ "output": 0,
26875
+ "cacheRead": 0,
26876
+ "cacheWrite": 0
26877
+ },
26878
+ "contextWindow": 222222,
26879
+ "maxTokens": 8888,
26880
+ "compat": {
26881
+ "supportsUsageInStreaming": false
26882
+ }
26883
+ },
26467
26884
  "olafangensan-glm-4.7-flash-heretic": {
26468
26885
  "id": "olafangensan-glm-4.7-flash-heretic",
26469
26886
  "name": "GLM 4.7 Flash Heretic",
@@ -26531,6 +26948,28 @@
26531
26948
  "supportsUsageInStreaming": false
26532
26949
  }
26533
26950
  },
26951
+ "openai-gpt-53-codex": {
26952
+ "id": "openai-gpt-53-codex",
26953
+ "name": "openai-gpt-53-codex",
26954
+ "api": "openai-completions",
26955
+ "provider": "venice",
26956
+ "baseUrl": "https://api.venice.ai/api/v1",
26957
+ "reasoning": false,
26958
+ "input": [
26959
+ "text"
26960
+ ],
26961
+ "cost": {
26962
+ "input": 0,
26963
+ "output": 0,
26964
+ "cacheRead": 0,
26965
+ "cacheWrite": 0
26966
+ },
26967
+ "contextWindow": 272000,
26968
+ "maxTokens": 8888,
26969
+ "compat": {
26970
+ "supportsUsageInStreaming": false
26971
+ }
26972
+ },
26534
26973
  "openai-gpt-oss-120b": {
26535
26974
  "id": "openai-gpt-oss-120b",
26536
26975
  "name": "OpenAI GPT OSS 120B",
@@ -26641,6 +27080,28 @@
26641
27080
  "supportsUsageInStreaming": false
26642
27081
  }
26643
27082
  },
27083
+ "qwen3-coder-480b-a35b-instruct-turbo": {
27084
+ "id": "qwen3-coder-480b-a35b-instruct-turbo",
27085
+ "name": "qwen3-coder-480b-a35b-instruct-turbo",
27086
+ "api": "openai-completions",
27087
+ "provider": "venice",
27088
+ "baseUrl": "https://api.venice.ai/api/v1",
27089
+ "reasoning": false,
27090
+ "input": [
27091
+ "text"
27092
+ ],
27093
+ "cost": {
27094
+ "input": 0,
27095
+ "output": 0,
27096
+ "cacheRead": 0,
27097
+ "cacheWrite": 0
27098
+ },
27099
+ "contextWindow": 222222,
27100
+ "maxTokens": 8888,
27101
+ "compat": {
27102
+ "supportsUsageInStreaming": false
27103
+ }
27104
+ },
26644
27105
  "qwen3-next-80b": {
26645
27106
  "id": "qwen3-next-80b",
26646
27107
  "name": "Qwen 3 Next 80b",
@@ -28462,6 +28923,25 @@
28462
28923
  "contextWindow": 272000,
28463
28924
  "maxTokens": 64000
28464
28925
  },
28926
+ "gpt-5.3-codex-spark-preview": {
28927
+ "id": "gpt-5.3-codex-spark-preview",
28928
+ "name": "GPT-5.3 Codex Spark",
28929
+ "api": "cursor-agent",
28930
+ "provider": "cursor",
28931
+ "baseUrl": "https://api2.cursor.sh",
28932
+ "reasoning": false,
28933
+ "input": [
28934
+ "text"
28935
+ ],
28936
+ "cost": {
28937
+ "input": 0,
28938
+ "output": 0,
28939
+ "cacheRead": 0,
28940
+ "cacheWrite": 0
28941
+ },
28942
+ "contextWindow": 200000,
28943
+ "maxTokens": 64000
28944
+ },
28465
28945
  "gpt-5.3-codex-xhigh": {
28466
28946
  "id": "gpt-5.3-codex-xhigh",
28467
28947
  "name": "GPT-5.3 Codex Extra High",
@@ -1670,6 +1670,7 @@ const MODELS_DEV_PROVIDER_DESCRIPTORS_CODING_PLANS: readonly ModelsDevProviderDe
1670
1670
  // --- MiniMax Coding Plan ---
1671
1671
  openAiCompletionsDescriptor("minimax-coding-plan", "minimax-code", "https://api.minimax.io/v1", {
1672
1672
  compat: {
1673
+ supportsStore: false,
1673
1674
  supportsDeveloperRole: false,
1674
1675
  thinkingFormat: "zai",
1675
1676
  reasoningContentField: "reasoning_content",
@@ -1677,6 +1678,7 @@ const MODELS_DEV_PROVIDER_DESCRIPTORS_CODING_PLANS: readonly ModelsDevProviderDe
1677
1678
  }),
1678
1679
  openAiCompletionsDescriptor("minimax-cn-coding-plan", "minimax-code-cn", "https://api.minimaxi.com/v1", {
1679
1680
  compat: {
1681
+ supportsStore: false,
1680
1682
  supportsDeveloperRole: false,
1681
1683
  thinkingFormat: "zai",
1682
1684
  reasoningContentField: "reasoning_content",
@@ -296,12 +296,18 @@ const PROVIDER_BASE_DELAY_MS = 2000;
296
296
  * Includes malformed JSON stream-envelope parse errors seen from some
297
297
  * Anthropic-compatible proxy endpoints.
298
298
  */
299
+ /** Transient stream corruption errors where the response was truncated mid-JSON. */
300
+ function isTransientStreamParseError(error: unknown): boolean {
301
+ if (!(error instanceof Error)) return false;
302
+ return /json parse error|unterminated string|unexpected end of json input/i.test(error.message);
303
+ }
304
+
299
305
  export function isProviderRetryableError(error: unknown): boolean {
300
306
  if (!(error instanceof Error)) return false;
301
307
  const msg = error.message;
302
308
  return (
303
309
  /rate.?limit|too many requests|overloaded|service.?unavailable|1302/i.test(msg) ||
304
- /json parse error|unterminated string|unexpected end of json input/i.test(msg)
310
+ isTransientStreamParseError(error)
305
311
  );
306
312
  }
307
313
 
@@ -371,9 +377,9 @@ export const streamAnthropic: StreamFunction<"anthropic-messages"> = (
371
377
  type Block = (ThinkingContent | TextContent | (ToolCall & { partialJson: string })) & { index: number };
372
378
  const blocks = output.content as Block[];
373
379
  stream.push({ type: "start", partial: output });
374
- // Retry loop for rate-limit errors from proxies (e.g. z.ai) that the SDK doesn't handle.
375
- // These errors surface when iterating the stream, so we retry the full stream creation.
376
- // Only retry if no content blocks have been emitted yet (safe to restart).
380
+ // Retry loop for transient errors from the stream.
381
+ // Rate-limit/overload: only before content starts (safe to restart).
382
+ // Truncated JSON: also after content starts (partial response is unusable).
377
383
  let providerRetryAttempt = 0;
378
384
  let started = false;
379
385
  do {
@@ -542,12 +548,15 @@ export const streamAnthropic: StreamFunction<"anthropic-messages"> = (
542
548
  }
543
549
  break; // Stream completed successfully
544
550
  } catch (streamError) {
545
- // Only retry if: not aborted, no content emitted yet, retries left, and error is retryable
551
+ // Transient stream parse errors (truncated JSON) are retryable even after content
552
+ // has started streaming, since the partial response is unusable anyway.
553
+ // Rate-limit/overload errors are only retried before content starts.
554
+ const isTransient = isTransientStreamParseError(streamError);
546
555
  if (
547
556
  options?.signal?.aborted ||
548
- firstTokenTime !== undefined ||
549
557
  providerRetryAttempt >= PROVIDER_MAX_RETRIES ||
550
- !isProviderRetryableError(streamError)
558
+ (!isTransient && firstTokenTime !== undefined) ||
559
+ (!isTransient && !isProviderRetryableError(streamError))
551
560
  ) {
552
561
  throw streamError;
553
562
  }
@@ -557,6 +566,8 @@ export const streamAnthropic: StreamFunction<"anthropic-messages"> = (
557
566
  // Reset output state for clean retry
558
567
  output.content.length = 0;
559
568
  output.stopReason = "stop";
569
+ firstTokenTime = undefined;
570
+ started = false;
560
571
  }
561
572
  } while (!started);
562
573
 
@@ -37,6 +37,7 @@ import {
37
37
  AssistantMessageSchema,
38
38
  BackgroundShellSpawnResultSchema,
39
39
  ClientHeartbeatSchema,
40
+ ComputerUseResultSchema,
40
41
  ConversationActionSchema,
41
42
  type ConversationStateStructure,
42
43
  ConversationStateStructureSchema,
@@ -70,6 +71,7 @@ import {
70
71
  GrepUnionResultSchema,
71
72
  KvClientMessageSchema,
72
73
  type KvServerMessage,
74
+ ListMcpResourcesExecResultSchema,
73
75
  type LsDirectoryTreeNode,
74
76
  type LsDirectoryTreeNode_File,
75
77
  LsDirectoryTreeNode_FileSchema,
@@ -88,9 +90,11 @@ import {
88
90
  McpToolResultContentItemSchema,
89
91
  ModelDetailsSchema,
90
92
  ReadErrorSchema,
93
+ ReadMcpResourceExecResultSchema,
91
94
  ReadRejectedSchema,
92
95
  ReadResultSchema,
93
96
  ReadSuccessSchema,
97
+ RecordScreenResultSchema,
94
98
  RequestContextResultSchema,
95
99
  RequestContextSchema,
96
100
  RequestContextSuccessSchema,
@@ -965,6 +969,26 @@ async function handleExecServerMessage(
965
969
  sendExecClientMessage(h2Request, execMsg, "mcpResult", execResult);
966
970
  return;
967
971
  }
972
+ case "listMcpResourcesExecArgs": {
973
+ const execResult = create(ListMcpResourcesExecResultSchema, {});
974
+ sendExecClientMessage(h2Request, execMsg, "listMcpResourcesExecResult", execResult);
975
+ return;
976
+ }
977
+ case "readMcpResourceExecArgs": {
978
+ const execResult = create(ReadMcpResourceExecResultSchema, {});
979
+ sendExecClientMessage(h2Request, execMsg, "readMcpResourceExecResult", execResult);
980
+ return;
981
+ }
982
+ case "recordScreenArgs": {
983
+ const execResult = create(RecordScreenResultSchema, {});
984
+ sendExecClientMessage(h2Request, execMsg, "recordScreenResult", execResult);
985
+ return;
986
+ }
987
+ case "computerUseArgs": {
988
+ const execResult = create(ComputerUseResultSchema, {});
989
+ sendExecClientMessage(h2Request, execMsg, "computerUseResult", execResult);
990
+ return;
991
+ }
968
992
  default:
969
993
  log("warn", "unhandledExecMessage", { execCase });
970
994
  }