@juspay/neurolink 12.25.0 → 12.25.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +3 -3
- package/dist/adapters/providerImageAdapter.js +2 -4
- package/dist/browser/neurolink.min.js +67 -67
- package/dist/cli/utils/interactiveSetup.js +1 -1
- package/dist/constants/contextWindows.js +0 -5
- package/dist/constants/enums.d.ts +3 -1
- package/dist/constants/enums.js +2 -0
- package/dist/models/manifests/deepseek.js +3 -3
- package/dist/providers/catalog/deepseek.json +28 -14
- package/dist/providers/catalog/huggingface.json +85 -85
- package/dist/server/routes/claudeProxyRoutes.js +9 -4
- package/dist/types/proxy.d.ts +4 -2
- package/docs-site/static/search-index.json +19 -19
- package/package.json +1 -1
|
@@ -207,7 +207,7 @@ export const PROVIDER_CONFIGS = [
|
|
|
207
207
|
{
|
|
208
208
|
id: AIProviderName.DEEPSEEK,
|
|
209
209
|
name: "DeepSeek",
|
|
210
|
-
description: "Cost-efficient frontier models (deepseek-
|
|
210
|
+
description: "Cost-efficient frontier models (deepseek-flash V4.1, deepseek-v4-pro)",
|
|
211
211
|
envVars: [
|
|
212
212
|
{
|
|
213
213
|
key: "DEEPSEEK_API_KEY",
|
|
@@ -46,11 +46,6 @@ export const DEFAULT_OUTPUT_RESERVE_RATIO = 0.35;
|
|
|
46
46
|
* The "_default" key is the fallback for unknown models within a provider.
|
|
47
47
|
*/
|
|
48
48
|
export const MODEL_CONTEXT_WINDOWS = {
|
|
49
|
-
deepseek: {
|
|
50
|
-
_default: 64_000,
|
|
51
|
-
"deepseek-chat": 64_000,
|
|
52
|
-
"deepseek-reasoner": 64_000,
|
|
53
|
-
},
|
|
54
49
|
"nvidia-nim": {
|
|
55
50
|
_default: 128_000,
|
|
56
51
|
"meta/llama-3.3-70b-instruct": 128_000,
|
|
@@ -796,7 +796,9 @@ export declare enum CloudflareModels {
|
|
|
796
796
|
}
|
|
797
797
|
export declare enum DeepSeekModels {
|
|
798
798
|
DEEPSEEK_CHAT = "deepseek-chat",
|
|
799
|
-
DEEPSEEK_REASONER = "deepseek-reasoner"
|
|
799
|
+
DEEPSEEK_REASONER = "deepseek-reasoner",
|
|
800
|
+
DEEPSEEK_FLASH = "deepseek-flash",
|
|
801
|
+
DEEPSEEK_V4_PRO = "deepseek-v4-pro"
|
|
800
802
|
}
|
|
801
803
|
export declare enum FireworksModels {
|
|
802
804
|
KIMI_K2P6 = "accounts/fireworks/models/kimi-k2p6",
|
package/dist/constants/enums.js
CHANGED
|
@@ -1029,6 +1029,8 @@ export var DeepSeekModels;
|
|
|
1029
1029
|
(function (DeepSeekModels) {
|
|
1030
1030
|
DeepSeekModels["DEEPSEEK_CHAT"] = "deepseek-chat";
|
|
1031
1031
|
DeepSeekModels["DEEPSEEK_REASONER"] = "deepseek-reasoner";
|
|
1032
|
+
DeepSeekModels["DEEPSEEK_FLASH"] = "deepseek-flash";
|
|
1033
|
+
DeepSeekModels["DEEPSEEK_V4_PRO"] = "deepseek-v4-pro";
|
|
1032
1034
|
})(DeepSeekModels || (DeepSeekModels = {}));
|
|
1033
1035
|
export var FireworksModels;
|
|
1034
1036
|
(function (FireworksModels) {
|
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
* metadata consolidation plan.
|
|
6
6
|
*/
|
|
7
7
|
export const deepseekManifest = {
|
|
8
|
-
defaultContextWindow:
|
|
8
|
+
defaultContextWindow: 1048576,
|
|
9
9
|
models: {
|
|
10
10
|
_default: {
|
|
11
11
|
aliases: [],
|
|
12
|
-
contextWindow:
|
|
13
|
-
maxOutputTokens:
|
|
12
|
+
contextWindow: 1048576,
|
|
13
|
+
maxOutputTokens: 393216,
|
|
14
14
|
vision: false,
|
|
15
15
|
functionCalling: false,
|
|
16
16
|
},
|
|
@@ -10,23 +10,37 @@
|
|
|
10
10
|
},
|
|
11
11
|
"models": {
|
|
12
12
|
"default": "deepseek-chat",
|
|
13
|
-
"fallbacks": ["deepseek-chat", "deepseek-reasoner"],
|
|
14
|
-
"defaultContextWindow":
|
|
15
|
-
"defaultMaxOutputTokens":
|
|
13
|
+
"fallbacks": ["deepseek-chat", "deepseek-reasoner", "deepseek-v4-pro"],
|
|
14
|
+
"defaultContextWindow": 1048576,
|
|
15
|
+
"defaultMaxOutputTokens": 393216,
|
|
16
16
|
"catalog": {
|
|
17
17
|
"deepseek-chat": {
|
|
18
|
-
"contextWindow":
|
|
19
|
-
"maxOutputTokens":
|
|
20
|
-
"vision":
|
|
18
|
+
"contextWindow": 1048576,
|
|
19
|
+
"maxOutputTokens": 393216,
|
|
20
|
+
"vision": true,
|
|
21
21
|
"status": "production",
|
|
22
|
-
"description": "
|
|
22
|
+
"description": "Alias of deepseek-flash with thinking off (DeepSeek-V4.1-Flash)"
|
|
23
23
|
},
|
|
24
24
|
"deepseek-reasoner": {
|
|
25
|
-
"contextWindow":
|
|
26
|
-
"maxOutputTokens":
|
|
25
|
+
"contextWindow": 1048576,
|
|
26
|
+
"maxOutputTokens": 393216,
|
|
27
|
+
"vision": true,
|
|
28
|
+
"status": "production",
|
|
29
|
+
"description": "Alias of deepseek-flash with thinking on (DeepSeek-V4.1-Flash)"
|
|
30
|
+
},
|
|
31
|
+
"deepseek-flash": {
|
|
32
|
+
"contextWindow": 1048576,
|
|
33
|
+
"maxOutputTokens": 393216,
|
|
34
|
+
"vision": true,
|
|
35
|
+
"status": "production",
|
|
36
|
+
"description": "DeepSeek-V4.1-Flash — thinking on by default, image input"
|
|
37
|
+
},
|
|
38
|
+
"deepseek-v4-pro": {
|
|
39
|
+
"contextWindow": 1048576,
|
|
40
|
+
"maxOutputTokens": 393216,
|
|
27
41
|
"vision": false,
|
|
28
42
|
"status": "production",
|
|
29
|
-
"description": "DeepSeek-
|
|
43
|
+
"description": "DeepSeek-V4-Pro-0813 — thinking on by default, text only"
|
|
30
44
|
}
|
|
31
45
|
}
|
|
32
46
|
},
|
|
@@ -54,9 +68,9 @@
|
|
|
54
68
|
"message": "DeepSeek account has insufficient balance. Top up at https://platform.deepseek.com/usage"
|
|
55
69
|
},
|
|
56
70
|
{
|
|
57
|
-
"pattern": "model_not_found",
|
|
71
|
+
"pattern": "supported API model names|model_not_found",
|
|
58
72
|
"class": "invalid-model",
|
|
59
|
-
"message": "DeepSeek model '{model}' not found. Use 'deepseek-
|
|
73
|
+
"message": "DeepSeek model '{model}' not found. Use 'deepseek-flash' or 'deepseek-v4-pro'."
|
|
60
74
|
}
|
|
61
75
|
],
|
|
62
76
|
"quirks": {
|
|
@@ -75,8 +89,8 @@
|
|
|
75
89
|
},
|
|
76
90
|
"evidence": {
|
|
77
91
|
"rosterVerified": {
|
|
78
|
-
"date": "2026-09-
|
|
79
|
-
"method": "
|
|
92
|
+
"date": "2026-09-24",
|
|
93
|
+
"method": "Live against api.deepseek.com on 2026-09-24. GET /models lists only deepseek-flash and deepseek-v4-pro, with context_window 1048576 and max_output_tokens 393216 (the pricing page's 1M / 384K). deepseek-chat and deepseek-reasoner still answer 200 but report model deepseek-flash — deepseek-chat without reasoning_content, deepseek-reasoner with it — so both stay production as aliases rather than being marked retired. Vision was probed with a solid-blue PNG: deepseek-flash, deepseek-chat and deepseek-reasoner all named the colour; deepseek-v4-pro answered 200 but described a scene that was not in the image, so it keeps vision false, matching the pricing page. An unknown model id returns 400 'The supported API model names are …' with code invalid_request_error — never 'model_not_found' — so the invalid-model rule now matches that text. tools plus response_format json_object in one request returned 200 with tool_calls, confirming structuredOutputWithTools. billingPolicy is not re-verified."
|
|
80
94
|
},
|
|
81
95
|
"liveMatrix": null,
|
|
82
96
|
"addedInPR": "TBD — integration-tested in a worktree before a PR was opened"
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"testModel": "meta-llama/Llama-3.1-8B-Instruct",
|
|
18
18
|
"topModels": [
|
|
19
19
|
"meta-llama/Llama-3.3-70B-Instruct",
|
|
20
|
-
"
|
|
20
|
+
"zai-org/GLM-5",
|
|
21
21
|
"deepseek-ai/DeepSeek-R1",
|
|
22
22
|
"Qwen/Qwen2.5-72B-Instruct",
|
|
23
23
|
"microsoft/phi-4",
|
|
@@ -34,20 +34,20 @@
|
|
|
34
34
|
},
|
|
35
35
|
"meta-llama/Llama-3.2-1B": {
|
|
36
36
|
"vision": false,
|
|
37
|
-
"status": "
|
|
38
|
-
"description": "
|
|
37
|
+
"status": "retired",
|
|
38
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
39
39
|
"enumMember": "LLAMA_3_2_1B"
|
|
40
40
|
},
|
|
41
41
|
"meta-llama/Llama-3.2-3B-Instruct": {
|
|
42
42
|
"vision": false,
|
|
43
|
-
"status": "
|
|
44
|
-
"description": "
|
|
43
|
+
"status": "retired",
|
|
44
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
45
45
|
"enumMember": "LLAMA_3_2_3B_INSTRUCT"
|
|
46
46
|
},
|
|
47
47
|
"meta-llama/Llama-3.1-8B": {
|
|
48
48
|
"vision": false,
|
|
49
|
-
"status": "
|
|
50
|
-
"description": "
|
|
49
|
+
"status": "retired",
|
|
50
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
51
51
|
"enumMember": "LLAMA_3_1_8B"
|
|
52
52
|
},
|
|
53
53
|
"meta-llama/Llama-3.1-8B-Instruct": {
|
|
@@ -58,74 +58,74 @@
|
|
|
58
58
|
},
|
|
59
59
|
"meta-llama/Llama-3.1-70B-Instruct": {
|
|
60
60
|
"vision": false,
|
|
61
|
-
"status": "
|
|
62
|
-
"description": "
|
|
61
|
+
"status": "retired",
|
|
62
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
63
63
|
"enumMember": "LLAMA_3_1_70B_INSTRUCT"
|
|
64
64
|
},
|
|
65
65
|
"meta-llama/Llama-3.1-405B-Instruct": {
|
|
66
66
|
"vision": false,
|
|
67
|
-
"status": "
|
|
68
|
-
"description": "
|
|
67
|
+
"status": "retired",
|
|
68
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
69
69
|
"enumMember": "LLAMA_3_1_405B_INSTRUCT"
|
|
70
70
|
},
|
|
71
71
|
"meta-llama/Meta-Llama-3-8B-Instruct": {
|
|
72
72
|
"vision": false,
|
|
73
|
-
"status": "
|
|
74
|
-
"description": "
|
|
73
|
+
"status": "retired",
|
|
74
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
75
75
|
"enumMember": "LLAMA_3_8B_INSTRUCT"
|
|
76
76
|
},
|
|
77
77
|
"meta-llama/Meta-Llama-3-70B-Instruct": {
|
|
78
78
|
"vision": false,
|
|
79
|
-
"status": "
|
|
80
|
-
"description": "
|
|
79
|
+
"status": "retired",
|
|
80
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
81
81
|
"enumMember": "LLAMA_3_70B_INSTRUCT"
|
|
82
82
|
},
|
|
83
83
|
"mistralai/Mistral-Large-3-675B-Instruct-2512": {
|
|
84
84
|
"vision": false,
|
|
85
|
-
"status": "
|
|
86
|
-
"description": "
|
|
85
|
+
"status": "retired",
|
|
86
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
87
87
|
"enumMember": "MISTRAL_LARGE_3_675B"
|
|
88
88
|
},
|
|
89
89
|
"mistralai/Mistral-Small-3.1-24B-Instruct-2503": {
|
|
90
90
|
"vision": false,
|
|
91
|
-
"status": "
|
|
92
|
-
"description": "
|
|
91
|
+
"status": "retired",
|
|
92
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
93
93
|
"enumMember": "MISTRAL_SMALL_3_1_24B"
|
|
94
94
|
},
|
|
95
95
|
"mistralai/Mistral-Small-24B-Instruct-2501": {
|
|
96
96
|
"vision": false,
|
|
97
|
-
"status": "
|
|
98
|
-
"description": "
|
|
97
|
+
"status": "retired",
|
|
98
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
99
99
|
"enumMember": "MISTRAL_SMALL_24B"
|
|
100
100
|
},
|
|
101
101
|
"mistralai/Mistral-7B-Instruct-v0.2": {
|
|
102
102
|
"vision": false,
|
|
103
|
-
"status": "
|
|
104
|
-
"description": "
|
|
103
|
+
"status": "retired",
|
|
104
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
105
105
|
"enumMember": "MISTRAL_7B_INSTRUCT"
|
|
106
106
|
},
|
|
107
107
|
"mistralai/Mixtral-8x7B-Instruct-v0.1": {
|
|
108
108
|
"vision": false,
|
|
109
|
-
"status": "
|
|
110
|
-
"description": "
|
|
109
|
+
"status": "retired",
|
|
110
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
111
111
|
"enumMember": "MIXTRAL_8X7B_INSTRUCT"
|
|
112
112
|
},
|
|
113
113
|
"mistralai/Devstral-2": {
|
|
114
114
|
"vision": false,
|
|
115
|
-
"status": "
|
|
116
|
-
"description": "
|
|
115
|
+
"status": "retired",
|
|
116
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
117
117
|
"enumMember": "DEVSTRAL_2"
|
|
118
118
|
},
|
|
119
119
|
"Qwen/Qwen2.5-7B": {
|
|
120
120
|
"vision": false,
|
|
121
|
-
"status": "
|
|
122
|
-
"description": "
|
|
121
|
+
"status": "retired",
|
|
122
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
123
123
|
"enumMember": "QWEN_2_5_7B"
|
|
124
124
|
},
|
|
125
125
|
"Qwen/Qwen2.5-32B": {
|
|
126
126
|
"vision": false,
|
|
127
|
-
"status": "
|
|
128
|
-
"description": "
|
|
127
|
+
"status": "retired",
|
|
128
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
129
129
|
"enumMember": "QWEN_2_5_32B"
|
|
130
130
|
},
|
|
131
131
|
"Qwen/Qwen2.5-72B-Instruct": {
|
|
@@ -136,8 +136,8 @@
|
|
|
136
136
|
},
|
|
137
137
|
"Qwen/Qwen2.5-Coder-7B": {
|
|
138
138
|
"vision": false,
|
|
139
|
-
"status": "
|
|
140
|
-
"description": "
|
|
139
|
+
"status": "retired",
|
|
140
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
141
141
|
"enumMember": "QWEN_2_5_CODER_7B"
|
|
142
142
|
},
|
|
143
143
|
"Qwen/Qwen2.5-Coder-32B-Instruct": {
|
|
@@ -148,14 +148,14 @@
|
|
|
148
148
|
},
|
|
149
149
|
"Qwen/QwQ-32B": {
|
|
150
150
|
"vision": false,
|
|
151
|
-
"status": "
|
|
152
|
-
"description": "
|
|
151
|
+
"status": "retired",
|
|
152
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
153
153
|
"enumMember": "QWQ_32B"
|
|
154
154
|
},
|
|
155
155
|
"Qwen/Qwen2.5-VL-32B-Instruct": {
|
|
156
156
|
"vision": false,
|
|
157
|
-
"status": "
|
|
158
|
-
"description": "
|
|
157
|
+
"status": "retired",
|
|
158
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
159
159
|
"enumMember": "QWEN_2_5_VL_32B"
|
|
160
160
|
},
|
|
161
161
|
"deepseek-ai/DeepSeek-R1": {
|
|
@@ -190,44 +190,44 @@
|
|
|
190
190
|
},
|
|
191
191
|
"microsoft/Phi-4-reasoning": {
|
|
192
192
|
"vision": false,
|
|
193
|
-
"status": "
|
|
194
|
-
"description": "
|
|
193
|
+
"status": "retired",
|
|
194
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
195
195
|
"enumMember": "PHI_4_REASONING"
|
|
196
196
|
},
|
|
197
197
|
"microsoft/Phi-4-mini-instruct": {
|
|
198
198
|
"vision": false,
|
|
199
|
-
"status": "
|
|
200
|
-
"description": "
|
|
199
|
+
"status": "retired",
|
|
200
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
201
201
|
"enumMember": "PHI_4_MINI_INSTRUCT"
|
|
202
202
|
},
|
|
203
203
|
"microsoft/Phi-4-mini-reasoning": {
|
|
204
204
|
"vision": false,
|
|
205
|
-
"status": "
|
|
206
|
-
"description": "
|
|
205
|
+
"status": "retired",
|
|
206
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
207
207
|
"enumMember": "PHI_4_MINI_REASONING"
|
|
208
208
|
},
|
|
209
209
|
"microsoft/Phi-3-mini-128k-instruct": {
|
|
210
210
|
"vision": false,
|
|
211
|
-
"status": "
|
|
212
|
-
"description": "
|
|
211
|
+
"status": "retired",
|
|
212
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
213
213
|
"enumMember": "PHI_3_MINI_128K_INSTRUCT"
|
|
214
214
|
},
|
|
215
215
|
"microsoft/Phi-3-vision-128k-instruct": {
|
|
216
216
|
"vision": false,
|
|
217
|
-
"status": "
|
|
218
|
-
"description": "
|
|
217
|
+
"status": "retired",
|
|
218
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
219
219
|
"enumMember": "PHI_3_VISION_128K_INSTRUCT"
|
|
220
220
|
},
|
|
221
221
|
"google/gemma-3-270m": {
|
|
222
222
|
"vision": false,
|
|
223
|
-
"status": "
|
|
224
|
-
"description": "
|
|
223
|
+
"status": "retired",
|
|
224
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
225
225
|
"enumMember": "GEMMA_3_270M"
|
|
226
226
|
},
|
|
227
227
|
"google/gemma-3-1b-it": {
|
|
228
228
|
"vision": false,
|
|
229
|
-
"status": "
|
|
230
|
-
"description": "
|
|
229
|
+
"status": "retired",
|
|
230
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
231
231
|
"enumMember": "GEMMA_3_1B_IT"
|
|
232
232
|
},
|
|
233
233
|
"google/gemma-3-4b-it": {
|
|
@@ -250,62 +250,62 @@
|
|
|
250
250
|
},
|
|
251
251
|
"google/gemma-2-9b": {
|
|
252
252
|
"vision": false,
|
|
253
|
-
"status": "
|
|
254
|
-
"description": "
|
|
253
|
+
"status": "retired",
|
|
254
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
255
255
|
"enumMember": "GEMMA_2_9B"
|
|
256
256
|
},
|
|
257
257
|
"google/gemma-2-27b": {
|
|
258
258
|
"vision": false,
|
|
259
|
-
"status": "
|
|
260
|
-
"description": "
|
|
259
|
+
"status": "retired",
|
|
260
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
261
261
|
"enumMember": "GEMMA_2_27B"
|
|
262
262
|
},
|
|
263
263
|
"google/gemma-2b": {
|
|
264
264
|
"vision": false,
|
|
265
|
-
"status": "
|
|
266
|
-
"description": "
|
|
265
|
+
"status": "retired",
|
|
266
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
267
267
|
"enumMember": "GEMMA_2B"
|
|
268
268
|
},
|
|
269
269
|
"google/gemma-7b": {
|
|
270
270
|
"vision": false,
|
|
271
|
-
"status": "
|
|
272
|
-
"description": "
|
|
271
|
+
"status": "retired",
|
|
272
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
273
273
|
"enumMember": "GEMMA_7B"
|
|
274
274
|
},
|
|
275
275
|
"tiiuae/falcon-40b-instruct": {
|
|
276
276
|
"vision": false,
|
|
277
|
-
"status": "
|
|
278
|
-
"description": "
|
|
277
|
+
"status": "retired",
|
|
278
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
279
279
|
"enumMember": "FALCON_40B_INSTRUCT"
|
|
280
280
|
},
|
|
281
281
|
"tiiuae/falcon-180B-chat": {
|
|
282
282
|
"vision": false,
|
|
283
|
-
"status": "
|
|
284
|
-
"description": "
|
|
283
|
+
"status": "retired",
|
|
284
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
285
285
|
"enumMember": "FALCON_180B_CHAT"
|
|
286
286
|
},
|
|
287
287
|
"bigcode/starcoder2-15b": {
|
|
288
288
|
"vision": false,
|
|
289
|
-
"status": "
|
|
290
|
-
"description": "
|
|
289
|
+
"status": "retired",
|
|
290
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
291
291
|
"enumMember": "STARCODER2_15B"
|
|
292
292
|
},
|
|
293
293
|
"codellama/CodeLlama-34b-Instruct-hf": {
|
|
294
294
|
"vision": false,
|
|
295
|
-
"status": "
|
|
296
|
-
"description": "
|
|
295
|
+
"status": "retired",
|
|
296
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
297
297
|
"enumMember": "CODELLAMA_34B_INSTRUCT"
|
|
298
298
|
},
|
|
299
299
|
"bigscience/bloom-7b1": {
|
|
300
300
|
"vision": false,
|
|
301
|
-
"status": "
|
|
302
|
-
"description": "
|
|
301
|
+
"status": "retired",
|
|
302
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
303
303
|
"enumMember": "BLOOM_7B1"
|
|
304
304
|
},
|
|
305
305
|
"bigscience/bloom-1b3": {
|
|
306
306
|
"vision": false,
|
|
307
|
-
"status": "
|
|
308
|
-
"description": "
|
|
307
|
+
"status": "retired",
|
|
308
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
309
309
|
"enumMember": "BLOOM_1B3"
|
|
310
310
|
},
|
|
311
311
|
"zai-org/GLM-5": {
|
|
@@ -322,26 +322,26 @@
|
|
|
322
322
|
},
|
|
323
323
|
"nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16": {
|
|
324
324
|
"vision": false,
|
|
325
|
-
"status": "
|
|
326
|
-
"description": "
|
|
325
|
+
"status": "retired",
|
|
326
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
327
327
|
"enumMember": "NEMOTRON_3_NANO_30B"
|
|
328
328
|
},
|
|
329
329
|
"HuggingFaceTB/SmolLM3-3B": {
|
|
330
330
|
"vision": false,
|
|
331
|
-
"status": "
|
|
332
|
-
"description": "
|
|
331
|
+
"status": "retired",
|
|
332
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
333
333
|
"enumMember": "SMOLLM3_3B"
|
|
334
334
|
},
|
|
335
335
|
"tiiuae/Falcon3-7B-Instruct": {
|
|
336
336
|
"vision": false,
|
|
337
|
-
"status": "
|
|
338
|
-
"description": "
|
|
337
|
+
"status": "retired",
|
|
338
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
339
339
|
"enumMember": "FALCON_3_7B_INSTRUCT"
|
|
340
340
|
},
|
|
341
341
|
"tiiuae/Falcon3-10B-Instruct": {
|
|
342
342
|
"vision": false,
|
|
343
|
-
"status": "
|
|
344
|
-
"description": "
|
|
343
|
+
"status": "retired",
|
|
344
|
+
"description": "Retired 2026-09 — absent from the router's roster and rejected by a live call",
|
|
345
345
|
"enumMember": "FALCON_3_10B_INSTRUCT"
|
|
346
346
|
}
|
|
347
347
|
}
|
|
@@ -370,12 +370,12 @@
|
|
|
370
370
|
{
|
|
371
371
|
"pattern": "model.*not found|not found.*model",
|
|
372
372
|
"class": "invalid-model",
|
|
373
|
-
"message": "HuggingFace model '{model}' not found.\n\nSuggestions:\n1. Check model name spelling\n2. Ensure
|
|
373
|
+
"message": "HuggingFace model '{model}' not found.\n\nSuggestions:\n1. Check model name spelling\n2. Ensure an Inference Provider serves the model (https://huggingface.co/inference/models)\n3. For tool calling, use: meta-llama/Llama-3.3-70B-Instruct, zai-org/GLM-5 or Qwen/Qwen3.5-397B-A17B"
|
|
374
374
|
},
|
|
375
375
|
{
|
|
376
376
|
"pattern": "function|tool",
|
|
377
377
|
"class": "provider",
|
|
378
|
-
"message": "HuggingFace tool calling error: {message}\n\nNotes:\n1. Ensure you're using a tool-capable model
|
|
378
|
+
"message": "HuggingFace tool calling error: {message}\n\nNotes:\n1. Ensure you're using a tool-capable model, e.g. meta-llama/Llama-3.3-70B-Instruct, zai-org/GLM-5 or Qwen/Qwen3.5-397B-A17B\n2. Check that your model supports function calling\n3. Verify tool schema format is correct"
|
|
379
379
|
}
|
|
380
380
|
],
|
|
381
381
|
"timeouts": {
|
|
@@ -385,8 +385,8 @@
|
|
|
385
385
|
"autoSelectPriority": 10,
|
|
386
386
|
"setup": {
|
|
387
387
|
"url": "https://huggingface.co/settings/tokens",
|
|
388
|
-
"apiKeyFormat": "^hf_[A-Za-z0-9]{
|
|
389
|
-
"billingPolicy": "free-
|
|
388
|
+
"apiKeyFormat": "^hf_[A-Za-z0-9]{34,}$",
|
|
389
|
+
"billingPolicy": "free-tier",
|
|
390
390
|
"instructions": [
|
|
391
391
|
"1. Visit: https://huggingface.co/settings/tokens",
|
|
392
392
|
"2. Create or sign in to your HuggingFace account",
|
|
@@ -396,8 +396,8 @@
|
|
|
396
396
|
},
|
|
397
397
|
"evidence": {
|
|
398
398
|
"rosterVerified": {
|
|
399
|
-
"date": "2026-09-
|
|
400
|
-
"method": "
|
|
399
|
+
"date": "2026-09-24",
|
|
400
|
+
"method": "Live against router.huggingface.co on 2026-09-24. GET /v1/models returned 138 models; each of the 53 catalog ids was also sent a real chat call. 39 ids are absent from the roster AND rejected with 400 ('does not exist' / 'not supported by any provider'), so they are marked retired and keep their enumMember; the other 14 are on the roster and answered 402 (the test account's monthly credits are spent), which is a billing block, not a rejection, so they stay production. No id had the two signals disagree. topModels swaps the retired Mistral-Large-3 for zai-org/GLM-5, which is on the roster. billingPolicy is free-tier per https://huggingface.co/docs/inference-providers/pricing (free users get monthly credits, no card). apiKeyFormat accepts the hf_ + 34 characters a real token has; the previous hf_ + 37 pattern rejected it. structuredOutput, toolsWithStreaming and per-model vision are left unchanged: /v1/models reports them per serving provider, and the 402 prevented a live round trip that would prove them."
|
|
401
401
|
},
|
|
402
402
|
"liveMatrix": null,
|
|
403
403
|
"addedInPR": "TBD — integration-tested in a worktree before a PR was opened"
|
|
@@ -289,8 +289,10 @@ function drainAccountAdmissionWaiters(accountKey, state) {
|
|
|
289
289
|
* removed the waiter's cap — and uncapped arrivals count toward `active`, so
|
|
290
290
|
* that waiter would otherwise never drain. An uncapped request from an older
|
|
291
291
|
* snapshot (one that predates a reload adding the cap) or from the same one
|
|
292
|
-
* leaves waiters queued: their cap is still current. With no generation
|
|
293
|
-
*
|
|
292
|
+
* leaves waiters queued: their cap is still current. With no generation,
|
|
293
|
+
* which only direct callers such as test hooks pass (the route passes 0 from
|
|
294
|
+
* its fallback snapshot when no runtime config store is attached), there is
|
|
295
|
+
* nothing to compare against and nothing is admitted.
|
|
294
296
|
*/
|
|
295
297
|
function admitWaitersOfRemovedCap(accountKey, state, generation) {
|
|
296
298
|
if (generation === undefined) {
|
|
@@ -7068,8 +7070,8 @@ async function handleAnthropicRoutedClaudeRequest(args) {
|
|
|
7068
7070
|
});
|
|
7069
7071
|
}
|
|
7070
7072
|
const { accounts, enabledAccounts, orderedAccounts, bodyStr, requestStart, toolCount, url, clientHeaders, isClaudeClientRequest, sessionId, } = loadedAccounts;
|
|
7071
|
-
// Accounts this request sent an upstream attempt to
|
|
7072
|
-
// its admission cap is not among them.
|
|
7073
|
+
// Accounts this request sent an upstream attempt to or whose token refresh
|
|
7074
|
+
// failed; one skipped only for its admission cap is not among them.
|
|
7073
7075
|
const attemptedAccountKeys = new Set();
|
|
7074
7076
|
// Only fill-first over more than one account reads a binding (see
|
|
7075
7077
|
// selectClaudeProxyAccountOrder), so nothing else records one.
|
|
@@ -7233,6 +7235,9 @@ async function handleAnthropicRoutedClaudeRequest(args) {
|
|
|
7233
7235
|
!preparedAttempt.finalBodyStr ||
|
|
7234
7236
|
!preparedAttempt.preparedContext ||
|
|
7235
7237
|
preparedAttempt.fetchStartMs === undefined) {
|
|
7238
|
+
// A failed token refresh is this account failing the request, so a
|
|
7239
|
+
// session bound to it must not stay there when another one serves.
|
|
7240
|
+
attemptedAccountKeys.add(account.key);
|
|
7236
7241
|
if (transportPermit.probe) {
|
|
7237
7242
|
providerTransportCoordinator.reportProbeAbandoned(transportPermit);
|
|
7238
7243
|
}
|
package/dist/types/proxy.d.ts
CHANGED
|
@@ -1143,8 +1143,10 @@ export type QueuedAccountAdmission = {
|
|
|
1143
1143
|
/** One queued request waiting for per-account admission capacity. */
|
|
1144
1144
|
export type AccountAdmissionWaiter = {
|
|
1145
1145
|
capacity: number;
|
|
1146
|
-
/** Runtime-config generation of the snapshot the request queued under
|
|
1147
|
-
*
|
|
1146
|
+
/** Runtime-config generation of the snapshot the request queued under.
|
|
1147
|
+
* The route always passes one (0 from its fallback snapshot when no
|
|
1148
|
+
* runtime config store is attached); only direct callers such as test
|
|
1149
|
+
* hooks leave it absent. */
|
|
1148
1150
|
generation?: number;
|
|
1149
1151
|
resolve: (lease: AccountAdmissionLease) => void;
|
|
1150
1152
|
};
|