@juspay/neurolink 9.76.0 → 9.77.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/browser/neurolink.min.js +341 -341
  3. package/dist/index.d.ts +30 -0
  4. package/dist/index.js +33 -0
  5. package/dist/lib/index.d.ts +30 -0
  6. package/dist/lib/index.js +33 -0
  7. package/dist/lib/neurolink.d.ts +21 -0
  8. package/dist/lib/neurolink.js +367 -90
  9. package/dist/lib/routing/index.d.ts +7 -0
  10. package/dist/lib/routing/index.js +8 -0
  11. package/dist/lib/routing/modelPool.d.ts +83 -0
  12. package/dist/lib/routing/modelPool.js +243 -0
  13. package/dist/lib/routing/requestRouter.d.ts +30 -0
  14. package/dist/lib/routing/requestRouter.js +81 -0
  15. package/dist/lib/types/config.d.ts +18 -0
  16. package/dist/lib/types/index.d.ts +2 -0
  17. package/dist/lib/types/index.js +4 -0
  18. package/dist/lib/types/modelPool.d.ts +47 -0
  19. package/dist/lib/types/modelPool.js +11 -0
  20. package/dist/lib/types/requestRouter.d.ts +75 -0
  21. package/dist/lib/types/requestRouter.js +16 -0
  22. package/dist/lib/utils/providerErrorClassification.d.ts +24 -0
  23. package/dist/lib/utils/providerErrorClassification.js +89 -0
  24. package/dist/neurolink.d.ts +21 -0
  25. package/dist/neurolink.js +367 -90
  26. package/dist/routing/index.d.ts +7 -0
  27. package/dist/routing/index.js +7 -0
  28. package/dist/routing/modelPool.d.ts +83 -0
  29. package/dist/routing/modelPool.js +242 -0
  30. package/dist/routing/requestRouter.d.ts +30 -0
  31. package/dist/routing/requestRouter.js +80 -0
  32. package/dist/types/config.d.ts +18 -0
  33. package/dist/types/index.d.ts +2 -0
  34. package/dist/types/index.js +4 -0
  35. package/dist/types/modelPool.d.ts +47 -0
  36. package/dist/types/modelPool.js +10 -0
  37. package/dist/types/requestRouter.d.ts +75 -0
  38. package/dist/types/requestRouter.js +15 -0
  39. package/dist/utils/providerErrorClassification.d.ts +24 -0
  40. package/dist/utils/providerErrorClassification.js +88 -0
  41. package/package.json +4 -2
