@juspay/neurolink 12.41.10 → 12.42.0
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/README.md +2 -2
- package/dist/browser/neurolink.min.js +406 -406
- package/dist/constants/enums.d.ts +195 -0
- package/dist/constants/enums.js +214 -0
- package/dist/providers/catalog/arcee.json +212 -0
- package/dist/providers/catalog/baidu-qianfan.json +170 -0
- package/dist/providers/catalog/byteplus-modelark.json +246 -0
- package/dist/providers/catalog/bytez.json +87 -0
- package/dist/providers/catalog/dashscope.json +165 -0
- package/dist/providers/catalog/gradientai.json +238 -0
- package/dist/providers/catalog/hetzner-inference.json +83 -0
- package/dist/providers/catalog/inceptron.json +145 -0
- package/dist/providers/catalog/index.generated.d.ts +1 -1
- package/dist/providers/catalog/index.generated.js +57 -0
- package/dist/providers/catalog/lemonfox-ai.json +78 -0
- package/dist/providers/catalog/loader.js +3 -0
- package/dist/providers/catalog/meta-model-api.json +150 -0
- package/dist/providers/catalog/modelscope.json +146 -0
- package/dist/providers/catalog/parasail.json +251 -0
- package/dist/providers/catalog/poolside.json +79 -0
- package/dist/providers/catalog/provider-catalog.schema.json +5 -0
- package/dist/providers/catalog/reka.json +112 -0
- package/dist/providers/catalog/sakana-ai.json +162 -0
- package/dist/providers/catalog/schema.d.ts +1 -0
- package/dist/providers/catalog/schema.js +1 -0
- package/dist/providers/catalog/stackit.json +126 -0
- package/dist/providers/catalog/telnyx.json +181 -0
- package/dist/providers/catalog/thinking-machines.json +212 -0
- package/dist/providers/catalog/vispark.json +109 -0
- package/dist/providers/configuredOpenAICompat.d.ts +9 -0
- package/dist/providers/configuredOpenAICompat.js +14 -0
- package/dist/types/providerCatalog.d.ts +9 -0
- package/dist/types/providerCatalog.generated.d.ts +2 -2
- package/dist/types/providers.d.ts +80 -0
- package/docs-site/static/search-index.json +211 -2
- package/package.json +2 -1
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "./provider-catalog.schema.json",
|
|
3
|
+
"id": "poolside",
|
|
4
|
+
"displayName": "Poolside",
|
|
5
|
+
"aliases": [],
|
|
6
|
+
"tier": 2,
|
|
7
|
+
"wire": {
|
|
8
|
+
"baseURL": "https://inference.poolside.ai/v1"
|
|
9
|
+
},
|
|
10
|
+
"models": {
|
|
11
|
+
"default": "poolside/laguna-s-2.1",
|
|
12
|
+
"fallbacks": ["poolside/laguna-s-2.1"],
|
|
13
|
+
"defaultContextWindow": 128000,
|
|
14
|
+
"defaultMaxOutputTokens": 32768,
|
|
15
|
+
"catalog": {
|
|
16
|
+
"poolside/laguna-s-2.1": {
|
|
17
|
+
"vision": false,
|
|
18
|
+
"status": "production",
|
|
19
|
+
"description": "NeuroLink default. Vendor statements about Laguna S 2.1 on https://docs.poolside.ai/get-started/supported-models.md (retrieved 2026-09-29): Parameters \"118B total, 8B active per token\"; Context window \"1M tokens\"; Model type \"Mixture of Experts\"; Modality \"Text-to-text\"; Reasoning \"Native reasoning with thinking on or off per request\". The same page says \"Model availability, provider-specific variants, and model IDs can vary by access method.\" https://docs.poolside.ai/release-notes/models.md (retrieved 2026-09-29) says Laguna S 2.1 is \"built for agentic coding and long-horizon work\" and \"is text-to-text and does not support vision inputs\", so vision is false. The id poolside/laguna-s-2.1 is the model id in the quickstart on https://docs.poolside.ai/api/overview.md and in the examples on https://docs.poolside.ai/api/openai-api-examples.md, which use base URL https://inference.poolside.ai/v1."
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"topModels": ["poolside/laguna-s-2.1"]
|
|
23
|
+
},
|
|
24
|
+
"capabilities": {
|
|
25
|
+
"text": true,
|
|
26
|
+
"streaming": true,
|
|
27
|
+
"tools": true,
|
|
28
|
+
"toolsWithStreaming": false,
|
|
29
|
+
"structuredOutput": false,
|
|
30
|
+
"structuredOutputWithTools": false,
|
|
31
|
+
"embeddings": false,
|
|
32
|
+
"thinking": false
|
|
33
|
+
},
|
|
34
|
+
"errorRules": [
|
|
35
|
+
{
|
|
36
|
+
"status": 401,
|
|
37
|
+
"class": "authentication",
|
|
38
|
+
"message": "Poolside rejected the request's authentication (HTTP 401; an unauthenticated GET of /models answered the plain-text body \"No Authorization header provided\", and https://docs.poolside.ai/api/overview.md says \"Send it as a Bearer token in the Authorization header\"). Check {apiKeyEnvVar}. Create a key: {setupUrl}"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"status": 403,
|
|
42
|
+
"class": "authentication",
|
|
43
|
+
"message": "Poolside returned HTTP 403 (https://docs.poolside.ai/cli/troubleshooting.md lists \"403 Forbidden: please check the api-key you provided\" under \"Fix API key or token errors\"). Check {apiKeyEnvVar}. Create a key: {setupUrl}"
|
|
44
|
+
}
|
|
45
|
+
],
|
|
46
|
+
"quirks": {
|
|
47
|
+
"replayReasoningContent": true
|
|
48
|
+
},
|
|
49
|
+
"setup": {
|
|
50
|
+
"url": "https://platform.poolside.ai/",
|
|
51
|
+
"apiKeyFormat": null,
|
|
52
|
+
"billingPolicy": "free-tier",
|
|
53
|
+
"instructions": [
|
|
54
|
+
"1. Visit: https://platform.poolside.ai/ — https://docs.poolside.ai/get-started/log-in.md says of the Poolside Platform option: \"sign in to Poolside Platform or create an account\"",
|
|
55
|
+
"2. Create an API key: https://docs.poolside.ai/api/overview.md says \"Sign in to Poolside Platform, open the API Keys tab, and click New key.\"",
|
|
56
|
+
"3. Billing as the vendor states it: https://docs.poolside.ai/get-started/log-in.md describes the Poolside Platform option as \"free developer access\" and says \"The API key created through Poolside Platform is for Poolside-hosted inference.\"",
|
|
57
|
+
"4. Authentication is HTTP Bearer: https://docs.poolside.ai/api/overview.md shows the header \"Authorization: Bearer <api-key>\" and exports the key as POOLSIDE_API_KEY, the name NeuroLink reads. Set {apiKeyEnvVar} in your .env file"
|
|
58
|
+
],
|
|
59
|
+
"description": "Docs-verified only: the vendor's GET https://inference.poolside.ai/v1/models needs a key (it answers HTTP 401 without one), so the model id comes from the Poolside API page (https://docs.poolside.ai/api/overview.md, retrieved 2026-09-29) and the roster has not been checked; the entry is not yet live-verified. OpenAI-compatible endpoint at https://inference.poolside.ai/v1: the overview page opens with \"Call Poolside models through an OpenAI-compatible API.\", its Access methods table lists \"Poolside-hosted inference\" with base URL https://inference.poolside.ai/v1, its Available endpoints table lists GET /v1/models and POST /v1/chat/completions, and its quickstart shows the OpenAI Python SDK and the OpenAI TypeScript SDK with base URL \"https://inference.poolside.ai/v1\". Unauthenticated GETs made 2026-09-29: /models answered HTTP 401 with content-type text/plain and the body \"No Authorization header provided\"; /chat/completions answered HTTP 405 with an empty body. No POST request was sent. errorRules: the 401 rule is built from the observed /models response (a plain-text body, so the rule matches the status code); the 403 rule is built from https://docs.poolside.ai/cli/troubleshooting.md, which lists \"403 Forbidden: please check the api-key you provided\" under \"Fix API key or token errors\". capabilities.streaming is true because https://docs.poolside.ai/api/openai-api-examples.md documents setting stream to true to receive \"a series of chunks returned as server-sent events\". capabilities.tools is true because that page's \"Extend models with tools\" section says \"You can extend a model's capabilities by providing tools that it can call during a conversation.\" and shows a tools array and a returned tool_calls array on poolside/laguna-s-2.1 against https://inference.poolside.ai/v1/chat/completions. capabilities.toolsWithStreaming and capabilities.structuredOutputWithTools are false because no request combining them was sent. capabilities.structuredOutput is false because no request using response_format was sent. capabilities.embeddings is false; the overview page's Available endpoints table lists two endpoints, GET /v1/models and POST /v1/chat/completions. capabilities.thinking is false because this entry sends no thinking request parameter; https://docs.poolside.ai/api/openai-api-examples.md documents setting chat_template_kwargs.enable_thinking to false to turn thinking off for a request. quirks.replayReasoningContent is set because https://docs.poolside.ai/api/openai-api-examples.md says \"For agentic workflows with Poolside models, preserve reasoning_content from assistant responses when you include those responses in follow-up requests.\" and \"Dropping previous reasoning content can prevent the model from reasoning in later steps.\"; no multi-turn request was sent. models.defaultContextWindow (128000) is a placeholder, not a vendor figure; it applies to poolside/laguna-s-2.1 because the catalog entry sets no contextWindow for it. models.defaultMaxOutputTokens (32768) equals the max_tokens default in the Control generation table on https://docs.poolside.ai/api/openai-api-examples.md; it is not a per-model limit. The model's status field holds production, a placeholder for a value the catalog schema requires; it is not a vendor statement. billingPolicy holds free-tier, one of the three values the catalog schema allows (free-tier, free-with-card, no-free-tier). Vendor wording, from https://docs.poolside.ai/get-started/log-in.md: the Poolside Platform option is for \"free developer access\", and \"The API key created through Poolside Platform is for Poolside-hosted inference.\" apiKeyFormat is null, so NeuroLink's key-format check is not applied."
|
|
60
|
+
},
|
|
61
|
+
"evidence": {
|
|
62
|
+
"rosterVerified": {
|
|
63
|
+
"date": "2026-09-29",
|
|
64
|
+
"status": 401,
|
|
65
|
+
"method": "docs-only — unauthenticated GET https://inference.poolside.ai/v1/models answers 401 without a key, so model ids are taken from https://docs.poolside.ai/api/overview.md (retrieved 2026-09-29); roster not verified"
|
|
66
|
+
},
|
|
67
|
+
"authProbe": {
|
|
68
|
+
"date": "2026-09-29",
|
|
69
|
+
"status": 401,
|
|
70
|
+
"method": "unauthenticated GET https://inference.poolside.ai/v1/models with no credentials — HTTP 401, content-type text/plain; charset=utf-8, plain-text body \"No Authorization header provided\"; the body is not JSON and has no code field, so no code is recorded; the same day an unauthenticated GET https://inference.poolside.ai/v1/chat/completions answered HTTP 405 with an empty body; credential-free, no key used, no POST request sent"
|
|
71
|
+
},
|
|
72
|
+
"billingProbe": {
|
|
73
|
+
"date": "2026-09-29",
|
|
74
|
+
"method": "public page https://docs.poolside.ai/get-started/log-in.md (the Poolside Platform login option described as \"free developer access\"; \"The API key created through Poolside Platform is for Poolside-hosted inference.\"); https://platform.poolside.ai/ opened and shows the title Poolside Platform; credential-free, no signup performed"
|
|
75
|
+
},
|
|
76
|
+
"liveMatrix": null,
|
|
77
|
+
"addedInPR": "https://github.com/juspay/neurolink/pull/1862"
|
|
78
|
+
}
|
|
79
|
+
}
|
|
@@ -284,6 +284,11 @@
|
|
|
284
284
|
"replayReasoningContent": {
|
|
285
285
|
"type": "boolean",
|
|
286
286
|
"description": "Vendor wants each assistant turn's reasoning_content sent back on every later request of the conversation (DeepSeek documents a 400 without it once tools are in play). Off for every other provider, since strict OpenAI-compatible backends reject the unknown field."
|
|
287
|
+
},
|
|
288
|
+
"authHeaderStyle": {
|
|
289
|
+
"type": "string",
|
|
290
|
+
"enum": ["x-api-key"],
|
|
291
|
+
"description": "Vendor's chat-completions endpoint authenticates with X-Api-Key instead of the inherited Authorization: Bearer default (Reka's OpenAPI spec declares exactly one security scheme, an apiKey in header X-Api-Key). Normalized by ConfiguredOpenAICompatProvider.getAuthHeaders()."
|
|
287
292
|
}
|
|
288
293
|
}
|
|
289
294
|
},
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "./provider-catalog.schema.json",
|
|
3
|
+
"id": "reka",
|
|
4
|
+
"displayName": "Reka AI",
|
|
5
|
+
"aliases": [],
|
|
6
|
+
"tier": 2,
|
|
7
|
+
"wire": {
|
|
8
|
+
"baseURL": "https://api.reka.ai/v1"
|
|
9
|
+
},
|
|
10
|
+
"models": {
|
|
11
|
+
"default": "reka-flash",
|
|
12
|
+
"fallbacks": ["reka-edge"],
|
|
13
|
+
"defaultContextWindow": 16384,
|
|
14
|
+
"defaultMaxOutputTokens": 4096,
|
|
15
|
+
"catalog": {
|
|
16
|
+
"reka-flash": {
|
|
17
|
+
"pricingPerMTok": {
|
|
18
|
+
"input": 0.8,
|
|
19
|
+
"output": 2
|
|
20
|
+
},
|
|
21
|
+
"vision": true,
|
|
22
|
+
"status": "production",
|
|
23
|
+
"description": "NeuroLink default. Listed as reka-flash in the baseline model table on https://docs.reka.ai/chat/models.md (intro: \"Our baseline models always available for public access are:\") and named as the model in the code examples on https://docs.reka.ai/chat/overview.md, https://docs.reka.ai/chat/function-calling.md and https://docs.reka.ai/chat/api-reference/create.md (retrieved 2026-09-29). https://docs.reka.ai/pricing.md has a row named \"Reka Flash\" described as \"Fast and cost-efficient model for most tasks\" with $0.80 under \"Input Tokens (per 1M)\" and $2.00 under \"Output Tokens (per 1M)\"; https://docs.reka.ai/chat/models.md ends with \"For full listing of models and pricing, see the Reka API Pricing page\". https://docs.reka.ai/chat/function-calling.md says \"Currently, only Reka Flash supports function calling.\" Vision is true: the first curl example on https://docs.reka.ai/overview.md sends an image_url content part to model \"reka-flash\", and the Quickstart's \"First request\" example (https://docs.reka.ai/quickstart.md) carries the comment '# or \"reka-flash\"' beside an image_url request. No context window or maximum output figure is set for this model; models.defaultContextWindow and models.defaultMaxOutputTokens apply."
|
|
24
|
+
},
|
|
25
|
+
"reka-edge": {
|
|
26
|
+
"pricingPerMTok": {
|
|
27
|
+
"input": 0.1,
|
|
28
|
+
"output": 0.1
|
|
29
|
+
},
|
|
30
|
+
"vision": true,
|
|
31
|
+
"status": "production",
|
|
32
|
+
"description": "Listed as \"reka-edge (or reka-edge-2603)\" in the baseline model table on https://docs.reka.ai/chat/models.md and on https://docs.reka.ai/quickstart.md (retrieved 2026-09-29). The Quickstart's \"First request\" example sends an image_url content part to model \"reka-edge\", and the example response on https://docs.reka.ai/chat/api-reference/get.md lists the id \"reka-edge\". https://docs.reka.ai/pricing.md has a row named \"Reka Edge\" described as \"Compact model ideal for on-device execution\" with $0.10 under \"Input Tokens (per 1M)\" and $0.10 under \"Output Tokens (per 1M)\". https://docs.reka.ai/chat/function-calling.md says \"Currently, only Reka Flash supports function calling.\" No context window or maximum output figure is set for this model; models.defaultContextWindow and models.defaultMaxOutputTokens apply."
|
|
33
|
+
},
|
|
34
|
+
"reka-edge-2603": {
|
|
35
|
+
"pricingPerMTok": {
|
|
36
|
+
"input": 0.1,
|
|
37
|
+
"output": 0.1
|
|
38
|
+
},
|
|
39
|
+
"vision": true,
|
|
40
|
+
"status": "production",
|
|
41
|
+
"description": "Named in the same table row as reka-edge, \"reka-edge (or reka-edge-2603)\", on https://docs.reka.ai/chat/models.md and https://docs.reka.ai/quickstart.md, and shown as {\"id\": \"reka-edge-2603\"} in the example output of GET https://api.reka.ai/v1/models on https://docs.reka.ai/chat/models.md, which says \"All of these model IDs can be used as values for the Chat API's model parameter\" (retrieved 2026-09-29). Vision and prices are those of the row's reka-edge example and its \"Reka Edge\" pricing row (https://docs.reka.ai/quickstart.md, https://docs.reka.ai/pricing.md). No context window or maximum output figure is set for this model; models.defaultContextWindow and models.defaultMaxOutputTokens apply."
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"topModels": ["reka-flash", "reka-edge", "reka-edge-2603"]
|
|
45
|
+
},
|
|
46
|
+
"capabilities": {
|
|
47
|
+
"text": true,
|
|
48
|
+
"streaming": true,
|
|
49
|
+
"tools": "model-dependent",
|
|
50
|
+
"toolsWithStreaming": false,
|
|
51
|
+
"structuredOutput": false,
|
|
52
|
+
"structuredOutputWithTools": false,
|
|
53
|
+
"embeddings": false,
|
|
54
|
+
"thinking": false
|
|
55
|
+
},
|
|
56
|
+
"errorRules": [
|
|
57
|
+
{
|
|
58
|
+
"status": 401,
|
|
59
|
+
"class": "authentication",
|
|
60
|
+
"message": "Reka rejected the API key (HTTP 401; https://docs.reka.ai/errors.md lists 401 as authentication_error with the client action \"Ensure that you're using a valid Reka API key\"). Check {apiKeyEnvVar}. Get one at {setupUrl}"
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"status": 429,
|
|
64
|
+
"class": "rate-limit",
|
|
65
|
+
"message": "Reka rate limit (HTTP 429; https://docs.reka.ai/errors.md lists 429 as rate_limit_error with the client action \"Wait until your rate limit is restored and retry, or upgrade your API tier for higher limits\")."
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"pattern": "P001|Insufficient Balance",
|
|
69
|
+
"class": "provider",
|
|
70
|
+
"message": "Reka reported an insufficient balance (https://docs.reka.ai/resources/faqs.md: \"If your balance hits $0, you'll see P001: Insufficient Balance.\"). The same page says \"Add credits to your account before making requests.\""
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"status": 500,
|
|
74
|
+
"class": "provider",
|
|
75
|
+
"message": "Reka returned HTTP 500 (https://docs.reka.ai/errors.md lists 500 as server_error with the client action \"Retry with backoff. If this persists, contact Reka at contact@reka.ai\")."
|
|
76
|
+
}
|
|
77
|
+
],
|
|
78
|
+
"quirks": {
|
|
79
|
+
"authHeaderStyle": "x-api-key"
|
|
80
|
+
},
|
|
81
|
+
"setup": {
|
|
82
|
+
"url": "https://platform.reka.ai/sign-up",
|
|
83
|
+
"apiKeyFormat": null,
|
|
84
|
+
"billingPolicy": "free-tier",
|
|
85
|
+
"instructions": [
|
|
86
|
+
"1. Visit: https://platform.reka.ai/sign-up (the \"Start for free\" and \"Get started\" links on https://platform.reka.ai/pricing point to /sign-up). The Quickstart (https://docs.reka.ai/quickstart.md) says \"Create a free account on the Reka Platform to access your API key.\" and the FAQ (https://docs.reka.ai/resources/faqs.md) answers \"How do I get an API key?\" with \"Go to Platform, > API Keys to generate or copy your key.\"",
|
|
87
|
+
"2. Billing as the vendor states it: https://docs.reka.ai/pricing.md says \"Get started with no upfront costs.\"; the FAQ (https://docs.reka.ai/resources/faqs.md) answers \"Do I need to pre-pay?\" with \"Yes. Add credits to your account before making requests.\" and says the balance error reads \"P001: Insufficient Balance\" when the balance hits $0",
|
|
88
|
+
"3. Authentication: the vendor's REST examples send the header X-Api-Key (https://docs.reka.ai/chat/overview.md) and the OpenAPI file https://docs.reka.ai/openapi/api-reference.yaml declares one security scheme, an apiKey in the header X-Api-Key; the OpenAI Python SDK examples pass api_key=\"YOUR_API_KEY\" to the client (https://docs.reka.ai/quickstart.md)",
|
|
89
|
+
"4. Set {apiKeyEnvVar} in your .env file"
|
|
90
|
+
],
|
|
91
|
+
"description": "Docs-verified only: the vendor's GET https://api.reka.ai/v1/models needs a key (it answers HTTP 401 without one), so the three model ids come from https://docs.reka.ai/chat/models.md and the roster has not been checked; the entry is not yet live-verified. Endpoint https://api.reka.ai/v1: the Quickstart (https://docs.reka.ai/quickstart.md) says \"our API is fully OpenAI-compatible\" and shows the OpenAI Python SDK with base_url \"https://api.reka.ai/v1\"; https://docs.reka.ai/chat/overview.md shows POST https://api.reka.ai/v1/chat/completions with a messages array and reads the reply from response.choices[0].message.content. Unauthenticated GETs made 2026-09-29: /models answered HTTP 401 with the JSON body {\"error\":{\"message\":\"Unauthorized\",\"type\":\"authentication_error\",\"code\":null,\"param\":null}}; /chat/completions answered HTTP 405 with header allow: POST and the body {\"detail\":\"Method Not Allowed\"}. No POST request was sent. errorRules carry the statuses https://docs.reka.ai/errors.md lists (401 authentication_error, 429 rate_limit_error, 500 server_error) plus a pattern rule on the FAQ's \"P001: Insufficient Balance\" text. capabilities.streaming is true because https://docs.reka.ai/chat/overview.md says \"The Chat API supports streaming\". capabilities.tools is model-dependent because https://docs.reka.ai/chat/function-calling.md documents the tools parameter and tool_calls and says \"Currently, only Reka Flash supports function calling.\" capabilities.structuredOutput is false: the ChatRequest on https://docs.reka.ai/chat/api-reference/create.md lists messages, model, frequency_penalty, max_tokens, presence_penalty, seed, stop, stream, temperature, tool_choice, tools, top_k and top_p. capabilities.toolsWithStreaming and capabilities.structuredOutputWithTools are false because no request combining them was sent. capabilities.embeddings and capabilities.thinking are false. models.defaultContextWindow (16384) and models.defaultMaxOutputTokens (4096) are placeholders the vendor does not publish; the Chat API reference describes max_tokens as \"limited by the model's context length. Defaults to 1024.\" Each model's status field holds production, a placeholder for a value the catalog schema requires; it is not a vendor statement. billingPolicy holds free-tier, one of the three values the catalog schema allows (free-tier, free-with-card, no-free-tier). The vendor wording behind it: on https://platform.reka.ai/pricing the Pay as you go tile has a \"Start for free\" link to /sign-up and the page carries the text \"Free credits used\"; https://docs.reka.ai/pricing.md says \"Get started with no upfront costs.\"; https://docs.reka.ai/resources/faqs.md answers \"Do I need to pre-pay?\" with \"Yes. Add credits to your account before making requests.\" apiKeyFormat is null, so NeuroLink's key-format check is not applied."
|
|
92
|
+
},
|
|
93
|
+
"evidence": {
|
|
94
|
+
"rosterVerified": {
|
|
95
|
+
"date": "2026-09-29",
|
|
96
|
+
"status": 401,
|
|
97
|
+
"method": "docs-only — unauthenticated GET https://api.reka.ai/v1/models answers 401 without a key, so model ids are taken from https://docs.reka.ai/chat/models.md (retrieved 2026-09-29); roster not verified"
|
|
98
|
+
},
|
|
99
|
+
"authProbe": {
|
|
100
|
+
"date": "2026-09-29",
|
|
101
|
+
"status": 401,
|
|
102
|
+
"code": "authentication_error",
|
|
103
|
+
"method": "unauthenticated GET https://api.reka.ai/v1/models with no credentials — HTTP 401, JSON body {\"error\":{\"message\":\"Unauthorized\",\"type\":\"authentication_error\",\"code\":null,\"param\":null}}; code records the body's error.type because error.code is null; the same day an unauthenticated GET https://api.reka.ai/v1/chat/completions answered HTTP 405 with header allow: POST and JSON body {\"detail\":\"Method Not Allowed\"}; credential-free, no key used"
|
|
104
|
+
},
|
|
105
|
+
"billingProbe": {
|
|
106
|
+
"date": "2026-09-29",
|
|
107
|
+
"method": "public pages https://docs.reka.ai/resources/faqs.md (\"Do I need to pre-pay?\" answered \"Yes. Add credits to your account before making requests.\"), https://docs.reka.ai/quickstart.md (\"Create a free account on the Reka Platform to access your API key.\"), https://docs.reka.ai/pricing.md (\"Get started with no upfront costs.\") and https://platform.reka.ai/pricing (a \"Start for free\" link and the text \"Free credits used\"); credential-free, no signup performed"
|
|
108
|
+
},
|
|
109
|
+
"liveMatrix": null,
|
|
110
|
+
"addedInPR": "https://github.com/juspay/neurolink/pull/1862"
|
|
111
|
+
}
|
|
112
|
+
}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "./provider-catalog.schema.json",
|
|
3
|
+
"id": "sakana-ai",
|
|
4
|
+
"displayName": "Sakana AI",
|
|
5
|
+
"aliases": ["sakana"],
|
|
6
|
+
"tier": 2,
|
|
7
|
+
"wire": {
|
|
8
|
+
"baseURL": "https://api.sakana.ai/v1",
|
|
9
|
+
"apiKeyFallbackEnvVars": ["SAKANA_API_KEY"]
|
|
10
|
+
},
|
|
11
|
+
"models": {
|
|
12
|
+
"default": "fugu",
|
|
13
|
+
"fallbacks": ["fugu-ultra", "fugu-max", "sakana-namazu"],
|
|
14
|
+
"defaultContextWindow": 128000,
|
|
15
|
+
"defaultMaxOutputTokens": 8192,
|
|
16
|
+
"catalog": {
|
|
17
|
+
"fugu": {
|
|
18
|
+
"contextWindow": 1000000,
|
|
19
|
+
"vision": true,
|
|
20
|
+
"status": "production",
|
|
21
|
+
"description": "NeuroLink default. Models page (https://console.sakana.ai/models, retrieved 2026-09-29), Supported models table: \"The default Fugu model.\" Fugu overview: \"Fugu balances strong performance with low latency, making it the ideal default for everyday work.\" The Get Started page (https://console.sakana.ai/get-started) uses this id in its Chat Completions curl example (\"model\":\"fugu\"). Context window and image input: the Get Started page's Codex model catalog snippet (https://console.sakana.ai/get-started) lists slug fugu with display_name \"Fugu\", context_window 1000000 and input_modalities [\"text\", \"image\"], hence contextWindow 1000000 and vision true. Pricing page (https://console.sakana.ai/pricing), Fugu table, 1 agent: \"You pay only the standard rate for the specific underlying model.\" Multiple agents: \"We never stack model fees. You are charged a single rate based on the top tier model involved.\" pricingPerMTok is left out."
|
|
22
|
+
},
|
|
23
|
+
"fugu-ultra": {
|
|
24
|
+
"contextWindow": 1000000,
|
|
25
|
+
"pricingPerMTok": {
|
|
26
|
+
"input": 5,
|
|
27
|
+
"output": 30,
|
|
28
|
+
"cachedInput": 0.5
|
|
29
|
+
},
|
|
30
|
+
"vision": true,
|
|
31
|
+
"status": "production",
|
|
32
|
+
"description": "Models page (https://console.sakana.ai/models, retrieved 2026-09-29), Supported models table: \"The Fugu Ultra model, defaults to fugu-ultra-v2.0.\" Fugu Ultra overview: \"Fugu Ultra coordinates a deeper pool of expert agents to maximize answer quality on hard, high-stakes problems.\" Get Started page (https://console.sakana.ai/get-started): \"For complex tasks, especially when using fugu-ultra and fugu-cyber, you may need to increase client-side timeouts.\" Context window and image input: the Get Started page's Codex model catalog snippet (https://console.sakana.ai/get-started) lists slug fugu-ultra with display_name \"Fugu Ultra v2.0\", context_window 1000000 and input_modalities [\"text\", \"image\"]; the Models page's Supported models table says fugu-ultra \"defaults to fugu-ultra-v2.0\", so the same contextWindow 1000000 and vision true are recorded here. pricingPerMTok is the fugu-ultra-v2.0 rate. Pricing page (https://console.sakana.ai/pricing): \"Fixed pricing for fugu-ultra-v2.0 per 1M tokens.\" Standard price column: Input $5, Output $30, Cached input $0.50; Context > 272K column: Input $10, Output $45, Cached input $1.00; pricingPerMTok records the Standard price column. The same page says the orchestration tokens \"will be counted in the final price of the request.\""
|
|
33
|
+
},
|
|
34
|
+
"fugu-ultra-v2.0": {
|
|
35
|
+
"contextWindow": 1000000,
|
|
36
|
+
"pricingPerMTok": {
|
|
37
|
+
"input": 5,
|
|
38
|
+
"output": 30,
|
|
39
|
+
"cachedInput": 0.5
|
|
40
|
+
},
|
|
41
|
+
"vision": true,
|
|
42
|
+
"status": "production",
|
|
43
|
+
"description": "Models page (https://console.sakana.ai/models, retrieved 2026-09-29), Supported models table: \"V2.0 of Fugu Ultra.\" Pricing page (https://console.sakana.ai/pricing): \"Fixed pricing for fugu-ultra-v2.0 per 1M tokens.\" Standard price column: Input $5, Output $30, Cached input $0.50; Context > 272K column: Input $10, Output $45, Cached input $1.00; pricingPerMTok records the Standard price column. The same page says the orchestration tokens \"will be counted in the final price of the request.\" Context window and image input: the Get Started page's Codex model catalog snippet (https://console.sakana.ai/get-started) lists slug fugu-ultra with display_name \"Fugu Ultra v2.0\", context_window 1000000 and input_modalities [\"text\", \"image\"]; the Models page's Supported models table says fugu-ultra \"defaults to fugu-ultra-v2.0\", so the same contextWindow 1000000 and vision true are recorded here."
|
|
44
|
+
},
|
|
45
|
+
"fugu-ultra-v1.1": {
|
|
46
|
+
"contextWindow": 1000000,
|
|
47
|
+
"vision": true,
|
|
48
|
+
"status": "production",
|
|
49
|
+
"description": "Models page (https://console.sakana.ai/models, retrieved 2026-09-29), Supported models table: \"V1.1 of Fugu Ultra.\" The Get Started page (https://console.sakana.ai/get-started) lists the reasoning effort levels high, xhigh and max for model=\"fugu-ultra-v1.1\". Context window and image input: the Get Started page's Codex model catalog snippet (https://console.sakana.ai/get-started) lists slug fugu-ultra-v1.1 with display_name \"Fugu Ultra v1.1\", context_window 1000000 and input_modalities [\"text\", \"image\"], hence contextWindow 1000000 and vision true."
|
|
50
|
+
},
|
|
51
|
+
"fugu-ultra-v1.0": {
|
|
52
|
+
"contextWindow": 1000000,
|
|
53
|
+
"vision": true,
|
|
54
|
+
"status": "production",
|
|
55
|
+
"description": "Models page (https://console.sakana.ai/models, retrieved 2026-09-29), Supported models table: \"V1.0 of Fugu Ultra, also known as fugu-ultra-20260615.\" Context window and image input: the Get Started page's Codex model catalog snippet (https://console.sakana.ai/get-started) lists slug fugu-ultra-v1.0 with display_name \"Fugu Ultra v1.0\", context_window 1000000 and input_modalities [\"text\", \"image\"], hence contextWindow 1000000 and vision true."
|
|
56
|
+
},
|
|
57
|
+
"fugu-max": {
|
|
58
|
+
"contextWindow": 1000000,
|
|
59
|
+
"pricingPerMTok": {
|
|
60
|
+
"input": 2,
|
|
61
|
+
"output": 6,
|
|
62
|
+
"cachedInput": 0.25
|
|
63
|
+
},
|
|
64
|
+
"vision": true,
|
|
65
|
+
"status": "production",
|
|
66
|
+
"description": "Models page (https://console.sakana.ai/models, retrieved 2026-09-29), Supported models table: \"The Fugu Max model, defaults to fugu-max-v1.0.\" Fugu Max overview: \"Fugu Max orchestrates our largest pool of models to push the cost–performance Pareto frontier.\" Context window and image input: the Get Started page's Codex model catalog snippet (https://console.sakana.ai/get-started) lists slug fugu-max with display_name \"Fugu Max\", context_window 1000000 and input_modalities [\"text\", \"image\"]; the Models page's Supported models table says fugu-max \"defaults to fugu-max-v1.0\", so the same contextWindow 1000000 and vision true are recorded here. pricingPerMTok is the fugu-max-v1.0 rate. Pricing page (https://console.sakana.ai/pricing): \"Fixed pricing for fugu-max-v1.0 per 1M tokens, regardless of context length.\" Input $2, Output $6, Cached input $0.25; \"web_search and web_fetch are billed at $0.007 per call.\""
|
|
67
|
+
},
|
|
68
|
+
"fugu-max-v1.0": {
|
|
69
|
+
"contextWindow": 1000000,
|
|
70
|
+
"pricingPerMTok": {
|
|
71
|
+
"input": 2,
|
|
72
|
+
"output": 6,
|
|
73
|
+
"cachedInput": 0.25
|
|
74
|
+
},
|
|
75
|
+
"vision": true,
|
|
76
|
+
"status": "production",
|
|
77
|
+
"description": "Models page (https://console.sakana.ai/models, retrieved 2026-09-29), Supported models table: \"V1.0 of Fugu Max, optimized for cost-performance.\" Pricing page (https://console.sakana.ai/pricing): \"Fixed pricing for fugu-max-v1.0 per 1M tokens, regardless of context length.\" Input $2, Output $6, Cached input $0.25; \"web_search and web_fetch are billed at $0.007 per call.\" Context window and image input: the Get Started page's Codex model catalog snippet (https://console.sakana.ai/get-started) lists slug fugu-max with display_name \"Fugu Max\", context_window 1000000 and input_modalities [\"text\", \"image\"]; the Models page's Supported models table says fugu-max \"defaults to fugu-max-v1.0\", so the same contextWindow 1000000 and vision true are recorded here."
|
|
78
|
+
},
|
|
79
|
+
"sakana-namazu": {
|
|
80
|
+
"contextWindow": 256000,
|
|
81
|
+
"pricingPerMTok": {
|
|
82
|
+
"input": 0.95,
|
|
83
|
+
"output": 4,
|
|
84
|
+
"cachedInput": 0.15
|
|
85
|
+
},
|
|
86
|
+
"vision": true,
|
|
87
|
+
"status": "production",
|
|
88
|
+
"description": "Models page (https://console.sakana.ai/models, retrieved 2026-09-29), Supported models table: \"Alias that points to the latest version (currently sakana-namazu-v1.0).\" Models page, Sakana Namazu tab (https://console.sakana.ai/models?model=sakana-namazu, retrieved 2026-09-29), property table: Model ID sakana-namazu-v1.0, Alias sakana-namazu, Context window \"256K tokens\" (stored as 256000), Streaming \"Supported\", Image input \"Supported (URL and base64)\", Structured output \"json_schema and json_object\"; the same tab says \"Thinking is enabled by default.\" The Get Started page (https://console.sakana.ai/get-started) says \"Sakana Namazu is not included in subscription plans\" and that it is \"billed purely on a pay-as-you-go (per-token) basis.\" pricingPerMTok is the sakana-namazu-v1.0 rate. Pricing page (https://console.sakana.ai/pricing): \"Token pricing for sakana-namazu-v1.0 per 1M tokens.\" Input $0.95, Output $4.00, Cached input $0.15; \"Thinking tokens are billed at the same rate as output tokens.\""
|
|
89
|
+
},
|
|
90
|
+
"sakana-namazu-v1.0": {
|
|
91
|
+
"contextWindow": 256000,
|
|
92
|
+
"pricingPerMTok": {
|
|
93
|
+
"input": 0.95,
|
|
94
|
+
"output": 4,
|
|
95
|
+
"cachedInput": 0.15
|
|
96
|
+
},
|
|
97
|
+
"vision": true,
|
|
98
|
+
"status": "production",
|
|
99
|
+
"description": "Models page (https://console.sakana.ai/models, retrieved 2026-09-29), Supported models table: \"V1.0 of the Sakana Namazu model. A Japanese-specialized LLM.\" Models page, Sakana Namazu tab (https://console.sakana.ai/models?model=sakana-namazu, retrieved 2026-09-29), property table: Model ID sakana-namazu-v1.0, Alias sakana-namazu, Context window \"256K tokens\" (stored as 256000), Streaming \"Supported\", Image input \"Supported (URL and base64)\", Structured output \"json_schema and json_object\"; the same tab says \"Thinking is enabled by default.\" The Get Started page (https://console.sakana.ai/get-started) says \"Sakana Namazu is not included in subscription plans\" and that it is \"billed purely on a pay-as-you-go (per-token) basis.\" Pricing page (https://console.sakana.ai/pricing): \"Token pricing for sakana-namazu-v1.0 per 1M tokens.\" Input $0.95, Output $4.00, Cached input $0.15; \"Thinking tokens are billed at the same rate as output tokens.\""
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
"topModels": [
|
|
103
|
+
"fugu",
|
|
104
|
+
"fugu-ultra",
|
|
105
|
+
"fugu-ultra-v2.0",
|
|
106
|
+
"fugu-ultra-v1.1",
|
|
107
|
+
"fugu-ultra-v1.0",
|
|
108
|
+
"fugu-max",
|
|
109
|
+
"fugu-max-v1.0",
|
|
110
|
+
"sakana-namazu",
|
|
111
|
+
"sakana-namazu-v1.0"
|
|
112
|
+
]
|
|
113
|
+
},
|
|
114
|
+
"capabilities": {
|
|
115
|
+
"text": true,
|
|
116
|
+
"streaming": true,
|
|
117
|
+
"tools": "model-dependent",
|
|
118
|
+
"toolsWithStreaming": false,
|
|
119
|
+
"structuredOutput": true,
|
|
120
|
+
"structuredOutputWithTools": false,
|
|
121
|
+
"embeddings": false,
|
|
122
|
+
"thinking": true
|
|
123
|
+
},
|
|
124
|
+
"errorRules": [
|
|
125
|
+
{
|
|
126
|
+
"status": 401,
|
|
127
|
+
"class": "authentication",
|
|
128
|
+
"message": "Sakana AI answered HTTP 401 (authentication_error). Check {apiKeyEnvVar}. Get a key at {setupUrl}"
|
|
129
|
+
}
|
|
130
|
+
],
|
|
131
|
+
"setup": {
|
|
132
|
+
"url": "https://console.sakana.ai/overview",
|
|
133
|
+
"apiKeyFormat": null,
|
|
134
|
+
"billingPolicy": "no-free-tier",
|
|
135
|
+
"instructions": [
|
|
136
|
+
"1. Visit: https://console.sakana.ai/overview and sign in - the page shows \"Login with Google\" and \"Send login link\"",
|
|
137
|
+
"2. Create an API key - the Get Started page (https://console.sakana.ai/get-started) says: \"Before using Fugu or Sakana Namazu, create an API key and copy the generated key. The key is shown only once, so store it somewhere secure before closing the dialog.\"",
|
|
138
|
+
"3. Billing as the vendor states it: the Pricing page (https://console.sakana.ai/pricing) lists Pay as you go rates per model and Subscription Plans (Standard $20/month, Pro $100/month, Max $200/month); the Get Started page says Sakana Namazu \"is billed purely on a pay-as-you-go (per-token) basis.\"",
|
|
139
|
+
"4. Set {apiKeyEnvVar} in your .env file (SAKANA_API_KEY, which the Get Started page's curl example reads, is accepted as a fallback; the Models page's Python example reads FUGU_API_KEY and FUGU_BASE_URL, which NeuroLink does not)"
|
|
140
|
+
],
|
|
141
|
+
"description": "Docs-verified only: the vendor's GET https://api.sakana.ai/v1/models needs a key (it answers HTTP 401 without one), so the nine model ids come from the Supported models table on https://console.sakana.ai/models and the roster has not been checked; the entry is not yet live-verified. OpenAI-compatible endpoint at https://api.sakana.ai/v1: the Get Started page (https://console.sakana.ai/get-started) shows the OpenAI Python SDK with base_url \"https://api.sakana.ai/v1\" and a curl POST to https://api.sakana.ai/v1/chat/completions with the header Authorization: Bearer $SAKANA_API_KEY, and the Models page (https://console.sakana.ai/models) says: \"Fugu currently supports the OpenAI-compatible Chat Completions, Responses, and Models APIs, as well as the Anthropic-compatible Messages API.\" An unauthenticated GET of https://api.sakana.ai/v1/models returned HTTP 401 with error.type authentication_error and error.message \"Missing API key\" (2026-09-29), so errorRules holds one rule, for status 401. models.defaultContextWindow (128,000) and models.defaultMaxOutputTokens (8,192) are conservative placeholders the vendor does not publish."
|
|
142
|
+
},
|
|
143
|
+
"evidence": {
|
|
144
|
+
"rosterVerified": {
|
|
145
|
+
"date": "2026-09-29",
|
|
146
|
+
"status": 401,
|
|
147
|
+
"method": "docs-only — unauthenticated GET https://api.sakana.ai/v1/models answers 401 without a key, so model ids are taken from https://console.sakana.ai/models (retrieved 2026-09-29); roster not verified"
|
|
148
|
+
},
|
|
149
|
+
"authProbe": {
|
|
150
|
+
"date": "2026-09-29",
|
|
151
|
+
"status": 401,
|
|
152
|
+
"code": "authentication_error",
|
|
153
|
+
"method": "unauthenticated GET https://api.sakana.ai/v1/models with no credentials — HTTP 401, JSON body {\"error\":{\"message\":\"Missing API key\",\"type\":\"authentication_error\",\"param\":null,\"code\":null}}; code records the body's error.type because error.code is null; the same day an unauthenticated GET https://api.sakana.ai/v1/chat/completions answered HTTP 405 with JSON body {\"error\":{\"message\":\"Method Not Allowed\",\"type\":\"invalid_request_error\",\"param\":null,\"code\":null}}; credential-free, no key used"
|
|
154
|
+
},
|
|
155
|
+
"billingProbe": {
|
|
156
|
+
"date": "2026-09-29",
|
|
157
|
+
"method": "public pages https://console.sakana.ai/pricing (Pay as you go rates; Subscription Plans Standard $20/month, Pro $100/month, Max $200/month) and https://console.sakana.ai/get-started (Sakana Namazu \"is billed purely on a pay-as-you-go (per-token) basis\"); credential-free, no signup performed"
|
|
158
|
+
},
|
|
159
|
+
"liveMatrix": null,
|
|
160
|
+
"addedInPR": "https://github.com/juspay/neurolink/pull/1862"
|
|
161
|
+
}
|
|
162
|
+
}
|
|
@@ -86,6 +86,7 @@ export declare const providerCatalogJsonSchema: z.ZodObject<{
|
|
|
86
86
|
registryDefaultIgnoresModelEnvVar: z.ZodOptional<z.ZodBoolean>;
|
|
87
87
|
responseFormatDowngrade: z.ZodOptional<z.ZodLiteral<"json-schema-to-json-object">>;
|
|
88
88
|
replayReasoningContent: z.ZodOptional<z.ZodBoolean>;
|
|
89
|
+
authHeaderStyle: z.ZodOptional<z.ZodLiteral<"x-api-key">>;
|
|
89
90
|
}, z.core.$strict>>;
|
|
90
91
|
timeouts: z.ZodOptional<z.ZodObject<{
|
|
91
92
|
generateMs: z.ZodOptional<z.ZodNumber>;
|
|
@@ -141,6 +141,7 @@ const catalogQuirksSchema = z.strictObject({
|
|
|
141
141
|
registryDefaultIgnoresModelEnvVar: z.boolean().optional(),
|
|
142
142
|
responseFormatDowngrade: z.literal("json-schema-to-json-object").optional(),
|
|
143
143
|
replayReasoningContent: z.boolean().optional(),
|
|
144
|
+
authHeaderStyle: z.literal("x-api-key").optional(),
|
|
144
145
|
});
|
|
145
146
|
const catalogTimeoutsSchema = z.strictObject({
|
|
146
147
|
generateMs: z.number().optional(),
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "./provider-catalog.schema.json",
|
|
3
|
+
"id": "stackit",
|
|
4
|
+
"displayName": "STACKIT",
|
|
5
|
+
"aliases": [],
|
|
6
|
+
"tier": 2,
|
|
7
|
+
"wire": {
|
|
8
|
+
"baseURL": "https://api.openai-compat.model-serving.eu01.onstackit.cloud/v1"
|
|
9
|
+
},
|
|
10
|
+
"models": {
|
|
11
|
+
"default": "Qwen/Qwen3-VL-235B-A22B-Instruct-FP8",
|
|
12
|
+
"fallbacks": [
|
|
13
|
+
"cortecs/Llama-3.3-70B-Instruct-FP8-Dynamic",
|
|
14
|
+
"openai/gpt-oss-120b",
|
|
15
|
+
"Qwen/Qwen3.8-27B",
|
|
16
|
+
"google/gemma-4-31B-it",
|
|
17
|
+
"openai/gpt-oss-20b"
|
|
18
|
+
],
|
|
19
|
+
"defaultContextWindow": 128000,
|
|
20
|
+
"defaultMaxOutputTokens": 4096,
|
|
21
|
+
"catalog": {
|
|
22
|
+
"Qwen/Qwen3-VL-235B-A22B-Instruct-FP8": {
|
|
23
|
+
"contextWindow": 200000,
|
|
24
|
+
"maxOutputTokens": 16384,
|
|
25
|
+
"vision": true,
|
|
26
|
+
"status": "production",
|
|
27
|
+
"description": "NeuroLink default. Row \"Qwen3-VL 235B\" (heading \"Full Name: Qwen/Qwen3-VL-235B-A22B-Instruct-FP8\") on https://docs.stackit.cloud/products/data-and-ai/ai-model-serving/basics/available-shared-models/ (retrieved 2026-09-29) with these cell values: Type \"Chat\", Category \"LLM-Premium\", Modalities \"Input are text and image and Output is text.\", Features \"Tool calling enabled\", Maximum images per request \"10\", Context length \"200K Token\", Maximum Generation \"16384 Token\", Specification \"OpenAI-compatible\", Status \"Supported\". The row's text reads \"Meet Qwen3-VL – the most powerful vision-language model in the Qwen series to date.\" Vision is true from the Modalities cell; context is recorded as 200000, reading K as thousands."
|
|
28
|
+
},
|
|
29
|
+
"cortecs/Llama-3.3-70B-Instruct-FP8-Dynamic": {
|
|
30
|
+
"contextWindow": 128000,
|
|
31
|
+
"maxOutputTokens": 4096,
|
|
32
|
+
"vision": false,
|
|
33
|
+
"status": "production",
|
|
34
|
+
"description": "Fallback. Row \"Llama 3.3 70B\" (heading \"Full Name: cortecs/Llama-3.3-70B-Instruct-FP8-Dynamic\") on https://docs.stackit.cloud/products/data-and-ai/ai-model-serving/basics/available-shared-models/ (retrieved 2026-09-29) with these cell values: Type \"Chat\", Category \"LLM-Plus\", Modalities \"Input and output are text.\", Features \"Tool calling enabled\", Context length \"128K Token\", Maximum Generation \"4096 Token\", Specification \"OpenAI-compatible\", Status \"Supported\". This id is the \"model\" value in the curl example of https://docs.stackit.cloud/products/data-and-ai/ai-model-serving/getting-started/getting-started-with-shared-models/, which says \"In this guide we use Llama 3.3 70B.\" The FAQ (https://docs.stackit.cloud/products/data-and-ai/ai-model-serving/faq/) lists this id under \"This behavior currently affects the following tool-calling enabled models:\" and says \"To avoid hallucinated tool calls, do not send the tools parameter with an empty list.\" Vision is false from the Modalities cell; context is recorded as 128000, reading K as thousands."
|
|
35
|
+
},
|
|
36
|
+
"openai/gpt-oss-120b": {
|
|
37
|
+
"contextWindow": 131000,
|
|
38
|
+
"maxOutputTokens": 8192,
|
|
39
|
+
"vision": false,
|
|
40
|
+
"status": "production",
|
|
41
|
+
"description": "Fallback. Row \"GPT-OSS 120B\" (heading \"Full Name: openai/gpt-oss-120b\") on https://docs.stackit.cloud/products/data-and-ai/ai-model-serving/basics/available-shared-models/ (retrieved 2026-09-29) with these cell values: Type \"Chat\", Category \"LLM-Plus\", Modalities \"Input and output are text.\", Features \"Tool calling & Reasoning enabled\", Context length \"131K Token\", Maximum Generation \"8192 Token\", Specification \"OpenAI-compatible\", Status \"Supported\". The vendor's release note of Dec 10, 2025 (https://docs.stackit.cloud/products/data-and-ai/ai-model-serving/release-notes/) says \"The model provides full chain-of-thought (CoT) and support Structured Outputs.\" Vision is false from the Modalities cell; context is recorded as 131000, reading K as thousands."
|
|
42
|
+
},
|
|
43
|
+
"Qwen/Qwen3.8-27B": {
|
|
44
|
+
"contextWindow": 262000,
|
|
45
|
+
"maxOutputTokens": 16384,
|
|
46
|
+
"vision": true,
|
|
47
|
+
"status": "production",
|
|
48
|
+
"description": "Fallback. Row \"Qwen3.8 27B\" (heading \"Full Name: Qwen/Qwen3.8-27B\") on https://docs.stackit.cloud/products/data-and-ai/ai-model-serving/basics/available-shared-models/ (retrieved 2026-09-29) with these cell values: Type \"Chat\", Category \"LLM-Plus\", Modalities \"Input are text and image and Output is text.\", Features \"Tool calling & Reasoning enabled\", Maximum images per request \"10\", Context length \"262K Token\", Maximum Generation \"16384 Token\", Thinking budget \"8192 Token\", Specification \"OpenAI-compatible\", Status \"Supported\". The id also appears in the Sep 8, 2026 release note (https://docs.stackit.cloud/products/data-and-ai/ai-model-serving/release-notes/). Vision is true from the Modalities cell; context is recorded as 262000, reading K as thousands."
|
|
49
|
+
},
|
|
50
|
+
"google/gemma-4-31B-it": {
|
|
51
|
+
"contextWindow": 256000,
|
|
52
|
+
"maxOutputTokens": 4096,
|
|
53
|
+
"vision": true,
|
|
54
|
+
"status": "production",
|
|
55
|
+
"description": "Fallback. Row \"Gemma 4 31B\" (heading \"Full Name: google/gemma-4-31B-it\") on https://docs.stackit.cloud/products/data-and-ai/ai-model-serving/basics/available-shared-models/ (retrieved 2026-09-29) with these cell values: Type \"Chat\", Category \"LLM-Plus\", Modalities \"Input are text and image and Output is text.\", Maximum images per request \"10\", Features \"Tool calling & Reasoning enabled\", Context length \"256K Token\", Maximum Generation \"4096 Token\", Specification \"OpenAI-compatible\", Status \"Supported\". The id also appears in the Jul 14, 2026 release note (https://docs.stackit.cloud/products/data-and-ai/ai-model-serving/release-notes/). Vision is true from the Modalities cell; context is recorded as 256000, reading K as thousands."
|
|
56
|
+
},
|
|
57
|
+
"openai/gpt-oss-20b": {
|
|
58
|
+
"contextWindow": 131000,
|
|
59
|
+
"maxOutputTokens": 8192,
|
|
60
|
+
"vision": false,
|
|
61
|
+
"status": "production",
|
|
62
|
+
"description": "Fallback. Row \"GPT-OSS 20B\" (heading \"Full Name: openai/gpt-oss-20b\") on https://docs.stackit.cloud/products/data-and-ai/ai-model-serving/basics/available-shared-models/ (retrieved 2026-09-29) with these cell values: Type \"Chat\", Category \"LLM-Standard\", Modalities \"Input and output are text.\", Features \"Tool calling & Reasoning enabled\", Context length \"131K Token\", Maximum Generation \"8192 Token\", Specification \"OpenAI-compatible\", Status \"Supported\". The row's note reads \"We recommend configuring retries for tool calling to improve reliability. Alternatively, consider switching to one of our bigger models, that support this feature.\" Vision is false from the Modalities cell; context is recorded as 131000, reading K as thousands."
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
"topModels": [
|
|
66
|
+
"Qwen/Qwen3-VL-235B-A22B-Instruct-FP8",
|
|
67
|
+
"cortecs/Llama-3.3-70B-Instruct-FP8-Dynamic",
|
|
68
|
+
"openai/gpt-oss-120b",
|
|
69
|
+
"Qwen/Qwen3.8-27B",
|
|
70
|
+
"google/gemma-4-31B-it",
|
|
71
|
+
"openai/gpt-oss-20b"
|
|
72
|
+
]
|
|
73
|
+
},
|
|
74
|
+
"capabilities": {
|
|
75
|
+
"text": true,
|
|
76
|
+
"streaming": false,
|
|
77
|
+
"tools": "model-dependent",
|
|
78
|
+
"toolsWithStreaming": false,
|
|
79
|
+
"structuredOutput": false,
|
|
80
|
+
"structuredOutputWithTools": false,
|
|
81
|
+
"embeddings": false,
|
|
82
|
+
"thinking": false
|
|
83
|
+
},
|
|
84
|
+
"errorRules": [
|
|
85
|
+
{
|
|
86
|
+
"status": 404,
|
|
87
|
+
"class": "invalid-model",
|
|
88
|
+
"message": "STACKIT answered HTTP 404 for model \"{model}\". Its FAQ (https://docs.stackit.cloud/products/data-and-ai/ai-model-serving/faq/) says of a 404: \"Most likely this is due to an incorrect “model” parameter in the request body.\""
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"status": 429,
|
|
92
|
+
"class": "rate-limit",
|
|
93
|
+
"message": "STACKIT answered HTTP 429. Its rate-limits page (https://docs.stackit.cloud/products/data-and-ai/ai-model-serving/how-tos/rate-limits-on-shared-models-_stackit-ai-model-serving/) says \"Once you hit a rate limit (RPM or TPM)\" the API responds with 429 Too Many Requests, and that \"Every response contains rate-limit specific headers\", including x-ratelimit-remaining-requests and x-ratelimit-remaining-tokens."
|
|
94
|
+
}
|
|
95
|
+
],
|
|
96
|
+
"setup": {
|
|
97
|
+
"url": "https://portal.stackit.cloud",
|
|
98
|
+
"apiKeyFormat": null,
|
|
99
|
+
"billingPolicy": "no-free-tier",
|
|
100
|
+
"instructions": [
|
|
101
|
+
"1. Visit: https://portal.stackit.cloud and log in to the customer portal — the Getting started page says \"To enable AI Model Serving login to the Customer portal and click at the sidebar on the left on AI Model Serving.\" and lists a STACKIT customer account, a STACKIT user account and a STACKIT project as prerequisites (https://docs.stackit.cloud/products/data-and-ai/ai-model-serving/getting-started/getting-started-with-shared-models/)",
|
|
102
|
+
"2. Enable AI Model Serving, click Create token, enter a token name and optionally a lifetime in days, and confirm with \"Order fee-based\" (\"To confirm click on Order fee-based.\"); the same page says \"You can not retrieve the token again after closing the pane\", so copy it when it is shown",
|
|
103
|
+
"3. Billing as the vendor states it: the May 6, 2025 release note says \"STACKIT AI Model Serving offers you easy pay-as-you-go access to proven GenAI models\" (https://docs.stackit.cloud/products/data-and-ai/ai-model-serving/release-notes/); the product page (https://stackit.com/en/products/data-ai/stackit-ai-model-serving) offers \"Register for a free trial access\" — \"All registrations are manually checked by us. If you qualify, you will receive your personal token to use STACKIT AI Model Serving within 24 hours. The trial period ends automatically after 30 days.\" — and shows a price table in euro (€)",
|
|
104
|
+
"4. Set {apiKeyEnvVar} in your .env file (the docs' examples read STACKIT_MODEL_SERVING_AUTH_TOKEN and STACKIT_MODEL_SERVING_API_KEY, which NeuroLink does not read)"
|
|
105
|
+
],
|
|
106
|
+
"description": "Docs-verified only: the vendor's GET https://api.openai-compat.model-serving.eu01.onstackit.cloud/v1/models needs a key (an unauthenticated GET on 2026-09-29 answered HTTP 403 with content-length 0 and no body), so the six chat model ids come from the \"Full Name:\" headings of https://docs.stackit.cloud/products/data-and-ai/ai-model-serving/basics/available-shared-models/ (retrieved 2026-09-29), and the roster has not been checked; the entry is not yet live-verified. No account was created and no API key was used to build this entry. OpenAI-compatible endpoint at https://api.openai-compat.model-serving.eu01.onstackit.cloud/v1: the six chat model rows in this catalog show Specification \"OpenAI-compatible\" and Available Endpoints \"POST /chat/completions\", \"POST /completions\" and \"GET /models\", and https://docs.stackit.cloud/products/data-and-ai/ai-model-serving/how-tos/use-the-models/ says \"STACKIT AI Model Serving provides an OpenAI-compatible API, making it easy to integrate with existing tools and libraries.\" Its curl example sends \"Authorization: Bearer [auth-token]\" and a JSON body with \"model\" and \"messages\" to https://api.openai-compat.model-serving.eu01.onstackit.cloud/v1/chat/completions. The sample reply shown under the POST /v1/chat/completions curl request on https://docs.stackit.cloud/products/data-and-ai/ai-model-serving/getting-started/getting-started-with-shared-models/ reads \"object\":\"text_completion\" and \"choices\":[{\"index\":0,\"text\":. Unauthenticated GETs made 2026-09-29: /models, /chat/completions and the base URL /v1 each answered HTTP 403 with content-length 0 and no body. No POST request was sent. The Available Shared Models page also lists Status \"Deprecated\" for the rows \"Qwen3.6 27B\" and \"Gemma 3 27B\"; neither is in this catalog. errorRules carry only the two statuses the vendor's pages state, 404 (FAQ) and 429 (rate-limits page). models.defaultContextWindow (128000) and models.defaultMaxOutputTokens (4096) are placeholders the vendor does not publish as general values; they apply to model ids outside the catalog and equal the Context length \"128K Token\" and Maximum Generation \"4096 Token\" cells of the Llama 3.3 70B row. Each model's context window is the page's \"K Token\" figure read as thousands. The status field of the six catalogued models holds production: the catalog schema requires a status (production, preview or retired) and the vendor's rows show Status \"Supported\". capabilities.text is true because the Getting started page documents a chat completions curl request; capabilities.tools is model-dependent: the Features cell reads \"Tool calling enabled\" on the Qwen3-VL 235B and Llama 3.3 70B rows and \"Tool calling & Reasoning enabled\" on the other four catalogued rows, and the LangChain example on https://docs.stackit.cloud/products/data-and-ai/ai-model-serving/how-tos/integration-of-tool-calling/ prints tool_call_response.tool_calls; the other capability flags are false, meaning not declared by this entry, and no request exercising them was sent. billingPolicy holds no-free-tier because the schema takes one of three values and the token-creation step says \"To confirm click on Order fee-based.\"; the free trial the product page describes is in step 3. apiKeyFormat is null so NeuroLink's key-format check is not applied."
|
|
107
|
+
},
|
|
108
|
+
"evidence": {
|
|
109
|
+
"rosterVerified": {
|
|
110
|
+
"date": "2026-09-29",
|
|
111
|
+
"status": 403,
|
|
112
|
+
"method": "docs-only — unauthenticated GET https://api.openai-compat.model-serving.eu01.onstackit.cloud/v1/models answers 403 without a key, so model ids are taken from https://docs.stackit.cloud/products/data-and-ai/ai-model-serving/basics/available-shared-models/ (retrieved 2026-09-29); roster not verified"
|
|
113
|
+
},
|
|
114
|
+
"authProbe": {
|
|
115
|
+
"date": "2026-09-29",
|
|
116
|
+
"status": 403,
|
|
117
|
+
"method": "unauthenticated GET https://api.openai-compat.model-serving.eu01.onstackit.cloud/v1/models — HTTP 403, content-length 0, no response body, so no error code was observable; the same day unauthenticated GETs of .../v1/chat/completions and .../v1 answered HTTP 403 with content-length 0; credential-free, no key used, no POST sent"
|
|
118
|
+
},
|
|
119
|
+
"billingProbe": {
|
|
120
|
+
"date": "2026-09-29",
|
|
121
|
+
"method": "public pages https://docs.stackit.cloud/products/data-and-ai/ai-model-serving/getting-started/getting-started-with-shared-models/ (token step \"To confirm click on Order fee-based.\"), https://docs.stackit.cloud/products/data-and-ai/ai-model-serving/release-notes/ (May 6, 2025: \"easy pay-as-you-go access\") and https://stackit.com/en/products/data-ai/stackit-ai-model-serving (\"Register for a free trial access\", \"The trial period ends automatically after 30 days.\", and a STACKIT AI Model Serving price table in euro); credential-free, no signup performed"
|
|
122
|
+
},
|
|
123
|
+
"liveMatrix": null,
|
|
124
|
+
"addedInPR": "https://github.com/juspay/neurolink/pull/1862"
|
|
125
|
+
}
|
|
126
|
+
}
|