@juspay/neurolink 11.3.0 → 11.4.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 (144) hide show
  1. package/CHANGELOG.md +2 -2
  2. package/dist/adapters/providerImageAdapter.js +1 -1
  3. package/dist/browser/neurolink.min.js +6 -6
  4. package/dist/cli/commands/mcp.js +8 -8
  5. package/dist/constants/contextWindows.js +1 -1
  6. package/dist/constants/enums.d.ts +3 -2
  7. package/dist/constants/enums.js +7 -3
  8. package/dist/constants/tokens.d.ts +1 -1
  9. package/dist/constants/tokens.js +1 -1
  10. package/dist/lib/adapters/providerImageAdapter.js +1 -1
  11. package/dist/lib/constants/contextWindows.js +1 -1
  12. package/dist/lib/constants/enums.d.ts +3 -2
  13. package/dist/lib/constants/enums.js +7 -3
  14. package/dist/lib/constants/tokens.d.ts +1 -1
  15. package/dist/lib/constants/tokens.js +1 -1
  16. package/dist/lib/models/manifestRegistry.d.ts +33 -0
  17. package/dist/lib/models/manifestRegistry.js +174 -0
  18. package/dist/lib/models/manifests/anthropic.d.ts +9 -0
  19. package/dist/lib/models/manifests/anthropic.js +346 -0
  20. package/dist/lib/models/manifests/azure.d.ts +2 -0
  21. package/dist/lib/models/manifests/azure.js +87 -0
  22. package/dist/lib/models/manifests/bedrock.d.ts +2 -0
  23. package/dist/lib/models/manifests/bedrock.js +75 -0
  24. package/dist/lib/models/manifests/cloudflare.d.ts +8 -0
  25. package/dist/lib/models/manifests/cloudflare.js +19 -0
  26. package/dist/lib/models/manifests/cohere.d.ts +8 -0
  27. package/dist/lib/models/manifests/cohere.js +19 -0
  28. package/dist/lib/models/manifests/deepseek.d.ts +8 -0
  29. package/dist/lib/models/manifests/deepseek.js +19 -0
  30. package/dist/lib/models/manifests/fireworks.d.ts +8 -0
  31. package/dist/lib/models/manifests/fireworks.js +19 -0
  32. package/dist/lib/models/manifests/google-ai.d.ts +2 -0
  33. package/dist/lib/models/manifests/google-ai.js +28 -0
  34. package/dist/lib/models/manifests/groq.d.ts +8 -0
  35. package/dist/lib/models/manifests/groq.js +19 -0
  36. package/dist/lib/models/manifests/huggingface.d.ts +8 -0
  37. package/dist/lib/models/manifests/huggingface.js +19 -0
  38. package/dist/lib/models/manifests/ideogram.d.ts +8 -0
  39. package/dist/lib/models/manifests/ideogram.js +19 -0
  40. package/dist/lib/models/manifests/jina.d.ts +8 -0
  41. package/dist/lib/models/manifests/jina.js +19 -0
  42. package/dist/lib/models/manifests/litellm.d.ts +8 -0
  43. package/dist/lib/models/manifests/litellm.js +19 -0
  44. package/dist/lib/models/manifests/llamacpp.d.ts +8 -0
  45. package/dist/lib/models/manifests/llamacpp.js +19 -0
  46. package/dist/lib/models/manifests/lm-studio.d.ts +8 -0
  47. package/dist/lib/models/manifests/lm-studio.js +19 -0
  48. package/dist/lib/models/manifests/mistral.d.ts +2 -0
  49. package/dist/lib/models/manifests/mistral.js +50 -0
  50. package/dist/lib/models/manifests/nvidia-nim.d.ts +8 -0
  51. package/dist/lib/models/manifests/nvidia-nim.js +19 -0
  52. package/dist/lib/models/manifests/ollama.d.ts +2 -0
  53. package/dist/lib/models/manifests/ollama.js +72 -0
  54. package/dist/lib/models/manifests/openai-compatible.d.ts +8 -0
  55. package/dist/lib/models/manifests/openai-compatible.js +19 -0
  56. package/dist/lib/models/manifests/openai.d.ts +11 -0
  57. package/dist/lib/models/manifests/openai.js +560 -0
  58. package/dist/lib/models/manifests/openrouter.d.ts +8 -0
  59. package/dist/lib/models/manifests/openrouter.js +19 -0
  60. package/dist/lib/models/manifests/perplexity.d.ts +8 -0
  61. package/dist/lib/models/manifests/perplexity.js +19 -0
  62. package/dist/lib/models/manifests/recraft.d.ts +8 -0
  63. package/dist/lib/models/manifests/recraft.js +19 -0
  64. package/dist/lib/models/manifests/replicate.d.ts +8 -0
  65. package/dist/lib/models/manifests/replicate.js +19 -0
  66. package/dist/lib/models/manifests/sagemaker.d.ts +8 -0
  67. package/dist/lib/models/manifests/sagemaker.js +19 -0
  68. package/dist/lib/models/manifests/stability.d.ts +8 -0
  69. package/dist/lib/models/manifests/stability.js +19 -0
  70. package/dist/lib/models/manifests/together-ai.d.ts +8 -0
  71. package/dist/lib/models/manifests/together-ai.js +19 -0
  72. package/dist/lib/models/manifests/vertex.d.ts +8 -0
  73. package/dist/lib/models/manifests/vertex.js +19 -0
  74. package/dist/lib/models/manifests/voyage.d.ts +8 -0
  75. package/dist/lib/models/manifests/voyage.js +19 -0
  76. package/dist/lib/models/manifests/xai.d.ts +8 -0
  77. package/dist/lib/models/manifests/xai.js +19 -0
  78. package/dist/lib/providers/googleVertex/constants.js +1 -1
  79. package/dist/lib/types/model.d.ts +77 -0
  80. package/dist/models/manifestRegistry.d.ts +33 -0
  81. package/dist/models/manifestRegistry.js +173 -0
  82. package/dist/models/manifests/anthropic.d.ts +9 -0
  83. package/dist/models/manifests/anthropic.js +345 -0
  84. package/dist/models/manifests/azure.d.ts +2 -0
  85. package/dist/models/manifests/azure.js +86 -0
  86. package/dist/models/manifests/bedrock.d.ts +2 -0
  87. package/dist/models/manifests/bedrock.js +74 -0
  88. package/dist/models/manifests/cloudflare.d.ts +8 -0
  89. package/dist/models/manifests/cloudflare.js +18 -0
  90. package/dist/models/manifests/cohere.d.ts +8 -0
  91. package/dist/models/manifests/cohere.js +18 -0
  92. package/dist/models/manifests/deepseek.d.ts +8 -0
  93. package/dist/models/manifests/deepseek.js +18 -0
  94. package/dist/models/manifests/fireworks.d.ts +8 -0
  95. package/dist/models/manifests/fireworks.js +18 -0
  96. package/dist/models/manifests/google-ai.d.ts +2 -0
  97. package/dist/models/manifests/google-ai.js +27 -0
  98. package/dist/models/manifests/groq.d.ts +8 -0
  99. package/dist/models/manifests/groq.js +18 -0
  100. package/dist/models/manifests/huggingface.d.ts +8 -0
  101. package/dist/models/manifests/huggingface.js +18 -0
  102. package/dist/models/manifests/ideogram.d.ts +8 -0
  103. package/dist/models/manifests/ideogram.js +18 -0
  104. package/dist/models/manifests/jina.d.ts +8 -0
  105. package/dist/models/manifests/jina.js +18 -0
  106. package/dist/models/manifests/litellm.d.ts +8 -0
  107. package/dist/models/manifests/litellm.js +18 -0
  108. package/dist/models/manifests/llamacpp.d.ts +8 -0
  109. package/dist/models/manifests/llamacpp.js +18 -0
  110. package/dist/models/manifests/lm-studio.d.ts +8 -0
  111. package/dist/models/manifests/lm-studio.js +18 -0
  112. package/dist/models/manifests/mistral.d.ts +2 -0
  113. package/dist/models/manifests/mistral.js +49 -0
  114. package/dist/models/manifests/nvidia-nim.d.ts +8 -0
  115. package/dist/models/manifests/nvidia-nim.js +18 -0
  116. package/dist/models/manifests/ollama.d.ts +2 -0
  117. package/dist/models/manifests/ollama.js +71 -0
  118. package/dist/models/manifests/openai-compatible.d.ts +8 -0
  119. package/dist/models/manifests/openai-compatible.js +18 -0
  120. package/dist/models/manifests/openai.d.ts +11 -0
  121. package/dist/models/manifests/openai.js +559 -0
  122. package/dist/models/manifests/openrouter.d.ts +8 -0
  123. package/dist/models/manifests/openrouter.js +18 -0
  124. package/dist/models/manifests/perplexity.d.ts +8 -0
  125. package/dist/models/manifests/perplexity.js +18 -0
  126. package/dist/models/manifests/recraft.d.ts +8 -0
  127. package/dist/models/manifests/recraft.js +18 -0
  128. package/dist/models/manifests/replicate.d.ts +8 -0
  129. package/dist/models/manifests/replicate.js +18 -0
  130. package/dist/models/manifests/sagemaker.d.ts +8 -0
  131. package/dist/models/manifests/sagemaker.js +18 -0
  132. package/dist/models/manifests/stability.d.ts +8 -0
  133. package/dist/models/manifests/stability.js +18 -0
  134. package/dist/models/manifests/together-ai.d.ts +8 -0
  135. package/dist/models/manifests/together-ai.js +18 -0
  136. package/dist/models/manifests/vertex.d.ts +8 -0
  137. package/dist/models/manifests/vertex.js +18 -0
  138. package/dist/models/manifests/voyage.d.ts +8 -0
  139. package/dist/models/manifests/voyage.js +18 -0
  140. package/dist/models/manifests/xai.d.ts +8 -0
  141. package/dist/models/manifests/xai.js +18 -0
  142. package/dist/providers/googleVertex/constants.js +1 -1
  143. package/dist/types/model.d.ts +77 -0
  144. package/package.json +3 -2
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Minimal manifest: sagemaker has no MODEL_REGISTRY entries today, so
3
+ * only the provider-wide fallback is known. Named models can be added here
4
+ * incrementally without touching any consumer — see Task 5 of the model
5
+ * metadata consolidation plan.
6
+ */
7
+ export const sagemakerManifest = {
8
+ defaultContextWindow: 128000,
9
+ models: {
10
+ _default: {
11
+ aliases: [],
12
+ contextWindow: 128000,
13
+ maxOutputTokens: 64000,
14
+ vision: false,
15
+ functionCalling: false,
16
+ },
17
+ },
18
+ };
19
+ //# sourceMappingURL=sagemaker.js.map
@@ -0,0 +1,8 @@
1
+ import type { ProviderModelManifest } from "../../types/index.js";
2
+ /**
3
+ * Minimal manifest: stability has no MODEL_REGISTRY entries today, so
4
+ * only the provider-wide fallback is known. Named models can be added here
5
+ * incrementally without touching any consumer — see Task 5 of the model
6
+ * metadata consolidation plan.
7
+ */
8
+ export declare const stabilityManifest: ProviderModelManifest;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Minimal manifest: stability has no MODEL_REGISTRY entries today, so
3
+ * only the provider-wide fallback is known. Named models can be added here
4
+ * incrementally without touching any consumer — see Task 5 of the model
5
+ * metadata consolidation plan.
6
+ */
7
+ export const stabilityManifest = {
8
+ defaultContextWindow: 2000,
9
+ models: {
10
+ _default: {
11
+ aliases: [],
12
+ contextWindow: 2000,
13
+ maxOutputTokens: 2000,
14
+ vision: false,
15
+ functionCalling: false,
16
+ },
17
+ },
18
+ };
19
+ //# sourceMappingURL=stability.js.map
@@ -0,0 +1,8 @@
1
+ import type { ProviderModelManifest } from "../../types/index.js";
2
+ /**
3
+ * Minimal manifest: together-ai has no MODEL_REGISTRY entries today, so
4
+ * only the provider-wide fallback is known. Named models can be added here
5
+ * incrementally without touching any consumer — see Task 5 of the model
6
+ * metadata consolidation plan.
7
+ */
8
+ export declare const togetherAiManifest: ProviderModelManifest;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Minimal manifest: together-ai has no MODEL_REGISTRY entries today, so
3
+ * only the provider-wide fallback is known. Named models can be added here
4
+ * incrementally without touching any consumer — see Task 5 of the model
5
+ * metadata consolidation plan.
6
+ */
7
+ export const togetherAiManifest = {
8
+ defaultContextWindow: 128000,
9
+ models: {
10
+ _default: {
11
+ aliases: [],
12
+ contextWindow: 128000,
13
+ maxOutputTokens: 64000,
14
+ vision: false,
15
+ functionCalling: false,
16
+ },
17
+ },
18
+ };
19
+ //# sourceMappingURL=together-ai.js.map
@@ -0,0 +1,8 @@
1
+ import type { ProviderModelManifest } from "../../types/index.js";
2
+ /**
3
+ * Minimal manifest: vertex has no MODEL_REGISTRY entries today, so
4
+ * only the provider-wide fallback is known. Named models can be added here
5
+ * incrementally without touching any consumer — see Task 5 of the model
6
+ * metadata consolidation plan.
7
+ */
8
+ export declare const vertexManifest: ProviderModelManifest;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Minimal manifest: vertex has no MODEL_REGISTRY entries today, so
3
+ * only the provider-wide fallback is known. Named models can be added here
4
+ * incrementally without touching any consumer — see Task 5 of the model
5
+ * metadata consolidation plan.
6
+ */
7
+ export const vertexManifest = {
8
+ defaultContextWindow: 1048576,
9
+ models: {
10
+ _default: {
11
+ aliases: [],
12
+ contextWindow: 1048576,
13
+ maxOutputTokens: 64000,
14
+ vision: false,
15
+ functionCalling: false,
16
+ },
17
+ },
18
+ };
19
+ //# sourceMappingURL=vertex.js.map
@@ -0,0 +1,8 @@
1
+ import type { ProviderModelManifest } from "../../types/index.js";
2
+ /**
3
+ * Minimal manifest: voyage has no MODEL_REGISTRY entries today, so
4
+ * only the provider-wide fallback is known. Named models can be added here
5
+ * incrementally without touching any consumer — see Task 5 of the model
6
+ * metadata consolidation plan.
7
+ */
8
+ export declare const voyageManifest: ProviderModelManifest;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Minimal manifest: voyage has no MODEL_REGISTRY entries today, so
3
+ * only the provider-wide fallback is known. Named models can be added here
4
+ * incrementally without touching any consumer — see Task 5 of the model
5
+ * metadata consolidation plan.
6
+ */
7
+ export const voyageManifest = {
8
+ defaultContextWindow: 32000,
9
+ models: {
10
+ _default: {
11
+ aliases: [],
12
+ contextWindow: 32000,
13
+ maxOutputTokens: 32000,
14
+ vision: false,
15
+ functionCalling: false,
16
+ },
17
+ },
18
+ };
19
+ //# sourceMappingURL=voyage.js.map
@@ -0,0 +1,8 @@
1
+ import type { ProviderModelManifest } from "../../types/index.js";
2
+ /**
3
+ * Minimal manifest: xai has no MODEL_REGISTRY entries today, so
4
+ * only the provider-wide fallback is known. Named models can be added here
5
+ * incrementally without touching any consumer — see Task 5 of the model
6
+ * metadata consolidation plan.
7
+ */
8
+ export declare const xaiManifest: ProviderModelManifest;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Minimal manifest: xai has no MODEL_REGISTRY entries today, so
3
+ * only the provider-wide fallback is known. Named models can be added here
4
+ * incrementally without touching any consumer — see Task 5 of the model
5
+ * metadata consolidation plan.
6
+ */
7
+ export const xaiManifest = {
8
+ defaultContextWindow: 131072,
9
+ models: {
10
+ _default: {
11
+ aliases: [],
12
+ contextWindow: 131072,
13
+ maxOutputTokens: 64000,
14
+ vision: false,
15
+ functionCalling: false,
16
+ },
17
+ },
18
+ };
19
+ //# sourceMappingURL=xai.js.map
@@ -5,7 +5,7 @@ export let cachedCredentialsPath = null;
5
5
  export const VERTEX_MODEL_ALIASES = {
6
6
  // Claude 4.x shorthand aliases → versioned names
7
7
  "claude-sonnet-4-5": "claude-sonnet-4-5@20250929",
8
- "claude-opus-4-5": "claude-opus-4-5@20251124",
8
+ "claude-opus-4-5": "claude-opus-4-5@20251101",
9
9
  "claude-haiku-4-5": "claude-haiku-4-5@20251001",
10
10
  "claude-sonnet-4": "claude-sonnet-4@20250514",
11
11
  "claude-opus-4": "claude-opus-4@20250514",
@@ -263,3 +263,80 @@ export type ModelRoutingOptions = {
263
263
  /** Fallback strategy if primary choice fails */
264
264
  fallbackStrategy?: "fast" | "reasoning" | "auto";
265
265
  };
266
+ /**
267
+ * A single model's metadata inside a provider's manifest. This is the one
268
+ * canonical shape every model-metadata consumer (context windows, pricing,
269
+ * MODEL_REGISTRY, vision capability, output-token ceilings) is intended to
270
+ * migrate onto — this PR is purely additive and does not yet move any
271
+ * consumer over.
272
+ *
273
+ * `pricingPerMTok` is optional by design: a model with no verified price
274
+ * (e.g. a just-announced model pricing.ts hasn't priced yet) must not report
275
+ * a fabricated rate. Absence here means "unknown", not "free" — callers that
276
+ * need to distinguish "free" from "unknown" already have `hasPricing()`
277
+ * (src/lib/utils/pricing.ts) for that.
278
+ */
279
+ export type ProviderModelManifestEntry = {
280
+ /** Alternate identifiers that resolve to this canonical model id. */
281
+ aliases: string[];
282
+ /** Human-readable name. Falls back to a mechanical id-derived name when absent. */
283
+ displayName?: string;
284
+ contextWindow: number;
285
+ maxOutputTokens: number;
286
+ pricingPerMTok?: {
287
+ input: number;
288
+ output: number;
289
+ cacheRead?: number;
290
+ cacheWrite?: number;
291
+ };
292
+ vision: boolean;
293
+ nativeAudio?: boolean;
294
+ functionCalling: boolean;
295
+ reasoning?: boolean;
296
+ jsonMode?: boolean;
297
+ /**
298
+ * Whether the model accepts classic sampling parameters (temperature/topP).
299
+ * Mirrors ModelCapabilities.samplingParams (src/lib/types/model.ts:131) —
300
+ * unset means supported.
301
+ */
302
+ samplingParams?: boolean;
303
+ /**
304
+ * Hand-tuned ModelInfo.performance/useCases/category values, carried
305
+ * forward verbatim for the ids that already had a MODEL_REGISTRY entry
306
+ * before this migration. Absent for every id that never had one — those
307
+ * get performance/useCases/category derived mechanically instead (see
308
+ * Task 9's buildModelRegistryFromManifests). Never populate this for a
309
+ * genuinely new model: mechanical derivation is the correct default, and
310
+ * a fabricated "curated" value would be worse than an honestly-derived one.
311
+ */
312
+ curated?: {
313
+ performance?: ModelPerformance;
314
+ useCases?: UseCaseSuitability;
315
+ category?: ModelInfo["category"];
316
+ };
317
+ };
318
+ /**
319
+ * A regex-driven patch applied to an unlisted, gateway-shaped model id that
320
+ * matches `pattern` (e.g. "vertex_ai/claude-sonnet-5@20260203"). Generalizes
321
+ * the pattern VISION_FAMILY_RULES (src/lib/adapters/providerImageAdapter.ts)
322
+ * and SAMPLING_PARAM_REJECTING_FAMILIES (src/lib/models/modelRegistry.ts)
323
+ * already use independently, keyed per-provider instead of globally.
324
+ */
325
+ export type ManifestFamilyRule = {
326
+ pattern: RegExp;
327
+ patch: Partial<ProviderModelManifestEntry>;
328
+ };
329
+ /**
330
+ * One provider's complete model manifest: every model NeuroLink knows about
331
+ * for that provider, plus the provider-wide fallback used when a caller
332
+ * passes a model id the manifest has never seen (a symbolic/local provider
333
+ * model, or a brand-new release the manifest hasn't been updated for yet).
334
+ */
335
+ export type ProviderModelManifest = {
336
+ /** Used for `_default`-key lookups and providers with no named-model list. */
337
+ defaultContextWindow: number;
338
+ /** Applied, in order, to the resolved entry (see manifestRegistry.ts). */
339
+ familyRules?: ManifestFamilyRule[];
340
+ /** Keyed by canonical model id (the same id `ModelInfo.id` / AIProvider calls use). */
341
+ models: Record<string, ProviderModelManifestEntry>;
342
+ };
@@ -0,0 +1,33 @@
1
+ import type { ProviderModelManifest, ProviderModelManifestEntry } from "../types/index.js";
2
+ /**
3
+ * Every provider's model manifest, keyed by the exact AIProviderName enum
4
+ * value (kebab-case) — e.g. "google-ai", "nvidia-nim". Manifests are pure
5
+ * data with zero heavy dependencies, so they are imported statically here
6
+ * (Critical Rule 1's dynamic-import mandate targets providerRegistry.ts's
7
+ * *provider* factories, which pull in real SDK clients — not this).
8
+ */
9
+ export declare const MANIFEST_REGISTRY: Record<string, ProviderModelManifest>;
10
+ export declare function getManifestForProvider(provider: string): ProviderModelManifest | undefined;
11
+ export declare function getAllManifestProviders(): string[];
12
+ /**
13
+ * Resolve a model against a provider's manifest WITHOUT ever falling back to
14
+ * the provider's `_default` entry. Used by callers that need to insert their
15
+ * own special-case fallback (cross-provider pricing, proxy pass-through)
16
+ * between "no real match" and "give up" — see resolveManifestEntry's
17
+ * docblock for why the split exists.
18
+ *
19
+ * Resolution order: exact canonical id, then a declared alias, then
20
+ * longest-prefix match (for tagged/gateway-shaped ids like Ollama's
21
+ * "llama3.2:latest" or OpenRouter's "openai/gpt-4o"), then undefined.
22
+ * Family rules are applied on top of whichever entry matched.
23
+ */
24
+ export declare function resolveManifestEntryExact(provider: string, model: string): ProviderModelManifestEntry | undefined;
25
+ /**
26
+ * Resolve a model against a provider's manifest, falling back to the
27
+ * provider's `_default` entry (synthesized from `PROVIDER_MAX_TOKENS`,
28
+ * clamped to `defaultContextWindow`, when no explicit `_default` model
29
+ * entry exists) when no real model matches. Family rules are tested
30
+ * against the ORIGINAL model string even on the `_default` path, so an
31
+ * unmatched gateway-shaped id still gets patched.
32
+ */
33
+ export declare function resolveManifestEntry(provider: string, model: string): ProviderModelManifestEntry | undefined;
@@ -0,0 +1,173 @@
1
+ import { PROVIDER_MAX_TOKENS } from "../core/constants.js";
2
+ import { anthropicManifest } from "./manifests/anthropic.js";
3
+ import { openaiManifest } from "./manifests/openai.js";
4
+ import { azureManifest } from "./manifests/azure.js";
5
+ import { bedrockManifest } from "./manifests/bedrock.js";
6
+ import { ollamaManifest } from "./manifests/ollama.js";
7
+ import { mistralManifest } from "./manifests/mistral.js";
8
+ import { googleAiManifest } from "./manifests/google-ai.js";
9
+ import { openaiCompatibleManifest } from "./manifests/openai-compatible.js";
10
+ import { openrouterManifest } from "./manifests/openrouter.js";
11
+ import { vertexManifest } from "./manifests/vertex.js";
12
+ import { huggingfaceManifest } from "./manifests/huggingface.js";
13
+ import { litellmManifest } from "./manifests/litellm.js";
14
+ import { sagemakerManifest } from "./manifests/sagemaker.js";
15
+ import { deepseekManifest } from "./manifests/deepseek.js";
16
+ import { nvidiaNimManifest } from "./manifests/nvidia-nim.js";
17
+ import { lmStudioManifest } from "./manifests/lm-studio.js";
18
+ import { llamacppManifest } from "./manifests/llamacpp.js";
19
+ import { xaiManifest } from "./manifests/xai.js";
20
+ import { groqManifest } from "./manifests/groq.js";
21
+ import { cohereManifest } from "./manifests/cohere.js";
22
+ import { togetherAiManifest } from "./manifests/together-ai.js";
23
+ import { fireworksManifest } from "./manifests/fireworks.js";
24
+ import { perplexityManifest } from "./manifests/perplexity.js";
25
+ import { cloudflareManifest } from "./manifests/cloudflare.js";
26
+ import { replicateManifest } from "./manifests/replicate.js";
27
+ import { voyageManifest } from "./manifests/voyage.js";
28
+ import { jinaManifest } from "./manifests/jina.js";
29
+ import { stabilityManifest } from "./manifests/stability.js";
30
+ import { ideogramManifest } from "./manifests/ideogram.js";
31
+ import { recraftManifest } from "./manifests/recraft.js";
32
+ /**
33
+ * Every provider's model manifest, keyed by the exact AIProviderName enum
34
+ * value (kebab-case) — e.g. "google-ai", "nvidia-nim". Manifests are pure
35
+ * data with zero heavy dependencies, so they are imported statically here
36
+ * (Critical Rule 1's dynamic-import mandate targets providerRegistry.ts's
37
+ * *provider* factories, which pull in real SDK clients — not this).
38
+ */
39
+ export const MANIFEST_REGISTRY = {
40
+ anthropic: anthropicManifest,
41
+ openai: openaiManifest,
42
+ azure: azureManifest,
43
+ bedrock: bedrockManifest,
44
+ ollama: ollamaManifest,
45
+ mistral: mistralManifest,
46
+ "google-ai": googleAiManifest,
47
+ "openai-compatible": openaiCompatibleManifest,
48
+ openrouter: openrouterManifest,
49
+ vertex: vertexManifest,
50
+ huggingface: huggingfaceManifest,
51
+ litellm: litellmManifest,
52
+ sagemaker: sagemakerManifest,
53
+ deepseek: deepseekManifest,
54
+ "nvidia-nim": nvidiaNimManifest,
55
+ "lm-studio": lmStudioManifest,
56
+ llamacpp: llamacppManifest,
57
+ xai: xaiManifest,
58
+ groq: groqManifest,
59
+ cohere: cohereManifest,
60
+ "together-ai": togetherAiManifest,
61
+ fireworks: fireworksManifest,
62
+ perplexity: perplexityManifest,
63
+ cloudflare: cloudflareManifest,
64
+ replicate: replicateManifest,
65
+ voyage: voyageManifest,
66
+ jina: jinaManifest,
67
+ stability: stabilityManifest,
68
+ ideogram: ideogramManifest,
69
+ recraft: recraftManifest,
70
+ };
71
+ export function getManifestForProvider(provider) {
72
+ return MANIFEST_REGISTRY[provider];
73
+ }
74
+ export function getAllManifestProviders() {
75
+ return Object.keys(MANIFEST_REGISTRY);
76
+ }
77
+ /**
78
+ * Apply every matching family rule's patch, in declaration order, on top of
79
+ * a base entry. Later rules win on overlapping fields (last patch applied
80
+ * wins), matching the "later registrations overwrite earlier ones" idiom
81
+ * used elsewhere in this subsystem (see registerRuntimeContextWindow's
82
+ * docblock, src/lib/constants/contextWindows.ts).
83
+ */
84
+ function applyFamilyRules(manifest, model, base) {
85
+ if (!manifest.familyRules) {
86
+ return base;
87
+ }
88
+ let result = base;
89
+ for (const rule of manifest.familyRules) {
90
+ if (rule.pattern.test(model)) {
91
+ result = { ...result, ...rule.patch };
92
+ }
93
+ }
94
+ return result;
95
+ }
96
+ /**
97
+ * Resolve a model against a provider's manifest WITHOUT ever falling back to
98
+ * the provider's `_default` entry. Used by callers that need to insert their
99
+ * own special-case fallback (cross-provider pricing, proxy pass-through)
100
+ * between "no real match" and "give up" — see resolveManifestEntry's
101
+ * docblock for why the split exists.
102
+ *
103
+ * Resolution order: exact canonical id, then a declared alias, then
104
+ * longest-prefix match (for tagged/gateway-shaped ids like Ollama's
105
+ * "llama3.2:latest" or OpenRouter's "openai/gpt-4o"), then undefined.
106
+ * Family rules are applied on top of whichever entry matched.
107
+ */
108
+ export function resolveManifestEntryExact(provider, model) {
109
+ const manifest = MANIFEST_REGISTRY[provider];
110
+ if (!manifest) {
111
+ return undefined;
112
+ }
113
+ const exact = manifest.models[model];
114
+ if (exact) {
115
+ return applyFamilyRules(manifest, model, exact);
116
+ }
117
+ const aliasMatch = Object.entries(manifest.models).find(([canonicalId, entry]) => canonicalId !== "_default" && entry.aliases.includes(model));
118
+ if (aliasMatch) {
119
+ return applyFamilyRules(manifest, model, aliasMatch[1]);
120
+ }
121
+ const sortedKeys = Object.keys(manifest.models)
122
+ .filter((k) => k !== "_default")
123
+ .sort((a, b) => b.length - a.length);
124
+ const prefixKey = sortedKeys.find((k) => model.startsWith(k));
125
+ if (prefixKey) {
126
+ return applyFamilyRules(manifest, model, manifest.models[prefixKey]);
127
+ }
128
+ return undefined;
129
+ }
130
+ /**
131
+ * Provider-specific output-token ceiling used to synthesize a `_default`
132
+ * entry when a manifest declares no explicit one (currently every
133
+ * MODEL_REGISTRY-generated manifest — azure, bedrock, ollama, mistral,
134
+ * google-ai — since `generateFullManifest` only emits real model ids).
135
+ * Mirrors the same table + fallback chain the minimal-manifest generator
136
+ * already uses (scripts/generate-remaining-manifests.ts), so a provider
137
+ * with no PROVIDER_MAX_TOKENS entry still gets an honest ceiling instead of
138
+ * `undefined`. Clamped against the manifest's own `defaultContextWindow` —
139
+ * an output ceiling can never legitimately exceed total context.
140
+ */
141
+ function defaultMaxOutputTokens(provider, defaultContextWindow) {
142
+ const providerLimits = PROVIDER_MAX_TOKENS[provider];
143
+ const rawMax = typeof providerLimits === "number"
144
+ ? providerLimits
145
+ : (providerLimits?.default ?? PROVIDER_MAX_TOKENS.default);
146
+ return Math.min(rawMax, defaultContextWindow);
147
+ }
148
+ /**
149
+ * Resolve a model against a provider's manifest, falling back to the
150
+ * provider's `_default` entry (synthesized from `PROVIDER_MAX_TOKENS`,
151
+ * clamped to `defaultContextWindow`, when no explicit `_default` model
152
+ * entry exists) when no real model matches. Family rules are tested
153
+ * against the ORIGINAL model string even on the `_default` path, so an
154
+ * unmatched gateway-shaped id still gets patched.
155
+ */
156
+ export function resolveManifestEntry(provider, model) {
157
+ const exact = resolveManifestEntryExact(provider, model);
158
+ if (exact) {
159
+ return exact;
160
+ }
161
+ const manifest = MANIFEST_REGISTRY[provider];
162
+ if (!manifest) {
163
+ return undefined;
164
+ }
165
+ const defaultEntry = manifest.models._default ?? {
166
+ aliases: [],
167
+ contextWindow: manifest.defaultContextWindow,
168
+ maxOutputTokens: defaultMaxOutputTokens(provider, manifest.defaultContextWindow),
169
+ vision: false,
170
+ functionCalling: false,
171
+ };
172
+ return applyFamilyRules(manifest, model, defaultEntry);
173
+ }
@@ -0,0 +1,9 @@
1
+ import type { ProviderModelManifest } from "../../types/index.js";
2
+ /**
3
+ * Anthropic model manifest. Canonical ids match AnthropicModels
4
+ * (src/lib/constants/enums.ts:524+) and MODEL_CONTEXT_WINDOWS.anthropic
5
+ * (src/lib/constants/contextWindows.ts:160-182). maxOutputTokens values
6
+ * come from getClaudeMaxOutputTokens (src/lib/utils/tokenLimits.ts) — the
7
+ * regex ladder already authoritative for native Claude request paths.
8
+ */
9
+ export declare const anthropicManifest: ProviderModelManifest;