package/dist/index.d.ts CHANGED
@@ -337,6 +337,36 @@ export { BALANCED_ADAPTIVE_WORKFLOW, createAdaptiveWorkflow, QUALITY_MAX_WORKFLO
337
337
  export { CONSENSUS_3_FAST_WORKFLOW, CONSENSUS_3_WORKFLOW, createConsensus3WithPrompt, } from "./workflow/workflows/consensusWorkflow.js";
338
338
  export { AGGRESSIVE_FALLBACK_WORKFLOW, FAST_FALLBACK_WORKFLOW, } from "./workflow/workflows/fallbackWorkflow.js";
339
339
  export { createMultiJudgeWorkflow, MULTI_JUDGE_3_WORKFLOW, MULTI_JUDGE_5_WORKFLOW, } from "./workflow/workflows/multiJudgeWorkflow.js";
340
+ /**
341
+ * ModelPool and RequestRouter — opt-in multi-provider failover with
342
+ * error-class-aware cooldown, and a pluggable pre-call provider/model router.
343
+ *
344
+ * @example ModelPool
345
+ * ```typescript
346
+ * import { ModelPool, classifyProviderError } from '@juspay/neurolink';
347
+ *
348
+ * const pool = new ModelPool({
349
+ * members: [
350
+ * { provider: 'anthropic', model: 'claude-sonnet-4-5' },
351
+ * { provider: 'vertex', model: 'gemini-2.5-flash' },
352
+ * ],
353
+ * strategy: 'priority',
354
+ * cooldownMs: 30_000,
355
+ * });
356
+ * ```
357
+ *
358
+ * @example RequestRouter
359
+ * ```typescript
360
+ * import { createDefaultRequestRouter } from '@juspay/neurolink';
361
+ *
362
+ * const router = createDefaultRequestRouter({
363
+ * visionTier: { provider: 'vertex', model: 'gemini-2.5-pro' },
364
+ * largeTier: { provider: 'anthropic', model: 'claude-opus-4-5' },
365
+ * smallTier: { provider: 'anthropic', model: 'claude-haiku-3-5' },
366
+ * });
367
+ * ```
368
+ */
369
+ export { classifyProviderError, ModelPool, createDefaultRequestRouter, } from "./routing/index.js";
340
370
  /**
341
371
  * Server Adapters for exposing NeuroLink as HTTP APIs
342
372
  *
package/dist/index.js CHANGED
@@ -541,6 +541,39 @@ export { AGGRESSIVE_FALLBACK_WORKFLOW, FAST_FALLBACK_WORKFLOW, } from "./workflo
541
541
  // Pre-built workflows - Multi-judge
542
542
  export { createMultiJudgeWorkflow, MULTI_JUDGE_3_WORKFLOW, MULTI_JUDGE_5_WORKFLOW, } from "./workflow/workflows/multiJudgeWorkflow.js";
543
543
  // ============================================================================
544
+ // MODEL POOL & REQUEST ROUTER - Pluggable pre-call routing + failover
545
+ // ============================================================================
546
+ /**
547
+ * ModelPool and RequestRouter — opt-in multi-provider failover with
548
+ * error-class-aware cooldown, and a pluggable pre-call provider/model router.
549
+ *
550
+ * @example ModelPool
551
+ * ```typescript
552
+ * import { ModelPool, classifyProviderError } from '@juspay/neurolink';
553
+ *
554
+ * const pool = new ModelPool({
555
+ * members: [
556
+ * { provider: 'anthropic', model: 'claude-sonnet-4-5' },
557
+ * { provider: 'vertex', model: 'gemini-2.5-flash' },
558
+ * ],
559
+ * strategy: 'priority',
560
+ * cooldownMs: 30_000,
561
+ * });
562
+ * ```
563
+ *
564
+ * @example RequestRouter
565
+ * ```typescript
566
+ * import { createDefaultRequestRouter } from '@juspay/neurolink';
567
+ *
568
+ * const router = createDefaultRequestRouter({
569
+ * visionTier: { provider: 'vertex', model: 'gemini-2.5-pro' },
570
+ * largeTier: { provider: 'anthropic', model: 'claude-opus-4-5' },
571
+ * smallTier: { provider: 'anthropic', model: 'claude-haiku-3-5' },
572
+ * });
573
+ * ```
574
+ */
575
+ export { classifyProviderError, ModelPool, createDefaultRequestRouter, } from "./routing/index.js";
576
+ // ============================================================================
544
577
  // SERVER ADAPTERS - HTTP API Framework Integration
545
578
  // ============================================================================
546
579
  // Server Types
@@ -337,6 +337,36 @@ export { BALANCED_ADAPTIVE_WORKFLOW, createAdaptiveWorkflow, QUALITY_MAX_WORKFLO
337
337
  export { CONSENSUS_3_FAST_WORKFLOW, CONSENSUS_3_WORKFLOW, createConsensus3WithPrompt, } from "./workflow/workflows/consensusWorkflow.js";
338
338
  export { AGGRESSIVE_FALLBACK_WORKFLOW, FAST_FALLBACK_WORKFLOW, } from "./workflow/workflows/fallbackWorkflow.js";
339
339
  export { createMultiJudgeWorkflow, MULTI_JUDGE_3_WORKFLOW, MULTI_JUDGE_5_WORKFLOW, } from "./workflow/workflows/multiJudgeWorkflow.js";
340
+ /**
341
+ * ModelPool and RequestRouter — opt-in multi-provider failover with
342
+ * error-class-aware cooldown, and a pluggable pre-call provider/model router.
343
+ *
344
+ * @example ModelPool
345
+ * ```typescript
346
+ * import { ModelPool, classifyProviderError } from '@juspay/neurolink';
347
+ *
348
+ * const pool = new ModelPool({
349
+ * members: [
350
+ * { provider: 'anthropic', model: 'claude-sonnet-4-5' },
351
+ * { provider: 'vertex', model: 'gemini-2.5-flash' },
352
+ * ],
353
+ * strategy: 'priority',
354
+ * cooldownMs: 30_000,
355
+ * });
356
+ * ```
357
+ *
358
+ * @example RequestRouter
359
+ * ```typescript
360
+ * import { createDefaultRequestRouter } from '@juspay/neurolink';
361
+ *
362
+ * const router = createDefaultRequestRouter({
363
+ * visionTier: { provider: 'vertex', model: 'gemini-2.5-pro' },
364
+ * largeTier: { provider: 'anthropic', model: 'claude-opus-4-5' },
365
+ * smallTier: { provider: 'anthropic', model: 'claude-haiku-3-5' },
366
+ * });
367
+ * ```
368
+ */
369
+ export { classifyProviderError, ModelPool, createDefaultRequestRouter, } from "./routing/index.js";
340
370
  /**
341
371
  * Server Adapters for exposing NeuroLink as HTTP APIs
342
372
  *
package/dist/lib/index.js CHANGED
@@ -541,6 +541,39 @@ export { AGGRESSIVE_FALLBACK_WORKFLOW, FAST_FALLBACK_WORKFLOW, } from "./workflo
541
541
  // Pre-built workflows - Multi-judge
542
542
  export { createMultiJudgeWorkflow, MULTI_JUDGE_3_WORKFLOW, MULTI_JUDGE_5_WORKFLOW, } from "./workflow/workflows/multiJudgeWorkflow.js";
543
543
  // ============================================================================
544
+ // MODEL POOL & REQUEST ROUTER - Pluggable pre-call routing + failover
545
+ // ============================================================================
546
+ /**
547
+ * ModelPool and RequestRouter — opt-in multi-provider failover with
548
+ * error-class-aware cooldown, and a pluggable pre-call provider/model router.
549
+ *
550
+ * @example ModelPool
551
+ * ```typescript
552
+ * import { ModelPool, classifyProviderError } from '@juspay/neurolink';
553
+ *
554
+ * const pool = new ModelPool({
555
+ * members: [
556
+ * { provider: 'anthropic', model: 'claude-sonnet-4-5' },
557
+ * { provider: 'vertex', model: 'gemini-2.5-flash' },
558
+ * ],
559
+ * strategy: 'priority',
560
+ * cooldownMs: 30_000,
561
+ * });
562
+ * ```
563
+ *
564
+ * @example RequestRouter
565
+ * ```typescript
566
+ * import { createDefaultRequestRouter } from '@juspay/neurolink';
567
+ *
568
+ * const router = createDefaultRequestRouter({
569
+ * visionTier: { provider: 'vertex', model: 'gemini-2.5-pro' },
570
+ * largeTier: { provider: 'anthropic', model: 'claude-opus-4-5' },
571
+ * smallTier: { provider: 'anthropic', model: 'claude-haiku-3-5' },
572
+ * });
573
+ * ```
574
+ */
575
+ export { classifyProviderError, ModelPool, createDefaultRequestRouter, } from "./routing/index.js";
576
+ // ============================================================================
544
577
  // SERVER ADAPTERS - HTTP API Framework Integration
545
578
  // ============================================================================
546
579
  // Server Types
@@ -109,6 +109,8 @@ export declare class NeuroLink {
109
109
  private authInitPromise?;
110
110
  private credentials?;
111
111
  private readonly fallbackConfig;
112
+ private readonly modelPool;
113
+ private readonly requestRouter;
112
114
  /**
113
115
  * Merge instance-level credentials with per-call credentials.
114
116
  *
@@ -612,6 +614,25 @@ export declare class NeuroLink {
612
614
  private maybeHandleEarlyGenerateResult;
613
615
  private runStandardGenerateRequest;
614
616
  private maybeApplyGenerateOrchestration;
617
+ /**
618
+ * Applies the host-configured `requestRouter` to `options` in place.
619
+ *
620
+ * The router is skipped when:
621
+ * - no `requestRouter` is configured on this instance, or
622
+ * - the caller explicitly set both `options.provider` AND `options.model`
623
+ * (we only skip the router if BOTH are set; a caller setting only one
624
+ * still lets the router fill in the other field).
625
+ *
626
+ * Fails open: any router error is logged at WARN level and the call
627
+ * continues with the original options unmodified.
628
+ *
629
+ * @param options — the mutable options object (generate or stream).
630
+ * @param promptText — the text prompt used to build the RouterInputContext.
631
+ * @param hasTools — true when at least one tool is available for this call.
632
+ * @param requiresVision — true when the call includes image attachments.
633
+ * @param thinkingLevel — optional thinking level string from the call options.
634
+ */
635
+ private applyRequestRouter;
615
636
  private prepareGenerateAugmentations;
616
637
  private buildGenerateTextOptions;
617
638
  private finalizeGenerateRequestResult;