@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.
@@ -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. Exactly `["decide"]`: a
21
- * provider that also serves text keeps its chat-model fallbacks.
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;
@@ -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. Exactly `["decide"]`: a
55
- * provider that also serves text keeps its chat-model fallbacks.
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, terminateStartingStdioServers, } from "./mcpClientFactory.js";
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 cannot
376
- // reach a server whose handshake is still pending.
377
- terminateStartingStdioServers();
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 terminateStartingStdioServers: () => void;
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 that have been spawned but have not yet answered `initialize`.
66
+ * Stdio servers this process has spawned and has not yet seen close.
67
67
  *
68
- * Nothing that cleans up at exit can reach one: the manager learns of a client
69
- * and its transport only when `connect()` returns, and `process.exit()` runs
70
- * no async handler anyway. It is also the state a server is least likely to
71
- * notice its host going away, because `npx -y <pkg>` does not read its stdin
72
- * until the package has downloaded. Once a server has answered it is an
73
- * ordinary MCP server again and ends when its stdin closes, so it leaves this
74
- * set and the shutdown paths that already exist keep ownership of it.
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 startingStdioTransports = new Set();
77
- let startingStdioExitHookInstalled = false;
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 terminateStartingStdioServers = () => {
84
- for (const transport of startingStdioTransports) {
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 trackStartingStdioTransport = (transport) => {
96
- if (!startingStdioExitHookInstalled) {
97
- startingStdioExitHookInstalled = true;
98
- process.on("exit", terminateStartingStdioServers);
99
+ const trackStdioTransport = (transport) => {
100
+ if (!stdioExitHookInstalled) {
101
+ stdioExitHookInstalled = true;
102
+ process.on("exit", terminateLiveStdioServers);
99
103
  }
100
- startingStdioTransports.add(transport);
104
+ liveStdioTransports.add(transport);
101
105
  // Client.connect() chains an onclose that is already set rather than
102
- // replacing it, and a spawn that fails still closes the transport.
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
- startingStdioTransports.delete(transport);
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
- trackStartingStdioTransport(transport);
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",
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": {