@juspay/neurolink 9.64.0 → 9.65.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 (322) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +18 -17
  3. package/dist/adapters/providerImageAdapter.js +29 -1
  4. package/dist/adapters/replicate/auth.d.ts +19 -0
  5. package/dist/adapters/replicate/auth.js +32 -0
  6. package/dist/adapters/replicate/predictionLifecycle.d.ts +46 -0
  7. package/dist/adapters/replicate/predictionLifecycle.js +283 -0
  8. package/dist/adapters/video/klingVideoHandler.d.ts +37 -0
  9. package/dist/adapters/video/klingVideoHandler.js +305 -0
  10. package/dist/adapters/video/replicateVideoHandler.d.ts +29 -0
  11. package/dist/adapters/video/replicateVideoHandler.js +157 -0
  12. package/dist/adapters/video/runwayVideoHandler.d.ts +32 -0
  13. package/dist/adapters/video/runwayVideoHandler.js +316 -0
  14. package/dist/adapters/video/vertexVideoHandler.d.ts +19 -1
  15. package/dist/adapters/video/vertexVideoHandler.js +33 -9
  16. package/dist/autoresearch/runner.js +8 -2
  17. package/dist/avatar/index.d.ts +13 -0
  18. package/dist/avatar/index.js +13 -0
  19. package/dist/avatar/providers/DIDAvatar.d.ts +49 -0
  20. package/dist/avatar/providers/DIDAvatar.js +501 -0
  21. package/dist/avatar/providers/HeyGenAvatar.d.ts +30 -0
  22. package/dist/avatar/providers/HeyGenAvatar.js +337 -0
  23. package/dist/avatar/providers/ReplicateAvatar.d.ts +36 -0
  24. package/dist/avatar/providers/ReplicateAvatar.js +267 -0
  25. package/dist/browser/neurolink.min.js +633 -610
  26. package/dist/cli/commands/mcp.js +29 -0
  27. package/dist/cli/commands/proxy.js +24 -5
  28. package/dist/cli/factories/commandFactory.d.ts +11 -1
  29. package/dist/cli/factories/commandFactory.js +291 -38
  30. package/dist/constants/contextWindows.js +101 -0
  31. package/dist/constants/enums.d.ts +273 -2
  32. package/dist/constants/enums.js +290 -1
  33. package/dist/constants/videoErrors.d.ts +4 -0
  34. package/dist/constants/videoErrors.js +4 -0
  35. package/dist/core/baseProvider.d.ts +22 -2
  36. package/dist/core/baseProvider.js +217 -11
  37. package/dist/core/constants.d.ts +11 -0
  38. package/dist/core/constants.js +69 -1
  39. package/dist/core/redisConversationMemoryManager.js +6 -0
  40. package/dist/evaluation/index.d.ts +2 -0
  41. package/dist/evaluation/index.js +4 -0
  42. package/dist/factories/providerFactory.js +7 -1
  43. package/dist/factories/providerRegistry.js +202 -5
  44. package/dist/features/ppt/contentPlanner.js +42 -14
  45. package/dist/index.d.ts +9 -1
  46. package/dist/index.js +16 -1
  47. package/dist/lib/adapters/providerImageAdapter.js +29 -1
  48. package/dist/lib/adapters/replicate/auth.d.ts +19 -0
  49. package/dist/lib/adapters/replicate/auth.js +33 -0
  50. package/dist/lib/adapters/replicate/predictionLifecycle.d.ts +46 -0
  51. package/dist/lib/adapters/replicate/predictionLifecycle.js +284 -0
  52. package/dist/lib/adapters/video/klingVideoHandler.d.ts +37 -0
  53. package/dist/lib/adapters/video/klingVideoHandler.js +306 -0
  54. package/dist/lib/adapters/video/replicateVideoHandler.d.ts +29 -0
  55. package/dist/lib/adapters/video/replicateVideoHandler.js +158 -0
  56. package/dist/lib/adapters/video/runwayVideoHandler.d.ts +32 -0
  57. package/dist/lib/adapters/video/runwayVideoHandler.js +317 -0
  58. package/dist/lib/adapters/video/vertexVideoHandler.d.ts +19 -1
  59. package/dist/lib/adapters/video/vertexVideoHandler.js +33 -9
  60. package/dist/lib/autoresearch/runner.js +8 -2
  61. package/dist/lib/avatar/index.d.ts +13 -0
  62. package/dist/lib/avatar/index.js +14 -0
  63. package/dist/lib/avatar/providers/DIDAvatar.d.ts +49 -0
  64. package/dist/lib/avatar/providers/DIDAvatar.js +502 -0
  65. package/dist/lib/avatar/providers/HeyGenAvatar.d.ts +30 -0
  66. package/dist/lib/avatar/providers/HeyGenAvatar.js +338 -0
  67. package/dist/lib/avatar/providers/ReplicateAvatar.d.ts +36 -0
  68. package/dist/lib/avatar/providers/ReplicateAvatar.js +268 -0
  69. package/dist/lib/constants/contextWindows.js +101 -0
  70. package/dist/lib/constants/enums.d.ts +273 -2
  71. package/dist/lib/constants/enums.js +290 -1
  72. package/dist/lib/constants/videoErrors.d.ts +4 -0
  73. package/dist/lib/constants/videoErrors.js +4 -0
  74. package/dist/lib/core/baseProvider.d.ts +22 -2
  75. package/dist/lib/core/baseProvider.js +217 -11
  76. package/dist/lib/core/constants.d.ts +11 -0
  77. package/dist/lib/core/constants.js +69 -1
  78. package/dist/lib/core/redisConversationMemoryManager.js +6 -0
  79. package/dist/lib/evaluation/index.d.ts +2 -0
  80. package/dist/lib/evaluation/index.js +4 -0
  81. package/dist/lib/factories/providerFactory.js +7 -1
  82. package/dist/lib/factories/providerRegistry.js +202 -5
  83. package/dist/lib/features/ppt/contentPlanner.js +42 -14
  84. package/dist/lib/index.d.ts +9 -1
  85. package/dist/lib/index.js +16 -1
  86. package/dist/lib/middleware/builtin/lifecycle.js +39 -9
  87. package/dist/lib/music/index.d.ts +13 -0
  88. package/dist/lib/music/index.js +14 -0
  89. package/dist/lib/music/providers/BeatovenMusic.d.ts +31 -0
  90. package/dist/lib/music/providers/BeatovenMusic.js +334 -0
  91. package/dist/lib/music/providers/ElevenLabsMusic.d.ts +30 -0
  92. package/dist/lib/music/providers/ElevenLabsMusic.js +169 -0
  93. package/dist/lib/music/providers/LyriaMusic.d.ts +29 -0
  94. package/dist/lib/music/providers/LyriaMusic.js +173 -0
  95. package/dist/lib/music/providers/ReplicateMusic.d.ts +31 -0
  96. package/dist/lib/music/providers/ReplicateMusic.js +262 -0
  97. package/dist/lib/neurolink.d.ts +30 -0
  98. package/dist/lib/neurolink.js +323 -77
  99. package/dist/lib/providers/amazonBedrock.d.ts +10 -0
  100. package/dist/lib/providers/amazonBedrock.js +94 -39
  101. package/dist/lib/providers/anthropic.js +55 -7
  102. package/dist/lib/providers/anthropicBaseProvider.js +1 -1
  103. package/dist/lib/providers/azureOpenai.js +66 -17
  104. package/dist/lib/providers/cloudflare.d.ts +35 -0
  105. package/dist/lib/providers/cloudflare.js +174 -0
  106. package/dist/lib/providers/cohere.d.ts +52 -0
  107. package/dist/lib/providers/cohere.js +253 -0
  108. package/dist/lib/providers/deepseek.js +72 -17
  109. package/dist/lib/providers/fireworks.d.ts +33 -0
  110. package/dist/lib/providers/fireworks.js +164 -0
  111. package/dist/lib/providers/googleAiStudio.js +45 -6
  112. package/dist/lib/providers/googleNativeGemini3.d.ts +24 -1
  113. package/dist/lib/providers/googleNativeGemini3.js +173 -21
  114. package/dist/lib/providers/googleVertex.js +173 -17
  115. package/dist/lib/providers/groq.d.ts +33 -0
  116. package/dist/lib/providers/groq.js +181 -0
  117. package/dist/lib/providers/huggingFace.js +9 -8
  118. package/dist/lib/providers/ideogram.d.ts +34 -0
  119. package/dist/lib/providers/ideogram.js +184 -0
  120. package/dist/lib/providers/index.d.ts +13 -0
  121. package/dist/lib/providers/index.js +13 -0
  122. package/dist/lib/providers/jina.d.ts +59 -0
  123. package/dist/lib/providers/jina.js +218 -0
  124. package/dist/lib/providers/llamaCpp.js +14 -46
  125. package/dist/lib/providers/lmStudio.js +14 -47
  126. package/dist/lib/providers/mistral.js +7 -7
  127. package/dist/lib/providers/nvidiaNim.js +160 -19
  128. package/dist/lib/providers/ollama.js +7 -7
  129. package/dist/lib/providers/openAI.d.ts +22 -1
  130. package/dist/lib/providers/openAI.js +181 -0
  131. package/dist/lib/providers/openRouter.js +35 -23
  132. package/dist/lib/providers/openaiCompatible.js +9 -8
  133. package/dist/lib/providers/perplexity.d.ts +33 -0
  134. package/dist/lib/providers/perplexity.js +179 -0
  135. package/dist/lib/providers/recraft.d.ts +34 -0
  136. package/dist/lib/providers/recraft.js +197 -0
  137. package/dist/lib/providers/replicate.d.ts +75 -0
  138. package/dist/lib/providers/replicate.js +403 -0
  139. package/dist/lib/providers/stability.d.ts +37 -0
  140. package/dist/lib/providers/stability.js +191 -0
  141. package/dist/lib/providers/togetherAi.d.ts +33 -0
  142. package/dist/lib/providers/togetherAi.js +176 -0
  143. package/dist/lib/providers/voyage.d.ts +47 -0
  144. package/dist/lib/providers/voyage.js +177 -0
  145. package/dist/lib/providers/xai.d.ts +33 -0
  146. package/dist/lib/providers/xai.js +172 -0
  147. package/dist/lib/telemetry/index.d.ts +1 -1
  148. package/dist/lib/telemetry/index.js +1 -1
  149. package/dist/lib/telemetry/tracers.d.ts +19 -0
  150. package/dist/lib/telemetry/tracers.js +19 -0
  151. package/dist/lib/telemetry/withSpan.d.ts +35 -0
  152. package/dist/lib/telemetry/withSpan.js +103 -0
  153. package/dist/lib/types/avatar.d.ts +143 -0
  154. package/dist/lib/types/avatar.js +20 -0
  155. package/dist/lib/types/cli.d.ts +6 -0
  156. package/dist/lib/types/generate.d.ts +62 -5
  157. package/dist/lib/types/index.d.ts +5 -0
  158. package/dist/lib/types/index.js +7 -0
  159. package/dist/lib/types/middleware.d.ts +27 -0
  160. package/dist/lib/types/multimodal.d.ts +35 -2
  161. package/dist/lib/types/music.d.ts +165 -0
  162. package/dist/lib/types/music.js +21 -0
  163. package/dist/lib/types/providers.d.ts +144 -1
  164. package/dist/lib/types/replicate.d.ts +67 -0
  165. package/dist/lib/types/replicate.js +10 -0
  166. package/dist/lib/types/safeFetch.d.ts +15 -0
  167. package/dist/lib/types/safeFetch.js +7 -0
  168. package/dist/lib/types/stream.d.ts +2 -1
  169. package/dist/lib/types/tools.d.ts +13 -0
  170. package/dist/lib/types/video.d.ts +89 -0
  171. package/dist/lib/types/video.js +15 -0
  172. package/dist/lib/utils/avatarProcessor.d.ts +68 -0
  173. package/dist/lib/utils/avatarProcessor.js +172 -0
  174. package/dist/lib/utils/cloneOptions.d.ts +36 -0
  175. package/dist/lib/utils/cloneOptions.js +62 -0
  176. package/dist/lib/utils/lifecycleCallbacks.d.ts +51 -8
  177. package/dist/lib/utils/lifecycleCallbacks.js +82 -26
  178. package/dist/lib/utils/lifecycleTimeout.d.ts +25 -0
  179. package/dist/lib/utils/lifecycleTimeout.js +39 -0
  180. package/dist/lib/utils/logSanitize.d.ts +49 -0
  181. package/dist/lib/utils/logSanitize.js +170 -0
  182. package/dist/lib/utils/loggingFetch.d.ts +29 -0
  183. package/dist/lib/utils/loggingFetch.js +60 -0
  184. package/dist/lib/utils/messageBuilder.js +43 -25
  185. package/dist/lib/utils/modelChoices.js +236 -3
  186. package/dist/lib/utils/musicProcessor.d.ts +67 -0
  187. package/dist/lib/utils/musicProcessor.js +189 -0
  188. package/dist/lib/utils/optionsConversion.js +3 -2
  189. package/dist/lib/utils/parameterValidation.js +14 -4
  190. package/dist/lib/utils/pricing.js +193 -0
  191. package/dist/lib/utils/providerConfig.d.ts +55 -0
  192. package/dist/lib/utils/providerConfig.js +224 -0
  193. package/dist/lib/utils/safeFetch.d.ts +26 -0
  194. package/dist/lib/utils/safeFetch.js +83 -0
  195. package/dist/lib/utils/sizeGuard.d.ts +34 -0
  196. package/dist/lib/utils/sizeGuard.js +45 -0
  197. package/dist/lib/utils/ssrfGuard.d.ts +52 -0
  198. package/dist/lib/utils/ssrfGuard.js +411 -0
  199. package/dist/lib/utils/videoProcessor.d.ts +60 -0
  200. package/dist/lib/utils/videoProcessor.js +201 -0
  201. package/dist/lib/voice/providers/FishAudioTTS.d.ts +27 -0
  202. package/dist/lib/voice/providers/FishAudioTTS.js +183 -0
  203. package/dist/lib/workflow/core/ensembleExecutor.js +26 -9
  204. package/dist/middleware/builtin/lifecycle.js +39 -9
  205. package/dist/music/index.d.ts +13 -0
  206. package/dist/music/index.js +13 -0
  207. package/dist/music/providers/BeatovenMusic.d.ts +31 -0
  208. package/dist/music/providers/BeatovenMusic.js +333 -0
  209. package/dist/music/providers/ElevenLabsMusic.d.ts +30 -0
  210. package/dist/music/providers/ElevenLabsMusic.js +168 -0
  211. package/dist/music/providers/LyriaMusic.d.ts +29 -0
  212. package/dist/music/providers/LyriaMusic.js +172 -0
  213. package/dist/music/providers/ReplicateMusic.d.ts +31 -0
  214. package/dist/music/providers/ReplicateMusic.js +261 -0
  215. package/dist/neurolink.d.ts +30 -0
  216. package/dist/neurolink.js +323 -77
  217. package/dist/providers/amazonBedrock.d.ts +10 -0
  218. package/dist/providers/amazonBedrock.js +94 -39
  219. package/dist/providers/anthropic.js +55 -7
  220. package/dist/providers/anthropicBaseProvider.js +1 -1
  221. package/dist/providers/azureOpenai.js +66 -17
  222. package/dist/providers/cloudflare.d.ts +35 -0
  223. package/dist/providers/cloudflare.js +173 -0
  224. package/dist/providers/cohere.d.ts +52 -0
  225. package/dist/providers/cohere.js +252 -0
  226. package/dist/providers/deepseek.js +72 -17
  227. package/dist/providers/fireworks.d.ts +33 -0
  228. package/dist/providers/fireworks.js +163 -0
  229. package/dist/providers/googleAiStudio.js +45 -6
  230. package/dist/providers/googleNativeGemini3.d.ts +24 -1
  231. package/dist/providers/googleNativeGemini3.js +173 -21
  232. package/dist/providers/googleVertex.js +173 -17
  233. package/dist/providers/groq.d.ts +33 -0
  234. package/dist/providers/groq.js +180 -0
  235. package/dist/providers/huggingFace.js +9 -8
  236. package/dist/providers/ideogram.d.ts +34 -0
  237. package/dist/providers/ideogram.js +183 -0
  238. package/dist/providers/index.d.ts +13 -0
  239. package/dist/providers/index.js +13 -0
  240. package/dist/providers/jina.d.ts +59 -0
  241. package/dist/providers/jina.js +217 -0
  242. package/dist/providers/llamaCpp.js +14 -46
  243. package/dist/providers/lmStudio.js +14 -47
  244. package/dist/providers/mistral.js +7 -7
  245. package/dist/providers/nvidiaNim.js +160 -19
  246. package/dist/providers/ollama.js +7 -7
  247. package/dist/providers/openAI.d.ts +22 -1
  248. package/dist/providers/openAI.js +181 -0
  249. package/dist/providers/openRouter.js +35 -23
  250. package/dist/providers/openaiCompatible.js +9 -8
  251. package/dist/providers/perplexity.d.ts +33 -0
  252. package/dist/providers/perplexity.js +178 -0
  253. package/dist/providers/recraft.d.ts +34 -0
  254. package/dist/providers/recraft.js +196 -0
  255. package/dist/providers/replicate.d.ts +75 -0
  256. package/dist/providers/replicate.js +402 -0
  257. package/dist/providers/stability.d.ts +37 -0
  258. package/dist/providers/stability.js +190 -0
  259. package/dist/providers/togetherAi.d.ts +33 -0
  260. package/dist/providers/togetherAi.js +175 -0
  261. package/dist/providers/voyage.d.ts +47 -0
  262. package/dist/providers/voyage.js +176 -0
  263. package/dist/providers/xai.d.ts +33 -0
  264. package/dist/providers/xai.js +171 -0
  265. package/dist/telemetry/index.d.ts +1 -1
  266. package/dist/telemetry/index.js +1 -1
  267. package/dist/telemetry/tracers.d.ts +19 -0
  268. package/dist/telemetry/tracers.js +19 -0
  269. package/dist/telemetry/withSpan.d.ts +35 -0
  270. package/dist/telemetry/withSpan.js +103 -0
  271. package/dist/types/avatar.d.ts +143 -0
  272. package/dist/types/avatar.js +19 -0
  273. package/dist/types/cli.d.ts +6 -0
  274. package/dist/types/generate.d.ts +62 -5
  275. package/dist/types/index.d.ts +5 -0
  276. package/dist/types/index.js +7 -0
  277. package/dist/types/middleware.d.ts +27 -0
  278. package/dist/types/multimodal.d.ts +35 -2
  279. package/dist/types/music.d.ts +165 -0
  280. package/dist/types/music.js +20 -0
  281. package/dist/types/providers.d.ts +144 -1
  282. package/dist/types/replicate.d.ts +67 -0
  283. package/dist/types/replicate.js +9 -0
  284. package/dist/types/safeFetch.d.ts +15 -0
  285. package/dist/types/safeFetch.js +6 -0
  286. package/dist/types/stream.d.ts +2 -1
  287. package/dist/types/tools.d.ts +13 -0
  288. package/dist/types/video.d.ts +89 -0
  289. package/dist/types/video.js +14 -0
  290. package/dist/utils/avatarProcessor.d.ts +68 -0
  291. package/dist/utils/avatarProcessor.js +171 -0
  292. package/dist/utils/cloneOptions.d.ts +36 -0
  293. package/dist/utils/cloneOptions.js +61 -0
  294. package/dist/utils/lifecycleCallbacks.d.ts +51 -8
  295. package/dist/utils/lifecycleCallbacks.js +82 -26
  296. package/dist/utils/lifecycleTimeout.d.ts +25 -0
  297. package/dist/utils/lifecycleTimeout.js +38 -0
  298. package/dist/utils/logSanitize.d.ts +49 -0
  299. package/dist/utils/logSanitize.js +169 -0
  300. package/dist/utils/loggingFetch.d.ts +29 -0
  301. package/dist/utils/loggingFetch.js +59 -0
  302. package/dist/utils/messageBuilder.js +43 -25
  303. package/dist/utils/modelChoices.js +236 -3
  304. package/dist/utils/musicProcessor.d.ts +67 -0
  305. package/dist/utils/musicProcessor.js +188 -0
  306. package/dist/utils/optionsConversion.js +3 -2
  307. package/dist/utils/parameterValidation.js +14 -4
  308. package/dist/utils/pricing.js +193 -0
  309. package/dist/utils/providerConfig.d.ts +55 -0
  310. package/dist/utils/providerConfig.js +224 -0
  311. package/dist/utils/safeFetch.d.ts +26 -0
  312. package/dist/utils/safeFetch.js +82 -0
  313. package/dist/utils/sizeGuard.d.ts +34 -0
  314. package/dist/utils/sizeGuard.js +44 -0
  315. package/dist/utils/ssrfGuard.d.ts +52 -0
  316. package/dist/utils/ssrfGuard.js +410 -0
  317. package/dist/utils/videoProcessor.d.ts +60 -0
  318. package/dist/utils/videoProcessor.js +200 -0
  319. package/dist/voice/providers/FishAudioTTS.d.ts +27 -0
  320. package/dist/voice/providers/FishAudioTTS.js +182 -0
  321. package/dist/workflow/core/ensembleExecutor.js +26 -9
  322. package/package.json +32 -5
