@juspay/neurolink 12.5.0 → 12.5.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 +43 -19
- package/dist/browser/neurolink.min.js +414 -414
- package/dist/cli/commands/setup.d.ts +12 -7
- package/dist/cli/commands/setup.js +17 -16
- package/dist/cli/proxy-clients/openCode.js +16 -3
- package/dist/constants/contextWindows.js +23 -95
- package/dist/constants/enums.d.ts +111 -216
- package/dist/constants/enums.js +124 -240
- package/dist/factories/providerDescriptors.d.ts +2 -4
- package/dist/factories/providerDescriptors.js +83 -127
- package/dist/models/manifestRegistry.js +53 -4
- package/dist/providers/catalog/cerebras.json +75 -0
- package/dist/providers/catalog/cloudflare.json +121 -0
- package/dist/providers/catalog/fireworks.json +124 -0
- package/dist/providers/catalog/groq.json +127 -0
- package/dist/providers/catalog/index.generated.d.ts +3 -0
- package/dist/providers/catalog/index.generated.js +33 -0
- package/dist/providers/catalog/loader.d.ts +6 -0
- package/dist/providers/catalog/loader.js +115 -0
- package/dist/providers/catalog/mistral.json +244 -0
- package/dist/providers/catalog/perplexity.json +103 -0
- package/dist/providers/catalog/provider-catalog.schema.json +351 -0
- package/dist/providers/catalog/sambanova.json +129 -0
- package/dist/providers/catalog/schema.d.ts +123 -0
- package/dist/providers/catalog/schema.js +310 -0
- package/dist/providers/catalog/together-ai.json +172 -0
- package/dist/providers/catalog/xai.json +108 -0
- package/dist/providers/openaiCompatCatalog.d.ts +13 -13
- package/dist/providers/openaiCompatCatalog.js +15 -326
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.js +2 -0
- package/dist/types/providerCatalog.d.ts +149 -0
- package/dist/types/providerCatalog.generated.d.ts +2 -0
- package/dist/types/providerCatalog.generated.js +1 -0
- package/dist/types/providerCatalog.js +7 -0
- package/dist/types/providers.d.ts +14 -14
- package/dist/utils/modelChoices.d.ts +11 -3
- package/dist/utils/modelChoices.js +84 -190
- package/dist/utils/pricing.js +92 -127
- package/dist/utils/providerConfig.d.ts +1 -1
- package/dist/utils/providerConfig.js +24 -108
- package/package.json +2 -1
- package/dist/models/manifests/cerebras.d.ts +0 -9
- package/dist/models/manifests/cerebras.js +0 -19
- package/dist/models/manifests/sambanova.d.ts +0 -11
- package/dist/models/manifests/sambanova.js +0 -42
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { PROVIDER_MAX_TOKENS } from "../core/constants.js";
|
|
2
|
+
import { getCatalogJsonEntries } from "../providers/catalog/loader.js";
|
|
2
3
|
import { anthropicManifest } from "./manifests/anthropic.js";
|
|
3
4
|
import { openaiManifest } from "./manifests/openai.js";
|
|
4
5
|
import { azureManifest } from "./manifests/azure.js";
|
|
@@ -18,8 +19,6 @@ import { lmStudioManifest } from "./manifests/lm-studio.js";
|
|
|
18
19
|
import { llamacppManifest } from "./manifests/llamacpp.js";
|
|
19
20
|
import { xaiManifest } from "./manifests/xai.js";
|
|
20
21
|
import { groqManifest } from "./manifests/groq.js";
|
|
21
|
-
import { cerebrasManifest } from "./manifests/cerebras.js";
|
|
22
|
-
import { sambanovaManifest } from "./manifests/sambanova.js";
|
|
23
22
|
import { cohereManifest } from "./manifests/cohere.js";
|
|
24
23
|
import { togetherAiManifest } from "./manifests/together-ai.js";
|
|
25
24
|
import { fireworksManifest } from "./manifests/fireworks.js";
|
|
@@ -31,6 +30,56 @@ import { jinaManifest } from "./manifests/jina.js";
|
|
|
31
30
|
import { stabilityManifest } from "./manifests/stability.js";
|
|
32
31
|
import { ideogramManifest } from "./manifests/ideogram.js";
|
|
33
32
|
import { recraftManifest } from "./manifests/recraft.js";
|
|
33
|
+
/**
|
|
34
|
+
* Builds a manifest for a JSON-catalog provider from its catalog entry.
|
|
35
|
+
*
|
|
36
|
+
* Only used for cerebras and sambanova (see MANIFEST_REGISTRY below) — the
|
|
37
|
+
* catalog JSON carries no per-model `maxOutputTokens`, only a provider-wide
|
|
38
|
+
* `models.defaultMaxOutputTokens`, so every derived entry uses that ceiling.
|
|
39
|
+
* For cerebras/sambanova this is 8192, identical to their old hand-written
|
|
40
|
+
* manifests' `maxOutputTokens`. The other 7 catalog providers' hand
|
|
41
|
+
* manifests carry higher documented ceilings — 64000 for groq, xai,
|
|
42
|
+
* together-ai, fireworks and perplexity, 8192 for mistral and cloudflare —
|
|
43
|
+
* that the JSON's `defaultMaxOutputTokens` (a generic 4096 placeholder for
|
|
44
|
+
* all 7) would silently regress, so they stay hand-written, untouched.
|
|
45
|
+
*
|
|
46
|
+
* `contextWindow` falls back to `models.defaultContextWindow` when a model
|
|
47
|
+
* spec omits its own (matches resolveManifestEntry's synthesized-`_default`
|
|
48
|
+
* fallback pattern above). `aliases` is always `[]` — CatalogModelSpec has
|
|
49
|
+
* no alias field.
|
|
50
|
+
*/
|
|
51
|
+
function buildCatalogManifest(entry) {
|
|
52
|
+
const namedModels = Object.fromEntries(Object.entries(entry.models.catalog).map(([modelId, spec]) => [
|
|
53
|
+
modelId,
|
|
54
|
+
{
|
|
55
|
+
aliases: [],
|
|
56
|
+
contextWindow: spec.contextWindow ?? entry.models.defaultContextWindow,
|
|
57
|
+
maxOutputTokens: entry.models.defaultMaxOutputTokens,
|
|
58
|
+
vision: spec.vision,
|
|
59
|
+
functionCalling: entry.capabilities.tools,
|
|
60
|
+
},
|
|
61
|
+
]));
|
|
62
|
+
return {
|
|
63
|
+
defaultContextWindow: entry.models.defaultContextWindow,
|
|
64
|
+
models: {
|
|
65
|
+
_default: {
|
|
66
|
+
aliases: [],
|
|
67
|
+
contextWindow: entry.models.defaultContextWindow,
|
|
68
|
+
maxOutputTokens: entry.models.defaultMaxOutputTokens,
|
|
69
|
+
vision: false,
|
|
70
|
+
functionCalling: entry.capabilities.tools,
|
|
71
|
+
},
|
|
72
|
+
...namedModels,
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
const catalogManifest = (id) => {
|
|
77
|
+
const entry = getCatalogJsonEntries().find((e) => e.id === id);
|
|
78
|
+
if (!entry) {
|
|
79
|
+
throw new Error(`No catalog JSON entry found for provider "${id}"`);
|
|
80
|
+
}
|
|
81
|
+
return buildCatalogManifest(entry);
|
|
82
|
+
};
|
|
34
83
|
/**
|
|
35
84
|
* Every provider's model manifest, keyed by the exact AIProviderName enum
|
|
36
85
|
* value (kebab-case) — e.g. "google-ai", "nvidia-nim". Manifests are pure
|
|
@@ -58,8 +107,8 @@ export const MANIFEST_REGISTRY = {
|
|
|
58
107
|
llamacpp: llamacppManifest,
|
|
59
108
|
xai: xaiManifest,
|
|
60
109
|
groq: groqManifest,
|
|
61
|
-
cerebras:
|
|
62
|
-
sambanova:
|
|
110
|
+
cerebras: catalogManifest("cerebras"),
|
|
111
|
+
sambanova: catalogManifest("sambanova"),
|
|
63
112
|
cohere: cohereManifest,
|
|
64
113
|
"together-ai": togetherAiManifest,
|
|
65
114
|
fireworks: fireworksManifest,
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "./provider-catalog.schema.json",
|
|
3
|
+
"id": "cerebras",
|
|
4
|
+
"displayName": "Cerebras",
|
|
5
|
+
"aliases": [],
|
|
6
|
+
"tier": 2,
|
|
7
|
+
"wire": {
|
|
8
|
+
"baseURL": "https://api.cerebras.ai/v1"
|
|
9
|
+
},
|
|
10
|
+
"models": {
|
|
11
|
+
"default": "gpt-oss-120b",
|
|
12
|
+
"fallbacks": ["gpt-oss-120b", "gemma-4-31b"],
|
|
13
|
+
"defaultContextWindow": 65536,
|
|
14
|
+
"defaultMaxOutputTokens": 8192,
|
|
15
|
+
"catalog": {
|
|
16
|
+
"gpt-oss-120b": {
|
|
17
|
+
"contextWindow": 65536,
|
|
18
|
+
"pricingPerMTok": { "input": 0.35, "output": 0.75 },
|
|
19
|
+
"vision": false,
|
|
20
|
+
"status": "production",
|
|
21
|
+
"description": "Recommended - OpenAI GPT-OSS 120B (open-weight); wafer-scale speed"
|
|
22
|
+
},
|
|
23
|
+
"gemma-4-31b": {
|
|
24
|
+
"contextWindow": 65536,
|
|
25
|
+
"pricingPerMTok": { "input": 0.99, "output": 1.49 },
|
|
26
|
+
"vision": false,
|
|
27
|
+
"status": "production",
|
|
28
|
+
"description": "Google Gemma 4 31B"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"topModels": ["gpt-oss-120b", "gemma-4-31b"]
|
|
32
|
+
},
|
|
33
|
+
"capabilities": {
|
|
34
|
+
"text": true,
|
|
35
|
+
"streaming": true,
|
|
36
|
+
"tools": true,
|
|
37
|
+
"toolsWithStreaming": true,
|
|
38
|
+
"structuredOutput": true,
|
|
39
|
+
"structuredOutputWithTools": false,
|
|
40
|
+
"embeddings": false,
|
|
41
|
+
"thinking": false
|
|
42
|
+
},
|
|
43
|
+
"errorRules": [
|
|
44
|
+
{
|
|
45
|
+
"status": 401,
|
|
46
|
+
"pattern": "wrong_api_key|Wrong API Key|invalid_api_key",
|
|
47
|
+
"class": "authentication",
|
|
48
|
+
"message": "Invalid Cerebras API key. Check {apiKeyEnvVar}. Get one at https://cloud.cerebras.ai"
|
|
49
|
+
}
|
|
50
|
+
],
|
|
51
|
+
"setup": {
|
|
52
|
+
"url": "https://cloud.cerebras.ai",
|
|
53
|
+
"apiKeyFormat": null,
|
|
54
|
+
"billingPolicy": "free-with-card",
|
|
55
|
+
"instructions": [
|
|
56
|
+
"1. Visit: https://cloud.cerebras.ai",
|
|
57
|
+
"2. Sign in or create a free Cerebras account",
|
|
58
|
+
"3. Create an API key under API Keys",
|
|
59
|
+
"4. Set {apiKeyEnvVar} in your .env file"
|
|
60
|
+
]
|
|
61
|
+
},
|
|
62
|
+
"evidence": {
|
|
63
|
+
"rosterVerified": {
|
|
64
|
+
"date": "2026-08-27",
|
|
65
|
+
"method": "authenticated GET /v1/models"
|
|
66
|
+
},
|
|
67
|
+
"authProbe": {
|
|
68
|
+
"date": "2026-08-26",
|
|
69
|
+
"status": 401,
|
|
70
|
+
"code": "wrong_api_key"
|
|
71
|
+
},
|
|
72
|
+
"liveMatrix": { "date": "2026-08-27", "result": "4/4" },
|
|
73
|
+
"addedInPR": "https://github.com/juspay/neurolink/pull/1561"
|
|
74
|
+
}
|
|
75
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "./provider-catalog.schema.json",
|
|
3
|
+
"id": "cloudflare",
|
|
4
|
+
"displayName": "Cloudflare Workers AI",
|
|
5
|
+
"aliases": ["workers-ai", "cf-ai"],
|
|
6
|
+
"tier": 2,
|
|
7
|
+
"wire": {
|
|
8
|
+
"baseURLTemplate": "https://api.cloudflare.com/client/v4/accounts/{accountId}/ai/v1",
|
|
9
|
+
"extraCredentials": ["accountId"],
|
|
10
|
+
"missingCredentialMessage": "CLOUDFLARE_ACCOUNT_ID is required (or pass credentials.cloudflare.accountId). Get the account id from https://dash.cloudflare.com/"
|
|
11
|
+
},
|
|
12
|
+
"models": {
|
|
13
|
+
"default": "@cf/meta/llama-3.3-70b-instruct-fp8-fast",
|
|
14
|
+
"fallbackModelName": "@cf/meta/llama-3.1-8b-instruct-fast",
|
|
15
|
+
"fallbacks": [
|
|
16
|
+
"@cf/meta/llama-3.3-70b-instruct-fp8-fast",
|
|
17
|
+
"@cf/meta/llama-3.1-70b-instruct",
|
|
18
|
+
"@cf/meta/llama-3.1-8b-instruct-fast",
|
|
19
|
+
"@cf/meta/llama-3.2-11b-vision-instruct",
|
|
20
|
+
"@cf/mistral/mistral-7b-instruct-v0.2",
|
|
21
|
+
"@cf/qwen/qwen1.5-14b-chat-awq"
|
|
22
|
+
],
|
|
23
|
+
"defaultContextWindow": 8192,
|
|
24
|
+
"defaultMaxOutputTokens": 4096,
|
|
25
|
+
"catalog": {
|
|
26
|
+
"@cf/meta/llama-3.3-70b-instruct-fp8-fast": {
|
|
27
|
+
"enumMember": "LLAMA_3_3_70B_FAST",
|
|
28
|
+
"contextWindow": 24000,
|
|
29
|
+
"vision": false,
|
|
30
|
+
"status": "production",
|
|
31
|
+
"description": "Recommended - Llama 3.3 70B Instruct (FP8 fast)"
|
|
32
|
+
},
|
|
33
|
+
"@cf/meta/llama-3.1-70b-instruct": {
|
|
34
|
+
"enumMember": "LLAMA_3_1_70B_INSTRUCT",
|
|
35
|
+
"contextWindow": 24000,
|
|
36
|
+
"vision": false,
|
|
37
|
+
"status": "production",
|
|
38
|
+
"description": "Llama 3.1 70B Instruct"
|
|
39
|
+
},
|
|
40
|
+
"@cf/meta/llama-3.1-8b-instruct-fast": {
|
|
41
|
+
"enumMember": "LLAMA_3_1_8B_FAST",
|
|
42
|
+
"contextWindow": 24000,
|
|
43
|
+
"vision": false,
|
|
44
|
+
"status": "production",
|
|
45
|
+
"description": "Llama 3.1 8B Instruct (fast)"
|
|
46
|
+
},
|
|
47
|
+
"@cf/meta/llama-3.2-11b-vision-instruct": {
|
|
48
|
+
"enumMember": "LLAMA_3_2_11B_VISION",
|
|
49
|
+
"contextWindow": 24000,
|
|
50
|
+
"vision": true,
|
|
51
|
+
"status": "production",
|
|
52
|
+
"description": "Llama 3.2 11B Vision Instruct"
|
|
53
|
+
},
|
|
54
|
+
"@cf/mistral/mistral-7b-instruct-v0.2": {
|
|
55
|
+
"enumMember": "MISTRAL_7B_INSTRUCT_V0_2",
|
|
56
|
+
"contextWindow": 32768,
|
|
57
|
+
"vision": false,
|
|
58
|
+
"status": "production",
|
|
59
|
+
"description": "Mistral 7B Instruct v0.2"
|
|
60
|
+
},
|
|
61
|
+
"@cf/qwen/qwen1.5-14b-chat-awq": {
|
|
62
|
+
"enumMember": "QWEN_1P5_14B_CHAT_AWQ",
|
|
63
|
+
"contextWindow": 7500,
|
|
64
|
+
"vision": false,
|
|
65
|
+
"status": "production",
|
|
66
|
+
"description": "Qwen 1.5 14B Chat AWQ"
|
|
67
|
+
},
|
|
68
|
+
"@cf/google/gemma-2b-it-lora": {
|
|
69
|
+
"enumMember": "GEMMA_2B_IT_LORA",
|
|
70
|
+
"contextWindow": 4096,
|
|
71
|
+
"vision": false,
|
|
72
|
+
"status": "production",
|
|
73
|
+
"description": "Gemma 2B IT (LoRA)"
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
"topModels": [
|
|
77
|
+
"@cf/meta/llama-3.3-70b-instruct-fp8-fast",
|
|
78
|
+
"@cf/meta/llama-3.1-70b-instruct",
|
|
79
|
+
"@cf/meta/llama-3.1-8b-instruct-fast",
|
|
80
|
+
"@cf/meta/llama-3.2-11b-vision-instruct"
|
|
81
|
+
]
|
|
82
|
+
},
|
|
83
|
+
"capabilities": {
|
|
84
|
+
"text": true,
|
|
85
|
+
"streaming": true,
|
|
86
|
+
"tools": true,
|
|
87
|
+
"toolsWithStreaming": true,
|
|
88
|
+
"structuredOutput": false,
|
|
89
|
+
"structuredOutputWithTools": false,
|
|
90
|
+
"embeddings": false,
|
|
91
|
+
"thinking": false
|
|
92
|
+
},
|
|
93
|
+
"errorRules": [
|
|
94
|
+
{
|
|
95
|
+
"status": 401,
|
|
96
|
+
"pattern": "Invalid API key|Authentication",
|
|
97
|
+
"class": "authentication",
|
|
98
|
+
"message": "Invalid Cloudflare API key. Use a token with Workers AI Read+Write scope. Get one at https://dash.cloudflare.com/profile/api-tokens"
|
|
99
|
+
}
|
|
100
|
+
],
|
|
101
|
+
"setup": {
|
|
102
|
+
"url": "https://dash.cloudflare.com/profile/api-tokens",
|
|
103
|
+
"apiKeyFormat": null,
|
|
104
|
+
"billingPolicy": "free-tier",
|
|
105
|
+
"description": "API token (Workers AI Read+Write scope)",
|
|
106
|
+
"instructions": [
|
|
107
|
+
"1. Visit: https://dash.cloudflare.com/profile/api-tokens",
|
|
108
|
+
"2. Create a token with 'Workers AI: Read + Write' scope",
|
|
109
|
+
"3. Set {apiKeyEnvVar} in your .env file",
|
|
110
|
+
"4. Also set CLOUDFLARE_ACCOUNT_ID (find it in the dashboard URL or under 'Account ID')"
|
|
111
|
+
]
|
|
112
|
+
},
|
|
113
|
+
"evidence": {
|
|
114
|
+
"rosterVerified": {
|
|
115
|
+
"date": "2026-08-28",
|
|
116
|
+
"method": "transcribed from pre-migration TS catalog"
|
|
117
|
+
},
|
|
118
|
+
"liveMatrix": null,
|
|
119
|
+
"addedInPR": "https://github.com/juspay/neurolink/pull/1587"
|
|
120
|
+
}
|
|
121
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "./provider-catalog.schema.json",
|
|
3
|
+
"id": "fireworks",
|
|
4
|
+
"displayName": "Fireworks AI",
|
|
5
|
+
"aliases": [],
|
|
6
|
+
"tier": 2,
|
|
7
|
+
"wire": {
|
|
8
|
+
"baseURL": "https://api.fireworks.ai/inference/v1"
|
|
9
|
+
},
|
|
10
|
+
"models": {
|
|
11
|
+
"default": "accounts/fireworks/models/deepseek-v4-pro",
|
|
12
|
+
"testModel": "accounts/fireworks/models/kimi-k2p6",
|
|
13
|
+
"fallbackModelName": "accounts/fireworks/models/deepseek-v4-pro",
|
|
14
|
+
"fallbacks": [
|
|
15
|
+
"accounts/fireworks/models/deepseek-v4-pro",
|
|
16
|
+
"accounts/fireworks/models/glm-5p1",
|
|
17
|
+
"accounts/fireworks/models/glm-5",
|
|
18
|
+
"accounts/fireworks/models/kimi-k2p6",
|
|
19
|
+
"accounts/fireworks/models/kimi-k2p5",
|
|
20
|
+
"accounts/fireworks/models/gpt-oss-120b"
|
|
21
|
+
],
|
|
22
|
+
"defaultContextWindow": 128000,
|
|
23
|
+
"defaultMaxOutputTokens": 4096,
|
|
24
|
+
"catalog": {
|
|
25
|
+
"accounts/fireworks/models/deepseek-v4-pro": {
|
|
26
|
+
"enumMember": "DEEPSEEK_V4_PRO",
|
|
27
|
+
"vision": false,
|
|
28
|
+
"status": "production",
|
|
29
|
+
"description": "Recommended - DeepSeek V4 Pro, current general-purpose default"
|
|
30
|
+
},
|
|
31
|
+
"accounts/fireworks/models/glm-5p1": {
|
|
32
|
+
"enumMember": "GLM_5P1",
|
|
33
|
+
"vision": false,
|
|
34
|
+
"status": "production",
|
|
35
|
+
"description": "GLM 5.1 — Zhipu flagship"
|
|
36
|
+
},
|
|
37
|
+
"accounts/fireworks/models/glm-5": {
|
|
38
|
+
"enumMember": "GLM_5",
|
|
39
|
+
"vision": false,
|
|
40
|
+
"status": "production",
|
|
41
|
+
"description": "GLM 5 — broader coverage"
|
|
42
|
+
},
|
|
43
|
+
"accounts/fireworks/models/kimi-k2p6": {
|
|
44
|
+
"enumMember": "KIMI_K2P6",
|
|
45
|
+
"vision": false,
|
|
46
|
+
"status": "production",
|
|
47
|
+
"description": "Kimi K2.6 — Moonshot flagship"
|
|
48
|
+
},
|
|
49
|
+
"accounts/fireworks/models/kimi-k2p5": {
|
|
50
|
+
"enumMember": "KIMI_K2P5",
|
|
51
|
+
"vision": false,
|
|
52
|
+
"status": "production",
|
|
53
|
+
"description": "Kimi K2.5 — preceding Kimi"
|
|
54
|
+
},
|
|
55
|
+
"accounts/fireworks/models/gpt-oss-120b": {
|
|
56
|
+
"enumMember": "GPT_OSS_120B",
|
|
57
|
+
"vision": false,
|
|
58
|
+
"status": "production",
|
|
59
|
+
"description": "GPT-OSS 120B — Apache-2.0 OpenAI weights"
|
|
60
|
+
},
|
|
61
|
+
"accounts/fireworks/models/llama-v3p2-90b-vision-instruct": {
|
|
62
|
+
"enumMember": "LLAMA_V3P2_90B_VISION_INSTRUCT",
|
|
63
|
+
"vision": true,
|
|
64
|
+
"status": "production",
|
|
65
|
+
"description": "Llama 3.2 90B Vision Instruct — vision-capable; restored from the pre-migration adapter's vision map (contextWindow/pricing not yet re-verified)"
|
|
66
|
+
},
|
|
67
|
+
"accounts/fireworks/models/llama-v3p2-11b-vision-instruct": {
|
|
68
|
+
"enumMember": "LLAMA_V3P2_11B_VISION_INSTRUCT",
|
|
69
|
+
"vision": true,
|
|
70
|
+
"status": "production",
|
|
71
|
+
"description": "Llama 3.2 11B Vision Instruct — vision-capable; restored from the pre-migration adapter's vision map (contextWindow/pricing not yet re-verified)"
|
|
72
|
+
},
|
|
73
|
+
"accounts/fireworks/models/phi-3-vision-128k-instruct": {
|
|
74
|
+
"enumMember": "PHI_3_VISION_128K_INSTRUCT",
|
|
75
|
+
"vision": true,
|
|
76
|
+
"status": "production",
|
|
77
|
+
"description": "Phi-3 Vision 128K Instruct — vision-capable; restored from the pre-migration adapter's vision map (contextWindow/pricing not yet re-verified)"
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
"topModels": [
|
|
81
|
+
"accounts/fireworks/models/deepseek-v4-pro",
|
|
82
|
+
"accounts/fireworks/models/glm-5p1",
|
|
83
|
+
"accounts/fireworks/models/kimi-k2p6",
|
|
84
|
+
"accounts/fireworks/models/gpt-oss-120b"
|
|
85
|
+
]
|
|
86
|
+
},
|
|
87
|
+
"capabilities": {
|
|
88
|
+
"text": true,
|
|
89
|
+
"streaming": true,
|
|
90
|
+
"tools": true,
|
|
91
|
+
"toolsWithStreaming": true,
|
|
92
|
+
"structuredOutput": true,
|
|
93
|
+
"structuredOutputWithTools": true,
|
|
94
|
+
"embeddings": false,
|
|
95
|
+
"thinking": false
|
|
96
|
+
},
|
|
97
|
+
"errorRules": [
|
|
98
|
+
{
|
|
99
|
+
"status": 401,
|
|
100
|
+
"pattern": "Invalid API key|Authentication",
|
|
101
|
+
"class": "authentication",
|
|
102
|
+
"message": "Invalid Fireworks API key. Get one at https://fireworks.ai/account/api-keys"
|
|
103
|
+
}
|
|
104
|
+
],
|
|
105
|
+
"setup": {
|
|
106
|
+
"url": "https://fireworks.ai/account/api-keys",
|
|
107
|
+
"apiKeyFormat": null,
|
|
108
|
+
"billingPolicy": "free-with-card",
|
|
109
|
+
"instructions": [
|
|
110
|
+
"1. Visit: https://fireworks.ai/account/api-keys",
|
|
111
|
+
"2. Sign in to your Fireworks AI account",
|
|
112
|
+
"3. Create a new API key",
|
|
113
|
+
"4. Set {apiKeyEnvVar} in your .env file"
|
|
114
|
+
]
|
|
115
|
+
},
|
|
116
|
+
"evidence": {
|
|
117
|
+
"rosterVerified": {
|
|
118
|
+
"date": "2026-08-28",
|
|
119
|
+
"method": "transcribed from pre-migration TS catalog"
|
|
120
|
+
},
|
|
121
|
+
"liveMatrix": null,
|
|
122
|
+
"addedInPR": "https://github.com/juspay/neurolink/pull/1587"
|
|
123
|
+
}
|
|
124
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "./provider-catalog.schema.json",
|
|
3
|
+
"id": "groq",
|
|
4
|
+
"displayName": "Groq",
|
|
5
|
+
"aliases": [],
|
|
6
|
+
"tier": 2,
|
|
7
|
+
"wire": {
|
|
8
|
+
"baseURL": "https://api.groq.com/openai/v1"
|
|
9
|
+
},
|
|
10
|
+
"models": {
|
|
11
|
+
"default": "llama-3.3-70b-versatile",
|
|
12
|
+
"testModel": "openai/gpt-oss-120b",
|
|
13
|
+
"fallbacks": [
|
|
14
|
+
"llama-3.3-70b-versatile",
|
|
15
|
+
"llama-3.1-8b-instant",
|
|
16
|
+
"gemma2-9b-it",
|
|
17
|
+
"mixtral-8x7b-32768",
|
|
18
|
+
"llama-3.2-90b-vision-preview",
|
|
19
|
+
"llama-3.2-11b-vision-preview"
|
|
20
|
+
],
|
|
21
|
+
"defaultContextWindow": 128000,
|
|
22
|
+
"defaultMaxOutputTokens": 4096,
|
|
23
|
+
"catalog": {
|
|
24
|
+
"llama-3.3-70b-versatile": {
|
|
25
|
+
"contextWindow": 131072,
|
|
26
|
+
"pricingPerMTok": { "input": 0.59, "output": 0.79 },
|
|
27
|
+
"vision": false,
|
|
28
|
+
"status": "production",
|
|
29
|
+
"description": "Recommended - Production default; sub-100ms"
|
|
30
|
+
},
|
|
31
|
+
"llama-3.1-8b-instant": {
|
|
32
|
+
"contextWindow": 128000,
|
|
33
|
+
"pricingPerMTok": { "input": 0.05, "output": 0.08 },
|
|
34
|
+
"vision": false,
|
|
35
|
+
"status": "production",
|
|
36
|
+
"description": "Lowest latency tier"
|
|
37
|
+
},
|
|
38
|
+
"gemma2-9b-it": {
|
|
39
|
+
"enumMember": "GEMMA_2_9B_IT",
|
|
40
|
+
"contextWindow": 8192,
|
|
41
|
+
"pricingPerMTok": { "input": 0.2, "output": 0.2 },
|
|
42
|
+
"vision": false,
|
|
43
|
+
"status": "production",
|
|
44
|
+
"description": "Google Gemma 2 9B"
|
|
45
|
+
},
|
|
46
|
+
"mixtral-8x7b-32768": {
|
|
47
|
+
"contextWindow": 32768,
|
|
48
|
+
"pricingPerMTok": { "input": 0.24, "output": 0.24 },
|
|
49
|
+
"vision": false,
|
|
50
|
+
"status": "production",
|
|
51
|
+
"description": "Mistral 8x7B MoE, 32K context"
|
|
52
|
+
},
|
|
53
|
+
"llama-guard-3-8b": {
|
|
54
|
+
"contextWindow": 8192,
|
|
55
|
+
"vision": false,
|
|
56
|
+
"status": "production",
|
|
57
|
+
"description": "Llama Guard 3 8B — safety classifier"
|
|
58
|
+
},
|
|
59
|
+
"llama-3.2-90b-vision-preview": {
|
|
60
|
+
"contextWindow": 128000,
|
|
61
|
+
"pricingPerMTok": { "input": 0.9, "output": 0.9 },
|
|
62
|
+
"vision": true,
|
|
63
|
+
"status": "preview",
|
|
64
|
+
"description": "Multimodal (vision)"
|
|
65
|
+
},
|
|
66
|
+
"llama-3.2-11b-vision-preview": {
|
|
67
|
+
"contextWindow": 128000,
|
|
68
|
+
"pricingPerMTok": { "input": 0.18, "output": 0.18 },
|
|
69
|
+
"vision": true,
|
|
70
|
+
"status": "preview",
|
|
71
|
+
"description": "Llama 3.2 11B Vision Preview — smaller multimodal"
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
"topModels": [
|
|
75
|
+
"llama-3.3-70b-versatile",
|
|
76
|
+
"llama-3.1-8b-instant",
|
|
77
|
+
"llama-3.2-90b-vision-preview",
|
|
78
|
+
"gemma2-9b-it",
|
|
79
|
+
"mixtral-8x7b-32768"
|
|
80
|
+
]
|
|
81
|
+
},
|
|
82
|
+
"capabilities": {
|
|
83
|
+
"text": true,
|
|
84
|
+
"streaming": true,
|
|
85
|
+
"tools": true,
|
|
86
|
+
"toolsWithStreaming": true,
|
|
87
|
+
"structuredOutput": true,
|
|
88
|
+
"structuredOutputWithTools": false,
|
|
89
|
+
"embeddings": false,
|
|
90
|
+
"thinking": false
|
|
91
|
+
},
|
|
92
|
+
"errorRules": [
|
|
93
|
+
{
|
|
94
|
+
"status": 401,
|
|
95
|
+
"pattern": "Invalid API key|Authentication|invalid_api_key",
|
|
96
|
+
"class": "authentication",
|
|
97
|
+
"message": "Invalid Groq API key. Check {apiKeyEnvVar}. Get one at https://console.groq.com/keys"
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"pattern": "model_decommissioned",
|
|
101
|
+
"class": "invalid-model",
|
|
102
|
+
"message": "Groq model '{model}' was decommissioned. Pick a current model from https://console.groq.com/docs/models."
|
|
103
|
+
}
|
|
104
|
+
],
|
|
105
|
+
"quirks": {
|
|
106
|
+
"timeoutErrorClass": "provider"
|
|
107
|
+
},
|
|
108
|
+
"setup": {
|
|
109
|
+
"url": "https://console.groq.com/keys",
|
|
110
|
+
"apiKeyFormat": null,
|
|
111
|
+
"billingPolicy": "free-tier",
|
|
112
|
+
"instructions": [
|
|
113
|
+
"1. Visit: https://console.groq.com/keys",
|
|
114
|
+
"2. Sign in to your Groq account",
|
|
115
|
+
"3. Create a new API key",
|
|
116
|
+
"4. Set {apiKeyEnvVar} in your .env file"
|
|
117
|
+
]
|
|
118
|
+
},
|
|
119
|
+
"evidence": {
|
|
120
|
+
"rosterVerified": {
|
|
121
|
+
"date": "2026-08-28",
|
|
122
|
+
"method": "transcribed from pre-migration TS catalog"
|
|
123
|
+
},
|
|
124
|
+
"liveMatrix": null,
|
|
125
|
+
"addedInPR": "https://github.com/juspay/neurolink/pull/1587"
|
|
126
|
+
}
|
|
127
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { ProviderCatalogJson } from "../../types/index.js";
|
|
2
|
+
export declare const CATALOG_JSON_ENTRIES: ProviderCatalogJson[];
|
|
3
|
+
export declare const CATALOG_PROVIDER_IDS: readonly ["cerebras", "cloudflare", "fireworks", "groq", "mistral", "perplexity", "sambanova", "together-ai", "xai"];
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// GENERATED FILE — do not edit. Regenerate with `pnpm run codegen:catalog`.
|
|
2
|
+
// Source of truth: the per-provider JSON files in this directory.
|
|
3
|
+
import cerebrasJson from "./cerebras.json" with { type: "json" };
|
|
4
|
+
import cloudflareJson from "./cloudflare.json" with { type: "json" };
|
|
5
|
+
import fireworksJson from "./fireworks.json" with { type: "json" };
|
|
6
|
+
import groqJson from "./groq.json" with { type: "json" };
|
|
7
|
+
import mistralJson from "./mistral.json" with { type: "json" };
|
|
8
|
+
import perplexityJson from "./perplexity.json" with { type: "json" };
|
|
9
|
+
import sambanovaJson from "./sambanova.json" with { type: "json" };
|
|
10
|
+
import togetherAiJson from "./together-ai.json" with { type: "json" };
|
|
11
|
+
import xaiJson from "./xai.json" with { type: "json" };
|
|
12
|
+
export const CATALOG_JSON_ENTRIES = [
|
|
13
|
+
cerebrasJson,
|
|
14
|
+
cloudflareJson,
|
|
15
|
+
fireworksJson,
|
|
16
|
+
groqJson,
|
|
17
|
+
mistralJson,
|
|
18
|
+
perplexityJson,
|
|
19
|
+
sambanovaJson,
|
|
20
|
+
togetherAiJson,
|
|
21
|
+
xaiJson,
|
|
22
|
+
];
|
|
23
|
+
export const CATALOG_PROVIDER_IDS = [
|
|
24
|
+
"cerebras",
|
|
25
|
+
"cloudflare",
|
|
26
|
+
"fireworks",
|
|
27
|
+
"groq",
|
|
28
|
+
"mistral",
|
|
29
|
+
"perplexity",
|
|
30
|
+
"sambanova",
|
|
31
|
+
"together-ai",
|
|
32
|
+
"xai",
|
|
33
|
+
];
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { OpenAICompatCatalogEntry, ProviderCatalogJson, ProviderConfigOptions } from "../../types/index.js";
|
|
2
|
+
export declare function catalogCredentialsKey(entry: ProviderCatalogJson): string;
|
|
3
|
+
export declare function catalogEnvVar(entry: ProviderCatalogJson, kind: "apiKey" | "baseURL" | "model"): string;
|
|
4
|
+
export declare function buildCatalogConfigOptions(entry: ProviderCatalogJson): ProviderConfigOptions;
|
|
5
|
+
export declare function getCatalogJsonEntries(): ProviderCatalogJson[];
|
|
6
|
+
export declare function buildCatalogEntries(): OpenAICompatCatalogEntry[];
|