@juspay/neurolink 12.41.10 → 12.42.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/CHANGELOG.md +2 -2
  2. package/README.md +2 -2
  3. package/dist/browser/neurolink.min.js +406 -406
  4. package/dist/constants/enums.d.ts +195 -0
  5. package/dist/constants/enums.js +214 -0
  6. package/dist/providers/catalog/arcee.json +212 -0
  7. package/dist/providers/catalog/baidu-qianfan.json +170 -0
  8. package/dist/providers/catalog/byteplus-modelark.json +246 -0
  9. package/dist/providers/catalog/bytez.json +87 -0
  10. package/dist/providers/catalog/dashscope.json +165 -0
  11. package/dist/providers/catalog/gradientai.json +238 -0
  12. package/dist/providers/catalog/hetzner-inference.json +83 -0
  13. package/dist/providers/catalog/inceptron.json +145 -0
  14. package/dist/providers/catalog/index.generated.d.ts +1 -1
  15. package/dist/providers/catalog/index.generated.js +57 -0
  16. package/dist/providers/catalog/lemonfox-ai.json +78 -0
  17. package/dist/providers/catalog/loader.js +3 -0
  18. package/dist/providers/catalog/meta-model-api.json +150 -0
  19. package/dist/providers/catalog/modelscope.json +146 -0
  20. package/dist/providers/catalog/parasail.json +251 -0
  21. package/dist/providers/catalog/poolside.json +79 -0
  22. package/dist/providers/catalog/provider-catalog.schema.json +5 -0
  23. package/dist/providers/catalog/reka.json +112 -0
  24. package/dist/providers/catalog/sakana-ai.json +162 -0
  25. package/dist/providers/catalog/schema.d.ts +1 -0
  26. package/dist/providers/catalog/schema.js +1 -0
  27. package/dist/providers/catalog/stackit.json +126 -0
  28. package/dist/providers/catalog/telnyx.json +181 -0
  29. package/dist/providers/catalog/thinking-machines.json +212 -0
  30. package/dist/providers/catalog/vispark.json +109 -0
  31. package/dist/providers/configuredOpenAICompat.d.ts +9 -0
  32. package/dist/providers/configuredOpenAICompat.js +14 -0
  33. package/dist/types/providerCatalog.d.ts +9 -0
  34. package/dist/types/providerCatalog.generated.d.ts +2 -2
  35. package/dist/types/providers.d.ts +80 -0
  36. package/docs-site/static/search-index.json +211 -2
  37. package/package.json +7 -1