@@ -1,6 +1,6 @@
1
1
  import { ProviderFactory } from "./providerFactory.js";
2
2
  import { logger } from "../utils/logger.js";
3
- import { AIProviderName, GoogleAIModels, OpenAIModels, AnthropicModels, VertexModels, MistralModels, OllamaModels, LiteLLMModels, HuggingFaceModels, DeepSeekModels, NvidiaNimModels, } from "../constants/enums.js";
3
+ import { AIProviderName, GoogleAIModels, OpenAIModels, AnthropicModels, VertexModels, MistralModels, OllamaModels, LiteLLMModels, HuggingFaceModels, DeepSeekModels, NvidiaNimModels, OpenRouterModels, XaiModels, GroqModels, CohereModels, TogetherAIModels, FireworksModels, PerplexityModels, CloudflareModels, VoyageModels, JinaModels, StabilityModels, IdeogramModels, RecraftModels, ReplicateModels, } from "../constants/enums.js";
4
4
  /**
5
5
  * Provider Registry - registers all providers with the factory
6
6
  * This is where we migrate providers one by one to the new pattern
@@ -136,10 +136,12 @@ export class ProviderRegistry {
136
136
  const { OpenRouterProvider } = await import("../providers/openRouter.js");
137
137
  return new OpenRouterProvider(modelName, sdk, undefined, openrouterCreds);
138
138
  },
139
- // Default updated from claude-3-5-sonnet (sunset by OpenRouter)
140
- // to claude-sonnet-4.5. Must match getDefaultOpenRouterModel()
141
- // in src/lib/providers/openRouter.ts.
142
- process.env.OPENROUTER_MODEL || "anthropic/claude-sonnet-4.5", ["openrouter", "or"]);
139
+ // OpenRouter retired `anthropic/claude-3-5-sonnet` in late 2025 — see
140
+ // src/lib/providers/openRouter.ts and src/lib/utils/modelChoices.ts
141
+ // for the rationale. Keep the three defaults aligned at the new
142
+ // model (claude-sonnet-4.5) so the registry doesn't override the
143
+ // provider's getDefault.
144
+ process.env.OPENROUTER_MODEL || OpenRouterModels.CLAUDE_SONNET_4_5, ["openrouter", "or"]);
143
145
  // Register Amazon SageMaker provider
144
146
  ProviderFactory.registerProvider(AIProviderName.SAGEMAKER, async (modelName, _providerName, _sdk, region, credentials) => {
145
147
  const sagemakerCreds = credentials;
@@ -170,6 +172,86 @@ export class ProviderRegistry {
170
172
  const { LlamaCppProvider } = await import("../providers/llamaCpp.js");
171
173
  return new LlamaCppProvider(modelName, sdk, undefined, llamaCppCreds);
172
174
  }, process.env.LLAMACPP_MODEL || undefined, ["llamacpp", "llama.cpp", "llama-cpp"]);
175
+ // Register xAI Grok provider
176
+ ProviderFactory.registerProvider(AIProviderName.XAI, async (modelName, _providerName, sdk, _region, credentials) => {
177
+ const xaiCreds = credentials;
178
+ const { XaiProvider } = await import("../providers/xai.js");
179
+ return new XaiProvider(modelName, sdk, undefined, xaiCreds);
180
+ }, process.env.XAI_MODEL || XaiModels.GROK_3, ["xai", "grok"]);
181
+ // Register Groq provider
182
+ ProviderFactory.registerProvider(AIProviderName.GROQ, async (modelName, _providerName, sdk, _region, credentials) => {
183
+ const groqCreds = credentials;
184
+ const { GroqProvider } = await import("../providers/groq.js");
185
+ return new GroqProvider(modelName, sdk, undefined, groqCreds);
186
+ }, process.env.GROQ_MODEL || GroqModels.LLAMA_3_3_70B_VERSATILE, ["groq"]);
187
+ // Register Cohere provider
188
+ ProviderFactory.registerProvider(AIProviderName.COHERE, async (modelName, _providerName, sdk, _region, credentials) => {
189
+ const cohereCreds = credentials;
190
+ const { CohereProvider } = await import("../providers/cohere.js");
191
+ return new CohereProvider(modelName, sdk, undefined, cohereCreds);
192
+ }, process.env.COHERE_MODEL || CohereModels.COMMAND_R_PLUS, ["cohere"]);
193
+ // Register Together AI provider
194
+ ProviderFactory.registerProvider(AIProviderName.TOGETHER_AI, async (modelName, _providerName, sdk, _region, credentials) => {
195
+ const togetherCreds = credentials;
196
+ const { TogetherAIProvider } = await import("../providers/togetherAi.js");
197
+ return new TogetherAIProvider(modelName, sdk, undefined, togetherCreds);
198
+ }, process.env.TOGETHER_MODEL ||
199
+ TogetherAIModels.LLAMA_3_3_70B_INSTRUCT_TURBO, ["together-ai", "together"]);
200
+ // Register Fireworks AI provider
201
+ ProviderFactory.registerProvider(AIProviderName.FIREWORKS, async (modelName, _providerName, sdk, _region, credentials) => {
202
+ const fireworksCreds = credentials;
203
+ const { FireworksProvider } = await import("../providers/fireworks.js");
204
+ return new FireworksProvider(modelName, sdk, undefined, fireworksCreds);
205
+ }, process.env.FIREWORKS_MODEL || FireworksModels.DEEPSEEK_V4_PRO, ["fireworks"]);
206
+ // Register Perplexity provider
207
+ ProviderFactory.registerProvider(AIProviderName.PERPLEXITY, async (modelName, _providerName, sdk, _region, credentials) => {
208
+ const perplexityCreds = credentials;
209
+ const { PerplexityProvider } = await import("../providers/perplexity.js");
210
+ return new PerplexityProvider(modelName, sdk, undefined, perplexityCreds);
211
+ }, process.env.PERPLEXITY_MODEL || PerplexityModels.SONAR, ["perplexity", "pplx"]);
212
+ // Register Cloudflare Workers AI provider
213
+ ProviderFactory.registerProvider(AIProviderName.CLOUDFLARE, async (modelName, _providerName, sdk, _region, credentials) => {
214
+ const cloudflareCreds = credentials;
215
+ const { CloudflareProvider } = await import("../providers/cloudflare.js");
216
+ return new CloudflareProvider(modelName, sdk, undefined, cloudflareCreds);
217
+ }, process.env.CLOUDFLARE_MODEL || CloudflareModels.LLAMA_3_3_70B_FAST, ["cloudflare", "workers-ai", "cf-ai"]);
218
+ // Register Voyage AI embeddings provider
219
+ ProviderFactory.registerProvider(AIProviderName.VOYAGE, async (modelName, _providerName, sdk, _region, credentials) => {
220
+ const voyageCreds = credentials;
221
+ const { VoyageProvider } = await import("../providers/voyage.js");
222
+ return new VoyageProvider(modelName, sdk, undefined, voyageCreds);
223
+ }, process.env.VOYAGE_MODEL || VoyageModels.VOYAGE_3_5, ["voyage", "voyage-ai"]);
224
+ // Register Jina AI embeddings + reranking provider
225
+ ProviderFactory.registerProvider(AIProviderName.JINA, async (modelName, _providerName, sdk, _region, credentials) => {
226
+ const jinaCreds = credentials;
227
+ const { JinaProvider } = await import("../providers/jina.js");
228
+ return new JinaProvider(modelName, sdk, undefined, jinaCreds);
229
+ }, process.env.JINA_MODEL || JinaModels.JINA_EMBEDDINGS_V3, ["jina", "jina-ai"]);
230
+ // Register Stability AI image-gen provider
231
+ ProviderFactory.registerProvider(AIProviderName.STABILITY, async (modelName, _providerName, sdk, _region, credentials) => {
232
+ const stabilityCreds = credentials;
233
+ const { StabilityProvider } = await import("../providers/stability.js");
234
+ return new StabilityProvider(modelName, sdk, undefined, stabilityCreds);
235
+ }, process.env.STABILITY_MODEL || StabilityModels.STABLE_IMAGE_ULTRA, ["stability", "stability-ai", "sd"]);
236
+ // Register Ideogram image-gen provider
237
+ ProviderFactory.registerProvider(AIProviderName.IDEOGRAM, async (modelName, _providerName, sdk, _region, credentials) => {
238
+ const ideogramCreds = credentials;
239
+ const { IdeogramProvider } = await import("../providers/ideogram.js");
240
+ return new IdeogramProvider(modelName, sdk, undefined, ideogramCreds);
241
+ }, process.env.IDEOGRAM_MODEL || IdeogramModels.IDEOGRAM_V3, ["ideogram"]);
242
+ // Register Replicate LLM provider (multi-modal — also serves video /
243
+ // avatar / music handlers via dedicated processors registered below)
244
+ ProviderFactory.registerProvider(AIProviderName.REPLICATE, async (modelName, _providerName, sdk, _region, credentials) => {
245
+ const replicateCreds = credentials;
246
+ const { ReplicateProvider } = await import("../providers/replicate.js");
247
+ return new ReplicateProvider(modelName, sdk, undefined, replicateCreds);
248
+ }, process.env.REPLICATE_MODEL || ReplicateModels.LLAMA_3_70B_INSTRUCT, ["replicate"]);
249
+ // Register Recraft image-gen provider
250
+ ProviderFactory.registerProvider(AIProviderName.RECRAFT, async (modelName, _providerName, sdk, _region, credentials) => {
251
+ const recraftCreds = credentials;
252
+ const { RecraftProvider } = await import("../providers/recraft.js");
253
+ return new RecraftProvider(modelName, sdk, undefined, recraftCreds);
254
+ }, process.env.RECRAFT_MODEL || RecraftModels.RECRAFT_V3, ["recraft"]);
173
255
  logger.debug("All AI providers registered successfully");
174
256
  // ===== TTS HANDLER REGISTRATION =====
175
257
  try {
@@ -307,6 +389,121 @@ export class ProviderRegistry {
307
389
  : String(realtimeError),
308
390
  });
309
391
  }
392
+ // ===== VIDEO HANDLER REGISTRATION =====
393
+ try {
394
+ const { VideoProcessor } = await import("../utils/videoProcessor.js");
395
+ try {
396
+ const { VertexVideoHandler } = await import("../adapters/video/vertexVideoHandler.js");
397
+ VideoProcessor.registerHandler("vertex", new VertexVideoHandler());
398
+ }
399
+ catch (err) {
400
+ logger.debug(`[ProviderRegistry] vertex video registration skipped: ${err instanceof Error ? err.message : String(err)}`);
401
+ }
402
+ try {
403
+ const { KlingVideoHandler } = await import("../adapters/video/klingVideoHandler.js");
404
+ VideoProcessor.registerHandler("kling", new KlingVideoHandler());
405
+ }
406
+ catch (err) {
407
+ logger.debug(`[ProviderRegistry] kling video registration skipped: ${err instanceof Error ? err.message : String(err)}`);
408
+ }
409
+ try {
410
+ const { RunwayVideoHandler } = await import("../adapters/video/runwayVideoHandler.js");
411
+ VideoProcessor.registerHandler("runway", new RunwayVideoHandler());
412
+ }
413
+ catch (err) {
414
+ logger.debug(`[ProviderRegistry] runway video registration skipped: ${err instanceof Error ? err.message : String(err)}`);
415
+ }
416
+ try {
417
+ const { ReplicateVideoHandler } = await import("../adapters/video/replicateVideoHandler.js");
418
+ VideoProcessor.registerHandler("replicate", new ReplicateVideoHandler());
419
+ }
420
+ catch (err) {
421
+ logger.debug(`[ProviderRegistry] replicate video registration skipped: ${err instanceof Error ? err.message : String(err)}`);
422
+ }
423
+ logger.debug("Video handlers registered");
424
+ }
425
+ catch (err) {
426
+ logger.warn(`[ProviderRegistry] video registration block failed: ${err instanceof Error ? err.message : String(err)}`);
427
+ }
428
+ // ===== AVATAR HANDLER REGISTRATION =====
429
+ try {
430
+ const { AvatarProcessor } = await import("../utils/avatarProcessor.js");
431
+ try {
432
+ const { DIDAvatar } = await import("../avatar/providers/DIDAvatar.js");
433
+ AvatarProcessor.registerHandler("d-id", new DIDAvatar());
434
+ }
435
+ catch (err) {
436
+ logger.debug(`[ProviderRegistry] d-id avatar registration skipped: ${err instanceof Error ? err.message : String(err)}`);
437
+ }
438
+ try {
439
+ const { ReplicateAvatar } = await import("../avatar/providers/ReplicateAvatar.js");
440
+ const replicateAvatar = new ReplicateAvatar();
441
+ AvatarProcessor.registerHandler("replicate", replicateAvatar);
442
+ AvatarProcessor.registerHandler("musetalk", replicateAvatar);
443
+ }
444
+ catch (err) {
445
+ logger.debug(`[ProviderRegistry] replicate avatar registration skipped: ${err instanceof Error ? err.message : String(err)}`);
446
+ }
447
+ try {
448
+ const { HeyGenAvatar } = await import("../avatar/providers/HeyGenAvatar.js");
449
+ AvatarProcessor.registerHandler("heygen", new HeyGenAvatar());
450
+ }
451
+ catch (err) {
452
+ logger.debug(`[ProviderRegistry] heygen avatar registration skipped: ${err instanceof Error ? err.message : String(err)}`);
453
+ }
454
+ logger.debug("Avatar handlers registered");
455
+ }
456
+ catch (avatarError) {
457
+ logger.warn("Failed to register Avatar handlers - Avatar functionality will be unavailable", {
458
+ error: avatarError instanceof Error
459
+ ? avatarError.message
460
+ : String(avatarError),
461
+ });
462
+ }
463
+ // ===== MUSIC HANDLER REGISTRATION =====
464
+ try {
465
+ const { MusicProcessor } = await import("../utils/musicProcessor.js");
466
+ try {
467
+ const { BeatovenMusic } = await import("../music/providers/BeatovenMusic.js");
468
+ MusicProcessor.registerHandler("beatoven", new BeatovenMusic());
469
+ }
470
+ catch (err) {
471
+ logger.debug(`[ProviderRegistry] beatoven music registration skipped: ${err instanceof Error ? err.message : String(err)}`);
472
+ }
473
+ try {
474
+ const { ReplicateMusic } = await import("../music/providers/ReplicateMusic.js");
475
+ const replicateMusic = new ReplicateMusic();
476
+ MusicProcessor.registerHandler("replicate", replicateMusic);
477
+ MusicProcessor.registerHandler("musicgen", replicateMusic);
478
+ }
479
+ catch (err) {
480
+ logger.debug(`[ProviderRegistry] replicate music registration skipped: ${err instanceof Error ? err.message : String(err)}`);
481
+ }
482
+ try {
483
+ const { ElevenLabsMusic } = await import("../music/providers/ElevenLabsMusic.js");
484
+ const elevenLabsMusic = new ElevenLabsMusic();
485
+ MusicProcessor.registerHandler("elevenlabs-music", elevenLabsMusic);
486
+ MusicProcessor.registerHandler("elevenlabs-sound", elevenLabsMusic);
487
+ }
488
+ catch (err) {
489
+ logger.debug(`[ProviderRegistry] elevenlabs-music registration skipped: ${err instanceof Error ? err.message : String(err)}`);
490
+ }
491
+ try {
492
+ const { LyriaMusic } = await import("../music/providers/LyriaMusic.js");
493
+ MusicProcessor.registerHandler("lyria", new LyriaMusic());
494
+ }
495
+ catch (err) {
496
+ logger.debug(`[ProviderRegistry] lyria music registration skipped: ${err instanceof Error ? err.message : String(err)}`);
497
+ }
498
+ logger.debug("Music handlers registered");
499
+ }
500
+ catch (musicError) {
501
+ logger.warn("Failed to register Music handlers - Music functionality will be unavailable", {
502
+ error: musicError instanceof Error
503
+ ? musicError.message
504
+ : String(musicError),
505
+ });
506
+ }
310
507
  // Mark registered ONLY after all blocks (AI + voice) attempted, so a
311
508
  // subsequent registerAllProviders() call does not short-circuit when an
312
509
  // optional handler block silently failed.
@@ -374,25 +374,53 @@ function validateContentPlan(plan, expectedSlides) {
374
374
  }
375
375
  /**
376
376
  * Parse AI response to extract JSON
377
- * Handles markdown code blocks and raw JSON
377
+ * Handles markdown code blocks (anywhere in the response), preambles like
378
+ * "Here is the JSON:", and raw JSON.
378
379
  */
