@juspay/neurolink 13.8.3 โ 13.8.5
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 +2 -2
- package/dist/browser/neurolink.min.js +216 -216
- package/dist/core/factory.d.ts +3 -2
- package/dist/core/factory.js +14 -2
- package/dist/mcp/externalServerManager.js +4 -4
- package/dist/mcp/mcpClientFactory.d.ts +1 -1
- package/dist/mcp/mcpClientFactory.js +26 -21
- package/docs-site/static/search-index.json +2 -2
- package/package.json +1 -1
package/dist/core/factory.d.ts
CHANGED
|
@@ -17,8 +17,9 @@ export declare class AIProviderFactory {
|
|
|
17
17
|
/**
|
|
18
18
|
* A provider whose descriptor declares `inferenceKinds` of exactly `["decide"]`
|
|
19
19
|
* names its own model (its registered default reads its own variable), so a
|
|
20
|
-
* chat provider's model variable has no claim on it
|
|
21
|
-
* provider that also serves text keeps its
|
|
20
|
+
* chat provider's model variable has no claim on it, nor does the chat model
|
|
21
|
+
* registry. Exactly `["decide"]`: a provider that also serves text keeps its
|
|
22
|
+
* chat-model fallbacks.
|
|
22
23
|
*/
|
|
23
24
|
private static isDecisionOnly;
|
|
24
25
|
private static resolveModelFromEnvironment;
|
package/dist/core/factory.js
CHANGED
|
@@ -51,8 +51,9 @@ export class AIProviderFactory {
|
|
|
51
51
|
/**
|
|
52
52
|
* A provider whose descriptor declares `inferenceKinds` of exactly `["decide"]`
|
|
53
53
|
* names its own model (its registered default reads its own variable), so a
|
|
54
|
-
* chat provider's model variable has no claim on it
|
|
55
|
-
* provider that also serves text keeps its
|
|
54
|
+
* chat provider's model variable has no claim on it, nor does the chat model
|
|
55
|
+
* registry. Exactly `["decide"]`: a provider that also serves text keeps its
|
|
56
|
+
* chat-model fallbacks.
|
|
56
57
|
*/
|
|
57
58
|
static isDecisionOnly(providerName) {
|
|
58
59
|
const canonical = PROVIDER_ALIAS_INDEX.get(providerName.toLowerCase());
|
|
@@ -151,6 +152,17 @@ export class AIProviderFactory {
|
|
|
151
152
|
});
|
|
152
153
|
return resolvedModelName;
|
|
153
154
|
}
|
|
155
|
+
// The registry lists chat providers, and a decision-only provider reads its
|
|
156
|
+
// own model setting, so loading it for one can only cost: it is awaited (up
|
|
157
|
+
// to the 10 s init timeout), tries a local port, then GitHub, then a file,
|
|
158
|
+
// and is tried again by the next call when every source fails.
|
|
159
|
+
if (this.isDecisionOnly(providerName)) {
|
|
160
|
+
logger.debug(`[${functionTag}] Skipping dynamic model resolution`, {
|
|
161
|
+
resolvedModelName: resolvedModelName || "none",
|
|
162
|
+
reason: `${providerName} serves decisions only and reads its own model setting`,
|
|
163
|
+
});
|
|
164
|
+
return resolvedModelName;
|
|
165
|
+
}
|
|
154
166
|
logger.debug(`[${functionTag}] Attempting dynamic model resolution`, {
|
|
155
167
|
currentResolvedModel: resolvedModelName || "none",
|
|
156
168
|
reason: "No environment variable found and no explicit model provided",
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { EventEmitter } from "events";
|
|
10
10
|
import { mcpLogger } from "../utils/logger.js";
|
|
11
|
-
import { MCPClientFactory,
|
|
11
|
+
import { MCPClientFactory, terminateLiveStdioServers, } from "./mcpClientFactory.js";
|
|
12
12
|
import { ToolDiscoveryService } from "./toolDiscoveryService.js";
|
|
13
13
|
import { toolRegistry } from "./toolRegistry.js";
|
|
14
14
|
import { HITLUserRejectedError, HITLTimeoutError } from "../hitl/hitlErrors.js";
|
|
@@ -372,9 +372,9 @@ const shutdownOnSignal = (signal) => {
|
|
|
372
372
|
// re-raise and nowhere else.
|
|
373
373
|
if (!hadOtherListeners) {
|
|
374
374
|
process.removeListener(signal, shutdownOnSignal);
|
|
375
|
-
// Dying of a signal runs no `exit` handler, and the cleanup above
|
|
376
|
-
//
|
|
377
|
-
|
|
375
|
+
// Dying of a signal runs no `exit` handler, and the cleanup above reaches
|
|
376
|
+
// only the servers a manager has recorded and that close when asked.
|
|
377
|
+
terminateLiveStdioServers();
|
|
378
378
|
process.kill(process.pid, signal);
|
|
379
379
|
}
|
|
380
380
|
});
|
|
@@ -14,7 +14,7 @@ import type { MCPTransportType, MCPServerInfo, MCPClientResult } from "../types/
|
|
|
14
14
|
* `exit` event, and SIGTERM is delivered by the kernel even though this
|
|
15
15
|
* process is already on its way out.
|
|
16
16
|
*/
|
|
17
|
-
export declare const
|
|
17
|
+
export declare const terminateLiveStdioServers: () => void;
|
|
18
18
|
/**
|
|
19
19
|
* MCPClientFactory
|
|
20
20
|
* Factory class for creating MCP clients with different transports
|
|
@@ -63,25 +63,29 @@ class StderrTail {
|
|
|
63
63
|
}
|
|
64
64
|
const stderrTails = new WeakMap();
|
|
65
65
|
/**
|
|
66
|
-
* Stdio servers
|
|
66
|
+
* Stdio servers this process has spawned and has not yet seen close.
|
|
67
67
|
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
68
|
+
* A transport is tracked from creation to close, not only until the server
|
|
69
|
+
* answers `initialize`, because two things leave a server running with nothing
|
|
70
|
+
* to stop it. Until the manager records the client, which happens only after
|
|
71
|
+
* `connect()` and the handshake, no shutdown path knows the server exists, and
|
|
72
|
+
* `npx -y <pkg>` does not read its stdin until the package has downloaded.
|
|
73
|
+
* After that, a server holding a timer, a connection pool or a file watcher
|
|
74
|
+
* ignores its stdin closing, and `process.exit()` runs neither `beforeExit`
|
|
75
|
+
* nor the manager's async shutdown.
|
|
76
|
+
*
|
|
77
|
+
* `transport.close()` takes a transport out through `onclose` once the child
|
|
78
|
+
* has exited, so a server the manager closed is not signalled again.
|
|
75
79
|
*/
|
|
76
|
-
const
|
|
77
|
-
let
|
|
80
|
+
const liveStdioTransports = new Set();
|
|
81
|
+
let stdioExitHookInstalled = false;
|
|
78
82
|
/**
|
|
79
83
|
* Synchronous on purpose: it is the one thing that can run inside the
|
|
80
84
|
* `exit` event, and SIGTERM is delivered by the kernel even though this
|
|
81
85
|
* process is already on its way out.
|
|
82
86
|
*/
|
|
83
|
-
export const
|
|
84
|
-
for (const transport of
|
|
87
|
+
export const terminateLiveStdioServers = () => {
|
|
88
|
+
for (const transport of liveStdioTransports) {
|
|
85
89
|
if ("pid" in transport && typeof transport.pid === "number") {
|
|
86
90
|
try {
|
|
87
91
|
process.kill(transport.pid, "SIGTERM");
|
|
@@ -92,16 +96,18 @@ export const terminateStartingStdioServers = () => {
|
|
|
92
96
|
}
|
|
93
97
|
}
|
|
94
98
|
};
|
|
95
|
-
const
|
|
96
|
-
if (!
|
|
97
|
-
|
|
98
|
-
process.on("exit",
|
|
99
|
+
const trackStdioTransport = (transport) => {
|
|
100
|
+
if (!stdioExitHookInstalled) {
|
|
101
|
+
stdioExitHookInstalled = true;
|
|
102
|
+
process.on("exit", terminateLiveStdioServers);
|
|
99
103
|
}
|
|
100
|
-
|
|
104
|
+
liveStdioTransports.add(transport);
|
|
101
105
|
// Client.connect() chains an onclose that is already set rather than
|
|
102
|
-
// replacing it, and
|
|
106
|
+
// replacing it, and the manager listens on client.onclose, so this one
|
|
107
|
+
// survives for the life of the connection. A spawn that fails still closes
|
|
108
|
+
// the transport.
|
|
103
109
|
transport.onclose = () => {
|
|
104
|
-
|
|
110
|
+
liveStdioTransports.delete(transport);
|
|
105
111
|
};
|
|
106
112
|
};
|
|
107
113
|
/**
|
|
@@ -265,7 +271,6 @@ export class MCPClientFactory {
|
|
|
265
271
|
}
|
|
266
272
|
// Connect with timeout
|
|
267
273
|
await this.raceWithTimeout(client.connect(transport, { timeout }), timeout, `Client connection timeout for ${config.id}`);
|
|
268
|
-
startingStdioTransports.delete(transport);
|
|
269
274
|
// Perform handshake to get server capabilities
|
|
270
275
|
const serverCapabilities = await this.performHandshake(client, timeout);
|
|
271
276
|
mcpLogger.debug(`[MCPClientFactory] Handshake completed for ${config.id}`, {
|
|
@@ -361,7 +366,7 @@ export class MCPClientFactory {
|
|
|
361
366
|
cwd: config.cwd,
|
|
362
367
|
stderr: "pipe",
|
|
363
368
|
});
|
|
364
|
-
|
|
369
|
+
trackStdioTransport(transport);
|
|
365
370
|
const tail = new StderrTail();
|
|
366
371
|
stderrTails.set(transport, tail);
|
|
367
372
|
transport.stderr?.on("data", (chunk) => {
|
|
@@ -6932,7 +6932,7 @@
|
|
|
6932
6932
|
{"objectID":"414073f854b4e0089e242f2f22fbfaf3f7e6eedefd0c50b7d59b869892a88ff7","title":"Old Complex Approach (Removed)","url":"/docs/guides/domain-specific#old-complex-approach-removed","content":"Old Complex Approach (Removed)","hierarchy":{"lvl0":"Guides","lvl1":"Domain-Specific AI Usage Guide","lvl2":"Old Complex Approach (Removed)","lvl3":""}},
|
|
6933
6933
|
{"objectID":"9e4ad8dacc4c35053c269f93b548667a415aeb50ac75c886c9fe4c690ec9642b","title":"New Simple Approach (Current)","url":"/docs/guides/domain-specific#new-simple-approach-current","content":"New Simple Approach (Current)","hierarchy":{"lvl0":"Guides","lvl1":"Domain-Specific AI Usage Guide","lvl2":"New Simple Approach (Current)","lvl3":""}},
|
|
6934
6934
|
{"objectID":"decae422fa08532a517df169300f8b19a6200d3d66e9d8942b99e501f400101c","title":"๐ง Migration Guide","url":"/docs/guides/domain-specific#-migration-guide","content":"If you were using the old domain configuration:\nRemove old config: pnpm cli config reset (optional)\nUse simple parameters: Add evaluationDomain to your requests\nEnable features: Use enableEvaluation and enableAnalytics flags\n\nBefore:\n\nAfter:\n\nThis simplified approach gives you all the domain-specific AI benefits without configuration complexity.","hierarchy":{"lvl0":"Guides","lvl1":"Domain-Specific AI Usage Guide","lvl2":"๐ง Migration Guide","lvl3":""}},
|
|
6935
|
-
{"objectID":"11123a060c91ea3b304978b427176ba793f0ccc1d7d37e2c9a7e833cce3becb1","title":"Dynamic Model Configuration System","url":"/docs/guides/dynamic-models","content":"Dynamic Model Configuration System\n\nThis document describes the new dynamic model configuration system that replaces static enums with flexible, runtime-configurable model definitions.\n\n๐ฏ Overview\n\nThe dynamic model system enables:\nRuntime model discovery from external configuration sources\nAutomatic fallback to local configurations when external sources fail\nSmart model resolution with fuzzy matching and aliases\nCapability-based search to find models with specific features\nCost optimization by automatically selecting cheapest models for tasks\n\n๐๏ธ Architecture\n\nComponents\nModel Configuration Server (scripts/modelServer.js)\nServes model configurations via REST API\nProvides search and filtering capabilities\nCan be hosted anywhere (GitHub, CDN, internal server)\nDynamic Model Provider (src/lib/core/dynamicModels.ts)\nLoads configurations from multiple sources with fallback\nCaches configurations to reduce network requests\nValidates configurations using Zod schemas\nProvides intelligent model resolution\nModel Configuration (config/models.json)\nJSON-based model definitions\nIncludes pricing, capabilities, and metadata\nSupports aliases and provider defaults\n\n๐ Quick Start\nEnvironment Setup\n\nBefore using the dynamic model system, ensure your provider configurations are set up correctly. See the Provider Configuration Guide for detailed instructions.\nStart the Model Server\n\nServer runs on http://localhost:3001 by default.\nTest the System\nUse in Code\n\n๐ก API Endpoints\n\nModel Server Endpoints\nGET /health - Health check\nGET /api/v1/models - Get all model configurations\nGET /api/v1/models/:provider - Get models for specific provider\nGET /api/v1/search?capability=X&maxPrice=Y - Search models by criteria\n\nExample API Usage\n\n๐ง Configuration Schema\n\nModel Configuration Structure\n\nKey Fields\nid: Provider-specific model identifier\ndisplayName: Human-readable model name\ncapabilities: Array of model capabilities (functionCalling, vision, etc.)\ndeprecated: Whether the model is deprecated\npricing: Input/output token costs per 1K tokens\ncontextWindow: Maximum context window size\nreleaseDate: Model release date\n\n๐๏ธ Advanced Usage\n\nConfiguration Sources\n\nThe system tries multiple sources in order:\nprocess.env.MODEL_CONFIG_URL - Custom URL override\nhttp://localhost:3001/api/v1/models - Local development server\nhttps://raw.githubusercontent.com/juspay/neurolink/release/config/models.json - GitHub\n./config/models.json - Local fallback\n\nModel Resolution Logic\n\nCapability Search Options\n\n๐ Migration from Static Enums\n\nBefore (Static Enums)\n\nAfter (Dynamic Resolution)\n\n๐ Production Deployment\n\nEnvironment Variables\n\nHosting Configuration\nGitHub Pages: Host models.json as static file\nCDN: Use CloudFlare/AWS CloudFront for global distribution\nInternal API: Integrate with existing infrastructure\nFile System: Local configurations for air-gapped environments\n\nCache Strategy\n5-minute cache: Balances freshness with performance\nGraceful degradation: Falls back to cached data on network failures\nManual refresh: dynamicModelProvider.refresh() for immediate updates\n\n๐งช Testing\n\nThe test suite verifies:\n\nโ
Model provider initialization\nโ
Configuration loading from multiple sources\nโ
Model resolution (exact, default, fuzzy, alias)\nโ
Capability-based search\nโ
Best model selection algorithms\nโ
Error handling and fallbacks\n\nRun tests with:\n\n๐ Benefits\n๐ Future-Proof: New models automatically available\n๐ฐ Cost-Optimized: Runtime selection based on pricing\n๐ก๏ธ Reliable: Multiple fallback sources\nโก Fast: Cached configurations with smart invalidation\n๐ Type-Safe: Zod schemas ensure runtime safety\n๐ง Backward Compatible: Existing code continues working\n\nThis system transforms static model definitions into a dynamic, self-updating platform that scales with the rapidly evolving AI landscape.","hierarchy":{"lvl0":"Guides","lvl1":"Dynamic Model Configuration System","lvl2":"","lvl3":""}},
|
|
6935
|
+
{"objectID":"11123a060c91ea3b304978b427176ba793f0ccc1d7d37e2c9a7e833cce3becb1","title":"Dynamic Model Configuration System","url":"/docs/guides/dynamic-models","content":"Dynamic Model Configuration System\n\nThis document describes the new dynamic model configuration system that replaces static enums with flexible, runtime-configurable model definitions.\n\n๐ฏ Overview\n\nThe dynamic model system enables:\nRuntime model discovery from external configuration sources\nAutomatic fallback to local configurations when external sources fail\nSmart model resolution with fuzzy matching and aliases\nCapability-based search to find models with specific features\nCost optimization by automatically selecting cheapest models for tasks\n\n๐๏ธ Architecture\n\nComponents\nModel Configuration Server (scripts/modelServer.js)\nServes model configurations via REST API\nProvides search and filtering capabilities\nCan be hosted anywhere (GitHub, CDN, internal server)\nDynamic Model Provider (src/lib/core/dynamicModels.ts)\nLoads configurations from multiple sources with fallback\nCaches configurations to reduce network requests\nValidates configurations using Zod schemas\nProvides intelligent model resolution\nModel Configuration (config/models.json)\nJSON-based model definitions\nIncludes pricing, capabilities, and metadata\nSupports aliases and provider defaults\n\n๐ Quick Start\nEnvironment Setup\n\nBefore using the dynamic model system, ensure your provider configurations are set up correctly. See the Provider Configuration Guide for detailed instructions.\nStart the Model Server\n\nServer runs on http://localhost:3001 by default.\nTest the System\nUse in Code\n\n๐ก API Endpoints\n\nModel Server Endpoints\nGET /health - Health check\nGET /api/v1/models - Get all model configurations\nGET /api/v1/models/:provider - Get models for specific provider\nGET /api/v1/search?capability=X&maxPrice=Y - Search models by criteria\n\nExample API Usage\n\n๐ง Configuration Schema\n\nModel Configuration Structure\n\nKey Fields\nid: Provider-specific model identifier\ndisplayName: Human-readable model name\ncapabilities: Array of model capabilities (functionCalling, vision, etc.)\ndeprecated: Whether the model is deprecated\npricing: Input/output token costs per 1K tokens\ncontextWindow: Maximum context window size\nreleaseDate: Model release date\n\n๐๏ธ Advanced Usage\n\nConfiguration Sources\n\nThe system tries multiple sources in order:\nprocess.env.MODEL_CONFIG_URL - Custom URL override\nhttp://localhost:3001/api/v1/models - Local development server\nhttps://raw.githubusercontent.com/juspay/neurolink/release/config/models.json - GitHub\n./config/models.json - Local fallback\n\nOnly chat providers use these sources. A decision provider (the decide\ninference type) reads its own model setting and never loads them.\n\nModel Resolution Logic\n\nCapability Search Options\n\n๐ Migration from Static Enums\n\nBefore (Static Enums)\n\nAfter (Dynamic Resolution)\n\n๐ Production Deployment\n\nEnvironment Variables\n\nHosting Configuration\nGitHub Pages: Host models.json as static file\nCDN: Use CloudFlare/AWS CloudFront for global distribution\nInternal API: Integrate with existing infrastructure\nFile System: Local configurations for air-gapped environments\n\nCache Strategy\n5-minute cache: Balances freshness with performance\nGraceful degradation: Falls back to cached data on network failures\nManual refresh: dynamicModelProvider.refresh() for immediate updates\n\n๐งช Testing\n\nThe test suite verifies:\n\nโ
Model provider initialization\nโ
Configuration loading from multiple sources\nโ
Model resolution (exact, default, fuzzy, alias)\nโ
Capability-based search\nโ
Best model selection algorithms\nโ
Error handling and fallbacks\n\nRun tests with:\n\n๐ Benefits\n๐ Future-Proof: New models automatically available\n๐ฐ Cost-Optimized: Runtime selection based on pricing\n๐ก๏ธ Reliable: Multiple fallback sources\nโก Fast: Cached configurations with smart invalidation\n๐ Type-Safe: Zod schemas ensure runtime safety\n๐ง Backward Compatible: Existing code continues working\n\nThis system transforms static model definitions into a dynamic, self-updating platform that scales with the rapidly evolving AI landscape.","hierarchy":{"lvl0":"Guides","lvl1":"Dynamic Model Configuration System","lvl2":"","lvl3":""}},
|
|
6936
6936
|
{"objectID":"db0dd52cd471bbbf32227e2195168f0402abbbb17462a95fec58b9ff60387e0e","title":"Dynamic Model Configuration System","url":"/docs/guides/dynamic-models#dynamic-model-configuration-system","content":"This document describes the new dynamic model configuration system that replaces static enums with flexible, runtime-configurable model definitions.","hierarchy":{"lvl0":"Guides","lvl1":"Dynamic Model Configuration System","lvl2":"Dynamic Model Configuration System","lvl3":""}},
|
|
6937
6937
|
{"objectID":"98d59f7bb1b48c946b9671430c1a48b627caa50c718285629a2ccdca68461f6f","title":"๐ฏ Overview","url":"/docs/guides/dynamic-models#-overview","content":"The dynamic model system enables:\nRuntime model discovery from external configuration sources\nAutomatic fallback to local configurations when external sources fail\nSmart model resolution with fuzzy matching and aliases\nCapability-based search to find models with specific features\nCost optimization by automatically selecting cheapest models for tasks","hierarchy":{"lvl0":"Guides","lvl1":"Dynamic Model Configuration System","lvl2":"๐ฏ Overview","lvl3":""}},
|
|
6938
6938
|
{"objectID":"61687b3b7ac0a3524d872ed6d9e535b66c7e7f888ca25202373543b085cd358c","title":"Components","url":"/docs/guides/dynamic-models#components","content":"Model Configuration Server (scripts/modelServer.js)\nServes model configurations via REST API\nProvides search and filtering capabilities\nCan be hosted anywhere (GitHub, CDN, internal server)\nDynamic Model Provider (src/lib/core/dynamicModels.ts)\nLoads configurations from multiple sources with fallback\nCaches configurations to reduce network requests\nValidates configurations using Zod schemas\nProvides intelligent model resolution\nModel Configuration (config/models.json)\nJSON-based model definitions\nIncludes pricing, capabilities, and metadata\nSupports aliases and provider defaults","hierarchy":{"lvl0":"Guides","lvl1":"Dynamic Model Configuration System","lvl2":"Components","lvl3":""}},
|
|
@@ -6944,7 +6944,7 @@
|
|
|
6944
6944
|
{"objectID":"44a7c3552d226686afe7bcd07306d423f895b6594053ceaea4e3d91d02fd0b7e","title":"Example API Usage","url":"/docs/guides/dynamic-models#example-api-usage","content":"Example API Usage","hierarchy":{"lvl0":"Guides","lvl1":"Dynamic Model Configuration System","lvl2":"Example API Usage","lvl3":""}},
|
|
6945
6945
|
{"objectID":"67f064b3683be73cb6e6b7cb977710e02544fa1d4bc2ff21ae53cb660a9bd6af","title":"Model Configuration Structure","url":"/docs/guides/dynamic-models#model-configuration-structure","content":"Model Configuration Structure","hierarchy":{"lvl0":"Guides","lvl1":"Dynamic Model Configuration System","lvl2":"Model Configuration Structure","lvl3":""}},
|
|
6946
6946
|
{"objectID":"9219ec439a82c9925daf0a3d17fcb470741c29c85cb4eeb094c5a69a9a98d4bd","title":"Key Fields","url":"/docs/guides/dynamic-models#key-fields","content":"id: Provider-specific model identifier\ndisplayName: Human-readable model name\ncapabilities: Array of model capabilities (functionCalling, vision, etc.)\ndeprecated: Whether the model is deprecated\npricing: Input/output token costs per 1K tokens\ncontextWindow: Maximum context window size\nreleaseDate: Model release date","hierarchy":{"lvl0":"Guides","lvl1":"Dynamic Model Configuration System","lvl2":"Key Fields","lvl3":""}},
|
|
6947
|
-
{"objectID":"0f264f6be2e93ba8e2a581391c1e9b1fca8fe98a53533e93362c8da8bba29dc0","title":"Configuration Sources","url":"/docs/guides/dynamic-models#configuration-sources","content":"The system tries multiple sources in order:\nprocess.env.MODEL_CONFIG_URL - Custom URL override\nhttp://localhost:3001/api/v1/models - Local development server\nhttps://raw.githubusercontent.com/juspay/neurolink/release/config/models.json - GitHub\n./config/models.json - Local fallback","hierarchy":{"lvl0":"Guides","lvl1":"Dynamic Model Configuration System","lvl2":"Configuration Sources","lvl3":""}},
|
|
6947
|
+
{"objectID":"0f264f6be2e93ba8e2a581391c1e9b1fca8fe98a53533e93362c8da8bba29dc0","title":"Configuration Sources","url":"/docs/guides/dynamic-models#configuration-sources","content":"The system tries multiple sources in order:\nprocess.env.MODEL_CONFIG_URL - Custom URL override\nhttp://localhost:3001/api/v1/models - Local development server\nhttps://raw.githubusercontent.com/juspay/neurolink/release/config/models.json - GitHub\n./config/models.json - Local fallback\n\nOnly chat providers use these sources. A decision provider (the decide\ninference type) reads its own model setting and never loads them.","hierarchy":{"lvl0":"Guides","lvl1":"Dynamic Model Configuration System","lvl2":"Configuration Sources","lvl3":""}},
|
|
6948
6948
|
{"objectID":"b688f0ce894e3129cf9cf4f16256f66b5c7e68e0f6dba297bb7944fca37d5115","title":"Model Resolution Logic","url":"/docs/guides/dynamic-models#model-resolution-logic","content":"Model Resolution Logic","hierarchy":{"lvl0":"Guides","lvl1":"Dynamic Model Configuration System","lvl2":"Model Resolution Logic","lvl3":""}},
|
|
6949
6949
|
{"objectID":"7db5af405a30c15d8205661f5688afb88863bf77da535269e1c31d9c95f5339a","title":"Capability Search Options","url":"/docs/guides/dynamic-models#capability-search-options","content":"Capability Search Options","hierarchy":{"lvl0":"Guides","lvl1":"Dynamic Model Configuration System","lvl2":"Capability Search Options","lvl3":""}},
|
|
6950
6950
|
{"objectID":"1496da3154d5741db46365221066e76d4eb6228a9a7f64f4dc05669648a5e92a","title":"Before (Static Enums)","url":"/docs/guides/dynamic-models#before-static-enums","content":"Before (Static Enums)","hierarchy":{"lvl0":"Guides","lvl1":"Dynamic Model Configuration System","lvl2":"Before (Static Enums)","lvl3":""}},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@juspay/neurolink",
|
|
3
|
-
"version": "13.8.
|
|
3
|
+
"version": "13.8.5",
|
|
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": {
|