@@ -0,0 +1,181 @@
1
+ {
2
+ "$schema": "./provider-catalog.schema.json",
3
+ "id": "telnyx",
4
+ "displayName": "Telnyx",
5
+ "aliases": [],
6
+ "tier": 2,
7
+ "wire": {
8
+ "baseURL": "https://api.telnyx.com/v2/ai/openai"
9
+ },
10
+ "models": {
11
+ "default": "zai-org/GLM-5.3-Flash",
12
+ "fallbacks": [
13
+ "zai-org/GLM-5.3",
14
+ "deepseek-ai/DeepSeek-V4.1-Flash",
15
+ "moonshotai/Kimi-K3",
16
+ "moonshotai/Kimi-K2.6",
17
+ "zai-org/GLM-5.2",
18
+ "MiniMaxAI/MiniMax-M3-MXFP8",
19
+ "deepseek-ai/DeepSeek-V4-Flash-0731",
20
+ "Qwen/Qwen3.8-27B"
21
+ ],
22
+ "defaultContextWindow": 128000,
23
+ "defaultMaxOutputTokens": 8192,
24
+ "catalog": {
25
+ "zai-org/GLM-5.3-Flash": {
26
+ "contextWindow": 1000000,
27
+ "pricingPerMTok": {
28
+ "input": 0.135,
29
+ "output": 0.45,
30
+ "cachedInput": 0.027
31
+ },
32
+ "vision": false,
33
+ "status": "production",
34
+ "description": "NeuroLink default. The models page (https://developers.telnyx.com/docs/inference/models, retrieved 2026-09-29) lists this id with Parameters 320B, Context Length 1M and Best For \"Efficient multimodal coding and agentic workflows\", tagged \"(Recommended)\". The Inference API Quickstart (https://developers.telnyx.com/docs/inference/getting-started) uses it in its first chat-completions example with base_url https://api.telnyx.com/v2/ai/openai; the OpenAI Migration, Function Calling, Streaming and Parallel Calls and JSON Mode pages use it in their examples, and the Function Calling page (https://developers.telnyx.com/docs/inference/functions) says it \"is especially good at calling functions\". The Quickstart's note says reasoning models such as this one return their chain-of-thought in a separate reasoning_content field. contextWindow 1,000,000 is NeuroLink's decimal reading of the label 1M. Pricing row \"GLM-5.3 Flash — Fast, efficient inference\" on https://telnyx.com/pricing/inference-api: $0.135 input, $0.027 cached input, $0.45 output per 1M tokens. vision is a placeholder (see setup.description)."
35
+ },
36
+ "zai-org/GLM-5.3": {
37
+ "contextWindow": 1000000,
38
+ "pricingPerMTok": {
39
+ "input": 1.25,
40
+ "output": 4,
41
+ "cachedInput": 0.24
42
+ },
43
+ "vision": false,
44
+ "status": "production",
45
+ "description": "Fallback. The models page (https://developers.telnyx.com/docs/inference/models, retrieved 2026-09-29) lists this id with Parameters 753.9B, Context Length 1M and Best For \"Complex coding and long-horizon agent tasks\". contextWindow 1,000,000 is NeuroLink's decimal reading of the label 1M. Pricing row \"GLM-5.3 — Flagship frontier intelligence\" on https://telnyx.com/pricing/inference-api: $1.25 input, $0.24 cached input, $4 output per 1M tokens. vision is a placeholder (see setup.description)."
46
+ },
47
+ "deepseek-ai/DeepSeek-V4.1-Flash": {
48
+ "contextWindow": 1000000,
49
+ "pricingPerMTok": {
50
+ "input": 0.3,
51
+ "output": 1.2,
52
+ "cachedInput": 0.006
53
+ },
54
+ "vision": false,
55
+ "status": "production",
56
+ "description": "Fallback. The models page (https://developers.telnyx.com/docs/inference/models, retrieved 2026-09-29) lists this id with Parameters 552B backbone, Context Length 1M and Best For \"Low-latency multimodal inference\". The Service tiers page (https://developers.telnyx.com/docs/inference/service-tiers) uses this id in its Flex request example. contextWindow 1,000,000 is NeuroLink's decimal reading of the label 1M. Pricing row \"DeepSeek V4.1 Flash — Low-latency multimodal inference\" on https://telnyx.com/pricing/inference-api: $0.30 input, $0.006 cached input, $1.20 output per 1M tokens. vision is a placeholder (see setup.description)."
57
+ },
58
+ "moonshotai/Kimi-K3": {
59
+ "contextWindow": 1000000,
60
+ "pricingPerMTok": {
61
+ "input": 2.7,
62
+ "output": 13.5,
63
+ "cachedInput": 0.27
64
+ },
65
+ "vision": false,
66
+ "status": "production",
67
+ "description": "Fallback. The models page (https://developers.telnyx.com/docs/inference/models, retrieved 2026-09-29) lists this id with Parameters 2.8T, Context Length 1M and Best For \"State-of-the-art open-weight intelligence for coding, reasoning, and multimodal work\". contextWindow 1,000,000 is NeuroLink's decimal reading of the label 1M. Pricing row \"Kimi K3 — Multimodal intelligence, 1M context\" on https://telnyx.com/pricing/inference-api: $2.70 input, $0.27 cached input, $13.50 output per 1M tokens. vision is a placeholder (see setup.description)."
68
+ },
69
+ "moonshotai/Kimi-K2.6": {
70
+ "contextWindow": 256000,
71
+ "pricingPerMTok": {
72
+ "input": 0.665,
73
+ "output": 4,
74
+ "cachedInput": 0.08
75
+ },
76
+ "vision": false,
77
+ "status": "production",
78
+ "description": "Fallback. The models page (https://developers.telnyx.com/docs/inference/models, retrieved 2026-09-29) lists this id with Parameters 1.0T, Context Length 256K, Best For \"Voice AI\" and, in its Voice AI column, \"Verified — default\". The Get available models reference (https://developers.telnyx.com/api-reference/openai-chat/get-available-models-openai-compatible) uses this id as its example. contextWindow 256,000 is NeuroLink's decimal reading of the label 256K. Pricing row \"Kimi K2.6 — Highest intelligence, voice AI\" on https://telnyx.com/pricing/inference-api: $0.665 input, $0.08 cached input, $4 output per 1M tokens. vision is a placeholder (see setup.description)."
79
+ },
80
+ "zai-org/GLM-5.2": {
81
+ "contextWindow": 1000000,
82
+ "pricingPerMTok": {
83
+ "input": 1,
84
+ "output": 4,
85
+ "cachedInput": 0.2
86
+ },
87
+ "vision": false,
88
+ "status": "production",
89
+ "description": "Fallback. The models page (https://developers.telnyx.com/docs/inference/models, retrieved 2026-09-29) lists this id with Parameters 753.9B, Context Length 1M, Best For \"Coding, reasoning, 1M context window\" and, in its Voice AI column, \"Verified\". contextWindow 1,000,000 is NeuroLink's decimal reading of the label 1M. Pricing row \"GLM-5.2 — Next-gen efficient reasoning\" on https://telnyx.com/pricing/inference-api: $1 input, $0.20 cached input, $4 output per 1M tokens. vision is a placeholder (see setup.description)."
90
+ },
91
+ "MiniMaxAI/MiniMax-M3-MXFP8": {
92
+ "contextWindow": 1000000,
93
+ "pricingPerMTok": {
94
+ "input": 0.27,
95
+ "output": 1.1,
96
+ "cachedInput": 0.08
97
+ },
98
+ "vision": false,
99
+ "status": "production",
100
+ "description": "Fallback. The models page (https://developers.telnyx.com/docs/inference/models, retrieved 2026-09-29) lists this id with Parameters 428B, Context Length 1M and Best For \"Cheapest while maintaining high intelligence\". contextWindow 1,000,000 is NeuroLink's decimal reading of the label 1M. Pricing row \"MiniMax-M3 — Cheapest while maintaining high intelligence\" on https://telnyx.com/pricing/inference-api (named without the -MXFP8 suffix; its text is the same as this id's Best For cell): $0.27 input, $0.08 cached input, $1.10 output per 1M tokens. vision is a placeholder (see setup.description)."
101
+ },
102
+ "deepseek-ai/DeepSeek-V4-Flash-0731": {
103
+ "contextWindow": 1000000,
104
+ "vision": false,
105
+ "status": "production",
106
+ "description": "Fallback. The models page (https://developers.telnyx.com/docs/inference/models, retrieved 2026-09-29) lists this id with Parameters 304B, Context Length 1M and Best For \"Advanced coding, tool use, and long-horizon agentic workflows\". contextWindow 1,000,000 is NeuroLink's decimal reading of the label 1M. pricingPerMTok is not set. vision is a placeholder (see setup.description)."
107
+ },
108
+ "Qwen/Qwen3.8-27B": {
109
+ "contextWindow": 256000,
110
+ "pricingPerMTok": {
111
+ "input": 0.4,
112
+ "output": 3,
113
+ "cachedInput": 0.05
114
+ },
115
+ "vision": false,
116
+ "status": "production",
117
+ "description": "Fallback. The models page (https://developers.telnyx.com/docs/inference/models, retrieved 2026-09-29) lists this id with Parameters 27B, Context Length 256K, Best For \"Multimodal coding and visual understanding across documents, diagrams, and video\" and, in its Voice AI column, \"Not supported\". contextWindow 256,000 is NeuroLink's decimal reading of the label 256K. Pricing row \"Qwen 3.8 27B — Lightweight open-weight reasoning\" on https://telnyx.com/pricing/inference-api: $0.40 input, $0.05 cached input, $3 output per 1M tokens. vision is a placeholder (see setup.description)."
118
+ }
119
+ },
120
+ "topModels": [
121
+ "zai-org/GLM-5.3-Flash",
122
+ "zai-org/GLM-5.3",
123
+ "deepseek-ai/DeepSeek-V4.1-Flash",
124
+ "moonshotai/Kimi-K3",
125
+ "moonshotai/Kimi-K2.6",
126
+ "zai-org/GLM-5.2",
127
+ "MiniMaxAI/MiniMax-M3-MXFP8",
128
+ "deepseek-ai/DeepSeek-V4-Flash-0731",
129
+ "Qwen/Qwen3.8-27B"
130
+ ]
131
+ },
132
+ "capabilities": {
133
+ "text": true,
134
+ "streaming": true,
135
+ "tools": true,
136
+ "toolsWithStreaming": true,
137
+ "structuredOutput": true,
138
+ "structuredOutputWithTools": false,
139
+ "embeddings": false,
140
+ "thinking": false
141
+ },
142
+ "errorRules": [
143
+ {
144
+ "status": 401,
145
+ "class": "authentication",
146
+ "message": "Telnyx returned HTTP 401. Check {apiKeyEnvVar}. Create a key: {setupUrl}"
147
+ }
148
+ ],
149
+ "setup": {
150
+ "url": "https://portal.telnyx.com/#/app/auth/v2",
151
+ "apiKeyFormat": null,
152
+ "billingPolicy": "no-free-tier",
153
+ "instructions": [
154
+ "1. Visit: https://telnyx.com/sign-up and create a Telnyx account — the Inference API Quickstart (https://developers.telnyx.com/docs/inference/getting-started) lists a \"Telnyx account\" and an \"API Key\" under Prerequisites",
155
+ "2. Create an API key at https://portal.telnyx.com/#/app/auth/v2, the link the Quickstart gives for the API Key",
156
+ "3. Authentication is HTTP Bearer: the Service tiers page (https://developers.telnyx.com/docs/inference/service-tiers) shows a curl request to https://api.telnyx.com/v2/ai/openai/models with the header Authorization: Bearer $TELNYX_API_KEY",
157
+ "4. Billing as the vendor states it: the Inference pricing page (https://telnyx.com/pricing/inference-api) shows a plan named PAY AS YOU GO described as \"Standard rates. Card on file. Automatic tier discounts as usage crosses thresholds, no contract needed.\", and the docs pricing page (https://developers.telnyx.com/docs/inference/models/pricing) says \"Pay-per-token. No minimums, no commitments.\"",
158
+ "5. Set {apiKeyEnvVar} in your .env file (the docs' examples read TELNYX_API_KEY)"
159
+ ],
160
+ "description": "Docs-verified only: the vendor's GET https://api.telnyx.com/v2/ai/openai/models needs a key (it answers HTTP 401 without one), so the nine model ids come from the models page (https://developers.telnyx.com/docs/inference/models, retrieved 2026-09-29) and the roster has not been checked; the entry is not yet live-verified. OpenAI-compatible endpoint at https://api.telnyx.com/v2/ai/openai: the Quickstart (https://developers.telnyx.com/docs/inference/getting-started) says \"The Inference API is OpenAI-compatible.\" and shows the OpenAI Python SDK with base_url \"https://api.telnyx.com/v2/ai/openai\"; the Chat Completions reference (https://developers.telnyx.com/api-reference/openai-chat/create-a-chat-completion-openai-compatible) documents POST /ai/openai/chat/completions under the server https://api.telnyx.com/v2. Unauthenticated GETs made 2026-09-29: /models answered HTTP 401 with header www-authenticate: Bearer resource_metadata=\"https://api.telnyx.com/.well-known/oauth-protected-resource\" and a JSON body whose first errors entry has code \"10009\", title \"Authentication failed\" and detail \"Could not find any usable credentials in the request.\"; /chat/completions answered HTTP 404 with code \"10005\" and title \"Resource not found\". No POST request was sent. errorRules holds one rule, for status 401. pricingPerMTok is read from the second of the three chat-completions tables on https://telnyx.com/pricing/inference-api (the page's selector lists Flex, Default and Priority in that order; the docs pricing page, https://developers.telnyx.com/docs/inference/models/pricing, says omitting service_tier uses default). The pricing rows are named by display name, and NeuroLink matched each row to a models-page id; the row \"DeepSeek V4 Flash — Ultra-fast, cost-efficient inference\" is not matched to a models-page id, so deepseek-ai/DeepSeek-V4-Flash-0731 has no pricingPerMTok. Each model's contextWindow is NeuroLink's decimal reading of the models page's Context Length label (1M or 256K). models.defaultContextWindow (128000) is a placeholder the vendor does not publish, for model ids outside models.catalog. models.defaultMaxOutputTokens (8192) equals the max_tokens default the Chat Completions reference states; it is a placeholder, not a per-model limit. Each model's vision field holds false, a placeholder for a boolean the catalog schema requires; it is not a vendor statement. Each model's status field holds production, a placeholder for a value the catalog schema requires; it is not a vendor statement. capabilities.tools is true because the Function Calling page (https://developers.telnyx.com/docs/inference/functions) says \"While we recommend you start with this model, every model in our API supports the tools interface.\" capabilities.toolsWithStreaming is true because the Streaming and Parallel Calls page (https://developers.telnyx.com/docs/inference/streaming-functions) shows a chat completion with tools and stream=True on zai-org/GLM-5.3-Flash. capabilities.structuredOutput is true because the JSON Mode page (https://developers.telnyx.com/docs/inference/json-mode) documents response_format with type json_schema and type json_object and the Chat Completions reference lists json_object and json_schema. These capabilities were not exercised: no key was available. capabilities.structuredOutputWithTools is false because no request combining tools and a schema was sent. capabilities.embeddings is false because NeuroLink's generic catalog provider does not implement embed(); the models page lists three embedding models on POST /v2/ai/openai/embeddings. capabilities.thinking is false because the entry sets no reasoning request parameter, although the Chat Completions reference documents reasoning_effort. billingPolicy holds the schema value no-free-tier because the catalog schema has no unknown value; it is not a vendor statement of signup terms. apiKeyFormat is null so NeuroLink's key-format check is not applied."
161
+ },
162
+ "evidence": {
163
+ "rosterVerified": {
164
+ "date": "2026-09-29",
165
+ "status": 401,
166
+ "method": "docs-only — unauthenticated GET https://api.telnyx.com/v2/ai/openai/models answers 401 without a key, so model ids are taken from https://developers.telnyx.com/docs/inference/models (retrieved 2026-09-29); roster not verified"
167
+ },
168
+ "authProbe": {
169
+ "date": "2026-09-29",
170
+ "status": 401,
171
+ "code": "10009",
172
+ "method": "unauthenticated GET https://api.telnyx.com/v2/ai/openai/models with no credentials — HTTP 401, header www-authenticate: Bearer resource_metadata=\"https://api.telnyx.com/.well-known/oauth-protected-resource\", JSON body errors[0] code \"10009\", title \"Authentication failed\", detail \"Could not find any usable credentials in the request.\"; the same day an unauthenticated GET https://api.telnyx.com/v2/ai/openai/chat/completions answered HTTP 404 with JSON body errors[0] code \"10005\", title \"Resource not found\"; credential-free, no key used, no POST request sent"
173
+ },
174
+ "billingProbe": {
175
+ "date": "2026-09-29",
176
+ "method": "public pages https://telnyx.com/pricing/inference-api (PAY AS YOU GO plan: \"Standard rates. Card on file. Automatic tier discounts as usage crosses thresholds, no contract needed.\") and https://developers.telnyx.com/docs/inference/models/pricing (\"Pay-per-token. No minimums, no commitments.\"); credential-free, no signup performed"
177
+ },
178
+ "liveMatrix": null,
179
+ "addedInPR": "https://github.com/juspay/neurolink/pull/1862"
180
+ }
181
+ }
@@ -0,0 +1,212 @@
1
+ {
2
+ "$schema": "./provider-catalog.schema.json",
3
+ "id": "thinking-machines",
4
+ "displayName": "Thinking Machines",
5
+ "aliases": ["tinker"],
6
+ "tier": 2,
7
+ "wire": {
8
+ "baseURL": "https://tinker.thinkingmachines.dev/services/tinker-prod/oai/api/v1",
9
+ "apiKeyFallbackEnvVars": ["TINKER_API_KEY"]
10
+ },
11
+ "models": {
12
+ "default": "moonshotai/Kimi-K2.6",
13
+ "fallbacks": ["Qwen/Qwen3.8-27B", "openai/gpt-oss-120b", "Qwen/Qwen3-8B"],
14
+ "defaultContextWindow": 32768,
15
+ "defaultMaxOutputTokens": 8192,
16
+ "catalog": {
17
+ "moonshotai/Kimi-K2.6": {
18
+ "contextWindow": 32768,
19
+ "pricingPerMTok": {
20
+ "input": 2.205,
21
+ "output": 5.49,
22
+ "cachedInput": 0.441
23
+ },
24
+ "vision": false,
25
+ "status": "preview",
26
+ "description": "NeuroLink default. The OpenCode tutorial (https://tinker-docs.thinkingmachines.ai/tutorials/deployment/opencode/, retrieved 2026-09-29), section \"Using a base model (no fine-tuning)\", says \"You can also point at a base model on Tinker's sampler:\" and shows a models entry keyed by this id with \"name\": \"Kimi K2.6\" and \"limit\": { \"context\": 32768, \"output\": 8192 }. The tutorial's Step 2 provider config sets options.baseURL to https://tinker.thinkingmachines.dev/services/tinker-prod/oai/api/v1. Models & Pricing page (https://tinker-docs.thinkingmachines.ai/tinker/models/, retrieved 2026-09-29), Training table row Kimi-K2.6: Context 32K, Size 1T, Active 32B, Arch MoE, Type \"Hybrid + Vision\", Tinker ID moonshotai/Kimi-K2.6, Prefill $2.205 ($0.441 cached), Sample $5.49 per million tokens. The page's Model Types section says Hybrid models \"Run in both thinking and non-thinking modes.\" It says Vision models are \"Vision-language models that accept images alongside text.\" The Model Deprecations page (https://tinker-docs.thinkingmachines.ai/tinker/model-deprecations/) lists it under \"Recommended replacement\" for Kimi-K2.5 and Kimi-K2-Thinking. contextWindow is the Context label read with K = 1024. vision is false, meaning image input through /chat/completions is not declared by this entry. status preview follows the OpenAI-compatible page title \"OpenAI API Compatible Inference (in beta)\"; the schema requires a value and it is not a per-model vendor statement."
27
+ },
28
+ "Qwen/Qwen3.8-27B": {
29
+ "contextWindow": 65536,
30
+ "pricingPerMTok": {
31
+ "input": 1.86,
32
+ "output": 5.595,
33
+ "cachedInput": 0.372
34
+ },
35
+ "vision": false,
36
+ "status": "preview",
37
+ "description": "Fallback. Models & Pricing page (https://tinker-docs.thinkingmachines.ai/tinker/models/, retrieved 2026-09-29), Training table row Qwen3.8-27B: Context 64K, Size 27B, Active 27B, Arch Dense, Type \"Hybrid + Vision\", Tinker ID Qwen/Qwen3.8-27B, Prefill $1.86 ($0.372 cached), Sample $5.595 per million tokens. The page's Model Types section says Hybrid models \"Run in both thinking and non-thinking modes.\" It says Vision models are \"Vision-language models that accept images alongside text.\" The Model Deprecations page (https://tinker-docs.thinkingmachines.ai/tinker/model-deprecations/) lists it under \"Recommended replacement\" for Qwen3.6-27B. contextWindow is the Context label read with K = 1024. vision is false, meaning image input through /chat/completions is not declared by this entry. status preview follows the OpenAI-compatible page title \"OpenAI API Compatible Inference (in beta)\"; the schema requires a value and it is not a per-model vendor statement."
38
+ },
39
+ "Qwen/Qwen3.6-35B-A3B": {
40
+ "contextWindow": 65536,
41
+ "pricingPerMTok": {
42
+ "input": 0.54,
43
+ "output": 1.335,
44
+ "cachedInput": 0.108
45
+ },
46
+ "vision": false,
47
+ "status": "preview",
48
+ "description": "Models & Pricing page (https://tinker-docs.thinkingmachines.ai/tinker/models/, retrieved 2026-09-29), Training table row Qwen3.6-35B-A3B: Context 64K, Size 35B, Active 3B, Arch MoE, Type \"Hybrid + Vision\", Tinker ID Qwen/Qwen3.6-35B-A3B, Prefill $0.54 ($0.108 cached), Sample $1.335 per million tokens. The page's Model Types section says Hybrid models \"Run in both thinking and non-thinking modes.\" It says Vision models are \"Vision-language models that accept images alongside text.\" The Model Deprecations page (https://tinker-docs.thinkingmachines.ai/tinker/model-deprecations/) lists it under \"Recommended replacement\" for Qwen3.5-35B-A3B and Qwen3-30B-A3B. contextWindow is the Context label read with K = 1024. vision is false, meaning image input through /chat/completions is not declared by this entry. status preview follows the OpenAI-compatible page title \"OpenAI API Compatible Inference (in beta)\"; the schema requires a value and it is not a per-model vendor statement."
49
+ },
50
+ "Qwen/Qwen3.5-397B-A17B": {
51
+ "contextWindow": 65536,
52
+ "pricingPerMTok": {
53
+ "input": 3.0,
54
+ "output": 7.5,
55
+ "cachedInput": 0.6
56
+ },
57
+ "vision": false,
58
+ "status": "preview",
59
+ "description": "Models & Pricing page (https://tinker-docs.thinkingmachines.ai/tinker/models/, retrieved 2026-09-29), Training table row Qwen3.5-397B-A17B: Context 64K, Size 397B, Active 17B, Arch MoE, Type \"Hybrid + Vision\", Tinker ID Qwen/Qwen3.5-397B-A17B, Prefill $3.00 ($0.60 cached), Sample $7.50 per million tokens. The page's Model Types section says Hybrid models \"Run in both thinking and non-thinking modes.\" It says Vision models are \"Vision-language models that accept images alongside text.\" The Model Deprecations page (https://tinker-docs.thinkingmachines.ai/tinker/model-deprecations/) lists it under \"Recommended replacement\" for Qwen3-235B-A22B-Instruct-2507 and Qwen3-VL-235B-A22B-Instruct. contextWindow is the Context label read with K = 1024. vision is false, meaning image input through /chat/completions is not declared by this entry. status preview follows the OpenAI-compatible page title \"OpenAI API Compatible Inference (in beta)\"; the schema requires a value and it is not a per-model vendor statement."
60
+ },
61
+ "Qwen/Qwen3.5-9B": {
62
+ "contextWindow": 65536,
63
+ "pricingPerMTok": {
64
+ "input": 0.66,
65
+ "output": 1.995,
66
+ "cachedInput": 0.132
67
+ },
68
+ "vision": false,
69
+ "status": "preview",
70
+ "description": "Models & Pricing page (https://tinker-docs.thinkingmachines.ai/tinker/models/, retrieved 2026-09-29), Training table row Qwen3.5-9B: Context 64K, Size 9B, Active 9B, Arch Dense, Type \"Hybrid + Vision\", Tinker ID Qwen/Qwen3.5-9B, Prefill $0.66 ($0.132 cached), Sample $1.995 per million tokens. The page's Model Types section says Hybrid models \"Run in both thinking and non-thinking modes.\" It says Vision models are \"Vision-language models that accept images alongside text.\" The Model Deprecations page (https://tinker-docs.thinkingmachines.ai/tinker/model-deprecations/) lists it under \"Recommended replacement\" for Llama-3.1-8B-Instruct. contextWindow is the Context label read with K = 1024. vision is false, meaning image input through /chat/completions is not declared by this entry. status preview follows the OpenAI-compatible page title \"OpenAI API Compatible Inference (in beta)\"; the schema requires a value and it is not a per-model vendor statement."
71
+ },
72
+ "Qwen/Qwen3.5-4B": {
73
+ "contextWindow": 65536,
74
+ "pricingPerMTok": {
75
+ "input": 0.33,
76
+ "output": 1.005,
77
+ "cachedInput": 0.066
78
+ },
79
+ "vision": false,
80
+ "status": "preview",
81
+ "description": "Models & Pricing page (https://tinker-docs.thinkingmachines.ai/tinker/models/, retrieved 2026-09-29), Training table row Qwen3.5-4B: Context 64K, Size 4B, Active 4B, Arch Dense, Type \"Hybrid + Vision\", Tinker ID Qwen/Qwen3.5-4B, Prefill $0.33 ($0.066 cached), Sample $1.005 per million tokens. The page's Model Types section says Hybrid models \"Run in both thinking and non-thinking modes.\" It says Vision models are \"Vision-language models that accept images alongside text.\" The Model Deprecations page (https://tinker-docs.thinkingmachines.ai/tinker/model-deprecations/) lists it under \"Recommended replacement\" for Qwen3-4B-Instruct-2507. contextWindow is the Context label read with K = 1024. vision is false, meaning image input through /chat/completions is not declared by this entry. status preview follows the OpenAI-compatible page title \"OpenAI API Compatible Inference (in beta)\"; the schema requires a value and it is not a per-model vendor statement."
82
+ },
83
+ "Qwen/Qwen3-8B": {
84
+ "contextWindow": 32768,
85
+ "pricingPerMTok": {
86
+ "input": 0.195,
87
+ "output": 0.6,
88
+ "cachedInput": 0.039
89
+ },
90
+ "vision": false,
91
+ "status": "preview",
92
+ "description": "Fallback. Models & Pricing page (https://tinker-docs.thinkingmachines.ai/tinker/models/, retrieved 2026-09-29), Training table row Qwen3-8B: Context 32K, Size 8B, Active 8B, Arch Dense, Type \"Hybrid\", Tinker ID Qwen/Qwen3-8B, Prefill $0.195 ($0.039 cached), Sample $0.60 per million tokens. The page's Model Types section says Hybrid models \"Run in both thinking and non-thinking modes.\" The Anthropic-Compatible API page (https://tinker-docs.thinkingmachines.ai/tinker/compatible-apis/anthropic/), which documents a separate endpoint, says \"another base model name (for example Qwen/Qwen3-8B)\". contextWindow is the Context label read with K = 1024. vision is false, meaning not declared by this entry. status preview follows the OpenAI-compatible page title \"OpenAI API Compatible Inference (in beta)\"; the schema requires a value and it is not a per-model vendor statement."
93
+ },
94
+ "openai/gpt-oss-120b": {
95
+ "contextWindow": 32768,
96
+ "pricingPerMTok": {
97
+ "input": 0.33,
98
+ "output": 0.84,
99
+ "cachedInput": 0.066
100
+ },
101
+ "vision": false,
102
+ "status": "preview",
103
+ "description": "Fallback. Models & Pricing page (https://tinker-docs.thinkingmachines.ai/tinker/models/, retrieved 2026-09-29), Training table row GPT-OSS-120B: Context 32K, Size 117B, Active 5B, Arch MoE, Type \"Reasoning\", Tinker ID openai/gpt-oss-120b, Prefill $0.33 ($0.066 cached), Sample $0.84 per million tokens. The page's Model Types section says Reasoning models \"Always produce chain-of-thought before their answer.\" contextWindow is the Context label read with K = 1024. vision is false, meaning not declared by this entry. status preview follows the OpenAI-compatible page title \"OpenAI API Compatible Inference (in beta)\"; the schema requires a value and it is not a per-model vendor statement."
104
+ },
105
+ "openai/gpt-oss-20b": {
106
+ "contextWindow": 32768,
107
+ "pricingPerMTok": {
108
+ "input": 0.18,
109
+ "output": 0.45,
110
+ "cachedInput": 0.036
111
+ },
112
+ "vision": false,
113
+ "status": "preview",
114
+ "description": "Models & Pricing page (https://tinker-docs.thinkingmachines.ai/tinker/models/, retrieved 2026-09-29), Training table row GPT-OSS-20B: Context 32K, Size 21B, Active 3.6B, Arch MoE, Type \"Reasoning\", Tinker ID openai/gpt-oss-20b, Prefill $0.18 ($0.036 cached), Sample $0.45 per million tokens. The page's Model Types section says Reasoning models \"Always produce chain-of-thought before their answer.\" contextWindow is the Context label read with K = 1024. vision is false, meaning not declared by this entry. status preview follows the OpenAI-compatible page title \"OpenAI API Compatible Inference (in beta)\"; the schema requires a value and it is not a per-model vendor statement."
115
+ },
116
+ "deepseek-ai/DeepSeek-V3.1": {
117
+ "contextWindow": 32768,
118
+ "pricingPerMTok": {
119
+ "input": 1.695,
120
+ "output": 4.215,
121
+ "cachedInput": 0.339
122
+ },
123
+ "vision": false,
124
+ "status": "preview",
125
+ "description": "Models & Pricing page (https://tinker-docs.thinkingmachines.ai/tinker/models/, retrieved 2026-09-29), Training table row DeepSeek-V3.1: Context 32K, Size 671B, Active 37B, Arch MoE, Type \"Hybrid\", Tinker ID deepseek-ai/DeepSeek-V3.1, Prefill $1.695 ($0.339 cached), Sample $4.215 per million tokens. The page's Model Types section says Hybrid models \"Run in both thinking and non-thinking modes.\" contextWindow is the Context label read with K = 1024. vision is false, meaning not declared by this entry. status preview follows the OpenAI-compatible page title \"OpenAI API Compatible Inference (in beta)\"; the schema requires a value and it is not a per-model vendor statement."
126
+ },
127
+ "zai-org/GLM-5.3:peft:262144": {
128
+ "contextWindow": 262144,
129
+ "pricingPerMTok": {
130
+ "input": 4.86,
131
+ "output": 12.15,
132
+ "cachedInput": 0.972
133
+ },
134
+ "vision": false,
135
+ "status": "preview",
136
+ "description": "Models & Pricing page (https://tinker-docs.thinkingmachines.ai/tinker/models/, retrieved 2026-09-29), Training table row GLM-5.3 (256K): Context 256K, Size 753B, Active 40B, Arch MoE, Type \"Reasoning\", Tinker ID zai-org/GLM-5.3:peft:262144, Prefill $4.86 ($0.972 cached), Sample $12.15 per million tokens. The page's Model Types section says Reasoning models \"Always produce chain-of-thought before their answer.\" contextWindow 262144 matches the 256K label and the :peft:262144 suffix in the id. vision is false, meaning not declared by this entry. status preview follows the OpenAI-compatible page title \"OpenAI API Compatible Inference (in beta)\"; the schema requires a value and it is not a per-model vendor statement."
137
+ },
138
+ "nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-BF16": {
139
+ "contextWindow": 65536,
140
+ "pricingPerMTok": {
141
+ "input": 0.57,
142
+ "output": 1.44,
143
+ "cachedInput": 0.114
144
+ },
145
+ "vision": false,
146
+ "status": "preview",
147
+ "description": "Models & Pricing page (https://tinker-docs.thinkingmachines.ai/tinker/models/, retrieved 2026-09-29), Training table row Nemotron-3-Super-120B-A12B: Context 64K, Size 120B, Active 12B, Arch MoE, Type \"Hybrid\", Tinker ID nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-BF16, Prefill $0.57 ($0.114 cached), Sample $1.44 per million tokens. The row carries the note \"Limited-time 50% discount\"; the page shows Prefill $1.14 and Sample $2.88 struck through, and pricingPerMTok holds the current figures. The page's Model Types section says Hybrid models \"Run in both thinking and non-thinking modes.\" The Model Deprecations page (https://tinker-docs.thinkingmachines.ai/tinker/model-deprecations/) lists Nemotron-3-Super-120B-A12B among the \"Recommended replacement\" entries for Llama-3.3-70B-Instruct. contextWindow is the Context label read with K = 1024. vision is false, meaning not declared by this entry. status preview follows the OpenAI-compatible page title \"OpenAI API Compatible Inference (in beta)\"; the schema requires a value and it is not a per-model vendor statement."
148
+ }
149
+ },
150
+ "topModels": [
151
+ "moonshotai/Kimi-K2.6",
152
+ "Qwen/Qwen3.8-27B",
153
+ "Qwen/Qwen3.6-35B-A3B",
154
+ "Qwen/Qwen3.5-397B-A17B",
155
+ "Qwen/Qwen3.5-9B",
156
+ "Qwen/Qwen3.5-4B",
157
+ "Qwen/Qwen3-8B",
158
+ "openai/gpt-oss-120b",
159
+ "openai/gpt-oss-20b",
160
+ "deepseek-ai/DeepSeek-V3.1",
161
+ "zai-org/GLM-5.3:peft:262144",
162
+ "nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-BF16"
163
+ ]
164
+ },
165
+ "capabilities": {
166
+ "text": true,
167
+ "streaming": true,
168
+ "tools": false,
169
+ "toolsWithStreaming": false,
170
+ "structuredOutput": false,
171
+ "structuredOutputWithTools": false,
172
+ "embeddings": false,
173
+ "thinking": true
174
+ },
175
+ "errorRules": [
176
+ {
177
+ "status": 401,
178
+ "class": "authentication",
179
+ "message": "Thinking Machines answered HTTP 401. Check {apiKeyEnvVar}. Get a key at {setupUrl}"
180
+ }
181
+ ],
182
+ "setup": {
183
+ "url": "https://tinker.thinkingmachines.ai/keys",
184
+ "apiKeyFormat": null,
185
+ "billingPolicy": "no-free-tier",
186
+ "instructions": [
187
+ "1. Visit: https://tinker.thinkingmachines.ai/keys — the Quickstart (https://tinker-docs.thinkingmachines.ai/tinker/quickstart/) says \"Or create an API key in the Tinker Console and set it as the TINKER_API_KEY environment variable.\"; an unauthenticated GET of that URL redirects to a page titled \"Sign in\" (sign-in was not attempted while building this entry)",
188
+ "2. Authentication as the vendor states it: the OpenAI-compatible page (https://tinker-docs.thinkingmachines.ai/tinker/compatible-apis/openai/) says \"Authenticate with your Tinker API key, by passing the same key used for Tinker as the API key to the OpenAI client.\"; its code example reads the key from TINKER_API_KEY",
189
+ "3. Billing as the vendor states it: the Quickstart (https://tinker-docs.thinkingmachines.ai/tinker/quickstart/) says \"Set up payment info in Billing, and see Models & Pricing for current training and sampling rates.\" (the Billing link goes to https://tinker.thinkingmachines.ai/billing/), and the Models & Pricing page (https://tinker-docs.thinkingmachines.ai/tinker/models/) says \"All prices are per million tokens.\"",
190
+ "4. Set {apiKeyEnvVar} in your .env file (the vendor's examples read TINKER_API_KEY, which NeuroLink accepts as a fallback)"
191
+ ],
192
+ "description": "Docs-verified only: the vendor's GET https://tinker.thinkingmachines.dev/services/tinker-prod/oai/api/v1/models needs a key (an unauthenticated GET on 2026-09-29 answered HTTP 401 with the JSON body {\"detail\":\"X-Api-Key token is empty\"}), so the twelve model ids come from the Training table on https://tinker-docs.thinkingmachines.ai/tinker/models/ (retrieved 2026-09-29) and the roster has not been checked; the entry is not yet live-verified. OpenAI-compatible endpoint at https://tinker.thinkingmachines.dev/services/tinker-prod/oai/api/v1: the OpenAI-compatible page (https://tinker-docs.thinkingmachines.ai/tinker/compatible-apis/openai/, titled \"OpenAI API Compatible Inference (in beta)\") says \"The new interface exposes an OpenAI-compatible HTTP API.\", gives that base URL, says \"We support both /completions and /chat/completions endpoints.\" and says \"Currently, OpenAI-compatible inference is meant for testing and internal use with low internal traffic, rather than large, high-throughput, user-facing deployments.\" The same page says \"Use a Tinker sampler weight path as the model name.\" and shows a sampler weight path that begins with tinker://. moonshotai/Kimi-K2.6 is the catalog id that the OpenCode tutorial (https://tinker-docs.thinkingmachines.ai/tutorials/deployment/opencode/) shows as a models entry under the \"Using a base model (no fine-tuning)\" heading; the other eleven catalog ids are Tinker IDs from the Models & Pricing Training table. A tinker:// path passed as the model is an id outside the catalog. Unauthenticated GETs made 2026-09-29: /models answered HTTP 401 (content-type application/json) with the body {\"detail\":\"X-Api-Key token is empty\"}; /chat/completions answered HTTP 405 with header allow: POST and the body {\"detail\":\"Method Not Allowed\"}; the base URL itself answered HTTP 404 with the body {\"detail\":\"Not Found\"}. No POST request was sent. errorRules holds one rule, for the 401 status observed on /models. pricingPerMTok input is the Prefill figure, output is the Sample figure and cachedInput is the cached Prefill figure of each Training-table row; the page's Pricing Terms define Prefill as \"Processing input/prompt tokens when sampling\" and Sample as \"Generating output tokens\". models.defaultContextWindow (32768) is the figure in the OpenCode tutorial's Config fields table (https://tinker-docs.thinkingmachines.ai/tutorials/deployment/opencode/): \"Max input tokens (32768 for most Tinker models)\"; models.defaultMaxOutputTokens (8192) is the \"output\" figure in both example configs of that tutorial, whose Config fields table describes limit.output as \"Max output tokens\"; the catalog rows do not set maxOutputTokens, so the default applies to them. capabilities.text is true because the page documents /chat/completions; capabilities.streaming is true because the page describes streaming on /chat/completions (\"In streaming mode, reasoning_content and content arrive on separate SSE events\"); capabilities.thinking is true because the page documents the separate_reasoning flag and the reasoning_effort parameter on /chat/completions (\"Not all models support this parameter.\"). capabilities.tools, toolsWithStreaming, structuredOutput and structuredOutputWithTools are false, meaning not declared by this entry: with tools false the provider's supportsTools() answers false and no tools array is sent, and no POST request exercising these was sent. capabilities.embeddings is false, not declared. billingPolicy no-free-tier is a schema placeholder (the schema has no unknown value), not a vendor statement. apiKeyFormat is null so NeuroLink's key-format check is not applied. Verification level: docs-verified, not yet live-verified."
193
+ },
194
+ "evidence": {
195
+ "rosterVerified": {
196
+ "date": "2026-09-29",
197
+ "status": 401,
198
+ "method": "docs-only — unauthenticated GET https://tinker.thinkingmachines.dev/services/tinker-prod/oai/api/v1/models answers 401 without a key, so model ids are taken from https://tinker-docs.thinkingmachines.ai/tinker/models/ (retrieved 2026-09-29); roster not verified"
199
+ },
200
+ "authProbe": {
201
+ "date": "2026-09-29",
202
+ "status": 401,
203
+ "method": "unauthenticated GET https://tinker.thinkingmachines.dev/services/tinker-prod/oai/api/v1/models with no credentials — HTTP 401, content-type application/json, JSON body {\"detail\":\"X-Api-Key token is empty\"}; the body has no code field, so no code is recorded; the same day an unauthenticated GET https://tinker.thinkingmachines.dev/services/tinker-prod/oai/api/v1/chat/completions answered HTTP 405 with header allow: POST and JSON body {\"detail\":\"Method Not Allowed\"}; credential-free, no key used, no POST request sent"
204
+ },
205
+ "billingProbe": {
206
+ "date": "2026-09-29",
207
+ "method": "public page https://tinker-docs.thinkingmachines.ai/tinker/quickstart/ — Billing section: \"Set up payment info in Billing, and see Models & Pricing for current training and sampling rates.\"; credential-free, no signup performed"
208
+ },
209
+ "liveMatrix": null,
210
+ "addedInPR": "https://github.com/juspay/neurolink/pull/1862"
211
+ }
212
+ }
@@ -0,0 +1,109 @@
1
+ {
2
+ "$schema": "./provider-catalog.schema.json",
3
+ "id": "vispark",
4
+ "displayName": "Vispark",
5
+ "aliases": [],
6
+ "tier": 2,
7
+ "wire": {
8
+ "baseURL": "https://api.lab.vispark.in/v1"
9
+ },
10
+ "models": {
11
+ "default": "vispark/vision-large",
12
+ "fallbacks": ["vispark/vision-medium", "vispark/vision-small"],
13
+ "defaultContextWindow": 128000,
14
+ "defaultMaxOutputTokens": 16384,
15
+ "catalog": {
16
+ "vispark/vision-large": {
17
+ "contextWindow": 1000000,
18
+ "maxOutputTokens": 65536,
19
+ "pricingPerMTok": {
20
+ "input": 7.37,
21
+ "output": 22.11
22
+ },
23
+ "vision": true,
24
+ "status": "production",
25
+ "description": "NeuroLink default. Vendor text for this model: the roster description reads \"Vision Large: India's most advanced foundational intelligence. Delivers state-of-the-art reasoning, SOTA media processing, and complex tool usage. With 1M token context, it handles deep analysis and structured data with unmatched accuracy and cultural depth.\" and the site's size entry \"large\" reads \"Slowest processing but highest intelligence and accuracy\" with the price text \"₹70 input/₹210 output per 100k tokens. Minimum 600 input tokens charged.\" Unauthenticated GET https://api.lab.vispark.in/v1/models (2026-09-29, 3 models): context_length 1000000, max_output_length 65536, pricing.prompt \"0.00000737\" and pricing.completion \"0.00002211\" (pricingPerMTok is these two values times 1,000,000), input_modalities text, image, audio, video, file, output_modalities text, supported_features tools, json_mode, structured_outputs, reasoning. vision is true from the input_modalities entry image and the site text \"Supports images, audio, video, and PDFs (max 25MB each)\". The site's Limitations text for the Vision model reads \"Combined content: 980,000 tokens maximum\". The site text comes from https://lab.vispark.in/assets/index-WmfFPhvJ.js, the script https://lab.vispark.in/ loads (retrieved 2026-09-29)."
26
+ },
27
+ "vispark/vision-medium": {
28
+ "contextWindow": 1000000,
29
+ "maxOutputTokens": 65536,
30
+ "pricingPerMTok": {
31
+ "input": 4.21,
32
+ "output": 12.63
33
+ },
34
+ "vision": true,
35
+ "status": "production",
36
+ "description": "Fallback. Vendor text for this model: the roster description reads \"Vision Medium: A versatile foundational model built for the world on Indian infrastructure. Balances speed with robust reasoning and 1M token context. Excels at content creation, nuanced cultural interactions, and evolving personal assistance.\" and the site's size entry \"medium\" reads \"Balanced processing speed with good intelligence\" with the price text \"₹40 input/₹120 output per 100k tokens. Minimum 600 input tokens charged.\" Unauthenticated GET https://api.lab.vispark.in/v1/models (2026-09-29, 3 models): context_length 1000000, max_output_length 65536, pricing.prompt \"0.00000421\" and pricing.completion \"0.00001263\" (pricingPerMTok is these two values times 1,000,000), input_modalities text, image, audio, video, file, output_modalities text, supported_features tools, json_mode, structured_outputs, reasoning. vision is true from the input_modalities entry image and the site text \"Supports images, audio, video, and PDFs (max 25MB each)\". The site text comes from https://lab.vispark.in/assets/index-WmfFPhvJ.js, the script https://lab.vispark.in/ loads (retrieved 2026-09-29)."
37
+ },
38
+ "vispark/vision-small": {
39
+ "contextWindow": 1000000,
40
+ "maxOutputTokens": 65536,
41
+ "pricingPerMTok": {
42
+ "input": 1.05,
43
+ "output": 3.16
44
+ },
45
+ "vision": true,
46
+ "status": "production",
47
+ "description": "Fallback. Vendor text for this model: the roster description reads \"Vision Small: India's fast and efficient foundational AI. Trained from scratch with native multimodal understanding (text, audio, video) and deep cultural awareness. Features 1M token context for high-throughput, real-time interactions across 250+ languages.\" and the site's size entry \"small\" reads \"Fastest processing speed with basic intelligence\" with the price text \"₹10 input/₹30 output per 100k tokens. Minimum 600 input tokens charged.\" Unauthenticated GET https://api.lab.vispark.in/v1/models (2026-09-29, 3 models): context_length 1000000, max_output_length 65536, pricing.prompt \"0.00000105\" and pricing.completion \"0.00000316\" (pricingPerMTok is these two values times 1,000,000), input_modalities text, image, audio, video, file, output_modalities text, supported_features tools, json_mode, structured_outputs, reasoning. vision is true from the input_modalities entry image and the site text \"Supports images, audio, video, and PDFs (max 25MB each)\". The site text comes from https://lab.vispark.in/assets/index-WmfFPhvJ.js, the script https://lab.vispark.in/ loads (retrieved 2026-09-29)."
48
+ }
49
+ },
50
+ "topModels": [
51
+ "vispark/vision-large",
52
+ "vispark/vision-medium",
53
+ "vispark/vision-small"
54
+ ]
55
+ },
56
+ "capabilities": {
57
+ "text": true,
58
+ "streaming": true,
59
+ "tools": true,
60
+ "toolsWithStreaming": false,
61
+ "structuredOutput": false,
62
+ "structuredOutputWithTools": false,
63
+ "embeddings": false,
64
+ "thinking": false
65
+ },
66
+ "errorRules": [
67
+ {
68
+ "status": 401,
69
+ "class": "authentication",
70
+ "message": "Vispark returned HTTP 401. The site's Limitations text lists 401 in \"Check HTTP status codes (200, 400, 401, 402, 429)\" and says \"Validate API keys and sufficient units\"; the OpenAI Compatibility panel says \"Use your standard API Key as a Bearer Token.\" NeuroLink reads {apiKeyEnvVar}; create a key at {setupUrl}"
71
+ },
72
+ {
73
+ "status": 402,
74
+ "class": "provider",
75
+ "message": "Vispark returned HTTP 402. The site's Limitations text lists 402 in \"Check HTTP status codes (200, 400, 401, 402, 429)\" and says \"Validate API keys and sufficient units\"; the site's script uses \"Insufficient units for this operation\" as the fallback message for this status."
76
+ },
77
+ {
78
+ "status": 429,
79
+ "class": "rate-limit",
80
+ "message": "Vispark returned HTTP 429. The site's Limitations text says \"API rate limit: 240 requests/minute\" and \"Handle rate limiting with exponential backoff\"."
81
+ }
82
+ ],
83
+ "setup": {
84
+ "url": "https://lab.vispark.in/profile",
85
+ "apiKeyFormat": null,
86
+ "billingPolicy": "no-free-tier",
87
+ "instructions": [
88
+ "1. Visit: https://lab.vispark.in/profile and sign in — the playground text reads \"Sign in to run this model.\", and the site links the Vispark account system at https://account.vispark.in",
89
+ "2. Open API Keys in the profile sidebar (the panel is titled \"API Keys\" with the subtitle \"Manage your API keys\"), choose \"Add Key\" and complete the \"Create New API Key\" dialog",
90
+ "3. Authentication is HTTP Bearer: the OpenAI Compatibility panel says \"Use your standard API Key as a Bearer Token.\" and shows Authorization: Bearer <your_api_key>. The site's developer-guide text for the Vision model also lists \"Endpoint: /model/text/vision\" and \"Authentication: X-API-Key: your_api_key_here\", and the ephemeral-key panel \"Using on Model Endpoints\" shows an X-API-Key header and lists \"POST /chat/completions\" under \"Supported endpoints:\". Neither header scheme was exercised: no POST request was sent",
91
+ "4. Billing as the site shows it: the Account tab of the profile page has a \"Buy More Units\" panel with the strings \"₹1 (INR) = 1 unit\" and \"$1 (USD) = ~95 units\"",
92
+ "5. Set {apiKeyEnvVar} in your .env file"
93
+ ],
94
+ "description": "OpenAI-compatible endpoint at https://api.lab.vispark.in/v1. The Vision documentation's OpenAI Compatibility panel says \"This model is compatible with OpenAI-compatible clients.\" and gives the Base URL https://api.lab.vispark.in, Authorization: Bearer <your_api_key> and the model ids vispark/vision-small, vispark/vision-medium and vispark/vision-large; the ephemeral-key panel's Supported endpoints list includes \"POST /chat/completions\". Unauthenticated GETs made 2026-09-29: https://api.lab.vispark.in/v1/models and https://api.lab.vispark.in/models answered HTTP 200 with the same 3-model body; https://api.lab.vispark.in/v1/chat/completions and https://api.lab.vispark.in/chat/completions answered HTTP 405 with an HTML body titled 405 Method Not Allowed. No POST request was sent. The site text is read from the script https://lab.vispark.in/assets/index-WmfFPhvJ.js that https://lab.vispark.in/ loads (retrieved 2026-09-29). errorRules carry the status codes and sentences of the site's Limitations text. pricingPerMTok is the roster's pricing strings times 1,000,000; for vispark/vision-small the site's price text \"₹10 input/₹30 output per 100k tokens\" is ₹100 per 1M input tokens, which at \"$1 (USD) = ~95 units\" is about $1.05, the roster's figure. models.defaultContextWindow (128000) and models.defaultMaxOutputTokens (16384) are NeuroLink placeholders for model ids outside models.catalog, not vendor figures; the roster figures are quoted in the models.catalog descriptions. Each model's status field holds production, a placeholder for a value the catalog schema requires; it is not a vendor statement. billingPolicy no-free-tier is a schema placeholder (the schema has no unknown value), not a vendor statement. Verification level: docs- and roster-verified, not yet live-verified."
95
+ },
96
+ "evidence": {
97
+ "rosterVerified": {
98
+ "date": "2026-09-29",
99
+ "status": 200,
100
+ "method": "unauthenticated GET https://api.lab.vispark.in/v1/models — 3 models; credential-free, no key used"
101
+ },
102
+ "billingProbe": {
103
+ "date": "2026-09-29",
104
+ "method": "public script https://lab.vispark.in/assets/index-WmfFPhvJ.js (retrieved 2026-09-29), Buy More Units panel strings \"₹1 (INR) = 1 unit\" and \"$1 (USD) = ~95 units\"; credential-free, no signup performed"
105
+ },
106
+ "liveMatrix": null,
107
+ "addedInPR": "https://github.com/juspay/neurolink/pull/1862"
108
+ }
109
+ }
@@ -46,6 +46,15 @@ export declare class ConfiguredOpenAICompatProvider extends OpenAIChatCompletion
46
46
  protected getDefaultModel(): string;
