@juspay/neurolink 11.3.1 → 11.5.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 (141) hide show
  1. package/CHANGELOG.md +6 -2
  2. package/dist/adapters/providerImageAdapter.js +3 -1
  3. package/dist/browser/neurolink.min.js +276 -276
  4. package/dist/constants/contextWindows.js +1 -1
  5. package/dist/constants/enums.d.ts +26 -1
  6. package/dist/constants/enums.js +37 -3
  7. package/dist/lib/adapters/providerImageAdapter.js +3 -1
  8. package/dist/lib/constants/contextWindows.js +1 -1
  9. package/dist/lib/constants/enums.d.ts +26 -1
  10. package/dist/lib/constants/enums.js +37 -3
  11. package/dist/lib/models/manifestRegistry.d.ts +33 -0
  12. package/dist/lib/models/manifestRegistry.js +174 -0
  13. package/dist/lib/models/manifests/anthropic.d.ts +9 -0
  14. package/dist/lib/models/manifests/anthropic.js +346 -0
  15. package/dist/lib/models/manifests/azure.d.ts +2 -0
  16. package/dist/lib/models/manifests/azure.js +87 -0
  17. package/dist/lib/models/manifests/bedrock.d.ts +2 -0
  18. package/dist/lib/models/manifests/bedrock.js +75 -0
  19. package/dist/lib/models/manifests/cloudflare.d.ts +8 -0
  20. package/dist/lib/models/manifests/cloudflare.js +19 -0
  21. package/dist/lib/models/manifests/cohere.d.ts +8 -0
  22. package/dist/lib/models/manifests/cohere.js +19 -0
  23. package/dist/lib/models/manifests/deepseek.d.ts +8 -0
  24. package/dist/lib/models/manifests/deepseek.js +19 -0
  25. package/dist/lib/models/manifests/fireworks.d.ts +8 -0
  26. package/dist/lib/models/manifests/fireworks.js +19 -0
  27. package/dist/lib/models/manifests/google-ai.d.ts +2 -0
  28. package/dist/lib/models/manifests/google-ai.js +28 -0
  29. package/dist/lib/models/manifests/groq.d.ts +8 -0
  30. package/dist/lib/models/manifests/groq.js +19 -0
  31. package/dist/lib/models/manifests/huggingface.d.ts +8 -0
  32. package/dist/lib/models/manifests/huggingface.js +19 -0
  33. package/dist/lib/models/manifests/ideogram.d.ts +8 -0
  34. package/dist/lib/models/manifests/ideogram.js +19 -0
  35. package/dist/lib/models/manifests/jina.d.ts +8 -0
  36. package/dist/lib/models/manifests/jina.js +19 -0
  37. package/dist/lib/models/manifests/litellm.d.ts +8 -0
  38. package/dist/lib/models/manifests/litellm.js +19 -0
  39. package/dist/lib/models/manifests/llamacpp.d.ts +8 -0
  40. package/dist/lib/models/manifests/llamacpp.js +19 -0
  41. package/dist/lib/models/manifests/lm-studio.d.ts +8 -0
  42. package/dist/lib/models/manifests/lm-studio.js +19 -0
  43. package/dist/lib/models/manifests/mistral.d.ts +2 -0
  44. package/dist/lib/models/manifests/mistral.js +50 -0
  45. package/dist/lib/models/manifests/nvidia-nim.d.ts +8 -0
  46. package/dist/lib/models/manifests/nvidia-nim.js +19 -0
  47. package/dist/lib/models/manifests/ollama.d.ts +2 -0
  48. package/dist/lib/models/manifests/ollama.js +72 -0
  49. package/dist/lib/models/manifests/openai-compatible.d.ts +8 -0
  50. package/dist/lib/models/manifests/openai-compatible.js +19 -0
  51. package/dist/lib/models/manifests/openai.d.ts +11 -0
  52. package/dist/lib/models/manifests/openai.js +560 -0
  53. package/dist/lib/models/manifests/openrouter.d.ts +8 -0
  54. package/dist/lib/models/manifests/openrouter.js +19 -0
  55. package/dist/lib/models/manifests/perplexity.d.ts +8 -0
  56. package/dist/lib/models/manifests/perplexity.js +19 -0
  57. package/dist/lib/models/manifests/recraft.d.ts +8 -0
  58. package/dist/lib/models/manifests/recraft.js +19 -0
  59. package/dist/lib/models/manifests/replicate.d.ts +8 -0
  60. package/dist/lib/models/manifests/replicate.js +19 -0
  61. package/dist/lib/models/manifests/sagemaker.d.ts +8 -0
  62. package/dist/lib/models/manifests/sagemaker.js +19 -0
  63. package/dist/lib/models/manifests/stability.d.ts +8 -0
  64. package/dist/lib/models/manifests/stability.js +19 -0
  65. package/dist/lib/models/manifests/together-ai.d.ts +8 -0
  66. package/dist/lib/models/manifests/together-ai.js +19 -0
  67. package/dist/lib/models/manifests/vertex.d.ts +8 -0
  68. package/dist/lib/models/manifests/vertex.js +19 -0
  69. package/dist/lib/models/manifests/voyage.d.ts +8 -0
  70. package/dist/lib/models/manifests/voyage.js +19 -0
  71. package/dist/lib/models/manifests/xai.d.ts +8 -0
  72. package/dist/lib/models/manifests/xai.js +19 -0
  73. package/dist/lib/models/modelRegistry.js +225 -7
  74. package/dist/lib/types/model.d.ts +77 -0
  75. package/dist/lib/utils/modelChoices.js +0 -1
  76. package/dist/models/manifestRegistry.d.ts +33 -0
  77. package/dist/models/manifestRegistry.js +173 -0
  78. package/dist/models/manifests/anthropic.d.ts +9 -0
  79. package/dist/models/manifests/anthropic.js +345 -0
  80. package/dist/models/manifests/azure.d.ts +2 -0
  81. package/dist/models/manifests/azure.js +86 -0
  82. package/dist/models/manifests/bedrock.d.ts +2 -0
  83. package/dist/models/manifests/bedrock.js +74 -0
  84. package/dist/models/manifests/cloudflare.d.ts +8 -0
  85. package/dist/models/manifests/cloudflare.js +18 -0
  86. package/dist/models/manifests/cohere.d.ts +8 -0
  87. package/dist/models/manifests/cohere.js +18 -0
  88. package/dist/models/manifests/deepseek.d.ts +8 -0
  89. package/dist/models/manifests/deepseek.js +18 -0
  90. package/dist/models/manifests/fireworks.d.ts +8 -0
  91. package/dist/models/manifests/fireworks.js +18 -0
  92. package/dist/models/manifests/google-ai.d.ts +2 -0
  93. package/dist/models/manifests/google-ai.js +27 -0
  94. package/dist/models/manifests/groq.d.ts +8 -0
  95. package/dist/models/manifests/groq.js +18 -0
  96. package/dist/models/manifests/huggingface.d.ts +8 -0
  97. package/dist/models/manifests/huggingface.js +18 -0
  98. package/dist/models/manifests/ideogram.d.ts +8 -0
  99. package/dist/models/manifests/ideogram.js +18 -0
  100. package/dist/models/manifests/jina.d.ts +8 -0
  101. package/dist/models/manifests/jina.js +18 -0
  102. package/dist/models/manifests/litellm.d.ts +8 -0
  103. package/dist/models/manifests/litellm.js +18 -0
  104. package/dist/models/manifests/llamacpp.d.ts +8 -0
  105. package/dist/models/manifests/llamacpp.js +18 -0
  106. package/dist/models/manifests/lm-studio.d.ts +8 -0
  107. package/dist/models/manifests/lm-studio.js +18 -0
  108. package/dist/models/manifests/mistral.d.ts +2 -0
  109. package/dist/models/manifests/mistral.js +49 -0
  110. package/dist/models/manifests/nvidia-nim.d.ts +8 -0
  111. package/dist/models/manifests/nvidia-nim.js +18 -0
  112. package/dist/models/manifests/ollama.d.ts +2 -0
  113. package/dist/models/manifests/ollama.js +71 -0
  114. package/dist/models/manifests/openai-compatible.d.ts +8 -0
  115. package/dist/models/manifests/openai-compatible.js +18 -0
  116. package/dist/models/manifests/openai.d.ts +11 -0
  117. package/dist/models/manifests/openai.js +559 -0
  118. package/dist/models/manifests/openrouter.d.ts +8 -0
  119. package/dist/models/manifests/openrouter.js +18 -0
  120. package/dist/models/manifests/perplexity.d.ts +8 -0
  121. package/dist/models/manifests/perplexity.js +18 -0
  122. package/dist/models/manifests/recraft.d.ts +8 -0
  123. package/dist/models/manifests/recraft.js +18 -0
  124. package/dist/models/manifests/replicate.d.ts +8 -0
  125. package/dist/models/manifests/replicate.js +18 -0
  126. package/dist/models/manifests/sagemaker.d.ts +8 -0
  127. package/dist/models/manifests/sagemaker.js +18 -0
  128. package/dist/models/manifests/stability.d.ts +8 -0
  129. package/dist/models/manifests/stability.js +18 -0
  130. package/dist/models/manifests/together-ai.d.ts +8 -0
  131. package/dist/models/manifests/together-ai.js +18 -0
  132. package/dist/models/manifests/vertex.d.ts +8 -0
  133. package/dist/models/manifests/vertex.js +18 -0
  134. package/dist/models/manifests/voyage.d.ts +8 -0
  135. package/dist/models/manifests/voyage.js +18 -0
  136. package/dist/models/manifests/xai.d.ts +8 -0
  137. package/dist/models/manifests/xai.js +18 -0
  138. package/dist/models/modelRegistry.js +225 -7
  139. package/dist/types/model.d.ts +77 -0
  140. package/dist/utils/modelChoices.js +0 -1
  141. package/package.json +5 -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
