@juspay/neurolink 12.44.0 → 12.44.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -3
- package/dist/browser/neurolink.min.js +381 -381
- package/dist/neurolink.d.ts +13 -0
- package/dist/neurolink.js +57 -2
- package/dist/providers/nvidiaNim/client.d.ts +1 -1
- package/dist/providers/nvidiaNim/client.js +5 -5
- package/dist/rag/ragIntegration.js +10 -5
- package/dist/utils/decisionBatches.d.ts +24 -0
- package/dist/utils/decisionBatches.js +58 -0
- package/dist/utils/logSanitize.js +12 -0
- package/docs-site/static/search-index.json +8 -7
- package/package.json +1 -1
package/dist/neurolink.d.ts
CHANGED
|
@@ -2427,8 +2427,21 @@ export declare class NeuroLink {
|
|
|
2427
2427
|
* that is unconfigured, slow, rate-limited or down must never change
|
|
2428
2428
|
* NeuroLink's observable behaviour — the caller falls back to whatever it
|
|
2429
2429
|
* did before the decision was available.
|
|
2430
|
+
*
|
|
2431
|
+
* It also takes more questions than a provider's per-request cap: the map is
|
|
2432
|
+
* split at the cap, the batches run a few at a time, and the answers come
|
|
2433
|
+
* back joined. A batch that fails costs only its own answers, which every
|
|
2434
|
+
* consumer already reads as "no decision"; null comes back only when every
|
|
2435
|
+
* batch failed. `decide()` itself stays strict and refuses an over-cap request.
|
|
2430
2436
|
*/
|
|
2431
2437
|
tryDecide(options: DecisionOptions): Promise<DecisionResult | null>;
|
|
2438
|
+
/**
|
|
2439
|
+
* One `decide()` call, or, when the question map is longer than the resolved
|
|
2440
|
+
* provider's cap, several run a few at a time with their results joined. The
|
|
2441
|
+
* provider is resolved here exactly as `decide()` resolves it, so the cap that
|
|
2442
|
+
* is read is the cap of the provider that will answer.
|
|
2443
|
+
*/
|
|
2444
|
+
private decideInBatches;
|
|
2432
2445
|
/**
|
|
2433
2446
|
* Evaluate an AI response using the specified pipeline or scorers.
|
|
2434
2447
|
* This is a convenience method that creates a pipeline and executes it in one call.
|
package/dist/neurolink.js
CHANGED
|
@@ -30,7 +30,8 @@ import { buildToolRoutingCatalog, buildRoutingQueryFromHistory, resolveToolRouti
|
|
|
30
30
|
import { ToolRoutingCache } from "./core/toolRoutingCache.js";
|
|
31
31
|
import { DEFAULT_RECENT_TURNS, KnowledgeGroundingEngine, } from "./knowledge/index.js";
|
|
32
32
|
import { AIProviderFactory } from "./core/factory.js";
|
|
33
|
-
import { describeDecisionProviderKeys, resolveDefaultDecisionProvider, } from "./factories/providerDescriptors.js";
|
|
33
|
+
import { describeDecisionProviderKeys, PROVIDER_ALIAS_INDEX, PROVIDER_DESCRIPTORS_BY_NAME, resolveDefaultDecisionProvider, } from "./factories/providerDescriptors.js";
|
|
34
|
+
import { MAX_PARALLEL_DECISION_BATCHES, mergeDecisionResults, splitDecisionRequest, } from "./utils/decisionBatches.js";
|
|
34
35
|
import { resolveRequestKind } from "./core/resolveRequestKind.js";
|
|
35
36
|
import { createToolEventPayload } from "./core/toolEvents.js";
|
|
36
37
|
import { ProviderFactory } from "./factories/providerFactory.js";
|
|
@@ -13080,10 +13081,16 @@ Current user's request: ${currentInput}`;
|
|
|
13080
13081
|
* that is unconfigured, slow, rate-limited or down must never change
|
|
13081
13082
|
* NeuroLink's observable behaviour — the caller falls back to whatever it
|
|
13082
13083
|
* did before the decision was available.
|
|
13084
|
+
*
|
|
13085
|
+
* It also takes more questions than a provider's per-request cap: the map is
|
|
13086
|
+
* split at the cap, the batches run a few at a time, and the answers come
|
|
13087
|
+
* back joined. A batch that fails costs only its own answers, which every
|
|
13088
|
+
* consumer already reads as "no decision"; null comes back only when every
|
|
13089
|
+
* batch failed. `decide()` itself stays strict and refuses an over-cap request.
|
|
13083
13090
|
*/
|
|
13084
13091
|
async tryDecide(options) {
|
|
13085
13092
|
try {
|
|
13086
|
-
const result = await this.
|
|
13093
|
+
const result = await this.decideInBatches(options);
|
|
13087
13094
|
if (logger.shouldLog("debug")) {
|
|
13088
13095
|
logger.debug(`decide: ${Object.keys(result.answers).length} answers in ${result.latencyMs}ms` +
|
|
13089
13096
|
(result.upstreamMs ? ` (upstream ${result.upstreamMs}ms)` : ""), {
|
|
@@ -13100,6 +13107,54 @@ Current user's request: ${currentInput}`;
|
|
|
13100
13107
|
return null;
|
|
13101
13108
|
}
|
|
13102
13109
|
}
|
|
13110
|
+
/**
|
|
13111
|
+
* One `decide()` call, or, when the question map is longer than the resolved
|
|
13112
|
+
* provider's cap, several run a few at a time with their results joined. The
|
|
13113
|
+
* provider is resolved here exactly as `decide()` resolves it, so the cap that
|
|
13114
|
+
* is read is the cap of the provider that will answer.
|
|
13115
|
+
*/
|
|
13116
|
+
async decideInBatches(options) {
|
|
13117
|
+
const providerName = options.provider ??
|
|
13118
|
+
resolveDefaultDecisionProvider(this.resolveCredentials(options.credentials));
|
|
13119
|
+
// The name a caller passes may be an alias (`jev` for `typesafe`), so it is
|
|
13120
|
+
// resolved to the canonical provider before its descriptor is read.
|
|
13121
|
+
const canonical = providerName
|
|
13122
|
+
? PROVIDER_ALIAS_INDEX.get(providerName.toLowerCase())
|
|
13123
|
+
: undefined;
|
|
13124
|
+
const cap = canonical
|
|
13125
|
+
? PROVIDER_DESCRIPTORS_BY_NAME.get(canonical)?.decisionLimits
|
|
13126
|
+
?.maxQuestions
|
|
13127
|
+
: undefined;
|
|
13128
|
+
const batches = splitDecisionRequest(options, cap);
|
|
13129
|
+
if (batches.length === 1) {
|
|
13130
|
+
return this.decide(options);
|
|
13131
|
+
}
|
|
13132
|
+
const answered = [];
|
|
13133
|
+
let firstFailure;
|
|
13134
|
+
for (let from = 0; from < batches.length; from += MAX_PARALLEL_DECISION_BATCHES) {
|
|
13135
|
+
const settled = await Promise.allSettled(batches
|
|
13136
|
+
.slice(from, from + MAX_PARALLEL_DECISION_BATCHES)
|
|
13137
|
+
.map((batch) => this.decide(batch)));
|
|
13138
|
+
for (const outcome of settled) {
|
|
13139
|
+
if (outcome.status === "fulfilled") {
|
|
13140
|
+
answered.push(outcome.value);
|
|
13141
|
+
}
|
|
13142
|
+
else {
|
|
13143
|
+
firstFailure ??= outcome.reason;
|
|
13144
|
+
}
|
|
13145
|
+
}
|
|
13146
|
+
}
|
|
13147
|
+
const [first, ...rest] = answered;
|
|
13148
|
+
if (first === undefined) {
|
|
13149
|
+
throw firstFailure instanceof Error
|
|
13150
|
+
? firstFailure
|
|
13151
|
+
: new Error(String(firstFailure));
|
|
13152
|
+
}
|
|
13153
|
+
if (rest.length + 1 < batches.length) {
|
|
13154
|
+
logger.debug(`decide: ${batches.length - answered.length} of ${batches.length} batches failed; using the answers of the rest`);
|
|
13155
|
+
}
|
|
13156
|
+
return mergeDecisionResults([first, ...rest]);
|
|
13157
|
+
}
|
|
13103
13158
|
/**
|
|
13104
13159
|
* Evaluate an AI response using the specified pipeline or scorers.
|
|
13105
13160
|
* This is a convenience method that creates a pipeline and executes it in one call.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { AIProviderName } from "../../constants/enums.js";
|
|
2
2
|
import type { NeurolinkCredentials, OpenAICompatBuildBodyArgs, OpenAICompatChatRequest } from "../../types/index.js";
|
|
3
3
|
import { OpenAIChatCompletionsProvider } from "../openaiChatCompletionsBase.js";
|
|
4
4
|
declare const isNimFieldRejection: (body: string, field: string) => boolean;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { NvidiaNimModels } from "../../constants/enums.js";
|
|
1
|
+
import { AIProviderName, NvidiaNimModels } from "../../constants/enums.js";
|
|
2
2
|
import { AuthenticationError, InvalidModelError, ProviderError, RateLimitError, } from "../../types/index.js";
|
|
3
3
|
import { classifyProviderError, DEFAULT_ERROR_RULES, } from "../../utils/errorClassifier.js";
|
|
4
4
|
import { logger } from "../../utils/logger.js";
|
|
@@ -145,8 +145,8 @@ const getDefaultNimModel = () => {
|
|
|
145
145
|
// pointed out the default lived in four places and that changing only some
|
|
146
146
|
// of them is a no-op — which happened twice while tracking this down. The
|
|
147
147
|
// descriptor is the Factory+Registry convention's source of truth.
|
|
148
|
-
return getProviderModel("NVIDIA_NIM_MODEL", PROVIDER_DESCRIPTORS_BY_NAME.get(
|
|
149
|
-
|
|
148
|
+
return getProviderModel("NVIDIA_NIM_MODEL", PROVIDER_DESCRIPTORS_BY_NAME.get(AIProviderName.NVIDIA_NIM)?.defaultModel ??
|
|
149
|
+
NvidiaNimModels.GPT_OSS_20B);
|
|
150
150
|
};
|
|
151
151
|
/**
|
|
152
152
|
* NVIDIA NIM Provider — native HTTP+SSE, no AI SDK.
|
|
@@ -176,7 +176,7 @@ export class NvidiaNimProvider extends OpenAIChatCompletionsProvider {
|
|
|
176
176
|
const baseURL = credentials?.baseURL ??
|
|
177
177
|
process.env.NVIDIA_NIM_BASE_URL ??
|
|
178
178
|
NVIDIA_NIM_DEFAULT_BASE_URL;
|
|
179
|
-
super(
|
|
179
|
+
super(AIProviderName.NVIDIA_NIM, modelName, sdk, { baseURL, apiKey });
|
|
180
180
|
logger.debug("NVIDIA NIM Provider initialized", {
|
|
181
181
|
modelName: this.modelName,
|
|
182
182
|
providerName: this.providerName,
|
|
@@ -184,7 +184,7 @@ export class NvidiaNimProvider extends OpenAIChatCompletionsProvider {
|
|
|
184
184
|
});
|
|
185
185
|
}
|
|
186
186
|
getProviderName() {
|
|
187
|
-
return
|
|
187
|
+
return AIProviderName.NVIDIA_NIM;
|
|
188
188
|
}
|
|
189
189
|
getDefaultModel() {
|
|
190
190
|
return getDefaultNimModel();
|
|
@@ -349,8 +349,9 @@ async function _prepareRAGToolInner(ragConfig, fallbackProvider) {
|
|
|
349
349
|
// those config fields had no runtime effect and retrieval always used the
|
|
350
350
|
// deterministic hash embedding, which is a lexical fingerprint rather than
|
|
351
351
|
// a semantic space. Index and query must share one embedding space, so the
|
|
352
|
-
// provider path replaces the hash path wholesale;
|
|
353
|
-
// falls back to the hash for
|
|
352
|
+
// provider path replaces the hash path wholesale; a provider failure while
|
|
353
|
+
// creating the provider or building the index falls back to the hash for
|
|
354
|
+
// both sides, but one at query time fails that search.
|
|
354
355
|
const wantProviderEmbeddings = Boolean(embeddingProvider || embeddingModel);
|
|
355
356
|
const embedProviderName = embeddingProvider || fallbackProvider || "vertex";
|
|
356
357
|
const embedModelName = embeddingModel || "gemini-2.5-flash";
|
|
@@ -450,9 +451,13 @@ async function _prepareRAGToolInner(ragConfig, fallbackProvider) {
|
|
|
450
451
|
"rag.top_k": topK ?? 5,
|
|
451
452
|
},
|
|
452
453
|
}, async (span) => {
|
|
453
|
-
// Query through the same embedding space the index was built in
|
|
454
|
-
//
|
|
455
|
-
|
|
454
|
+
// Query through the same embedding space the index was built in.
|
|
455
|
+
// A failure here must fail the search: swapping in a hash vector
|
|
456
|
+
// would be scored against provider-space vectors of another
|
|
457
|
+
// dimension, which cosine reads as 0 for every chunk, so the tool
|
|
458
|
+
// would return arbitrary chunks as if they were relevant. A hash-built
|
|
459
|
+
// index never reaches this — its embedFn cannot reject.
|
|
460
|
+
const queryEmbedding = await embedFn(query);
|
|
456
461
|
// Fetch more candidates than needed so diversity can select across files and images
|
|
457
462
|
const loadedSources = fileContents.length + imageChunks.length;
|
|
458
463
|
const fetchK = loadedSources > 1 ? topK * 3 : topK;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { DecisionOptions, DecisionResult } from "../types/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* How many batches of one split request are in flight at once. A request that
|
|
4
|
+
* splits into many must not meet the vendor's rate limit first: Perplexity, for
|
|
5
|
+
* one, allows ten requests a second.
|
|
6
|
+
*/
|
|
7
|
+
export declare const MAX_PARALLEL_DECISION_BATCHES = 4;
|
|
8
|
+
/**
|
|
9
|
+
* Cut a request whose question map is longer than a provider's cap into
|
|
10
|
+
* requests the provider takes, keeping the questions in the order they were
|
|
11
|
+
* given. A request that fits, or a provider with no cap, comes back as the one
|
|
12
|
+
* request it was.
|
|
13
|
+
*
|
|
14
|
+
* `state` and any images or video travel with every batch, since each batch is
|
|
15
|
+
* a decision of its own.
|
|
16
|
+
*/
|
|
17
|
+
export declare function splitDecisionRequest(options: DecisionOptions, maxQuestions: number | undefined): DecisionOptions[];
|
|
18
|
+
/**
|
|
19
|
+
* One result from the results of several batches: the answers joined, usage and
|
|
20
|
+
* media summed, the latency of the slowest (the batches ran side by side), and
|
|
21
|
+
* the request ids listed. Model and provider are the first batch's, which is
|
|
22
|
+
* the same for all of them.
|
|
23
|
+
*/
|
|
24
|
+
export declare function mergeDecisionResults(results: readonly [DecisionResult, ...DecisionResult[]]): DecisionResult;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How many batches of one split request are in flight at once. A request that
|
|
3
|
+
* splits into many must not meet the vendor's rate limit first: Perplexity, for
|
|
4
|
+
* one, allows ten requests a second.
|
|
5
|
+
*/
|
|
6
|
+
export const MAX_PARALLEL_DECISION_BATCHES = 4;
|
|
7
|
+
/**
|
|
8
|
+
* Cut a request whose question map is longer than a provider's cap into
|
|
9
|
+
* requests the provider takes, keeping the questions in the order they were
|
|
10
|
+
* given. A request that fits, or a provider with no cap, comes back as the one
|
|
11
|
+
* request it was.
|
|
12
|
+
*
|
|
13
|
+
* `state` and any images or video travel with every batch, since each batch is
|
|
14
|
+
* a decision of its own.
|
|
15
|
+
*/
|
|
16
|
+
export function splitDecisionRequest(options, maxQuestions) {
|
|
17
|
+
const entries = Object.entries(options.questions);
|
|
18
|
+
if (maxQuestions === undefined ||
|
|
19
|
+
maxQuestions < 1 ||
|
|
20
|
+
entries.length <= maxQuestions) {
|
|
21
|
+
return [options];
|
|
22
|
+
}
|
|
23
|
+
const batches = [];
|
|
24
|
+
for (let from = 0; from < entries.length; from += maxQuestions) {
|
|
25
|
+
batches.push({
|
|
26
|
+
...options,
|
|
27
|
+
questions: Object.fromEntries(entries.slice(from, from + maxQuestions)),
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
return batches;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* One result from the results of several batches: the answers joined, usage and
|
|
34
|
+
* media summed, the latency of the slowest (the batches ran side by side), and
|
|
35
|
+
* the request ids listed. Model and provider are the first batch's, which is
|
|
36
|
+
* the same for all of them.
|
|
37
|
+
*/
|
|
38
|
+
export function mergeDecisionResults(results) {
|
|
39
|
+
const [first] = results;
|
|
40
|
+
const upstream = results.flatMap((r) => r.upstreamMs === undefined ? [] : [r.upstreamMs]);
|
|
41
|
+
const media = results.flatMap((r) => r.mediaBytes === undefined ? [] : [r.mediaBytes]);
|
|
42
|
+
const requestIds = results.flatMap((r) => (r.requestId ? [r.requestId] : []));
|
|
43
|
+
return {
|
|
44
|
+
model: first.model,
|
|
45
|
+
provider: first.provider,
|
|
46
|
+
answers: Object.assign({}, ...results.map((r) => r.answers)),
|
|
47
|
+
usage: {
|
|
48
|
+
inputTokens: results.reduce((sum, r) => sum + r.usage.inputTokens, 0),
|
|
49
|
+
outputTokens: results.reduce((sum, r) => sum + r.usage.outputTokens, 0),
|
|
50
|
+
},
|
|
51
|
+
latencyMs: Math.max(...results.map((r) => r.latencyMs)),
|
|
52
|
+
...(requestIds.length > 0 ? { requestId: requestIds.join(",") } : {}),
|
|
53
|
+
...(upstream.length > 0 ? { upstreamMs: Math.max(...upstream) } : {}),
|
|
54
|
+
...(media.length > 0
|
|
55
|
+
? { mediaBytes: media.reduce((sum, bytes) => sum + bytes, 0) }
|
|
56
|
+
: {}),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
@@ -214,6 +214,18 @@ export function redactUrlForError(url) {
|
|
|
214
214
|
const truncate = (s) => s.length > 200 ? `${s.slice(0, 200)}…` : s;
|
|
215
215
|
try {
|
|
216
216
|
const parsed = new URL(url);
|
|
217
|
+
// `user:pass@host:80` has no `//`, so it is not an authority: it parses as
|
|
218
|
+
// the scheme `user:` with the opaque path `pass@host:80`, and rebuilding it
|
|
219
|
+
// from scheme and path would hand the password back. An opaque path that
|
|
220
|
+
// holds an `@` is read as credentials and cut at the last one. A file URL
|
|
221
|
+
// has a path that starts with `/`, and a Windows drive path has a one-letter
|
|
222
|
+
// scheme, so neither is touched.
|
|
223
|
+
if (parsed.host === "" &&
|
|
224
|
+
!parsed.pathname.startsWith("/") &&
|
|
225
|
+
parsed.pathname.includes("@") &&
|
|
226
|
+
!/^[a-z]:$/i.test(parsed.protocol)) {
|
|
227
|
+
return truncate(`[redacted]@${parsed.pathname.slice(parsed.pathname.lastIndexOf("@") + 1)}`);
|
|
228
|
+
}
|
|
217
229
|
// Reconstruct explicitly from protocol + host + pathname — never
|
|
218
230
|
// parsed.username/parsed.password, and never parsed.href (which
|
|
219
231
|
// re-serializes any embedded userinfo) — so a `user:pass@host` in the
|
|
@@ -3358,7 +3358,7 @@
|
|
|
3358
3358
|
{"objectID":"19994573e52cd09183db8050eadaea8ece3e291ef40c3009a5c44dfa959bf99c","title":"XOR, at a deployment or a LiteLLM proxy route","url":"/docs/features/decide-inference-type#xor-at-a-deployment-or-a-litellm-proxy-route","content":"XOR, Juspay's open-weights decision model, has no built-in endpoint either.\nNeuroLink calls <base URL>/v1/systemone, and a trailing /v1 on the base URL\nis accepted. The base URL and key can equally come from the config passed to the\nSDK, new NeuroLink({ credentials: { xor: { baseURL, apiKey } } }), or per\ncall; config set there counts when NeuroLink picks the default decision\nprovider, exactly as the environment does. On a LiteLLM proxy the key's team\nmust allow xor-1.1, otherwise the proxy answers 403 team_model_access_denied.\n\nBuilt-in features use the first configured decision provider in the order\nTypeSafe, Laya, XOR, Perplexity. XOR counts as configured only with both its key\nand its base URL, and runs where a caller names it (provider: \"xor\") or when\nneither TypeSafe nor Laya is configured. It reads images and video; see\nImages and video and the\nXOR provider guide.","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"XOR, at a deployment or a LiteLLM proxy route","lvl3":""}},
|
|
3359
3359
|
{"objectID":"dc8b9e9a2c66b1d2a60305a09a44263ceca755d40f04b6771e0a7c05a5237a64","title":"Perplexity, at its hosted endpoint","url":"/docs/features/decide-inference-type#perplexity-at-its-hosted-endpoint","content":"Perplexity's pplx-decider-v1-27b is a hosted API at a public endpoint, so a key\nalone configures it and there is no base URL to set. NeuroLink calls\n<base URL>/v1/decisions; a trailing /v1 on an override is accepted. The key\ncan equally come from the config passed to the SDK,\nnew NeuroLink({ credentials: { perplexityDecider: { apiKey } } }), or per call;\nconfig set there counts when a decide() call picks the default decision\nprovider, exactly as the environment does. The classifier router's auto gate is\nread differently: it looks at the constructor's credentials and the environment\nonly, so a credentials.perplexityDecider passed on one call does not influence\nit. The provider id is perplexity-decider: the perplexity provider is the\nSonar text provider, which serves generate() and stream() and not decide().\n\nPERPLEXITY_API_KEY is shared with that text provider. A host that set it\nonly to use Sonar has therefore also configured decide, and built-in features\nwill use Perplexity whenever none of TypeSafe, Laya or XOR is configured.\nPerplexity comes after XOR in descriptor order, so it never displaces one that\nis. Context compaction's relevance stage and summary gate need no opt-in of their\nown, so earlier conversation text starts going to Perplexity the first time a\nconversation outgrows its budget; model routing, tool routing and RAG planning do\nnothing unless enabled. To keep the shared key from activating decisions, pass\nthe text provider's key as credentials.perplexity instead of through the\nenvironment, and keep it out of .env too, because the SDK and the CLI load that\nfile into the environment, or configure one of TypeSafe, Laya and XOR, which then\nreceives those texts instead. The Perplexity provider guide lists\nwhat each consumer sends\nand the\nexact switches.\nIt reads images but no video; see Images and video.\n\nThe degradation contract. resolveDefaultDecisionProvider() returns\nundefined when no decision provider is configured (a key, plus a base URL for\nLaya and","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"Perplexity, at its hosted endpoint","lvl3":""}},
|
|
3360
3360
|
{"objectID":"7990ffc08aca0afbeae4310cfdcd3758daf52da4d9edd1da90a82b683f4d7d41","title":"Two transports","url":"/docs/features/decide-inference-type#two-transports","content":"The same model is reachable two ways. Which one runs is decided once, in the\nconstructor:\n\n| | Direct | Vercel AI Gateway |\n| ------------------- | ------------------ | --------------------------------------------- |\n| Key | TYPESAFE_API_KEY | AI_GATEWAY_API_KEY |\n| Endpoint | api.typesafe.ai | ai-gateway.vercel.sh/v4/ai/evaluation-model |\n| Model named in | request body | ai-model-id header |\n| Question vocabulary | noul | boolean |\n| confidence | on each answer | on providerMetadata, not on the answer |\n| Billed by | TypeSafe | Vercel |\n\nHolding both keys keeps the direct transport, so the confidence figures a\nhost already sees do not shift underneath it when a second key appears. Both\ntransports report the vendor's calibrated confidence — the gateway simply puts\nit somewhere else, under providerMetadata.typesafe.confidence.<questionId>,\nleaving the answer objects without one. Set TYPESAFE_TRANSPORT=gateway (or\ncredentials.typesafe.transport) to override.\n\n⚠️ Read that field, not the distribution peak. It is tempting to take\nmax(probabilities) when an answer carries no confidence, and on a\nnear-certain answer the two agree. On an uncertain one they do not, and not by a\nlittle: a measured four-way choice returned probabilities\n{alpha 0.16, beta 0.28, gamma 0.33, delta 0.23} — a peak of 0.33 against a\nreported confidence of 0.10. That gap straddles the default\nminUpgradeConfidence of 0.3, so the derived number clears a bar the real one\nfails and a near-random pick gets acted on as a confident one. The peak stays as\nthe fallback when neither source reports a confidence, and it is genuinely a\ndifferent quantity: an even distribution over N options lands near 1/N, not 0.\n\nUsage is spelled differently t","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"Two transports","lvl3":""}},
|
|
3361
|
-
{"objectID":"e5df7db87d4cb31c67fcce769cf5a3573764cb358ed9ee4b41f7ce86cb3954b7","title":"Using it","url":"/docs/features/decide-inference-type#using-it","content":"readDecisionBoolean / readDecisionChoice / readDecisionScore validate at\nruntime and return undefined for a missing id or a mismatched type, so no\ncall site needs a type assertion.\n\nUse decide() instead of tryDecide() when you want the failure to surface;\nit throws a ProviderError whose cause carries a typed kind\n(authentication, rate_limit, max_tokens_exceeded, …).","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"Using it","lvl3":""}},
|
|
3361
|
+
{"objectID":"e5df7db87d4cb31c67fcce769cf5a3573764cb358ed9ee4b41f7ce86cb3954b7","title":"Using it","url":"/docs/features/decide-inference-type#using-it","content":"readDecisionBoolean / readDecisionChoice / readDecisionScore validate at\nruntime and return undefined for a missing id or a mismatched type, so no\ncall site needs a type assertion.\n\nUse decide() instead of tryDecide() when you want the failure to surface;\nit throws a ProviderError whose cause carries a typed kind\n(authentication, rate_limit, max_tokens_exceeded, …).\n\nMore questions than a provider takes. A provider that caps the questions in\none request (Laya takes 64) refuses a longer map from decide() with\nmax_tokens_exceeded. tryDecide(), which every built-in consumer calls,\nsplits the map at the cap instead, keeps the questions in the order given, runs\nup to four batches at a time and joins the answers into one result: usage is\nsummed, the latency is the slowest batch's, and requestId lists the batches'\nids. A batch that fails costs only its own questions, which then have no answer\n(the read* helpers return undefined for them, and every built-in consumer\ncarries on without that decision); tryDecide() returns null only when every\nbatch failed. The state and any media are sent with each batch, so a split\nrequest costs the state's tokens once for each batch. A provider with no cap\n(TypeSafe, XOR) always gets one request.","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"Using it","lvl3":""}},
|
|
3362
3362
|
{"objectID":"7232a490e9e72e01dbe1a12de9470a38ed66ef91aa076b8c8cc745770eb03545","title":"From the CLI","url":"/docs/features/decide-inference-type#from-the-cli","content":"The same primitive is available as neurolink decide [state], which calls\ndecide() (not tryDecide()) and prints one line per answer:\n\nTo ask about an image or a video, add --image <path> (repeatable) or\n--video <path>. XOR reads both, Perplexity reads images only, and TypeSafe and\nLaya read neither:\n\nSee the CLI command reference for the full flag\nlist, including --state-file, --questions-file, --image, --video and\n--format json.","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"From the CLI","lvl3":""}},
|
|
3363
3363
|
{"objectID":"3b801c727cb399feb7390c3ad67aba9ea5f77581096bb852b7aafb87b70998aa","title":"A choice answer is also a ranking","url":"/docs/features/decide-inference-type#a-choice-answer-is-also-a-ranking","content":"readDecisionChoice returns ranked — every option sorted by probability,\nhighest first. One choice question over N options therefore ranks all N in a\nsingle request. This is the basis for picking from a large catalogue.","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"A choice answer is also a ranking","lvl3":""}},
|
|
3364
3364
|
{"objectID":"e67682840a5ce9650dba2a1d437b0dfbba456cae60fa3f607127e209bf1ec3e7","title":"Images and video","url":"/docs/features/decide-inference-type#images-and-video","content":"A decision provider whose descriptor declares media limits reads images, and\npossibly one video, alongside state. XOR does, and so does Perplexity, which\ndeclares images only and no video; TypeSafe and Laya do not. Two optional fields\non the request carry them, for decide() and tryDecide() alike:\nimages — up to 8 images, the limit XOR and Perplexity each declare.\nvideo — one video, for a provider that declares video (XOR).\n\nEach image and the video takes the same three input forms:\na Buffer;\na local file path;\na data:image/…;base64, or data:video/…;base64, URL.\n\nNeuroLink identifies a Buffer or a file from its bytes, not its extension — PNG,\nJPEG, WebP and GIF images, and MP4, MOV and WebM video —\nand sends it as a data: URL. A data: URL you pass yourself must hold base64\nimage or video content, and is sent as given. Perplexity reads PNG, JPEG and\nWebP only, and refuses a GIF before any request.\n\nWhat is refused. Everything NeuroLink can check is refused before any\nrequest, as a non-retryable invalid_request:\nan http(s) URL — media is not fetched for you, so pass a Buffer, a file path\n or a data: URL;\na string that is not a file path or a data: URL, such as bare base64 or a\n URL with another scheme;\na missing file, a directory, or an empty Buffer or file;\nsomething that is not an image or a video;\nmore than 8 images;\na request body over the provider's limit: 8 MB for XOR, 32 MiB for Perplexity.\n The limit applies to the encoded body, so the base64 form counts. A file over\n it is refused from its size, before it is read;\na video sent to a provider that declares no video (Perplexity);\nan image Perplexity cannot read: one of another type, or over 2,048 tiles of\n 32 × 32 pixels, which the API would otherwise hold for about a minute before\n answering 504;\nany media sent to a provider that declares no media capability (TypeSafe,\n Laya). The message names the providers that accept media.\n\nImages and a video can be sent together to XOR (up to 8 images and one\nvideo),","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"Images and video","lvl3":""}},
|
|
@@ -6156,7 +6156,7 @@
|
|
|
6156
6156
|
{"objectID":"50860d1f7a27dbe3ad7452ad7079ea437658db372b97081d0a509429369cacc6","title":"[TypeSafe (Jev)](/docs/getting-started/providers/typesafe)","url":"/docs/getting-started/providers#typesafe-jevdocsgetting-startedproviderstypesafe","content":"Typed, calibrated judgments instead of text\n🎯 boolean / choice / score answers, each with a calibrated confidence\n⚡ Latency flat in question count — 1 question ~393 ms, 400 questions ~465 ms\n💰 ~$0.00002 per decision (~$0.042/M input, output billed at zero)\n🔌 Two transports: TypeSafe direct, or the Vercel AI Gateway\n🛡️ Fails open — with no decision provider configured, every consumer behaves exactly as before\n🔑 API key from console.typesafe.ai/keys\n🔄 Aliases: jev, typesafe-ai\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[TypeSafe (Jev)](/docs/getting-started/providers/typesafe)","lvl3":""}},
|
|
6157
6157
|
{"objectID":"43b838d60f2794ce46361196d6fc8a708b3a301398dd55f2c8015d567aa21c2c","title":"[Laya](/docs/getting-started/providers/laya)","url":"/docs/getting-started/providers#layadocsgetting-startedproviderslaya","content":"Open-weights decision provider — the same typed boolean/choice/score answers as Jev, from Convai Innovations' Apache-2.0 checkpoints, at a Laya server or LiteLLM proxy route you configure\n🧭 Serves decide only; built-in features use it when its key and base URL are set and neither TYPESAFE_API_KEY nor AI_GATEWAY_API_KEY is\n📏 Refuses more than ~768 tokens of state (320 on english) before any network call, since its encoders read only 1,024 (512)\n🔌 No built-in endpoint: LAYA_BASE_URL (or credentials.laya.baseURL) names a Laya server or a LiteLLM pass-through route to one\n🔑 LAYA_API_KEY is the key that endpoint accepts; on LiteLLM, the route must be in the key's Allowed Routes\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[Laya](/docs/getting-started/providers/laya)","lvl3":""}},
|
|
6158
6158
|
{"objectID":"613cbeca5e8fa0bbe765b8db9ec4ed2ff76a913dd45b8dab5e2de06a6e5f19ff","title":"[XOR](/docs/getting-started/providers/xor)","url":"/docs/getting-started/providers#xordocsgetting-startedprovidersxor","content":"Open-weights decision provider — the same typed boolean/choice/score answers as Jev, from xor-1.1, Juspay's Apache-2.0 model, at a deployment or LiteLLM proxy route you configure\n🧭 Serves decide only; built-in features use it when its key and base URL are set and no TypeSafe key, no AI_GATEWAY_API_KEY and no Laya key and base URL is\n🖼️ Takes up to 8 images or one video with a decision, as a Buffer, a local file path or a data: URL; TypeSafe and Laya refuse media before any request, and Perplexity refuses a video\n📏 Refuses more than about 200,000 estimated tokens of state before any network call\n🔌 No built-in endpoint: XOR_BASE_URL (or credentials.xor.baseURL) is the origin of a deployment or of a LiteLLM route to one; requests go to <base URL>/v1/systemone\n🔑 XOR_API_KEY is the key that endpoint accepts; on LiteLLM, the key's team must allow xor-1.1\n📦 Weights and setup: huggingface.co/juspay/xor\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[XOR](/docs/getting-started/providers/xor)","lvl3":""}},
|
|
6159
|
-
{"objectID":"6ab8cdd8152a0d7c9844d54b6d4eaccc905b60e79f4b28508d78d52c3cfe9470","title":"[Perplexity Decisions](/docs/getting-started/providers/perplexity-decider)","url":"/docs/getting-started/providers#perplexity-decisionsdocsgetting-startedprovidersperplexity-decider","content":"Hosted decision provider — the same typed boolean/choice/score answers as Jev, from Perplexity's pplx-decider-v1-27b, at https://api.perplexity.ai\n🧭 Serves decide only (provider id perplexity-decider, not the Sonar text provider perplexity); built-in features use it when it is configured and no TypeSafe key, no AI_GATEWAY_API_KEY, no Laya key and base URL and no XOR key and base URL is\n🔑 PERPLEXITY_API_KEY alone configures it, and it is the same key the Perplexity text provider reads, so a key set for Sonar also lets built-in features use it when none of TypeSafe, Laya or XOR is configured; the guide lists what each consumer then sends\n🖼️ Takes up to 8 PNG, JPEG or WebP images with a decision; no video\n💰 $0.04 per million input tokens (image tokens included), output free, as Perplexity documents it\n📏 Refuses more than about 100,000 estimated tokens of state (NeuroLink's own window; the server's ceiling is 262,144 input tokens), or more than 128 questions, before any network call. The 128-question cap, the server's token ceiling and the latency were measured on a real account in October 2026\n🔌 Hosted endpoint, so no base URL is needed; PERPLEXITY_DECIDER_BASE_URL (or credentials.perplexityDecider.baseURL) can name another origin\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[Perplexity Decisions](/docs/getting-started/providers/perplexity-decider)","lvl3":""}},
|
|
6159
|
+
{"objectID":"6ab8cdd8152a0d7c9844d54b6d4eaccc905b60e79f4b28508d78d52c3cfe9470","title":"[Perplexity Decisions](/docs/getting-started/providers/perplexity-decider)","url":"/docs/getting-started/providers#perplexity-decisionsdocsgetting-startedprovidersperplexity-decider","content":"Hosted decision provider — the same typed boolean/choice/score answers as Jev, from Perplexity's pplx-decider-v1-27b, at https://api.perplexity.ai\n🧭 Serves decide only (provider id perplexity-decider, not the Sonar text provider perplexity); built-in features use it when it is configured and no TypeSafe key, no AI_GATEWAY_API_KEY, no Laya key and base URL and no XOR key and base URL is\n🔑 PERPLEXITY_API_KEY alone configures it, and it is the same key the Perplexity text provider reads, so a key set for Sonar also lets built-in features use it when none of TypeSafe, Laya or XOR is configured; the guide lists what each consumer then sends\n🖼️ Takes up to 8 PNG, JPEG or WebP images with a decision; no video\n💰 $0.04 per million input tokens (image tokens included), output free, as Perplexity documents it\n📏 Refuses more than about 100,000 estimated tokens of state (NeuroLink's own window; the server's ceiling is 262,144 input tokens), or more than 128 questions in a decide() call (tryDecide() splits them), before any network call. The 128-question cap, the server's token ceiling and the latency were measured on a real account in October 2026\n🔌 Hosted endpoint, so no base URL is needed; PERPLEXITY_DECIDER_BASE_URL (or credentials.perplexityDecider.baseURL) can name another origin\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[Perplexity Decisions](/docs/getting-started/providers/perplexity-decider)","lvl3":""}},
|
|
6160
6160
|
{"objectID":"c98403894a115164f29a019817b7f39c93b59623a9854b4575ad06bc5f597320","title":"🧩 Additional Catalog Providers","url":"/docs/getting-started/providers#-additional-catalog-providers","content":"Every provider below is a Tier-2 catalog entry. Provider-specific\nbehavioural quirks may apply, so check the provider's catalog file. The whole\nintegration is one JSON file under src/lib/providers/catalog/. Each page is\ngenerated from that file, which is also what the CI onboarding gate reads.","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"🧩 Additional Catalog Providers","lvl3":""}},
|
|
6161
6161
|
{"objectID":"026138da0a559269ecd9f0b2ceb72d9039096e72e064142afb7bfb74a5cb7455","title":"[API Route](/docs/getting-started/providers/api-route)","url":"/docs/getting-started/providers#api-routedocsgetting-startedprovidersapi-route","content":"Claude Sonnet 4.6\n🤖 8 models; default claude-sonnet-4-6 (1M context)\n🛠️ Native tool calling + structured output together\n💳 Free tier available\n✅ Roster verified 2026-09-17 (authenticated GET /v1/models)\n🔑 API key from api-route.com\n🔄 Aliases: apiroute\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[API Route](/docs/getting-started/providers/api-route)","lvl3":""}},
|
|
6162
6162
|
{"objectID":"85aa65949d959db077347ecf93a4c40ade9ebab4300d4d52c62c702f6929053b","title":"[Baseten](/docs/getting-started/providers/baseten)","url":"/docs/getting-started/providers#basetendocsgetting-startedprovidersbaseten","content":"GLM 5.3 Flash\n🤖 16 models; default zai-org/GLM-5.3-Flash (1M context)\n🛠️ Native tool calling + structured output together\n💳 Free tier available\n✅ Roster verified 2026-09-03 (authenticated GET /v1/models)\n🔑 API key from app.baseten.co\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[Baseten](/docs/getting-started/providers/baseten)","lvl3":""}},
|
|
@@ -6564,7 +6564,7 @@
|
|
|
6564
6564
|
{"objectID":"1637c68ac1e9cbfce5f16fd46aaa8835701c2f1430482c8fa9910e486a7bb625","title":"Verification status","url":"/docs/getting-started/providers/novita#verification-status","content":"Tier-2 onboarding requires evidence before a provider is accepted, and\npnpm run verify:provider-onboarding gates it in CI. This is what the\ncatalog records for Novita AI:\n\n| Probe | Result |\n| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| Roster | authenticated GET /openai/v1/models, HTTP 200, 2026-09-05 |\n| Auth rejection | HTTP 401 (FAILED_TO_AUTH), 2026-09-05 |\n| Live capability sweep | 2026-09-05, probed against the default model. Chat, streaming, and a real structured tool call all passed. response_format: json_object succeeded both alone and combined with tools in the same request — confirmed at the SDK level, which is why structuredOutputWithTools is true for this provider, unlike Friendli or Morph. |","hierarchy":{"lvl0":"Getting Started","lvl1":"Novita AI Provider Guide","lvl2":"Verification status","lvl3":""}},
|
|
6565
6565
|
{"objectID":"a28a46f2a803a788421fbf99c39dcb97d33871e99a7dc45807a98ddce3e15589","title":"Troubleshooting","url":"/docs/getting-started/providers/novita#troubleshooting","content":"| Symptom | Cause | Fix |\n| ----------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |\n| FAILED_TO_AUTH | NOVITA_API_KEY unset, wrong, or not sk_-prefixed | Rotate the key at https://novita.ai/settings/key-management |\n| MODEL_NOT_FOUND | The roster changed since 2026-09-05 | Pick a current id from https://novita.ai/models or the authenticated /openai/v1/models roster |\n| Truncated or empty content on the default model | zai-org/glm-5.3-flash is a reasoning model and the catalog default max output is only 4,096 tokens | Raise maxTokens for longer or reasoning-heavy completions |","hierarchy":{"lvl0":"Getting Started","lvl1":"Novita AI Provider Guide","lvl2":"Troubleshooting","lvl3":""}},
|
|
6566
6566
|
{"objectID":"7ce1eb2bda1d99489069643ba7316d9d1e893babf249024cf111547fbe952f66","title":"See also","url":"/docs/getting-started/providers/novita#see-also","content":"Provider setup overview\nAll providers\nTier-2 onboarding\nProvider feature compatibility","hierarchy":{"lvl0":"Getting Started","lvl1":"Novita AI Provider Guide","lvl2":"See also","lvl3":""}},
|
|
6567
|
-
{"objectID":"c4d6bc20fbe9d189291d36b241fffab77fac1dcbe5ff66e1df5248840997c55d","title":"NVIDIA NIM Provider Guide","url":"/docs/getting-started/providers/nvidia-nim","content":"NVIDIA NIM Provider Guide\n\nHundreds of optimised AI models on NVIDIA's GPU-accelerated inference platform — or your own self-hosted NIM deployment\n\nOverview\n\nNVIDIA NIM (NVIDIA Inference Microservices) is a managed inference platform that hosts a large catalog of open-weight models — Meta Llama, DeepSeek, Mistral, Microsoft Phi, Google Gemma, and more — all GPU-optimised and served through an OpenAI-compatible API. You can also point NeuroLink at a self-hosted NIM cluster by overriding the base URL.\n\nKey Facts\nHosted base URL: https://integrate.api.nvidia.com/v1\nProtocol: OpenAI-compatible (/v1/chat/completions)\nVision: Yes, on supported models (Llama 3.2 Vision, etc.)\nReasoning: Yes, on Nemotron and DeepSeek-R1 variants\nStreaming: Supported\nTool calling: Supported on most models\nSelf-hosting: Override NVIDIA_NIM_BASE_URL to point at a private NIM cluster\n\nNIM-Specific Extras\n\nNIM supports additional generation parameters beyond the standard OpenAI surface: top_k, min_p, repetition_penalty, min_tokens, and per-model chat_template overrides. The NeuroLink provider automatically passes these via the providerOptions.openai.body mechanism. If a model rejects an unsupported parameter with HTTP 400, the provider retries the request with that parameter stripped.\n\nQuick Start\nGet an API Key\n\nSign up at https://build.nvidia.com and create an API key under API Keys.\nConfigure Environment\n\nAdd to your .env file:\nInstall NeuroLink\nGenerate Your First Response\n\nSupported Models\n\nNIM hosts hundreds of models. NeuroLink ships with these popular models pre-enumerated:\n\nMeta Llama\n\n| Model ID | Context | Vision | Reasoning |\n| ------------------------------------ | ------- | ------ | --------- |\n| meta/llama-3.3-70b-instruct | 128K | No | No |\n| meta/llama-3.1-405b-instruct | 128K | No | No |\n| meta/llama-3.1-70b-instruct | 128K | No | No |\n| meta/llama-3.2-90b-vision-instruct | 128K | Yes | No |\n| meta/llama-3.2-11b-vision-instruct | 128K | Yes | No |\n\nNVIDIA Nemotron (Reasoning)\n\n| Model ID | Context | Vision | Reasoning |\n| ---------------------------------------- | ------- | ------ | --------- |\n| nvidia/llama-3.3-nemotron-super-49b-v1 | 128K | No | Yes |\n| nvidia/llama-3.1-nemotron-nano-8b-v1 | 128K | No | Yes |\n| nvidia/llama-3.1-nemotron-70b-instruct | 128K | No | Yes |\n\nDeepSeek (Hosted on NIM)\n\n| Model ID | Context | Vision | Reasoning |\n| ------------------------------------------- | ------- | ------ | --------- |\n| deepseek-ai/deepseek-r1 | 128K | No | Yes |\n| deepseek-ai/deepseek-r1-distill-llama-70b | 128K | No | Yes |\n\nOther Models\n\n| Model ID | Context | Notes |\n| --------------------------------------- | ------- | ---------------- |\n| mistralai/mixtral-8x22b-instruct-v0.1 | 64K | Large MoE |\n| mistralai/mixtral-8x7b-instruct-v0.1 | 32K | Efficient MoE |\n| microsoft/phi-4 | 16K | Compact, capable |\n| google/gemma-3-27b-it | 128K | Google Gemma |\n\nBrowse the full catalog at https://build.nvidia.com/models. You can pass any model ID via --model or model: — NIM returns 404 for IDs that are not in the catalog.\n\nSDK Usage\n\nBasic Generation\n\nUsing a Specific Model\n\nReasoning with thinkingLevel\n\nReasoning-capable models (Nemotron, DeepSeek-R1) accept a thinking flag via NIM's chat_template_kwargs. Pass thinkingLevel to activate it:\n\nLevels: minimal (no thinking) | low | medium | high\n\nIf the model does not support chat_template_kwargs.thinking, the provider automatically retries without it.\n\nStreaming\n\nPer-Call Credential Override\n\nFor self-hosted NIM clusters, override the base URL per call:\n\nCLI Usage\n\nBasic Commands\n\nProvider Aliases\n\n| Alias | Example |\n| ------------ | ----------------------- |\n| nvidia-nim | --provider nvidia-nim |\n| nvidia | --provider nvidia |\n| nim | --provider nim |\n\
|
|
6567
|
+
{"objectID":"c4d6bc20fbe9d189291d36b241fffab77fac1dcbe5ff66e1df5248840997c55d","title":"NVIDIA NIM Provider Guide","url":"/docs/getting-started/providers/nvidia-nim","content":"NVIDIA NIM Provider Guide\n\nHundreds of optimised AI models on NVIDIA's GPU-accelerated inference platform — or your own self-hosted NIM deployment\n\nOverview\n\nNVIDIA NIM (NVIDIA Inference Microservices) is a managed inference platform that hosts a large catalog of open-weight models — Meta Llama, DeepSeek, Mistral, Microsoft Phi, Google Gemma, and more — all GPU-optimised and served through an OpenAI-compatible API. You can also point NeuroLink at a self-hosted NIM cluster by overriding the base URL.\n\nKey Facts\nHosted base URL: https://integrate.api.nvidia.com/v1\nProtocol: OpenAI-compatible (/v1/chat/completions)\nVision: Yes, on supported models (Llama 3.2 Vision, etc.)\nReasoning: Yes, on Nemotron and DeepSeek-R1 variants\nStreaming: Supported\nTool calling: Supported on most models\nSelf-hosting: Override NVIDIA_NIM_BASE_URL to point at a private NIM cluster\n\nNIM-Specific Extras\n\nNIM supports additional generation parameters beyond the standard OpenAI surface: top_k, min_p, repetition_penalty, min_tokens, and per-model chat_template overrides. The NeuroLink provider automatically passes these via the providerOptions.openai.body mechanism. If a model rejects an unsupported parameter with HTTP 400, the provider retries the request with that parameter stripped.\n\nQuick Start\nGet an API Key\n\nSign up at https://build.nvidia.com and create an API key under API Keys.\nConfigure Environment\n\nAdd to your .env file:\nInstall NeuroLink\nGenerate Your First Response\n\nSupported Models\n\nNIM hosts hundreds of models. NeuroLink ships with these popular models pre-enumerated:\n\nOpenAI gpt-oss (default)\n\n| Model ID | Context | Vision | Reasoning |\n| -------------------- | ------- | ------ | --------- |\n| openai/gpt-oss-20b | 128K | No | No |\n\nMeta Llama\n\n| Model ID | Context | Vision | Reasoning |\n| ------------------------------------ | ------- | ------ | --------- |\n| meta/llama-3.3-70b-instruct | 128K | No | No |\n| meta/llama-3.1-405b-instruct | 128K | No | No |\n| meta/llama-3.1-70b-instruct | 128K | No | No |\n| meta/llama-3.2-90b-vision-instruct | 128K | Yes | No |\n| meta/llama-3.2-11b-vision-instruct | 128K | Yes | No |\n\nNVIDIA Nemotron (Reasoning)\n\n| Model ID | Context | Vision | Reasoning |\n| ---------------------------------------- | ------- | ------ | --------- |\n| nvidia/llama-3.3-nemotron-super-49b-v1 | 128K | No | Yes |\n| nvidia/llama-3.1-nemotron-nano-8b-v1 | 128K | No | Yes |\n| nvidia/llama-3.1-nemotron-70b-instruct | 128K | No | Yes |\n\nDeepSeek (Hosted on NIM)\n\n| Model ID | Context | Vision | Reasoning |\n| ------------------------------------------- | ------- | ------ | --------- |\n| deepseek-ai/deepseek-r1 | 128K | No | Yes |\n| deepseek-ai/deepseek-r1-distill-llama-70b | 128K | No | Yes |\n\nOther Models\n\n| Model ID | Context | Notes |\n| --------------------------------------- | ------- | ---------------- |\n| mistralai/mixtral-8x22b-instruct-v0.1 | 64K | Large MoE |\n| mistralai/mixtral-8x7b-instruct-v0.1 | 32K | Efficient MoE |\n| microsoft/phi-4 | 16K | Compact, capable |\n| google/gemma-3-27b-it | 128K | Google Gemma |\n\nAvailability, checked 2026-10-02. NVIDIA's GET https://integrate.api.nvidia.com/v1/models did not list meta/llama-3.3-70b-instruct, meta/llama-3.1-70b-instruct, deepseek-ai/deepseek-r1-distill-llama-70b or google/gemma-3-27b-it. The NvidiaNimModels enum records a probe on 2026-08-26 in which these answered \"no longer available\", and keeps the members so existing code compiles. meta/llama-3.1-405b-instruct, deepseek-ai/deepseek-r1, mistralai/mixtral-8x22b-instruct-v0.1, mistralai/mixtral-8x7b-instruct-v0.1 and microsoft/phi-4 were also absent from that list on that date, and meta/llama-3.2-90b-vision-instruct was listed.\n\nBrowse the full catalog at https://build.nvidia.com/models. You can pass any model ID via --model or model: — NIM returns 404 for IDs that are not in the catalog.\n\nSDK Usage\n\nBasic Generation\n\nUsing a Specific Model\n\nReasoning with thinkingLevel\n\nReasoning-capable models (Nemotron, DeepSeek-R1) accept a thinking flag via NIM's chat_template_kwargs. Pass thinkingLevel to activate it:\n\nLevels: minimal (no thinking) | low | medium | high\n\nIf the model does not support chat_template_kwargs.thinking, the provider automatically retries without it.\n\nStreaming\n\nPer-Call Credential Override\n\nFor self-hosted NIM clusters, override the base URL per call:\n\nCLI Usage\n\nBasic Commands\n\nProvider Aliases\n\n| Alias | Example |\n| ------------ | ----------------------- |\n| nvidia-nim | --provider nvidia-nim |\n| nvidia | --provider nvidia |\n| nim | --provider nim |\n\nC","hierarchy":{"lvl0":"Getting Started","lvl1":"NVIDIA NIM Provider Guide","lvl2":"","lvl3":""}},
|
|
6568
6568
|
{"objectID":"b3c7e6b9de265c001fb3ea1118f2467719f7d5d7b47d0d1219803161adaa97f3","title":"NVIDIA NIM Provider Guide","url":"/docs/getting-started/providers/nvidia-nim#nvidia-nim-provider-guide","content":"Hundreds of optimised AI models on NVIDIA's GPU-accelerated inference platform — or your own self-hosted NIM deployment","hierarchy":{"lvl0":"Getting Started","lvl1":"NVIDIA NIM Provider Guide","lvl2":"NVIDIA NIM Provider Guide","lvl3":""}},
|
|
6569
6569
|
{"objectID":"bdd47b6d8dc71c8c6e099e6aaf6d4b1322ee018e437203f0f8213316ead4bc6a","title":"Overview","url":"/docs/getting-started/providers/nvidia-nim#overview","content":"NVIDIA NIM (NVIDIA Inference Microservices) is a managed inference platform that hosts a large catalog of open-weight models — Meta Llama, DeepSeek, Mistral, Microsoft Phi, Google Gemma, and more — all GPU-optimised and served through an OpenAI-compatible API. You can also point NeuroLink at a self-hosted NIM cluster by overriding the base URL.","hierarchy":{"lvl0":"Getting Started","lvl1":"NVIDIA NIM Provider Guide","lvl2":"Overview","lvl3":""}},
|
|
6570
6570
|
{"objectID":"70e960324b4417bd885aed19e36a44abbedba28c263ff2bf2e6024c995e0915d","title":"Key Facts","url":"/docs/getting-started/providers/nvidia-nim#key-facts","content":"Hosted base URL: https://integrate.api.nvidia.com/v1\nProtocol: OpenAI-compatible (/v1/chat/completions)\nVision: Yes, on supported models (Llama 3.2 Vision, etc.)\nReasoning: Yes, on Nemotron and DeepSeek-R1 variants\nStreaming: Supported\nTool calling: Supported on most models\nSelf-hosting: Override NVIDIA_NIM_BASE_URL to point at a private NIM cluster","hierarchy":{"lvl0":"Getting Started","lvl1":"NVIDIA NIM Provider Guide","lvl2":"Key Facts","lvl3":""}},
|
|
@@ -6572,16 +6572,17 @@
|
|
|
6572
6572
|
{"objectID":"fef841a51c5f7d0ab1473cf9655493c106b37a29d1c362b0bf6a1f309fbfeada","title":"1. Get an API Key","url":"/docs/getting-started/providers/nvidia-nim#1-get-an-api-key","content":"Sign up at https://build.nvidia.com and create an API key under API Keys.","hierarchy":{"lvl0":"Getting Started","lvl1":"NVIDIA NIM Provider Guide","lvl2":"1. Get an API Key","lvl3":""}},
|
|
6573
6573
|
{"objectID":"54f576f3812e2af49eeaac655066e1c3b52337b017abcb2e7ba56befc2f8b075","title":"2. Configure Environment","url":"/docs/getting-started/providers/nvidia-nim#2-configure-environment","content":"Add to your .env file:\n\n`bash","hierarchy":{"lvl0":"Getting Started","lvl1":"NVIDIA NIM Provider Guide","lvl2":"2. Configure Environment","lvl3":""}},
|
|
6574
6574
|
{"objectID":"af9aefd38ecb7156515e45a9b14f49b2d4e35f5103766a34ee526c7376581718","title":"Required","url":"/docs/getting-started/providers/nvidia-nim#required","content":"NVIDIANIMAPI_KEY=nvapi-...","hierarchy":{"lvl0":"Getting Started","lvl1":"NVIDIA NIM Provider Guide","lvl2":"Required","lvl3":""}},
|
|
6575
|
-
{"objectID":"
|
|
6575
|
+
{"objectID":"90754e9183ad1fcb9cf9ff0bd3c6940d17bc19cd5ed4f3ff2ff789df5ca8d154","title":"Optional: override the default model (default: openai/gpt-oss-20b)","url":"/docs/getting-started/providers/nvidia-nim#optional-override-the-default-model-default-openaigpt-oss-20b","content":"NVIDIANIMMODEL=openai/gpt-oss-20b","hierarchy":{"lvl0":"Getting Started","lvl1":"NVIDIA NIM Provider Guide","lvl2":"Optional: override the default model (default: openai/gpt-oss-20b)","lvl3":""}},
|
|
6576
6576
|
{"objectID":"b76f23a2ce32b0caf9a68d600d71065bec032c30b4c4ec20e1aeb3ab10bc34f2","title":"Optional: self-hosted NIM base URL (default: https://integrate.api.nvidia.com/v1)","url":"/docs/getting-started/providers/nvidia-nim#optional-self-hosted-nim-base-url-default-httpsintegrateapinvidiacomv1","content":"NVIDIANIMBASE_URL=https://integrate.api.nvidia.com/v1","hierarchy":{"lvl0":"Getting Started","lvl1":"NVIDIA NIM Provider Guide","lvl2":"Optional: self-hosted NIM base URL (default: https://integrate.api.nvidia.com/v1)","lvl3":""}},
|
|
6577
6577
|
{"objectID":"4d821a39a9f5c5c88e459de816567ecbbcf3f8a9166888d78b326669c61c8803","title":"Optional: NIM-specific generation parameters","url":"/docs/getting-started/providers/nvidia-nim#optional-nim-specific-generation-parameters","content":"NVIDIANIMTOP_K=40\nNVIDIANIMMIN_P=0.05\nNVIDIANIMREPETITION_PENALTY=1.1\nNVIDIANIMMIN_TOKENS=1\nNVIDIANIMCHAT_TEMPLATE=\n`","hierarchy":{"lvl0":"Getting Started","lvl1":"NVIDIA NIM Provider Guide","lvl2":"Optional: NIM-specific generation parameters","lvl3":""}},
|
|
6578
6578
|
{"objectID":"2c10c41d2143a2e957aca12ab30393841715f915cb586f80c76ceb54ca1f5dd5","title":"3. Install NeuroLink","url":"/docs/getting-started/providers/nvidia-nim#3-install-neurolink","content":"`bash\nnpm install @juspay/neurolink","hierarchy":{"lvl0":"Getting Started","lvl1":"NVIDIA NIM Provider Guide","lvl2":"3. Install NeuroLink","lvl3":""}},
|
|
6579
6579
|
{"objectID":"cc6f7b1b64201da0c3ccaa840b81bfddec77ed18571c72532e43631cb84467ff","title":"or","url":"/docs/getting-started/providers/nvidia-nim#or","content":"pnpm add @juspay/neurolink\n`","hierarchy":{"lvl0":"Getting Started","lvl1":"NVIDIA NIM Provider Guide","lvl2":"or","lvl3":""}},
|
|
6580
6580
|
{"objectID":"bc1d7b9f9cd1f0093bceb3e9322d3a8907621c41375b95d6991236ad35217786","title":"Supported Models","url":"/docs/getting-started/providers/nvidia-nim#supported-models","content":"NIM hosts hundreds of models. NeuroLink ships with these popular models pre-enumerated:","hierarchy":{"lvl0":"Getting Started","lvl1":"NVIDIA NIM Provider Guide","lvl2":"Supported Models","lvl3":""}},
|
|
6581
|
+
{"objectID":"e0e7cb23f65e12d5e482c0dc5315010163c449defc6476af5e56bec0f2c67400","title":"OpenAI gpt-oss (default)","url":"/docs/getting-started/providers/nvidia-nim#openai-gpt-oss-default","content":"| Model ID | Context | Vision | Reasoning |\n| -------------------- | ------- | ------ | --------- |\n| openai/gpt-oss-20b | 128K | No | No |","hierarchy":{"lvl0":"Getting Started","lvl1":"NVIDIA NIM Provider Guide","lvl2":"OpenAI gpt-oss (default)","lvl3":""}},
|
|
6581
6582
|
{"objectID":"041d61fa62afb3ac253f977f945401de38379d0f20f40075103a0fa368137747","title":"Meta Llama","url":"/docs/getting-started/providers/nvidia-nim#meta-llama","content":"| Model ID | Context | Vision | Reasoning |\n| ------------------------------------ | ------- | ------ | --------- |\n| meta/llama-3.3-70b-instruct | 128K | No | No |\n| meta/llama-3.1-405b-instruct | 128K | No | No |\n| meta/llama-3.1-70b-instruct | 128K | No | No |\n| meta/llama-3.2-90b-vision-instruct | 128K | Yes | No |\n| meta/llama-3.2-11b-vision-instruct | 128K | Yes | No |","hierarchy":{"lvl0":"Getting Started","lvl1":"NVIDIA NIM Provider Guide","lvl2":"Meta Llama","lvl3":""}},
|
|
6582
6583
|
{"objectID":"3c188653cca3eebd5cc90f43252ad42029a4fa888bfb2b470139e4e0db08e26a","title":"NVIDIA Nemotron (Reasoning)","url":"/docs/getting-started/providers/nvidia-nim#nvidia-nemotron-reasoning","content":"| Model ID | Context | Vision | Reasoning |\n| ---------------------------------------- | ------- | ------ | --------- |\n| nvidia/llama-3.3-nemotron-super-49b-v1 | 128K | No | Yes |\n| nvidia/llama-3.1-nemotron-nano-8b-v1 | 128K | No | Yes |\n| nvidia/llama-3.1-nemotron-70b-instruct | 128K | No | Yes |","hierarchy":{"lvl0":"Getting Started","lvl1":"NVIDIA NIM Provider Guide","lvl2":"NVIDIA Nemotron (Reasoning)","lvl3":""}},
|
|
6583
6584
|
{"objectID":"4d9aca0894a65a52648a73478e1c73b487411326cf63e05eb8159fd8fef0c5aa","title":"DeepSeek (Hosted on NIM)","url":"/docs/getting-started/providers/nvidia-nim#deepseek-hosted-on-nim","content":"| Model ID | Context | Vision | Reasoning |\n| ------------------------------------------- | ------- | ------ | --------- |\n| deepseek-ai/deepseek-r1 | 128K | No | Yes |\n| deepseek-ai/deepseek-r1-distill-llama-70b | 128K | No | Yes |","hierarchy":{"lvl0":"Getting Started","lvl1":"NVIDIA NIM Provider Guide","lvl2":"DeepSeek (Hosted on NIM)","lvl3":""}},
|
|
6584
|
-
{"objectID":"8eccc475db8aa2e29bd49cd7c0ecb93be5b813979af07749f0c218abe7a71bd8","title":"Other Models","url":"/docs/getting-started/providers/nvidia-nim#other-models","content":"| Model ID | Context | Notes |\n| --------------------------------------- | ------- | ---------------- |\n| mistralai/mixtral-8x22b-instruct-v0.1 | 64K | Large MoE |\n| mistralai/mixtral-8x7b-instruct-v0.1 | 32K | Efficient MoE |\n| microsoft/phi-4 | 16K | Compact, capable |\n| google/gemma-3-27b-it | 128K | Google Gemma |\n\nBrowse the full catalog at https://build.nvidia.com/models. You can pass any model ID via --model or model: — NIM returns 404 for IDs that are not in the catalog.","hierarchy":{"lvl0":"Getting Started","lvl1":"NVIDIA NIM Provider Guide","lvl2":"Other Models","lvl3":""}},
|
|
6585
|
+
{"objectID":"8eccc475db8aa2e29bd49cd7c0ecb93be5b813979af07749f0c218abe7a71bd8","title":"Other Models","url":"/docs/getting-started/providers/nvidia-nim#other-models","content":"| Model ID | Context | Notes |\n| --------------------------------------- | ------- | ---------------- |\n| mistralai/mixtral-8x22b-instruct-v0.1 | 64K | Large MoE |\n| mistralai/mixtral-8x7b-instruct-v0.1 | 32K | Efficient MoE |\n| microsoft/phi-4 | 16K | Compact, capable |\n| google/gemma-3-27b-it | 128K | Google Gemma |\n\nAvailability, checked 2026-10-02. NVIDIA's GET https://integrate.api.nvidia.com/v1/models did not list meta/llama-3.3-70b-instruct, meta/llama-3.1-70b-instruct, deepseek-ai/deepseek-r1-distill-llama-70b or google/gemma-3-27b-it. The NvidiaNimModels enum records a probe on 2026-08-26 in which these answered \"no longer available\", and keeps the members so existing code compiles. meta/llama-3.1-405b-instruct, deepseek-ai/deepseek-r1, mistralai/mixtral-8x22b-instruct-v0.1, mistralai/mixtral-8x7b-instruct-v0.1 and microsoft/phi-4 were also absent from that list on that date, and meta/llama-3.2-90b-vision-instruct was listed.\n\nBrowse the full catalog at https://build.nvidia.com/models. You can pass any model ID via --model or model: — NIM returns 404 for IDs that are not in the catalog.","hierarchy":{"lvl0":"Getting Started","lvl1":"NVIDIA NIM Provider Guide","lvl2":"Other Models","lvl3":""}},
|
|
6585
6586
|
{"objectID":"def6f89a4845940b499d11b73fb1b4c4aee4bf4315cfbf3828168d4b874c3f39","title":"Reasoning with thinkingLevel","url":"/docs/getting-started/providers/nvidia-nim#reasoning-with-thinkinglevel","content":"Reasoning-capable models (Nemotron, DeepSeek-R1) accept a thinking flag via NIM's chat_template_kwargs. Pass thinkingLevel to activate it:\n\nLevels: minimal (no thinking) | low | medium | high\n\nIf the model does not support chat_template_kwargs.thinking, the provider automatically retries without it.","hierarchy":{"lvl0":"Getting Started","lvl1":"NVIDIA NIM Provider Guide","lvl2":"Reasoning with thinkingLevel","lvl3":""}},
|
|
6586
6587
|
{"objectID":"7cf16919f6a4e4931c46ea94384eb786a1c93d1b73d3086b3247bb826f5844cb","title":"Per-Call Credential Override","url":"/docs/getting-started/providers/nvidia-nim#per-call-credential-override","content":"For self-hosted NIM clusters, override the base URL per call:","hierarchy":{"lvl0":"Getting Started","lvl1":"NVIDIA NIM Provider Guide","lvl2":"Per-Call Credential Override","lvl3":""}},
|
|
6587
6588
|
{"objectID":"d997142b7549ed2c6ac3cb1c791f610155830be4d3dfeacd34fc36fed024fcba","title":"Basic Commands","url":"/docs/getting-started/providers/nvidia-nim#basic-commands","content":"`bash","hierarchy":{"lvl0":"Getting Started","lvl1":"NVIDIA NIM Provider Guide","lvl2":"Basic Commands","lvl3":""}},
|
|
@@ -6591,13 +6592,13 @@
|
|
|
6591
6592
|
{"objectID":"a5fc082bd08fdd0492c3bbe3162c63cbeb7207a09a8258824eda8872e8de4232","title":"Reasoning model with thinking enabled","url":"/docs/getting-started/providers/nvidia-nim#reasoning-model-with-thinking-enabled","content":"pnpm run cli generate \"Solve: what is 17! mod 13?\" \\\n --provider nvidia-nim \\\n --model deepseek-ai/deepseek-r1 \\\n --thinking-level high","hierarchy":{"lvl0":"Getting Started","lvl1":"NVIDIA NIM Provider Guide","lvl2":"Reasoning model with thinking enabled","lvl3":""}},
|
|
6592
6593
|
{"objectID":"58d637c0f9375a930ef480da8d002cb98dab13c49a1a23a555a16a5ead6c7bd1","title":"Interactive loop","url":"/docs/getting-started/providers/nvidia-nim#interactive-loop","content":"pnpm run cli loop --provider nvidia-nim\n`","hierarchy":{"lvl0":"Getting Started","lvl1":"NVIDIA NIM Provider Guide","lvl2":"Interactive loop","lvl3":""}},
|
|
6593
6594
|
{"objectID":"6d2c2771b00915a5ce976d69a16c5a8a23bd35f7efd262e21884530d20c0a0e4","title":"Provider Aliases","url":"/docs/getting-started/providers/nvidia-nim#provider-aliases","content":"| Alias | Example |\n| ------------ | ----------------------- |\n| nvidia-nim | --provider nvidia-nim |\n| nvidia | --provider nvidia |\n| nim | --provider nim |","hierarchy":{"lvl0":"Getting Started","lvl1":"NVIDIA NIM Provider Guide","lvl2":"Provider Aliases","lvl3":""}},
|
|
6594
|
-
{"objectID":"7fe825d689bae105fb7cc49ed299fd96c65231ea4ad501fa3c1c3ed36df332e7","title":"Configuration Reference","url":"/docs/getting-started/providers/nvidia-nim#configuration-reference","content":"| Environment Variable | Required | Default | Description |\n| ------------------------------- | -------- | ------------------------------------- | ------------------------------------------ |\n| NVIDIA_NIM_API_KEY | Yes | — | NVIDIA NIM API key (starts with nvapi-) |\n| NVIDIA_NIM_MODEL | No |
|
|
6595
|
+
{"objectID":"7fe825d689bae105fb7cc49ed299fd96c65231ea4ad501fa3c1c3ed36df332e7","title":"Configuration Reference","url":"/docs/getting-started/providers/nvidia-nim#configuration-reference","content":"| Environment Variable | Required | Default | Description |\n| ------------------------------- | -------- | ------------------------------------- | ------------------------------------------ |\n| NVIDIA_NIM_API_KEY | Yes | — | NVIDIA NIM API key (starts with nvapi-) |\n| NVIDIA_NIM_MODEL | No | openai/gpt-oss-20b | Default model |\n| NVIDIA_NIM_BASE_URL | No | https://integrate.api.nvidia.com/v1 | Base URL (override for self-hosted NIM) |\n| NVIDIA_NIM_TOP_K | No | — | Top-K sampling; -1 to disable |\n| NVIDIA_NIM_MIN_P | No | — | Minimum token probability; 0 to disable |\n| NVIDIA_NIM_REPETITION_PENALTY | No | — | Anti-repetition factor; 1 is neutral |\n| NVIDIA_NIM_MIN_TOKENS | No | — | Minimum output length in tokens |\n| NVIDIA_NIM_CHAT_TEMPLATE | No | — | Override the model's default chat template |","hierarchy":{"lvl0":"Getting Started","lvl1":"NVIDIA NIM Provider Guide","lvl2":"Configuration Reference","lvl3":""}},
|
|
6595
6596
|
{"objectID":"56a3e36fceef9780446d157f62f778d26baa8a79c25571830cc4d8ca8d7b180e","title":"Self-Hosted NIM","url":"/docs/getting-started/providers/nvidia-nim#self-hosted-nim","content":"If you run NIM on your own GPU cluster, set NVIDIA_NIM_BASE_URL to point at your cluster. Authentication is still forwarded via Authorization: Bearer, so set NVIDIA_NIM_API_KEY to any non-empty value if your cluster does not require it (or to your actual cluster token if it does).","hierarchy":{"lvl0":"Getting Started","lvl1":"NVIDIA NIM Provider Guide","lvl2":"Self-Hosted NIM","lvl3":""}},
|
|
6596
6597
|
{"objectID":"05c1f3aa67afc6e69a07d0a382fc1433f4f4bc1b1aaeba20f0dc2dbd64b4da43","title":"Feature Support","url":"/docs/getting-started/providers/nvidia-nim#feature-support","content":"| Feature | Supported | Notes |\n| --------------- | --------- | ----------------------------------------------------- |\n| Text generation | Yes | |\n| Streaming | Yes | |\n| Tool calling | Yes | Most models; depends on model support |\n| Vision / images | Yes | Model-dependent (Llama 3.2 Vision, etc.) |\n| Reasoning trace | Yes | Nemotron and DeepSeek-R1 variants via thinkingLevel |\n| Embeddings | No | Use OpenAI or Bedrock for embeddings |","hierarchy":{"lvl0":"Getting Started","lvl1":"NVIDIA NIM Provider Guide","lvl2":"Feature Support","lvl3":""}},
|
|
6597
6598
|
{"objectID":"e113acee1e904cde2e3295ebbb99df56e1d4d712cf149f774c8fbaad6ada6770","title":"\"Invalid NVIDIA NIM API key\"","url":"/docs/getting-started/providers/nvidia-nim#invalid-nvidia-nim-api-key","content":"The NVIDIA_NIM_API_KEY is missing, expired, or incorrect.\n\nGet or rotate keys at https://build.nvidia.com/settings/api-keys.","hierarchy":{"lvl0":"Getting Started","lvl1":"NVIDIA NIM Provider Guide","lvl2":"\"Invalid NVIDIA NIM API key\"","lvl3":""}},
|
|
6598
6599
|
{"objectID":"25669258e3b272543a86496e295868082d0146aff134a84ead2bdf65fccb3ffb","title":"\"NVIDIA NIM rate limit exceeded\"","url":"/docs/getting-started/providers/nvidia-nim#nvidia-nim-rate-limit-exceeded","content":"Your account has hit its request-per-minute or token-per-day limit. Upgrade your account, reduce request frequency, or implement backoff. Check your current usage at https://build.nvidia.com/usage.","hierarchy":{"lvl0":"Getting Started","lvl1":"NVIDIA NIM Provider Guide","lvl2":"\"NVIDIA NIM rate limit exceeded\"","lvl3":""}},
|
|
6599
6600
|
{"objectID":"8fa05f7794655a8b226d68b36d26031af67d19af32b9435a02357b7f8e719862","title":"\"NVIDIA NIM model not available\"","url":"/docs/getting-started/providers/nvidia-nim#nvidia-nim-model-not-available","content":"The model ID is not in the NIM catalog, or your account tier does not have access.\n\n`bash","hierarchy":{"lvl0":"Getting Started","lvl1":"NVIDIA NIM Provider Guide","lvl2":"\"NVIDIA NIM model not available\"","lvl3":""}},
|
|
6600
|
-
{"objectID":"c1e90df7e7b48c54aeed13aae5ceb77c009f7c3d69d3f000c4253e652f8a29d6","title":"Browse the catalog","url":"/docs/getting-started/providers/nvidia-nim#browse-the-catalog","content":"open https://build.nvidia.com/models\n\n\nUse the exact model ID shown on the model's page (e.g.,
|
|
6601
|
+
{"objectID":"c1e90df7e7b48c54aeed13aae5ceb77c009f7c3d69d3f000c4253e652f8a29d6","title":"Browse the catalog","url":"/docs/getting-started/providers/nvidia-nim#browse-the-catalog","content":"open https://build.nvidia.com/models\n\n\nUse the exact model ID shown on the model's page (e.g., openai/gpt-oss-20b`).","hierarchy":{"lvl0":"Getting Started","lvl1":"NVIDIA NIM Provider Guide","lvl2":"Browse the catalog","lvl3":""}},
|
|
6601
6602
|
{"objectID":"34d171d7ade8a31dfc31588bfccef6e920cd37a662a53089aabb5983a7d2694c","title":"\"NVIDIA NIM quota exceeded\"","url":"/docs/getting-started/providers/nvidia-nim#nvidia-nim-quota-exceeded","content":"Account-level token or compute quota reached. Check your NIM dashboard.","hierarchy":{"lvl0":"Getting Started","lvl1":"NVIDIA NIM Provider Guide","lvl2":"\"NVIDIA NIM quota exceeded\"","lvl3":""}},
|
|
6602
6603
|
{"objectID":"0697a2c79b09552d2abfdc5d788f32dfeec83add6b8a40e67389ef43b6f77ac9","title":"HTTP 400 with reasoning_budget or chat_template in the error","url":"/docs/getting-started/providers/nvidia-nim#http-400-with-reasoning_budget-or-chat_template-in-the-error","content":"The model does not support one of the NIM-specific extras. The provider automatically retries without the rejected parameter. If you see this error surfaced, it means the second attempt also failed — check the rest of the error message for the root cause.","hierarchy":{"lvl0":"Getting Started","lvl1":"NVIDIA NIM Provider Guide","lvl2":"HTTP 400 with reasoning_budget or chat_template in the error","lvl3":""}},
|
|
6603
6604
|
{"objectID":"403e25d3806bf5242a71a8e510fac16e068f907380e7f22d15d2393cbf3f28f4","title":"Thinking level has no visible effect","url":"/docs/getting-started/providers/nvidia-nim#thinking-level-has-no-visible-effect","content":"Not all models support chat_template_kwargs.thinking. If the model rejects the parameter, the provider retries the request without it and produces a normal (non-reasoning) response. Use a Nemotron or DeepSeek-R1 model for guaranteed reasoning support.","hierarchy":{"lvl0":"Getting Started","lvl1":"NVIDIA NIM Provider Guide","lvl2":"Thinking level has no visible effect","lvl3":""}},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@juspay/neurolink",
|
|
3
|
-
"version": "12.44.
|
|
3
|
+
"version": "12.44.2",
|
|
4
4
|
"packageManager": "pnpm@10.15.1",
|
|
5
5
|
"description": "The pipe layer of an AI nervous system: one interface connecting provider neurons to your application, across three inference types — generate, stream and decide. `decide` returns typed, calibrated judgements from a non-generative model (~400ms, ~$0.00002/call) for routing, tool selection and context budgeting. MCP-native (4 transports), voice TTS/STT/realtime, RAG, agents, memory, compaction, 9 observability exporters. OpenAI · Anthropic · Gemini · Bedrock · Azure · Ollama · TypeSafe Jev and more.",
|
|
6
6
|
"author": {
|