47
47
  protected getFallbackModelName(): string;
48
48
  protected getFallbackModels(): string[];
49
+ /**
50
+ * See CatalogQuirks.authHeaderStyle. The base class's default is
51
+ * `Authorization: Bearer <apiKey>`; "x-api-key" vendors (Reka's OpenAPI
52
+ * spec declares exactly one security scheme, an apiKey in header
53
+ * `X-Api-Key`) get that header instead, with no Authorization header sent
54
+ * at all — mirrors AzureOpenAIProvider's own getAuthHeaders() override for
55
+ * its `api-key` header.
56
+ */
57
+ protected getAuthHeaders(): Record<string, string>;
49
58
  /**
50
59
  * The catalog's `capabilities.tools` is the vendor's own answer, probed on
51
60
  * the wire when the entry was written; the model registry (the base
@@ -96,6 +96,20 @@ export class ConfiguredOpenAICompatProvider extends OpenAIChatCompletionsProvide
96
96
  getFallbackModels() {
97
97
  return this.entry.fallbackModels;
98
98
  }
99
+ /**
100
+ * See CatalogQuirks.authHeaderStyle. The base class's default is
101
+ * `Authorization: Bearer <apiKey>`; "x-api-key" vendors (Reka's OpenAPI
102
+ * spec declares exactly one security scheme, an apiKey in header
103
+ * `X-Api-Key`) get that header instead, with no Authorization header sent
104
+ * at all — mirrors AzureOpenAIProvider's own getAuthHeaders() override for
105
+ * its `api-key` header.
106
+ */
107
+ getAuthHeaders() {
108
+ if (this.entry.authHeaderStyle === "x-api-key") {
109
+ return { "X-Api-Key": this.config.apiKey };
110
+ }
111
+ return super.getAuthHeaders();
112
+ }
99
113
  /**
100
114
  * The catalog's `capabilities.tools` is the vendor's own answer, probed on
101
115
  * the wire when the entry was written; the model registry (the base
@@ -78,6 +78,15 @@ export type CatalogQuirks = {
78
78
  * without it once tools are in play). ConfiguredOpenAICompatProvider
79
79
  * turns on the replay; every other provider leaves the field off. */
80
80
  replayReasoningContent?: boolean;
81
+ /** Vendor's chat-completions endpoint authenticates with a vendor-specific
82
+ * header instead of the OpenAI-standard `Authorization: Bearer <key>`.
83
+ * "x-api-key": send `X-Api-Key: <key>` and omit Authorization entirely —
84
+ * Reka's OpenAPI spec declares this as its one security scheme (the
85
+ * OpenAI-SDK-style examples elsewhere in its docs pass the key through a
86
+ * client that still emits this header under the hood). Normalized by
87
+ * ConfiguredOpenAICompatProvider.getAuthHeaders(); omitted means the
88
+ * inherited Bearer default. */
89
+ authHeaderStyle?: "x-api-key";
81
90
  };
82
91
  export type CatalogBillingPolicy = "free-tier" | "free-with-card" | "no-free-tier";
83
92
  export type CatalogSetup = {