@@ -1046,8 +1046,11 @@ export const MODEL_REGISTRY = {
1046
1046
  jsonMode: false,
1047
1047
  },
1048
1048
  pricing: {
1049
- inputCostPer1K: 0.015,
1050
- outputCostPer1K: 0.075,
1049
+ // $5 / $25 per MTok. Was 0.015/0.075 — Claude 3 Opus's rate, left
1050
+ // behind when the entry was updated to 4.5, so every cost estimate
1051
+ // for this model came out 3x high.
1052
+ inputCostPer1K: 0.005,
1053
+ outputCostPer1K: 0.025,
1051
1054
  currency: "USD",
1052
1055
  },
1053
1056
  performance: {
@@ -1071,7 +1074,9 @@ export const MODEL_REGISTRY = {
1071
1074
  },
1072
1075
  aliases: [
1073
1076
  "claude-4.5-opus",
1074
- "claude-opus-latest",
1077
+ // "claude-opus-latest" now belongs to CLAUDE_OPUS_5. An alias declared
1078
+ // on two entries silently resolves to whichever appears later in this
1079
+ // object, so a "latest" pointer must live on exactly one model.
1075
1080
  "opus-4.5",
1076
1081
  "anthropic-flagship",
1077
1082
  ],
@@ -1080,6 +1085,210 @@ export const MODEL_REGISTRY = {
1080
1085
  releaseDate: "2025-11-24",
1081
1086
  category: "reasoning",
1082
1087
  },
1088
+ // Claude 5 and 4.7/4.8. Limits and pricing from Anthropic's models
1089
+ // overview comparison tables. All current Claude models take image input;
1090
+ // these use adaptive thinking rather than the older `thinking.type`
1091
+ // extended-thinking switch, which the overview marks "No" for each.
1092
+ [AnthropicModels.CLAUDE_OPUS_5]: {
1093
+ id: AnthropicModels.CLAUDE_OPUS_5,
1094
+ name: "Claude Opus 5",
1095
+ provider: AIProviderName.ANTHROPIC,
1096
+ description: "For complex agentic coding and enterprise work",
1097
+ capabilities: {
1098
+ vision: true,
1099
+ functionCalling: true,
1100
+ codeGeneration: true,
1101
+ reasoning: true,
1102
+ multimodal: true,
1103
+ streaming: true,
1104
+ jsonMode: false,
1105
+ },
1106
+ pricing: {
1107
+ inputCostPer1K: 0.005,
1108
+ outputCostPer1K: 0.025,
1109
+ currency: "USD",
1110
+ },
1111
+ performance: { speed: "medium", quality: "high", accuracy: "high" },
1112
+ limits: {
1113
+ maxContextTokens: 1000000,
1114
+ maxOutputTokens: 128000,
1115
+ maxRequestsPerMinute: 50,
1116
+ },
1117
+ useCases: {
1118
+ coding: 10,
1119
+ creative: 10,
1120
+ analysis: 10,
1121
+ conversation: 9,
1122
+ reasoning: 10,
1123
+ translation: 9,
1124
+ summarization: 9,
1125
+ },
1126
+ aliases: ["opus-5", "claude-opus-latest"],
1127
+ deprecated: false,
1128
+ isLocal: false,
1129
+ releaseDate: "2026-07-24",
1130
+ category: "reasoning",
1131
+ },
1132
+ [AnthropicModels.CLAUDE_SONNET_5]: {
1133
+ id: AnthropicModels.CLAUDE_SONNET_5,
1134
+ name: "Claude Sonnet 5",
1135
+ provider: AIProviderName.ANTHROPIC,
1136
+ description: "The best combination of speed and intelligence",
1137
+ capabilities: {
1138
+ vision: true,
1139
+ functionCalling: true,
1140
+ codeGeneration: true,
1141
+ reasoning: true,
1142
+ multimodal: true,
1143
+ streaming: true,
1144
+ jsonMode: false,
1145
+ },
1146
+ pricing: {
1147
+ inputCostPer1K: 0.002,
1148
+ outputCostPer1K: 0.01,
1149
+ currency: "USD",
1150
+ },
1151
+ performance: { speed: "fast", quality: "high", accuracy: "high" },
1152
+ limits: {
1153
+ maxContextTokens: 1000000,
1154
+ maxOutputTokens: 128000,
1155
+ maxRequestsPerMinute: 50,
1156
+ },
1157
+ useCases: {
1158
+ coding: 9,
1159
+ creative: 9,
1160
+ analysis: 9,
1161
+ conversation: 9,
1162
+ reasoning: 9,
1163
+ translation: 9,
1164
+ summarization: 9,
1165
+ },
1166
+ aliases: ["sonnet-5", "claude-sonnet-latest"],
1167
+ deprecated: false,
1168
+ isLocal: false,
1169
+ releaseDate: "2026-06-30",
1170
+ category: "general",
1171
+ },
1172
+ [AnthropicModels.CLAUDE_FABLE_5]: {
1173
+ id: AnthropicModels.CLAUDE_FABLE_5,
1174
+ name: "Claude Fable 5",
1175
+ provider: AIProviderName.ANTHROPIC,
1176
+ description: "Next-generation intelligence for long-running agents",
1177
+ capabilities: {
1178
+ vision: true,
1179
+ functionCalling: true,
1180
+ codeGeneration: true,
1181
+ reasoning: true,
1182
+ multimodal: true,
1183
+ streaming: true,
1184
+ jsonMode: false,
1185
+ },
1186
+ pricing: {
1187
+ inputCostPer1K: 0.01,
1188
+ outputCostPer1K: 0.05,
1189
+ currency: "USD",
1190
+ },
1191
+ performance: { speed: "slow", quality: "high", accuracy: "high" },
1192
+ limits: {
1193
+ maxContextTokens: 1000000,
1194
+ maxOutputTokens: 128000,
1195
+ maxRequestsPerMinute: 50,
1196
+ },
1197
+ useCases: {
1198
+ coding: 10,
1199
+ creative: 10,
1200
+ analysis: 10,
1201
+ conversation: 9,
1202
+ reasoning: 10,
1203
+ translation: 9,
1204
+ summarization: 9,
1205
+ },
1206
+ aliases: ["fable-5"],
1207
+ deprecated: false,
1208
+ isLocal: false,
1209
+ releaseDate: "2026-06-09",
1210
+ category: "reasoning",
1211
+ },
1212
+ [AnthropicModels.CLAUDE_OPUS_4_8]: {
1213
+ id: AnthropicModels.CLAUDE_OPUS_4_8,
1214
+ name: "Claude Opus 4.8",
1215
+ provider: AIProviderName.ANTHROPIC,
1216
+ description: "Anthropic Opus 4.8, superseded by Claude Opus 5",
1217
+ capabilities: {
1218
+ vision: true,
1219
+ functionCalling: true,
1220
+ codeGeneration: true,
1221
+ reasoning: true,
1222
+ multimodal: true,
1223
+ streaming: true,
1224
+ jsonMode: false,
1225
+ },
1226
+ pricing: {
1227
+ inputCostPer1K: 0.005,
1228
+ outputCostPer1K: 0.025,
1229
+ currency: "USD",
1230
+ },
1231
+ performance: { speed: "medium", quality: "high", accuracy: "high" },
1232
+ limits: {
1233
+ maxContextTokens: 1000000,
1234
+ maxOutputTokens: 128000,
1235
+ maxRequestsPerMinute: 50,
1236
+ },
1237
+ useCases: {
1238
+ coding: 10,
1239
+ creative: 9,
1240
+ analysis: 10,
1241
+ conversation: 9,
1242
+ reasoning: 10,
1243
+ translation: 9,
1244
+ summarization: 9,
1245
+ },
1246
+ aliases: ["opus-4.8"],
1247
+ deprecated: false,
1248
+ isLocal: false,
1249
+ releaseDate: "2026-05-28",
1250
+ category: "reasoning",
1251
+ },
1252
+ [AnthropicModels.CLAUDE_OPUS_4_7]: {
1253
+ id: AnthropicModels.CLAUDE_OPUS_4_7,
1254
+ name: "Claude Opus 4.7",
1255
+ provider: AIProviderName.ANTHROPIC,
1256
+ description: "Anthropic Opus 4.7, superseded by Claude Opus 4.8",
1257
+ capabilities: {
1258
+ vision: true,
1259
+ functionCalling: true,
1260
+ codeGeneration: true,
1261
+ reasoning: true,
1262
+ multimodal: true,
1263
+ streaming: true,
1264
+ jsonMode: false,
1265
+ },
1266
+ pricing: {
1267
+ inputCostPer1K: 0.005,
1268
+ outputCostPer1K: 0.025,
1269
+ currency: "USD",
1270
+ },
1271
+ performance: { speed: "medium", quality: "high", accuracy: "high" },
1272
+ limits: {
1273
+ maxContextTokens: 1000000,
1274
+ maxOutputTokens: 128000,
1275
+ maxRequestsPerMinute: 50,
1276
+ },
1277
+ useCases: {
1278
+ coding: 10,
1279
+ creative: 9,
1280
+ analysis: 10,
1281
+ conversation: 9,
1282
+ reasoning: 10,
1283
+ translation: 9,
1284
+ summarization: 9,
1285
+ },
1286
+ aliases: ["opus-4.7"],
1287
+ deprecated: false,
1288
+ isLocal: false,
1289
+ releaseDate: "2026-04-16",
1290
+ category: "reasoning",
1291
+ },
1083
1292
  [AnthropicModels.CLAUDE_SONNET_4_5]: {
1084
1293
  id: AnthropicModels.CLAUDE_SONNET_4_5,
1085
1294
  name: "Claude Sonnet 4.5",
@@ -1118,7 +1327,9 @@ export const MODEL_REGISTRY = {
1118
1327
  translation: 8,
1119
1328
  summarization: 8,
1120
1329
  },
1121
- aliases: ["claude-4.5-sonnet", "claude-sonnet-latest", "sonnet-4.5"],
1330
+ // "claude-sonnet-latest" now belongs to CLAUDE_SONNET_5 — see the note
1331
+ // on CLAUDE_OPUS_4_5's aliases.
1332
+ aliases: ["claude-4.5-sonnet", "sonnet-4.5"],
1122
1333
  deprecated: false,
1123
1334
  isLocal: false,
1124
1335
  releaseDate: "2025-09-29",
@@ -1433,7 +1644,10 @@ export const MODEL_REGISTRY = {
1433
1644
  summarization: 8,
1434
1645
  },
1435
1646
  aliases: ["pixtral", "mistral-vision"],
1436
- deprecated: false,
1647
+ // Retired by Mistral on 2026-05-31. Kept so exact-id and alias lookups
1648
+ // still resolve for existing callers; `deprecated` removes it from
1649
+ // `models list` and the recommendation paths.
1650
+ deprecated: true,
1437
1651
  isLocal: false,
1438
1652
  releaseDate: "2024-09-01",
1439
1653
  category: "vision",
@@ -2227,7 +2441,9 @@ export const MODEL_REGISTRY = {
2227
2441
  summarization: 9,
2228
2442
  },
2229
2443
  aliases: ["azure-gpt-5-turbo", "gpt5-turbo-azure"],
2230
- deprecated: false,
2444
+ // Azure OpenAI has never published a "gpt-5-turbo"; the id cannot be
2445
+ // deployed. Flagged so it stops being offered as a live choice.
2446
+ deprecated: true,
2231
2447
  isLocal: false,
2232
2448
  releaseDate: "2025-08-07",
2233
2449
  category: "general",
@@ -2327,7 +2543,9 @@ export const USE_CASE_RECOMMENDATIONS = {
2327
2543
  OpenAIModels.GPT_5_2_PRO,
2328
2544
  AnthropicModels.CLAUDE_OPUS_4_5,
2329
2545
  GoogleAIModels.GEMINI_2_5_PRO,
2330
- MistralModels.PIXTRAL_LARGE,
2546
+ // Mistral's Pixtral Large sat here until it was retired on 2026-05-31.
2547
+ // Left without a substitute rather than guessing at a replacement's
2548
+ // vision support.
2331
2549
  BedrockModels.NOVA_PREMIER,
2332
2550
  ],
2333
2551
  };
@@ -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
+ };
@@ -138,7 +138,6 @@ const TOP_MODELS_CONFIG = {
138
138
  model: MistralModels.CODESTRAL_LATEST,
139
139
  description: "Specialized for code",
140
140
  },
141
- { model: MistralModels.PIXTRAL_LARGE, description: "Multimodal vision" },
142
141
  {
143
142
  model: MistralModels.MAGISTRAL_MEDIUM_LATEST,
144
143
  description: "Reasoning model",
@@ -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;