379
380
  function parseAIResponse(content) {
380
- let jsonString = content.trim();
381
- // Strip markdown code fences if present
382
- if (jsonString.startsWith("```")) {
383
- jsonString = jsonString
384
- .replace(/^```(?:json)?\s*\n?/, "")
385
- .replace(/\n?```\s*$/, "");
381
+ const trimmed = content.trim();
382
+ const candidates = [];
383
+ // 1) Extract first ```json ... ``` block from anywhere in the response.
384
+ const fenceBlock = trimmed.match(/```(?:json)?\s*\n?([\s\S]*?)\n?```/);
385
+ if (fenceBlock && fenceBlock[1]) {
386
+ candidates.push(fenceBlock[1].trim());
386
387
  }
387
- try {
388
- return JSON.parse(jsonString);
388
+ // 2) Strict leading-fence strip (legacy behaviour).
389
+ if (trimmed.startsWith("```")) {
390
+ candidates.push(trimmed.replace(/^```(?:json)?\s*\n?/, "").replace(/\n?```\s*$/, ""));
389
391
  }
390
- catch (error) {
391
- throw new PPTError(`Failed to parse AI response as JSON: ${error instanceof Error ? error.message : String(error)}`, PPT_ERROR_CODES.INVALID_AI_RESPONSE, {
392
- contentPreview: content.substring(0, 500),
393
- parseError: error instanceof Error ? error.message : String(error),
394
- });
392
+ // 3) Slice from first '{' or '[' to its matching close — handles preambles
393
+ // like "Here is the presentation plan:\n{ ... }".
394
+ const firstObj = trimmed.indexOf("{");
395
+ const firstArr = trimmed.indexOf("[");
396
+ const firstStruct = firstObj === -1
397
+ ? firstArr
398
+ : firstArr === -1
399
+ ? firstObj
400
+ : Math.min(firstObj, firstArr);
401
+ if (firstStruct > 0) {
402
+ const openChar = trimmed[firstStruct];
403
+ const closeChar = openChar === "{" ? "}" : "]";
404
+ const lastClose = trimmed.lastIndexOf(closeChar);
405
+ if (lastClose > firstStruct) {
406
+ candidates.push(trimmed.slice(firstStruct, lastClose + 1));
407
+ }
395
408
  }
409
+ // 4) Raw input as last resort.
410
+ candidates.push(trimmed);
411
+ const errors = [];
412
+ for (const candidate of candidates) {
413
+ try {
414
+ return JSON.parse(candidate);
415
+ }
416
+ catch (err) {
417
+ errors.push(err instanceof Error ? err.message : String(err));
418
+ }
419
+ }
420
+ throw new PPTError(`Failed to parse AI response as JSON: ${errors[errors.length - 1]}`, PPT_ERROR_CODES.INVALID_AI_RESPONSE, {
421
+ contentPreview: content.substring(0, 500),
422
+ parseError: errors.join(" | "),
423
+ });
396
424
  }
397
425
  // ============================================================================
398
426
  // MAIN CONTENT PLANNING FUNCTION
@@ -45,6 +45,14 @@ export { isAbortError } from "./utils/errorHandling.js";
45
45
  export { calculateCost, hasPricing } from "./utils/pricing.js";
46
46
  export { getAvailableProviders, getBestProvider, isValidProvider, } from "./utils/providerUtils.js";
47
47
  export { TTSProcessor } from "./utils/ttsProcessor.js";
48
+ export { TTS_ERROR_CODES, TTSError } from "./utils/ttsProcessor.js";
49
+ export { VideoProcessor } from "./utils/videoProcessor.js";
50
+ export { VIDEO_ERROR_CODES, VideoError } from "./utils/videoProcessor.js";
51
+ export { AvatarProcessor } from "./utils/avatarProcessor.js";
52
+ export { AVATAR_ERROR_CODES, AvatarError } from "./utils/avatarProcessor.js";
53
+ export { MusicProcessor } from "./utils/musicProcessor.js";
54
+ export { MUSIC_ERROR_CODES, MusicError } from "./utils/musicProcessor.js";
55
+ export { ProviderRegistry } from "./factories/providerRegistry.js";
48
56
  import { NeuroLink } from "./neurolink.js";
49
57
  export { NeuroLink };
50
58
  export { buildObservabilityConfigFromEnv } from "./utils/observabilityHelpers.js";
@@ -239,7 +247,7 @@ export declare function getTelemetryStatus(): Promise<{
239
247
  * });
240
248
  * ```
241
249
  */
242
- export { Evaluator, EvaluationAggregator, EvaluatorFactory, getEvaluatorFactory, getEvaluatorRegistry, evaluationErrors, isRetryableEvaluationError, isEvaluationError, createEvaluationFailedError, createParseError, createStrategyNotFoundError, createProviderError, createMaxRetriesExceededError, createBatchEvaluationError, createConfigurationError, contextToErrorContext, createLangfuseAdapter, createMockLangfuseClient, startLangfuseAdapter, createConsoleLoggerHook, createMetricsCollectorHook, ObservabilityHooks, observabilityHooks, pipelineToSpanAttributes, scorerToSpanAttributes, createAndInitializePipeline, createPipeline, EvaluationPipeline, PipelineBuilder, Pipelines, CODE_GENERATION_PIPELINE, COMPREHENSIVE_PIPELINE, CUSTOMER_SUPPORT_PIPELINE, getPreset, getPresetNames, MINIMAL_PIPELINE, QUALITY_PIPELINE, RAG_PIPELINE, SAFETY_PIPELINE, SUMMARIZATION_PIPELINE, BatchStrategy, createBatchStrategy, evaluateBatch, streamBatchEvaluation, createSamplingStrategy, DEFAULT_SAMPLING_CONFIG, SamplingStrategies, SamplingStrategy, createMetricsCollector, globalMetricsCollector, MetricsCollector, createReportGenerator, ReportGenerator, Reports, BaseScorer, DEFAULT_SCORE_SCALE as EVAL_DEFAULT_SCORE_SCALE, composeScorers, createConditionalScorer, createFunctionScorer, createInvertedScorer, createKeywordScorer, createRegexScorer, createScorerMetadata, createSimpleLengthScorer, AnswerRelevancyScorer, createAnswerRelevancyScorer, BaseLLMScorer, DEFAULT_LLM_SCORER_CONFIG, BiasDetectionScorer, createBiasDetectionScorer, ContextPrecisionScorer, createContextPrecisionScorer, ContextRelevancyScorer, createContextRelevancyScorer, createFaithfulnessScorer, FaithfulnessScorer, createHallucinationScorer, HallucinationScorer, createPromptAlignmentScorer, PromptAlignmentScorer, createSummarizationScorer, SummarizationScorer, createToneConsistencyScorer, ToneConsistencyScorer, createToxicityScorer, ToxicityScorer, BaseRuleScorer, DEFAULT_RULE_SCORER_CONFIG, createContentSimilarityScorer, createFormatScorer, FormatScorerPresets, createKeywordCoverageScorer, createLengthScorer, LengthScorerPresets, ScorerBuilder, Scorers, ScorerRegistry, } from "./evaluation/index.js";
250
+ export { Evaluator, EvaluationAggregator, EvaluatorFactory, getEvaluatorFactory, getEvaluatorRegistry, evaluationErrors, isRetryableEvaluationError, isEvaluationError, createEvaluationFailedError, createParseError, createStrategyNotFoundError, createProviderError, createMaxRetriesExceededError, createBatchEvaluationError, createConfigurationError, contextToErrorContext, createLangfuseAdapter, createMockLangfuseClient, startLangfuseAdapter, createConsoleLoggerHook, createMetricsCollectorHook, ObservabilityHooks, observabilityHooks, pipelineToSpanAttributes, scorerToSpanAttributes, createAndInitializePipeline, createPipeline, EvaluationPipeline, PipelineBuilder, Pipelines, CODE_GENERATION_PIPELINE, COMPREHENSIVE_PIPELINE, CUSTOMER_SUPPORT_PIPELINE, getPreset, getPresetNames, MINIMAL_PIPELINE, QUALITY_PIPELINE, RAG_PIPELINE, SAFETY_PIPELINE, SUMMARIZATION_PIPELINE, BatchStrategy, createBatchStrategy, evaluateBatch, streamBatchEvaluation, createSamplingStrategy, DEFAULT_SAMPLING_CONFIG, SamplingStrategies, SamplingStrategy, createMetricsCollector, globalMetricsCollector, MetricsCollector, createReportGenerator, ReportGenerator, Reports, BaseScorer, DEFAULT_SCORE_SCALE as EVAL_DEFAULT_SCORE_SCALE, composeScorers, createConditionalScorer, createFunctionScorer, createInvertedScorer, createKeywordScorer, createRegexScorer, createScorerMetadata, createSimpleLengthScorer, AnswerRelevancyScorer, createAnswerRelevancyScorer, BaseLLMScorer, DEFAULT_LLM_SCORER_CONFIG, BiasDetectionScorer, createBiasDetectionScorer, ContextPrecisionScorer, createContextPrecisionScorer, ContextRelevancyScorer, createContextRelevancyScorer, createFaithfulnessScorer, FaithfulnessScorer, createHallucinationScorer, HallucinationScorer, createPromptAlignmentScorer, PromptAlignmentScorer, createSummarizationScorer, SummarizationScorer, createToneConsistencyScorer, ToneConsistencyScorer, createToxicityScorer, ToxicityScorer, BaseRuleScorer, DEFAULT_RULE_SCORER_CONFIG, createContentSimilarityScorer, createFormatScorer, FormatScorerPresets, createKeywordCoverageScorer, createLengthScorer, LengthScorerPresets, ScorerBuilder, Scorers, ScorerRegistry, RAGASEvaluator, RetryManager, } from "./evaluation/index.js";
243
251
  /**
244
252
  * Legacy generateText function for backward compatibility.
245
253
  *
package/dist/lib/index.js CHANGED
@@ -71,6 +71,19 @@ export { calculateCost, hasPricing } from "./utils/pricing.js";
71
71
  export { getAvailableProviders, getBestProvider, isValidProvider, } from "./utils/providerUtils.js";
72
72
  // TTS utilities
73
73
  export { TTSProcessor } from "./utils/ttsProcessor.js";
74
+ export { TTS_ERROR_CODES, TTSError } from "./utils/ttsProcessor.js";
75
+ // Video utilities
76
+ export { VideoProcessor } from "./utils/videoProcessor.js";
77
+ export { VIDEO_ERROR_CODES, VideoError } from "./utils/videoProcessor.js";
78
+ // Avatar / lip-sync utilities
79
+ export { AvatarProcessor } from "./utils/avatarProcessor.js";
80
+ export { AVATAR_ERROR_CODES, AvatarError } from "./utils/avatarProcessor.js";
81
+ // Music utilities
82
+ export { MusicProcessor } from "./utils/musicProcessor.js";
83
+ export { MUSIC_ERROR_CODES, MusicError } from "./utils/musicProcessor.js";
84
+ // Provider registry (for tests, advanced consumers, and tools that need to
85
+ // invoke registerAllProviders() outside of constructing a NeuroLink instance)
86
+ export { ProviderRegistry } from "./factories/providerRegistry.js";
74
87
  // Main NeuroLink wrapper class and diagnostic types
75
88
  import { NeuroLink } from "./neurolink.js";
76
89
  export { NeuroLink };
@@ -386,7 +399,9 @@ AnswerRelevancyScorer, createAnswerRelevancyScorer, BaseLLMScorer, DEFAULT_LLM_S
386
399
  // Scorers - Rule-based
387
400
  BaseRuleScorer, DEFAULT_RULE_SCORER_CONFIG, createContentSimilarityScorer, createFormatScorer, FormatScorerPresets, createKeywordCoverageScorer, createLengthScorer, LengthScorerPresets,
388
401
  // Scorers - Builder & Registry
389
- ScorerBuilder, Scorers, ScorerRegistry, } from "./evaluation/index.js";
402
+ ScorerBuilder, Scorers, ScorerRegistry,
403
+ // RAGAS evaluator + retry manager (legacy + still-supported classes).
404
+ RAGASEvaluator, RetryManager, } from "./evaluation/index.js";
390
405
  // ============================================================================
391
406
  // BACKWARD COMPATIBILITY: Legacy generateText Function Exports
392
407
  // ============================================================================
@@ -10,6 +10,31 @@
10
10
  import { logger } from "../../utils/logger.js";
11
11
  import { isRecoverableError } from "../../utils/errorHandling.js";
12
12
  import { fireOnErrorOnce } from "../../utils/lifecycleCallbacks.js";
13
+ /**
14
+ * Normalize a thrown value to an `Error` while preserving structured
15
+ * fields (`code`, `status`, `statusCode`, `retryAfter`, `details`,
16
+ * `cause`, etc.) that downstream retry logic and SDK callers depend on.
17
+ *
18
+ * Previously the lifecycle middleware did
19
+ * `error instanceof Error ? error : new Error(String(error))`, which
20
+ * silently dropped every custom property on non-Error throws — so a
21
+ * provider's `{ code: "RATE_LIMITED", retryAfter: 30 }` rejection
22
+ * surfaced to consumers as a bare `Error("[object Object]")`.
23
+ */
24
+ function normalizeToError(error) {
25
+ if (error instanceof Error) {
26
+ return error;
27
+ }
28
+ if (typeof error === "object" && error !== null) {
29
+ const obj = error;
30
+ const msg = typeof obj.message === "string" ? obj.message : String(error);
31
+ // Object.assign keeps Error's prototype chain (including the
32
+ // captured stack from this synthetic Error's construction) while
33
+ // copying enumerable fields from the original throw.
34
+ return Object.assign(new Error(msg), obj);
35
+ }
36
+ return new Error(String(error));
37
+ }
13
38
  export function createLifecycleMiddleware(config = {}) {
14
39
  const metadata = {
15
40
  id: "lifecycle",
@@ -51,13 +76,18 @@ export function createLifecycleMiddleware(config = {}) {
51
76
  return result;
52
77
  }
53
78
  catch (error) {
54
- const err = error instanceof Error ? error : new Error(String(error));
55
- fireOnErrorOnce(config.onError, error, {
79
+ const err = normalizeToError(error);
80
+ // fireOnErrorOnce stamps a Symbol on `err` so the SDK-level catch
81
+ // in neurolink.ts (and baseProvider.handleProviderError) skips
82
+ // its own onError fire for the same logical failure.
83
+ fireOnErrorOnce(config.onError, err, {
56
84
  error: err,
57
85
  duration: Date.now() - startTime,
58
86
  recoverable: isRecoverableError(err),
59
87
  });
60
- throw error;
88
+ // Rethrow the normalized err (not the raw `error`) so the
89
+ // fired-mark and any preserved structured fields propagate.
90
+ throw err;
61
91
  }
62
92
  },
63
93
  wrapStream: async ({ doStream, }) => {
@@ -93,13 +123,13 @@ export function createLifecycleMiddleware(config = {}) {
93
123
  controller.enqueue(chunk);
94
124
  }
95
125
  catch (error) {
96
- const err = error instanceof Error ? error : new Error(String(error));
97
- fireOnErrorOnce(config.onError, error, {
126
+ const err = normalizeToError(error);
127
+ fireOnErrorOnce(config.onError, err, {
98
128
  error: err,
99
129
  duration: Date.now() - startTime,
100
130
  recoverable: isRecoverableError(err),
101
131
  });
102
- throw error;
132
+ throw err;
103
133
  }
104
134
  },
105
135
  flush() {
@@ -125,13 +155,13 @@ export function createLifecycleMiddleware(config = {}) {
125
155
  };
126
156
  }
127
157
  catch (error) {
128
- const err = error instanceof Error ? error : new Error(String(error));
129
- fireOnErrorOnce(config.onError, error, {
158
+ const err = normalizeToError(error);
159
+ fireOnErrorOnce(config.onError, err, {
130
160
  error: err,
131
161
  duration: Date.now() - startTime,
132
162
  recoverable: isRecoverableError(err),
133
163
  });
134
- throw error;
164
+ throw err;
135
165
  }
136
166
  },
137
167
  };
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Music Module — Music Generation Integration for NeuroLink
3
+ *
4
+ * Provides music-generation capability across providers (Beatoven,
5
+ * ElevenLabs Music, Lyria, Replicate-hosted MusicGen / Riffusion).
6
+ *
7
+ * Use `MusicProcessor.generate(provider, options)` to dispatch to the
8
+ * registered handler for `provider`.
9
+ *
10
+ * @module music
11
+ */
12
+ export { MUSIC_ERROR_CODES, MusicError, MusicProcessor, } from "../utils/musicProcessor.js";
13
+ export { BeatovenMusic, BeatovenMusic as BeatovenMusicHandler, } from "./providers/BeatovenMusic.js";
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Music Module — Music Generation Integration for NeuroLink
3
+ *
4
+ * Provides music-generation capability across providers (Beatoven,
5
+ * ElevenLabs Music, Lyria, Replicate-hosted MusicGen / Riffusion).
6
+ *
7
+ * Use `MusicProcessor.generate(provider, options)` to dispatch to the
8
+ * registered handler for `provider`.
9
+ *
10
+ * @module music
11
+ */
12
+ export { MUSIC_ERROR_CODES, MusicError, MusicProcessor, } from "../utils/musicProcessor.js";
13
+ export { BeatovenMusic, BeatovenMusic as BeatovenMusicHandler, } from "./providers/BeatovenMusic.js";
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Beatoven.ai Music Generation Handler
3
+ *
4
+ * Async track-composition API. Submits a compose-track request, polls the
5
+ * task status, and downloads the resulting audio.
6
+ *
7
+ * @module music/providers/BeatovenMusic
8
+ * @see https://www.beatoven.ai/api-docs
9
+ */
10
+ import type { MusicAudioFormat, MusicHandler, MusicOptions, MusicResult } from "../../types/index.js";
11
+ /**
12
+ * Beatoven.ai Music Generation Handler.
13
+ *
14
+ * Beatoven is a royalty-free music generation API tuned for
15
+ * background / cinematic / brand music. Tracks are composed
16
+ * asynchronously: submit a prompt, poll the task, then download.
17
+ */
18
+ export declare class BeatovenMusic implements MusicHandler {
19
+ readonly maxDurationSeconds = 300;
20
+ readonly supportedFormats: readonly MusicAudioFormat[];
21
+ readonly supportedGenres: readonly string[];
22
+ private readonly apiKey;
23
+ private readonly baseUrl;
24
+ constructor(apiKey?: string);
25
+ isConfigured(): boolean;
26
+ generate(options: MusicOptions): Promise<MusicResult>;
27
+ private submitCompose;
28
+ private pollUntilComposed;
29
+ private fetchTaskStatus;
30
+ private downloadTrack;
31
+ }