@juspay/neurolink 9.2.0 → 9.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 (433) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +60 -38
  3. package/dist/agent/directTools.d.ts +8 -8
  4. package/dist/cli/commands/rag.d.ts +19 -0
  5. package/dist/cli/commands/rag.js +756 -0
  6. package/dist/cli/factories/commandFactory.js +146 -83
  7. package/dist/cli/index.js +1 -0
  8. package/dist/cli/parser.js +4 -1
  9. package/dist/core/baseProvider.d.ts +43 -30
  10. package/dist/core/baseProvider.js +98 -138
  11. package/dist/core/conversationMemoryFactory.d.ts +2 -2
  12. package/dist/core/conversationMemoryFactory.js +2 -2
  13. package/dist/core/conversationMemoryInitializer.d.ts +1 -2
  14. package/dist/core/conversationMemoryInitializer.js +2 -2
  15. package/dist/core/infrastructure/baseError.d.ts +21 -0
  16. package/dist/core/infrastructure/baseError.js +22 -0
  17. package/dist/core/infrastructure/baseFactory.d.ts +21 -0
  18. package/dist/core/infrastructure/baseFactory.js +54 -0
  19. package/dist/core/infrastructure/baseRegistry.d.ts +21 -0
  20. package/dist/core/infrastructure/baseRegistry.js +49 -0
  21. package/dist/core/infrastructure/index.d.ts +5 -0
  22. package/dist/core/infrastructure/index.js +5 -0
  23. package/dist/core/infrastructure/retry.d.ts +7 -0
  24. package/dist/core/infrastructure/retry.js +20 -0
  25. package/dist/core/infrastructure/typedEventEmitter.d.ts +8 -0
  26. package/dist/core/infrastructure/typedEventEmitter.js +23 -0
  27. package/dist/core/redisConversationMemoryManager.d.ts +1 -6
  28. package/dist/core/redisConversationMemoryManager.js +7 -19
  29. package/dist/factories/providerFactory.d.ts +5 -3
  30. package/dist/factories/providerFactory.js +31 -24
  31. package/dist/index.d.ts +81 -12
  32. package/dist/index.js +105 -36
  33. package/dist/lib/core/baseProvider.d.ts +43 -30
  34. package/dist/lib/core/baseProvider.js +98 -138
  35. package/dist/lib/core/conversationMemoryFactory.d.ts +2 -2
  36. package/dist/lib/core/conversationMemoryFactory.js +2 -2
  37. package/dist/lib/core/conversationMemoryInitializer.d.ts +1 -2
  38. package/dist/lib/core/conversationMemoryInitializer.js +2 -2
  39. package/dist/lib/core/infrastructure/baseError.d.ts +21 -0
  40. package/dist/lib/core/infrastructure/baseError.js +23 -0
  41. package/dist/lib/core/infrastructure/baseFactory.d.ts +21 -0
  42. package/dist/lib/core/infrastructure/baseFactory.js +55 -0
  43. package/dist/lib/core/infrastructure/baseRegistry.d.ts +21 -0
  44. package/dist/lib/core/infrastructure/baseRegistry.js +50 -0
  45. package/dist/lib/core/infrastructure/index.d.ts +5 -0
  46. package/dist/lib/core/infrastructure/index.js +6 -0
  47. package/dist/lib/core/infrastructure/retry.d.ts +7 -0
  48. package/dist/lib/core/infrastructure/retry.js +21 -0
  49. package/dist/lib/core/infrastructure/typedEventEmitter.d.ts +8 -0
  50. package/dist/lib/core/infrastructure/typedEventEmitter.js +24 -0
  51. package/dist/lib/core/redisConversationMemoryManager.d.ts +1 -6
  52. package/dist/lib/core/redisConversationMemoryManager.js +7 -19
  53. package/dist/lib/factories/providerFactory.d.ts +5 -3
  54. package/dist/lib/factories/providerFactory.js +31 -24
  55. package/dist/lib/index.d.ts +81 -12
  56. package/dist/lib/index.js +105 -36
  57. package/dist/lib/mcp/index.d.ts +6 -5
  58. package/dist/lib/mcp/index.js +7 -5
  59. package/dist/lib/neurolink.d.ts +22 -13
  60. package/dist/lib/neurolink.js +358 -31
  61. package/dist/lib/providers/amazonBedrock.d.ts +15 -2
  62. package/dist/lib/providers/amazonBedrock.js +65 -8
  63. package/dist/lib/providers/anthropic.d.ts +3 -3
  64. package/dist/lib/providers/anthropic.js +10 -7
  65. package/dist/lib/providers/googleAiStudio.d.ts +5 -5
  66. package/dist/lib/providers/googleAiStudio.js +10 -7
  67. package/dist/lib/providers/googleVertex.d.ts +16 -4
  68. package/dist/lib/providers/googleVertex.js +72 -16
  69. package/dist/lib/providers/litellm.d.ts +3 -3
  70. package/dist/lib/providers/litellm.js +10 -10
  71. package/dist/lib/providers/mistral.d.ts +3 -3
  72. package/dist/lib/providers/mistral.js +7 -6
  73. package/dist/lib/providers/ollama.d.ts +3 -4
  74. package/dist/lib/providers/ollama.js +7 -8
  75. package/dist/lib/providers/openAI.d.ts +14 -2
  76. package/dist/lib/providers/openAI.js +60 -6
  77. package/dist/lib/providers/openRouter.d.ts +2 -2
  78. package/dist/lib/providers/openRouter.js +10 -6
  79. package/dist/lib/rag/ChunkerFactory.d.ts +91 -0
  80. package/dist/lib/rag/ChunkerFactory.js +321 -0
  81. package/dist/lib/rag/ChunkerRegistry.d.ts +91 -0
  82. package/dist/lib/rag/ChunkerRegistry.js +422 -0
  83. package/dist/lib/rag/chunkers/BaseChunker.d.ts +53 -0
  84. package/dist/lib/rag/chunkers/BaseChunker.js +144 -0
  85. package/dist/lib/rag/chunkers/CharacterChunker.d.ts +18 -0
  86. package/dist/lib/rag/chunkers/CharacterChunker.js +29 -0
  87. package/dist/lib/rag/chunkers/HTMLChunker.d.ts +19 -0
  88. package/dist/lib/rag/chunkers/HTMLChunker.js +39 -0
  89. package/dist/lib/rag/chunkers/JSONChunker.d.ts +19 -0
  90. package/dist/lib/rag/chunkers/JSONChunker.js +69 -0
  91. package/dist/lib/rag/chunkers/LaTeXChunker.d.ts +15 -0
  92. package/dist/lib/rag/chunkers/LaTeXChunker.js +64 -0
  93. package/dist/lib/rag/chunkers/MarkdownChunker.d.ts +15 -0
  94. package/dist/lib/rag/chunkers/MarkdownChunker.js +103 -0
  95. package/dist/lib/rag/chunkers/RecursiveChunker.d.ts +27 -0
  96. package/dist/lib/rag/chunkers/RecursiveChunker.js +140 -0
  97. package/dist/lib/rag/chunkers/SemanticMarkdownChunker.d.ts +22 -0
  98. package/dist/lib/rag/chunkers/SemanticMarkdownChunker.js +139 -0
  99. package/dist/lib/rag/chunkers/SentenceChunker.d.ts +19 -0
  100. package/dist/lib/rag/chunkers/SentenceChunker.js +67 -0
  101. package/dist/lib/rag/chunkers/TokenChunker.d.ts +19 -0
  102. package/dist/lib/rag/chunkers/TokenChunker.js +62 -0
  103. package/dist/lib/rag/chunkers/index.d.ts +15 -0
  104. package/dist/lib/rag/chunkers/index.js +16 -0
  105. package/dist/lib/rag/chunking/characterChunker.d.ts +16 -0
  106. package/dist/lib/rag/chunking/characterChunker.js +143 -0
  107. package/dist/lib/rag/chunking/chunkerRegistry.d.ts +67 -0
  108. package/dist/lib/rag/chunking/chunkerRegistry.js +195 -0
  109. package/dist/lib/rag/chunking/htmlChunker.d.ts +34 -0
  110. package/dist/lib/rag/chunking/htmlChunker.js +248 -0
  111. package/dist/lib/rag/chunking/index.d.ts +15 -0
  112. package/dist/lib/rag/chunking/index.js +18 -0
  113. package/dist/lib/rag/chunking/jsonChunker.d.ts +20 -0
  114. package/dist/lib/rag/chunking/jsonChunker.js +282 -0
  115. package/dist/lib/rag/chunking/latexChunker.d.ts +26 -0
  116. package/dist/lib/rag/chunking/latexChunker.js +252 -0
  117. package/dist/lib/rag/chunking/markdownChunker.d.ts +19 -0
  118. package/dist/lib/rag/chunking/markdownChunker.js +202 -0
  119. package/dist/lib/rag/chunking/recursiveChunker.d.ts +19 -0
  120. package/dist/lib/rag/chunking/recursiveChunker.js +149 -0
  121. package/dist/lib/rag/chunking/semanticChunker.d.ts +41 -0
  122. package/dist/lib/rag/chunking/semanticChunker.js +307 -0
  123. package/dist/lib/rag/chunking/sentenceChunker.d.ts +25 -0
  124. package/dist/lib/rag/chunking/sentenceChunker.js +231 -0
  125. package/dist/lib/rag/chunking/tokenChunker.d.ts +36 -0
  126. package/dist/lib/rag/chunking/tokenChunker.js +184 -0
  127. package/dist/lib/rag/document/MDocument.d.ts +198 -0
  128. package/dist/lib/rag/document/MDocument.js +393 -0
  129. package/dist/lib/rag/document/index.d.ts +5 -0
  130. package/dist/lib/rag/document/index.js +6 -0
  131. package/dist/lib/rag/document/loaders.d.ts +201 -0
  132. package/dist/lib/rag/document/loaders.js +501 -0
  133. package/dist/lib/rag/errors/RAGError.d.ts +244 -0
  134. package/dist/lib/rag/errors/RAGError.js +275 -0
  135. package/dist/lib/rag/errors/index.d.ts +6 -0
  136. package/dist/lib/rag/errors/index.js +7 -0
  137. package/dist/lib/rag/graphRag/graphRAG.d.ts +115 -0
  138. package/dist/lib/rag/graphRag/graphRAG.js +385 -0
  139. package/dist/lib/rag/graphRag/index.d.ts +4 -0
  140. package/dist/lib/rag/graphRag/index.js +5 -0
  141. package/dist/lib/rag/index.d.ts +103 -0
  142. package/dist/lib/rag/index.js +142 -0
  143. package/dist/lib/rag/metadata/MetadataExtractorFactory.d.ts +157 -0
  144. package/dist/lib/rag/metadata/MetadataExtractorFactory.js +419 -0
  145. package/dist/lib/rag/metadata/MetadataExtractorRegistry.d.ts +99 -0
  146. package/dist/lib/rag/metadata/MetadataExtractorRegistry.js +363 -0
  147. package/dist/lib/rag/metadata/index.d.ts +6 -0
  148. package/dist/lib/rag/metadata/index.js +10 -0
  149. package/dist/lib/rag/metadata/metadataExtractor.d.ts +69 -0
  150. package/dist/lib/rag/metadata/metadataExtractor.js +278 -0
  151. package/dist/lib/rag/pipeline/RAGPipeline.d.ts +235 -0
  152. package/dist/lib/rag/pipeline/RAGPipeline.js +402 -0
  153. package/dist/lib/rag/pipeline/contextAssembly.d.ts +126 -0
  154. package/dist/lib/rag/pipeline/contextAssembly.js +338 -0
  155. package/dist/lib/rag/pipeline/index.d.ts +5 -0
  156. package/dist/lib/rag/pipeline/index.js +6 -0
  157. package/dist/lib/rag/ragIntegration.d.ts +38 -0
  158. package/dist/lib/rag/ragIntegration.js +212 -0
  159. package/dist/lib/rag/reranker/RerankerFactory.d.ts +184 -0
  160. package/dist/lib/rag/reranker/RerankerFactory.js +431 -0
  161. package/dist/lib/rag/reranker/RerankerRegistry.d.ts +119 -0
  162. package/dist/lib/rag/reranker/RerankerRegistry.js +403 -0
  163. package/dist/lib/rag/reranker/index.d.ts +6 -0
  164. package/dist/lib/rag/reranker/index.js +10 -0
  165. package/dist/lib/rag/reranker/reranker.d.ts +71 -0
  166. package/dist/lib/rag/reranker/reranker.js +278 -0
  167. package/dist/lib/rag/resilience/CircuitBreaker.d.ts +215 -0
  168. package/dist/lib/rag/resilience/CircuitBreaker.js +432 -0
  169. package/dist/lib/rag/resilience/RetryHandler.d.ts +115 -0
  170. package/dist/lib/rag/resilience/RetryHandler.js +301 -0
  171. package/dist/lib/rag/resilience/index.d.ts +7 -0
  172. package/dist/lib/rag/resilience/index.js +8 -0
  173. package/dist/lib/rag/retrieval/hybridSearch.d.ts +94 -0
  174. package/dist/lib/rag/retrieval/hybridSearch.js +314 -0
  175. package/dist/lib/rag/retrieval/index.d.ts +5 -0
  176. package/dist/lib/rag/retrieval/index.js +6 -0
  177. package/dist/lib/rag/retrieval/vectorQueryTool.d.ts +93 -0
  178. package/dist/lib/rag/retrieval/vectorQueryTool.js +290 -0
  179. package/dist/lib/rag/types.d.ts +768 -0
  180. package/dist/lib/rag/types.js +9 -0
  181. package/dist/lib/server/index.d.ts +15 -11
  182. package/dist/lib/server/index.js +55 -51
  183. package/dist/lib/types/common.d.ts +0 -1
  184. package/dist/lib/types/generateTypes.d.ts +70 -8
  185. package/dist/lib/types/generateTypes.js +1 -1
  186. package/dist/lib/types/index.d.ts +6 -0
  187. package/dist/lib/types/index.js +12 -0
  188. package/dist/lib/types/streamTypes.d.ts +63 -8
  189. package/dist/lib/types/streamTypes.js +1 -1
  190. package/dist/lib/types/workflowTypes.d.ts +558 -0
  191. package/dist/lib/types/workflowTypes.js +32 -0
  192. package/dist/lib/utils/modelRouter.d.ts +4 -4
  193. package/dist/lib/utils/modelRouter.js +4 -4
  194. package/dist/lib/workflow/LAYER-EXAMPLES.d.ts +13 -0
  195. package/dist/lib/workflow/LAYER-EXAMPLES.js +312 -0
  196. package/dist/lib/workflow/PROMPT-EXAMPLES.d.ts +117 -0
  197. package/dist/lib/workflow/PROMPT-EXAMPLES.js +246 -0
  198. package/dist/lib/workflow/config.d.ts +1569 -0
  199. package/dist/lib/workflow/config.js +399 -0
  200. package/dist/lib/workflow/core/ensembleExecutor.d.ts +56 -0
  201. package/dist/lib/workflow/core/ensembleExecutor.js +398 -0
  202. package/dist/lib/workflow/core/judgeScorer.d.ts +26 -0
  203. package/dist/lib/workflow/core/judgeScorer.js +527 -0
  204. package/dist/lib/workflow/core/responseConditioner.d.ts +22 -0
  205. package/dist/lib/workflow/core/responseConditioner.js +226 -0
  206. package/dist/lib/workflow/core/types/conditionerTypes.d.ts +7 -0
  207. package/dist/lib/workflow/core/types/conditionerTypes.js +8 -0
  208. package/dist/lib/workflow/core/types/ensembleTypes.d.ts +7 -0
  209. package/dist/lib/workflow/core/types/ensembleTypes.js +8 -0
  210. package/dist/lib/workflow/core/types/index.d.ts +7 -0
  211. package/dist/lib/workflow/core/types/index.js +8 -0
  212. package/dist/lib/workflow/core/types/judgeTypes.d.ts +7 -0
  213. package/dist/lib/workflow/core/types/judgeTypes.js +8 -0
  214. package/dist/lib/workflow/core/types/layerTypes.d.ts +7 -0
  215. package/dist/lib/workflow/core/types/layerTypes.js +8 -0
  216. package/dist/lib/workflow/core/types/registryTypes.d.ts +7 -0
  217. package/dist/lib/workflow/core/types/registryTypes.js +8 -0
  218. package/dist/lib/workflow/core/workflowRegistry.d.ts +73 -0
  219. package/dist/lib/workflow/core/workflowRegistry.js +305 -0
  220. package/dist/lib/workflow/core/workflowRunner.d.ts +115 -0
  221. package/dist/lib/workflow/core/workflowRunner.js +554 -0
  222. package/dist/lib/workflow/index.d.ts +36 -0
  223. package/dist/lib/workflow/index.js +51 -0
  224. package/dist/lib/workflow/types.d.ts +19 -0
  225. package/dist/lib/workflow/types.js +10 -0
  226. package/dist/lib/workflow/utils/types/index.d.ts +7 -0
  227. package/dist/lib/workflow/utils/types/index.js +8 -0
  228. package/dist/lib/workflow/utils/types/metricsTypes.d.ts +7 -0
  229. package/dist/lib/workflow/utils/types/metricsTypes.js +8 -0
  230. package/dist/lib/workflow/utils/types/validationTypes.d.ts +7 -0
  231. package/dist/lib/workflow/utils/types/validationTypes.js +8 -0
  232. package/dist/lib/workflow/utils/workflowMetrics.d.ts +76 -0
  233. package/dist/lib/workflow/utils/workflowMetrics.js +312 -0
  234. package/dist/lib/workflow/utils/workflowValidation.d.ts +29 -0
  235. package/dist/lib/workflow/utils/workflowValidation.js +421 -0
  236. package/dist/lib/workflow/workflows/adaptiveWorkflow.d.ts +72 -0
  237. package/dist/lib/workflow/workflows/adaptiveWorkflow.js +367 -0
  238. package/dist/lib/workflow/workflows/consensusWorkflow.d.ts +69 -0
  239. package/dist/lib/workflow/workflows/consensusWorkflow.js +193 -0
  240. package/dist/lib/workflow/workflows/fallbackWorkflow.d.ts +49 -0
  241. package/dist/lib/workflow/workflows/fallbackWorkflow.js +226 -0
  242. package/dist/lib/workflow/workflows/multiJudgeWorkflow.d.ts +70 -0
  243. package/dist/lib/workflow/workflows/multiJudgeWorkflow.js +352 -0
  244. package/dist/mcp/index.d.ts +6 -5
  245. package/dist/mcp/index.js +7 -5
  246. package/dist/neurolink.d.ts +22 -13
  247. package/dist/neurolink.js +358 -31
  248. package/dist/providers/amazonBedrock.d.ts +15 -2
  249. package/dist/providers/amazonBedrock.js +65 -8
  250. package/dist/providers/anthropic.d.ts +3 -3
  251. package/dist/providers/anthropic.js +10 -7
  252. package/dist/providers/googleAiStudio.d.ts +5 -5
  253. package/dist/providers/googleAiStudio.js +10 -7
  254. package/dist/providers/googleVertex.d.ts +16 -4
  255. package/dist/providers/googleVertex.js +72 -16
  256. package/dist/providers/litellm.d.ts +3 -3
  257. package/dist/providers/litellm.js +10 -10
  258. package/dist/providers/mistral.d.ts +3 -3
  259. package/dist/providers/mistral.js +7 -6
  260. package/dist/providers/ollama.d.ts +3 -4
  261. package/dist/providers/ollama.js +7 -8
  262. package/dist/providers/openAI.d.ts +14 -2
  263. package/dist/providers/openAI.js +60 -6
  264. package/dist/providers/openRouter.d.ts +2 -2
  265. package/dist/providers/openRouter.js +10 -6
  266. package/dist/rag/ChunkerFactory.d.ts +91 -0
  267. package/dist/rag/ChunkerFactory.js +320 -0
  268. package/dist/rag/ChunkerRegistry.d.ts +91 -0
  269. package/dist/rag/ChunkerRegistry.js +421 -0
  270. package/dist/rag/chunkers/BaseChunker.d.ts +53 -0
  271. package/dist/rag/chunkers/BaseChunker.js +143 -0
  272. package/dist/rag/chunkers/CharacterChunker.d.ts +18 -0
  273. package/dist/rag/chunkers/CharacterChunker.js +28 -0
  274. package/dist/rag/chunkers/HTMLChunker.d.ts +19 -0
  275. package/dist/rag/chunkers/HTMLChunker.js +38 -0
  276. package/dist/rag/chunkers/JSONChunker.d.ts +19 -0
  277. package/dist/rag/chunkers/JSONChunker.js +68 -0
  278. package/dist/rag/chunkers/LaTeXChunker.d.ts +15 -0
  279. package/dist/rag/chunkers/LaTeXChunker.js +63 -0
  280. package/dist/rag/chunkers/MarkdownChunker.d.ts +15 -0
  281. package/dist/rag/chunkers/MarkdownChunker.js +102 -0
  282. package/dist/rag/chunkers/RecursiveChunker.d.ts +27 -0
  283. package/dist/rag/chunkers/RecursiveChunker.js +139 -0
  284. package/dist/rag/chunkers/SemanticMarkdownChunker.d.ts +22 -0
  285. package/dist/rag/chunkers/SemanticMarkdownChunker.js +138 -0
  286. package/dist/rag/chunkers/SentenceChunker.d.ts +19 -0
  287. package/dist/rag/chunkers/SentenceChunker.js +66 -0
  288. package/dist/rag/chunkers/TokenChunker.d.ts +19 -0
  289. package/dist/rag/chunkers/TokenChunker.js +61 -0
  290. package/dist/rag/chunkers/index.d.ts +15 -0
  291. package/dist/rag/chunkers/index.js +15 -0
  292. package/dist/rag/chunking/characterChunker.d.ts +16 -0
  293. package/dist/rag/chunking/characterChunker.js +142 -0
  294. package/dist/rag/chunking/chunkerRegistry.d.ts +67 -0
  295. package/dist/rag/chunking/chunkerRegistry.js +194 -0
  296. package/dist/rag/chunking/htmlChunker.d.ts +34 -0
  297. package/dist/rag/chunking/htmlChunker.js +247 -0
  298. package/dist/rag/chunking/index.d.ts +15 -0
  299. package/dist/rag/chunking/index.js +17 -0
  300. package/dist/rag/chunking/jsonChunker.d.ts +20 -0
  301. package/dist/rag/chunking/jsonChunker.js +281 -0
  302. package/dist/rag/chunking/latexChunker.d.ts +26 -0
  303. package/dist/rag/chunking/latexChunker.js +251 -0
  304. package/dist/rag/chunking/markdownChunker.d.ts +19 -0
  305. package/dist/rag/chunking/markdownChunker.js +201 -0
  306. package/dist/rag/chunking/recursiveChunker.d.ts +19 -0
  307. package/dist/rag/chunking/recursiveChunker.js +148 -0
  308. package/dist/rag/chunking/semanticChunker.d.ts +41 -0
  309. package/dist/rag/chunking/semanticChunker.js +306 -0
  310. package/dist/rag/chunking/sentenceChunker.d.ts +25 -0
  311. package/dist/rag/chunking/sentenceChunker.js +230 -0
  312. package/dist/rag/chunking/tokenChunker.d.ts +36 -0
  313. package/dist/rag/chunking/tokenChunker.js +183 -0
  314. package/dist/rag/document/MDocument.d.ts +198 -0
  315. package/dist/rag/document/MDocument.js +392 -0
  316. package/dist/rag/document/index.d.ts +5 -0
  317. package/dist/rag/document/index.js +5 -0
  318. package/dist/rag/document/loaders.d.ts +201 -0
  319. package/dist/rag/document/loaders.js +500 -0
  320. package/dist/rag/errors/RAGError.d.ts +244 -0
  321. package/dist/rag/errors/RAGError.js +274 -0
  322. package/dist/rag/errors/index.d.ts +6 -0
  323. package/dist/rag/errors/index.js +6 -0
  324. package/dist/rag/graphRag/graphRAG.d.ts +115 -0
  325. package/dist/rag/graphRag/graphRAG.js +384 -0
  326. package/dist/rag/graphRag/index.d.ts +4 -0
  327. package/dist/rag/graphRag/index.js +4 -0
  328. package/dist/rag/index.d.ts +103 -0
  329. package/dist/rag/index.js +141 -0
  330. package/dist/rag/metadata/MetadataExtractorFactory.d.ts +157 -0
  331. package/dist/rag/metadata/MetadataExtractorFactory.js +418 -0
  332. package/dist/rag/metadata/MetadataExtractorRegistry.d.ts +99 -0
  333. package/dist/rag/metadata/MetadataExtractorRegistry.js +362 -0
  334. package/dist/rag/metadata/index.d.ts +6 -0
  335. package/dist/rag/metadata/index.js +9 -0
  336. package/dist/rag/metadata/metadataExtractor.d.ts +69 -0
  337. package/dist/rag/metadata/metadataExtractor.js +277 -0
  338. package/dist/rag/pipeline/RAGPipeline.d.ts +235 -0
  339. package/dist/rag/pipeline/RAGPipeline.js +401 -0
  340. package/dist/rag/pipeline/contextAssembly.d.ts +126 -0
  341. package/dist/rag/pipeline/contextAssembly.js +337 -0
  342. package/dist/rag/pipeline/index.d.ts +5 -0
  343. package/dist/rag/pipeline/index.js +5 -0
  344. package/dist/rag/ragIntegration.d.ts +38 -0
  345. package/dist/rag/ragIntegration.js +211 -0
  346. package/dist/rag/reranker/RerankerFactory.d.ts +184 -0
  347. package/dist/rag/reranker/RerankerFactory.js +430 -0
  348. package/dist/rag/reranker/RerankerRegistry.d.ts +119 -0
  349. package/dist/rag/reranker/RerankerRegistry.js +402 -0
  350. package/dist/rag/reranker/index.d.ts +6 -0
  351. package/dist/rag/reranker/index.js +9 -0
  352. package/dist/rag/reranker/reranker.d.ts +71 -0
  353. package/dist/rag/reranker/reranker.js +277 -0
  354. package/dist/rag/resilience/CircuitBreaker.d.ts +215 -0
  355. package/dist/rag/resilience/CircuitBreaker.js +431 -0
  356. package/dist/rag/resilience/RetryHandler.d.ts +115 -0
  357. package/dist/rag/resilience/RetryHandler.js +300 -0
  358. package/dist/rag/resilience/index.d.ts +7 -0
  359. package/dist/rag/resilience/index.js +7 -0
  360. package/dist/rag/retrieval/hybridSearch.d.ts +94 -0
  361. package/dist/rag/retrieval/hybridSearch.js +313 -0
  362. package/dist/rag/retrieval/index.d.ts +5 -0
  363. package/dist/rag/retrieval/index.js +5 -0
  364. package/dist/rag/retrieval/vectorQueryTool.d.ts +93 -0
  365. package/dist/rag/retrieval/vectorQueryTool.js +289 -0
  366. package/dist/rag/types.d.ts +768 -0
  367. package/dist/rag/types.js +8 -0
  368. package/dist/server/index.d.ts +15 -11
  369. package/dist/server/index.js +55 -51
  370. package/dist/server/utils/validation.d.ts +2 -2
  371. package/dist/types/common.d.ts +0 -1
  372. package/dist/types/generateTypes.d.ts +70 -8
  373. package/dist/types/generateTypes.js +1 -1
  374. package/dist/types/index.d.ts +6 -0
  375. package/dist/types/index.js +12 -0
  376. package/dist/types/modelTypes.d.ts +20 -20
  377. package/dist/types/streamTypes.d.ts +63 -8
  378. package/dist/types/streamTypes.js +1 -1
  379. package/dist/types/workflowTypes.d.ts +558 -0
  380. package/dist/types/workflowTypes.js +31 -0
  381. package/dist/utils/modelRouter.d.ts +4 -4
  382. package/dist/utils/modelRouter.js +4 -4
  383. package/dist/workflow/LAYER-EXAMPLES.d.ts +13 -0
  384. package/dist/workflow/LAYER-EXAMPLES.js +311 -0
  385. package/dist/workflow/PROMPT-EXAMPLES.d.ts +117 -0
  386. package/dist/workflow/PROMPT-EXAMPLES.js +245 -0
  387. package/dist/workflow/config.d.ts +1569 -0
  388. package/dist/workflow/config.js +398 -0
  389. package/dist/workflow/core/ensembleExecutor.d.ts +56 -0
  390. package/dist/workflow/core/ensembleExecutor.js +397 -0
  391. package/dist/workflow/core/judgeScorer.d.ts +26 -0
  392. package/dist/workflow/core/judgeScorer.js +526 -0
  393. package/dist/workflow/core/responseConditioner.d.ts +22 -0
  394. package/dist/workflow/core/responseConditioner.js +225 -0
  395. package/dist/workflow/core/types/conditionerTypes.d.ts +7 -0
  396. package/dist/workflow/core/types/conditionerTypes.js +7 -0
  397. package/dist/workflow/core/types/ensembleTypes.d.ts +7 -0
  398. package/dist/workflow/core/types/ensembleTypes.js +7 -0
  399. package/dist/workflow/core/types/index.d.ts +7 -0
  400. package/dist/workflow/core/types/index.js +7 -0
  401. package/dist/workflow/core/types/judgeTypes.d.ts +7 -0
  402. package/dist/workflow/core/types/judgeTypes.js +7 -0
  403. package/dist/workflow/core/types/layerTypes.d.ts +7 -0
  404. package/dist/workflow/core/types/layerTypes.js +7 -0
  405. package/dist/workflow/core/types/registryTypes.d.ts +7 -0
  406. package/dist/workflow/core/types/registryTypes.js +7 -0
  407. package/dist/workflow/core/workflowRegistry.d.ts +73 -0
  408. package/dist/workflow/core/workflowRegistry.js +304 -0
  409. package/dist/workflow/core/workflowRunner.d.ts +115 -0
  410. package/dist/workflow/core/workflowRunner.js +553 -0
  411. package/dist/workflow/index.d.ts +36 -0
  412. package/dist/workflow/index.js +50 -0
  413. package/dist/workflow/types.d.ts +19 -0
  414. package/dist/workflow/types.js +9 -0
  415. package/dist/workflow/utils/types/index.d.ts +7 -0
  416. package/dist/workflow/utils/types/index.js +7 -0
  417. package/dist/workflow/utils/types/metricsTypes.d.ts +7 -0
  418. package/dist/workflow/utils/types/metricsTypes.js +7 -0
  419. package/dist/workflow/utils/types/validationTypes.d.ts +7 -0
  420. package/dist/workflow/utils/types/validationTypes.js +7 -0
  421. package/dist/workflow/utils/workflowMetrics.d.ts +76 -0
  422. package/dist/workflow/utils/workflowMetrics.js +311 -0
  423. package/dist/workflow/utils/workflowValidation.d.ts +29 -0
  424. package/dist/workflow/utils/workflowValidation.js +420 -0
  425. package/dist/workflow/workflows/adaptiveWorkflow.d.ts +72 -0
  426. package/dist/workflow/workflows/adaptiveWorkflow.js +366 -0
  427. package/dist/workflow/workflows/consensusWorkflow.d.ts +69 -0
  428. package/dist/workflow/workflows/consensusWorkflow.js +192 -0
  429. package/dist/workflow/workflows/fallbackWorkflow.d.ts +49 -0
  430. package/dist/workflow/workflows/fallbackWorkflow.js +225 -0
  431. package/dist/workflow/workflows/multiJudgeWorkflow.d.ts +70 -0
  432. package/dist/workflow/workflows/multiJudgeWorkflow.js +351 -0
  433. package/package.json +3 -2
@@ -13,39 +13,38 @@ try {
13
13
  catch {
14
14
  // Environment variables should be set externally in production
15
15
  }
16
- import { AIProviderFactory } from "./core/factory.js";
16
+ import { EventEmitter } from "events";
17
17
  import { isNonNullObject } from "./utils/typeUtils.js";
18
- import { isZodSchema } from "./utils/schemaConversion.js";
19
- import { AIProviderName } from "./constants/enums.js";
20
- import { mcpLogger } from "./utils/logger.js";
21
- import { SYSTEM_LIMITS } from "./core/constants.js";
22
- import { NANOSECOND_TO_MS_DIVISOR, TOOL_TIMEOUTS, RETRY_ATTEMPTS, RETRY_DELAYS, CIRCUIT_BREAKER, CIRCUIT_BREAKER_RESET_MS, MEMORY_THRESHOLDS, PROVIDER_TIMEOUTS, PERFORMANCE_THRESHOLDS, } from "./constants/index.js";
23
18
  import pLimit from "p-limit";
24
- import { MCPToolRegistry } from "./mcp/toolRegistry.js";
25
- import { logger } from "./utils/logger.js";
26
- import { getBestProvider } from "./utils/providerUtils.js";
19
+ import { CIRCUIT_BREAKER, CIRCUIT_BREAKER_RESET_MS, MEMORY_THRESHOLDS, NANOSECOND_TO_MS_DIVISOR, PERFORMANCE_THRESHOLDS, PROVIDER_TIMEOUTS, RETRY_ATTEMPTS, RETRY_DELAYS, TOOL_TIMEOUTS, } from "./constants/index.js";
20
+ import { SYSTEM_LIMITS } from "./core/constants.js";
21
+ import { AIProviderFactory } from "./core/factory.js";
27
22
  import { ProviderRegistry } from "./factories/providerRegistry.js";
28
- import { createCustomToolServerInfo, detectCategory, } from "./utils/mcpDefaults.js";
29
- // Factory processing imports
30
- import { processFactoryOptions, enhanceTextGenerationOptions, validateFactoryConfig, processStreamingFactoryOptions, createCleanStreamOptions, } from "./utils/factoryProcessing.js";
31
- // Tool detection and execution imports
32
- // Transformation utilities
33
- import { transformToolExecutions, transformToolExecutionsForMCP, transformAvailableTools, transformToolsForMCP, transformToolsToExpectedFormat, transformToolsToDescriptions, extractToolNames, transformParamsForLogging, optimizeToolForCollection, } from "./utils/transformationUtils.js";
34
- // Enhanced error handling imports
35
- import { ErrorFactory, NeuroLinkError, withTimeout, withRetry, isRetriableError, logStructuredError, CircuitBreaker, } from "./utils/errorHandling.js";
36
- import { EventEmitter } from "events";
37
- import { ConversationMemoryManager } from "./core/conversationMemoryManager.js";
38
- import { RedisConversationMemoryManager } from "./core/redisConversationMemoryManager.js";
39
- import { getConversationMessages, storeConversationTurn, } from "./utils/conversationMemory.js";
40
- import { ExternalServerManager } from "./mcp/externalServerManager.js";
41
23
  import { HITLManager } from "./hitl/hitlManager.js";
24
+ import { ExternalServerManager } from "./mcp/externalServerManager.js";
42
25
  // Import direct tools server for automatic registration
43
26
  import { directToolsServer } from "./mcp/servers/agent/directToolsServer.js";
27
+ import { MCPToolRegistry } from "./mcp/toolRegistry.js";
28
+ import { initializeMem0 } from "./memory/mem0Initializer.js";
29
+ import { flushOpenTelemetry, getLangfuseHealthStatus, initializeOpenTelemetry, isOpenTelemetryInitialized, setLangfuseContext, shutdownOpenTelemetry, } from "./services/server/ai/observability/instrumentation.js";
30
+ import { getConversationMessages, storeConversationTurn, } from "./utils/conversationMemory.js";
31
+ // Enhanced error handling imports
32
+ import { CircuitBreaker, ErrorFactory, isRetriableError, logStructuredError, NeuroLinkError, withRetry, withTimeout, } from "./utils/errorHandling.js";
33
+ // Factory processing imports
34
+ import { createCleanStreamOptions, enhanceTextGenerationOptions, processFactoryOptions, processStreamingFactoryOptions, validateFactoryConfig, } from "./utils/factoryProcessing.js";
35
+ import { logger, mcpLogger } from "./utils/logger.js";
36
+ import { createCustomToolServerInfo, detectCategory, } from "./utils/mcpDefaults.js";
44
37
  // Import orchestration components
45
38
  import { ModelRouter } from "./utils/modelRouter.js";
39
+ import { getBestProvider } from "./utils/providerUtils.js";
40
+ import { isZodSchema } from "./utils/schemaConversion.js";
46
41
  import { BinaryTaskClassifier } from "./utils/taskClassifier.js";
47
- import { initializeOpenTelemetry, shutdownOpenTelemetry, flushOpenTelemetry, getLangfuseHealthStatus, setLangfuseContext, isOpenTelemetryInitialized, } from "./services/server/ai/observability/instrumentation.js";
48
- import { initializeMem0 } from "./memory/mem0Initializer.js";
42
+ // Tool detection and execution imports
43
+ // Transformation utilities
44
+ import { extractToolNames, optimizeToolForCollection, transformAvailableTools, transformParamsForLogging, transformToolExecutions, transformToolExecutionsForMCP, transformToolsForMCP, transformToolsToDescriptions, transformToolsToExpectedFormat, } from "./utils/transformationUtils.js";
45
+ import { runWorkflow } from "./workflow/core/workflowRunner.js";
46
+ import { getWorkflow } from "./workflow/core/workflowRegistry.js";
47
+ // Core types imported from core/types.js
49
48
  /**
50
49
  * NeuroLink - Universal AI Development Platform
51
50
  *
@@ -1152,9 +1151,19 @@ Current user's request: ${currentInput}`;
1152
1151
  * @returns The original prompt text as a string.
1153
1152
  */
1154
1153
  _extractOriginalPrompt(optionsOrPrompt) {
1155
- return typeof optionsOrPrompt === "string"
1156
- ? optionsOrPrompt
1157
- : optionsOrPrompt.input.text;
1154
+ if (typeof optionsOrPrompt === "string") {
1155
+ return optionsOrPrompt;
1156
+ }
1157
+ // Handle messages format (for workflow compatibility)
1158
+ const anyOptions = optionsOrPrompt;
1159
+ if (anyOptions.messages && anyOptions.messages.length > 0) {
1160
+ const lastMessage = anyOptions.messages[anyOptions.messages.length - 1];
1161
+ return typeof lastMessage.content === "string"
1162
+ ? lastMessage.content
1163
+ : JSON.stringify(lastMessage.content);
1164
+ }
1165
+ // Handle input.text format
1166
+ return optionsOrPrompt.input?.text || "";
1158
1167
  }
1159
1168
  /**
1160
1169
  * Generate AI content using the best available provider with MCP tool integration.
@@ -1381,6 +1390,10 @@ Current user's request: ${currentInput}`;
1381
1390
  if (!options.input?.text || typeof options.input.text !== "string") {
1382
1391
  throw new Error("Input text is required and must be a non-empty string");
1383
1392
  }
1393
+ // Check if workflow is requested
1394
+ if (options.workflow || options.workflowConfig) {
1395
+ return await this.generateWithWorkflow(options);
1396
+ }
1384
1397
  // Set session and user IDs from context for Langfuse spans and execute with proper async scoping
1385
1398
  return await this.setLangfuseContextFromOptions(options, async () => {
1386
1399
  if (this.conversationMemoryConfig?.conversationMemory?.mem0Enabled &&
@@ -1449,6 +1462,39 @@ Current user's request: ${currentInput}`;
1449
1462
  // Continue with warning rather than throwing - graceful degradation
1450
1463
  }
1451
1464
  }
1465
+ // RAG Integration: If rag config is provided, prepare the RAG search tool
1466
+ if (options.rag?.files?.length) {
1467
+ try {
1468
+ const { prepareRAGTool } = await import("./rag/ragIntegration.js");
1469
+ const ragResult = await prepareRAGTool(options.rag, options.provider);
1470
+ // Inject the RAG tool into the tools record
1471
+ if (!options.tools) {
1472
+ options.tools = {};
1473
+ }
1474
+ options.tools[ragResult.toolName] =
1475
+ ragResult.tool;
1476
+ // Inject RAG-aware system prompt so the AI uses the RAG tool first
1477
+ const ragSystemInstruction = [
1478
+ `\n\nIMPORTANT: You have a tool called "${ragResult.toolName}" that searches through`,
1479
+ `${ragResult.filesLoaded} loaded document(s) containing ${ragResult.chunksIndexed} indexed chunks.`,
1480
+ `ALWAYS use the "${ragResult.toolName}" tool FIRST to answer the user's question before using any other tools.`,
1481
+ `This tool searches your local knowledge base of pre-loaded documents and is the primary source of truth.`,
1482
+ `Do NOT use websearchGrounding or any web search tools when the answer can be found in the loaded documents.`,
1483
+ ].join(" ");
1484
+ options.systemPrompt =
1485
+ (options.systemPrompt || "") + ragSystemInstruction;
1486
+ logger.info("[RAG] Tool injected into generate()", {
1487
+ toolName: ragResult.toolName,
1488
+ filesLoaded: ragResult.filesLoaded,
1489
+ chunksIndexed: ragResult.chunksIndexed,
1490
+ });
1491
+ }
1492
+ catch (error) {
1493
+ logger.warn("[RAG] Failed to prepare RAG tool, continuing without RAG", {
1494
+ error: error instanceof Error ? error.message : String(error),
1495
+ });
1496
+ }
1497
+ }
1452
1498
  // 🔧 CRITICAL FIX: Convert to TextGenerationOptions while preserving the input object for multimodal support
1453
1499
  const baseOptions = {
1454
1500
  prompt: options.input.text,
@@ -1459,6 +1505,7 @@ Current user's request: ${currentInput}`;
1459
1505
  systemPrompt: options.systemPrompt,
1460
1506
  schema: options.schema,
1461
1507
  output: options.output,
1508
+ tools: options.tools, // Includes RAG tools if rag config was provided
1462
1509
  disableTools: options.disableTools,
1463
1510
  enableAnalytics: options.enableAnalytics,
1464
1511
  enableEvaluation: options.enableEvaluation,
@@ -1572,6 +1619,246 @@ Current user's request: ${currentInput}`;
1572
1619
  return generateResult;
1573
1620
  });
1574
1621
  }
1622
+ /**
1623
+ * Generate with workflow engine integration
1624
+ * Returns both original and processed responses for AB testing
1625
+ */
1626
+ async generateWithWorkflow(options) {
1627
+ const workflowStartTime = Date.now();
1628
+ logger.debug("[NeuroLink] Executing workflow generation", {
1629
+ workflowId: options.workflow,
1630
+ hasInlineConfig: !!options.workflowConfig,
1631
+ prompt: options.input.text.substring(0, 100),
1632
+ startTime: workflowStartTime,
1633
+ });
1634
+ // Determine workflow configuration
1635
+ let workflowConfig;
1636
+ if (options.workflowConfig) {
1637
+ // Use inline config
1638
+ workflowConfig = options.workflowConfig;
1639
+ }
1640
+ else if (options.workflow) {
1641
+ // Look up predefined workflow
1642
+ workflowConfig = getWorkflow(options.workflow);
1643
+ if (!workflowConfig) {
1644
+ throw new Error(`Workflow '${options.workflow}' not found in registry`);
1645
+ }
1646
+ }
1647
+ else {
1648
+ throw new Error("Either workflow or workflowConfig must be provided");
1649
+ }
1650
+ // Execute workflow
1651
+ const workflowResult = await runWorkflow(workflowConfig, {
1652
+ prompt: options.input.text,
1653
+ conversationHistory: options.conversationHistory,
1654
+ timeout: options.timeout,
1655
+ verbose: false,
1656
+ metadata: options.context,
1657
+ });
1658
+ // Build GenerateResult with workflow data
1659
+ const generateResult = {
1660
+ // Primary output (backward compatible) - use the original best response
1661
+ content: workflowResult.content,
1662
+ // Provider info from selected response
1663
+ provider: workflowResult.selectedResponse?.provider ||
1664
+ workflowConfig.models[0]?.provider,
1665
+ model: workflowResult.selectedResponse?.model ||
1666
+ workflowConfig.models[0]?.model,
1667
+ // Basic usage info
1668
+ usage: workflowResult.usage
1669
+ ? {
1670
+ input: workflowResult.usage.totalInputTokens,
1671
+ output: workflowResult.usage.totalOutputTokens,
1672
+ total: workflowResult.usage.totalTokens,
1673
+ }
1674
+ : undefined,
1675
+ // Performance
1676
+ responseTime: workflowResult.totalTime,
1677
+ // Workflow-specific data
1678
+ workflow: {
1679
+ originalResponse: workflowResult.originalContent || workflowResult.content, // Original unmodified best response
1680
+ processedResponse: workflowResult.content, // After conditioning (with metadata)
1681
+ ensembleResponses: workflowResult.ensembleResponses.map((r) => ({
1682
+ provider: r.provider,
1683
+ model: r.model,
1684
+ content: r.content,
1685
+ responseTime: r.responseTime,
1686
+ status: r.status,
1687
+ error: r.error,
1688
+ })),
1689
+ judgeScores: workflowResult.judgeScores
1690
+ ? {
1691
+ scores: workflowResult.judgeScores.scores,
1692
+ reasoning: workflowResult.reasoning,
1693
+ selectedModel: `${workflowResult.selectedResponse?.provider}-${workflowResult.selectedResponse?.model}`,
1694
+ }
1695
+ : undefined,
1696
+ selectedModel: `${workflowResult.selectedResponse?.provider}-${workflowResult.selectedResponse?.model}`,
1697
+ metrics: {
1698
+ totalTime: workflowResult.totalTime,
1699
+ ensembleTime: workflowResult.ensembleTime,
1700
+ judgeTime: workflowResult.judgeTime,
1701
+ conditioningTime: workflowResult.conditioningTime,
1702
+ },
1703
+ workflowId: workflowResult.workflow,
1704
+ workflowName: workflowResult.workflowName,
1705
+ },
1706
+ };
1707
+ logger.debug("[NeuroLink] Workflow generation complete", {
1708
+ workflowId: workflowResult.workflow,
1709
+ selectedModel: generateResult.workflow?.selectedModel,
1710
+ score: workflowResult.score,
1711
+ totalTime: workflowResult.totalTime,
1712
+ });
1713
+ return generateResult;
1714
+ }
1715
+ /**
1716
+ * Stream with workflow engine integration
1717
+ * Progressive streaming: yields preliminary response (first model) then final synthesis
1718
+ */
1719
+ async streamWithWorkflow(options, startTime) {
1720
+ logger.debug("[NeuroLink] Executing workflow streaming (progressive)", {
1721
+ workflowId: options.workflow,
1722
+ hasInlineConfig: !!options.workflowConfig,
1723
+ prompt: options.input.text.substring(0, 100),
1724
+ });
1725
+ // Determine workflow configuration
1726
+ let workflowConfig;
1727
+ if (options.workflowConfig) {
1728
+ workflowConfig = options.workflowConfig;
1729
+ }
1730
+ else if (options.workflow) {
1731
+ workflowConfig = getWorkflow(options.workflow);
1732
+ if (!workflowConfig) {
1733
+ throw new Error(`Workflow '${options.workflow}' not found in registry`);
1734
+ }
1735
+ }
1736
+ else {
1737
+ throw new Error("Either workflow or workflowConfig must be provided");
1738
+ }
1739
+ // Import streaming workflow runner
1740
+ const { runWorkflowWithStreaming } = await import("./workflow/core/workflowRunner.js");
1741
+ // Execute workflow with progressive streaming
1742
+ const workflowStream = runWorkflowWithStreaming(workflowConfig, {
1743
+ prompt: options.input.text,
1744
+ conversationHistory: options.conversationHistory,
1745
+ timeout: options.timeout,
1746
+ verbose: false,
1747
+ metadata: options.context,
1748
+ streaming: true,
1749
+ });
1750
+ // Store final result for metadata
1751
+ let finalResult = null;
1752
+ let preliminaryTime = 0;
1753
+ // Create a generator that yields progressive chunks
1754
+ const stream = (async function* () {
1755
+ for await (const chunk of workflowStream) {
1756
+ if (chunk.type === "preliminary") {
1757
+ preliminaryTime = Date.now() - startTime;
1758
+ logger.debug("[NeuroLink] Streaming preliminary response", {
1759
+ responseTime: preliminaryTime,
1760
+ contentLength: chunk.content.length,
1761
+ });
1762
+ yield {
1763
+ content: chunk.content,
1764
+ type: "preliminary",
1765
+ };
1766
+ }
1767
+ else if (chunk.type === "final") {
1768
+ finalResult = chunk.partialResult ?? null;
1769
+ const finalTime = Date.now() - startTime;
1770
+ logger.debug("[NeuroLink] Streaming final synthesis", {
1771
+ responseTime: finalTime,
1772
+ contentLength: chunk.content.length,
1773
+ });
1774
+ yield {
1775
+ content: chunk.content,
1776
+ type: "final",
1777
+ };
1778
+ }
1779
+ }
1780
+ })();
1781
+ const streamResult = {
1782
+ stream,
1783
+ // Provider info (will be from final result)
1784
+ provider: workflowConfig.models[0]?.provider,
1785
+ model: workflowConfig.models[0]?.model,
1786
+ // Metadata
1787
+ metadata: {
1788
+ streamId: `workflow-${workflowConfig.id}-${Date.now()}`,
1789
+ startTime,
1790
+ responseTime: 0, // Will be updated after stream completes
1791
+ },
1792
+ // Note: Workflow data will be populated after stream completes
1793
+ // For now, return placeholder that will be updated via stream metadata
1794
+ };
1795
+ // Wrap stream to capture final result and populate metadata
1796
+ const originalStream = streamResult.stream;
1797
+ streamResult.stream = (async function* () {
1798
+ for await (const chunk of originalStream) {
1799
+ yield chunk;
1800
+ }
1801
+ // After stream completes, update result with final workflow data
1802
+ if (finalResult) {
1803
+ const result = finalResult;
1804
+ const responseTime = Date.now() - startTime;
1805
+ // Update usage if available
1806
+ if (result.usage) {
1807
+ streamResult.usage = {
1808
+ input: result.usage.totalInputTokens,
1809
+ output: result.usage.totalOutputTokens,
1810
+ total: result.usage.totalTokens,
1811
+ };
1812
+ }
1813
+ // Update metadata
1814
+ streamResult.metadata = {
1815
+ ...streamResult.metadata,
1816
+ totalChunks: 2, // Preliminary + final
1817
+ responseTime,
1818
+ preliminaryTime,
1819
+ };
1820
+ // Build workflow data with proper type safety
1821
+ const ensembleResponses = result.ensembleResponses?.map((r) => ({
1822
+ provider: r.provider,
1823
+ model: r.model,
1824
+ content: r.content,
1825
+ responseTime: r.responseTime,
1826
+ status: r.status,
1827
+ error: r.error,
1828
+ })) ?? [];
1829
+ const judgeScores = result.judgeScores
1830
+ ? {
1831
+ scores: result.judgeScores.scores,
1832
+ reasoning: result.reasoning ?? "",
1833
+ selectedModel: result.selectedResponse
1834
+ ? `${result.selectedResponse.provider}-${result.selectedResponse.model}`
1835
+ : "unknown",
1836
+ }
1837
+ : undefined;
1838
+ streamResult.workflow = {
1839
+ originalResponse: result.originalContent ?? result.content ?? "",
1840
+ processedResponse: result.content ?? "",
1841
+ ensembleResponses,
1842
+ judgeScores,
1843
+ selectedModel: result.selectedResponse
1844
+ ? `${result.selectedResponse.provider}-${result.selectedResponse.model}`
1845
+ : "unknown",
1846
+ metrics: {
1847
+ totalTime: result.totalTime ?? responseTime,
1848
+ ensembleTime: result.ensembleTime ?? 0,
1849
+ judgeTime: result.judgeTime,
1850
+ conditioningTime: result.conditioningTime,
1851
+ },
1852
+ workflowId: result.workflow ?? workflowConfig.id,
1853
+ workflowName: result.workflowName ?? workflowConfig.name,
1854
+ };
1855
+ }
1856
+ })();
1857
+ logger.debug("[NeuroLink] Workflow streaming initialized", {
1858
+ workflowId: workflowConfig.id,
1859
+ });
1860
+ return streamResult;
1861
+ }
1575
1862
  /**
1576
1863
  * BACKWARD COMPATIBILITY: Legacy generateText method
1577
1864
  * Internally calls generate() and converts result format
@@ -2105,6 +2392,10 @@ Current user's request: ${currentInput}`;
2105
2392
  const originalPrompt = options.input.text; // Store the original prompt for memory storage
2106
2393
  await this.validateStreamInput(options);
2107
2394
  this.emitStreamStartEvents(options, startTime);
2395
+ // Check if workflow is requested
2396
+ if (options.workflow || options.workflowConfig) {
2397
+ return await this.streamWithWorkflow(options, startTime);
2398
+ }
2108
2399
  // Set session and user IDs from context for Langfuse spans and execute with proper async scoping
2109
2400
  return await this.setLangfuseContextFromOptions(options, async () => {
2110
2401
  let enhancedOptions;
@@ -2184,6 +2475,39 @@ Current user's request: ${currentInput}`;
2184
2475
  }
2185
2476
  }
2186
2477
  }
2478
+ // RAG Integration: If rag config is provided, prepare the RAG search tool (stream)
2479
+ if (options.rag?.files?.length) {
2480
+ try {
2481
+ const { prepareRAGTool } = await import("./rag/ragIntegration.js");
2482
+ const ragResult = await prepareRAGTool(options.rag, options.provider);
2483
+ // Inject the RAG tool into the tools record
2484
+ if (!options.tools) {
2485
+ options.tools = {};
2486
+ }
2487
+ options.tools[ragResult.toolName] =
2488
+ ragResult.tool;
2489
+ // Inject RAG-aware system prompt so the AI uses the RAG tool first
2490
+ const ragStreamInstruction = [
2491
+ `\n\nIMPORTANT: You have a tool called "${ragResult.toolName}" that searches through`,
2492
+ `${ragResult.filesLoaded} loaded document(s) containing ${ragResult.chunksIndexed} indexed chunks.`,
2493
+ `ALWAYS use the "${ragResult.toolName}" tool FIRST to answer the user's question before using any other tools.`,
2494
+ `This tool searches your local knowledge base of pre-loaded documents and is the primary source of truth.`,
2495
+ `Do NOT use websearchGrounding or any web search tools when the answer can be found in the loaded documents.`,
2496
+ ].join(" ");
2497
+ options.systemPrompt =
2498
+ (options.systemPrompt || "") + ragStreamInstruction;
2499
+ logger.info("[RAG] Tool injected into stream()", {
2500
+ toolName: ragResult.toolName,
2501
+ filesLoaded: ragResult.filesLoaded,
2502
+ chunksIndexed: ragResult.chunksIndexed,
2503
+ });
2504
+ }
2505
+ catch (error) {
2506
+ logger.warn("[RAG] Failed to prepare RAG tool, continuing without RAG", {
2507
+ error: error instanceof Error ? error.message : String(error),
2508
+ });
2509
+ }
2510
+ }
2187
2511
  factoryResult = processStreamingFactoryOptions(options);
2188
2512
  enhancedOptions = createCleanStreamOptions(options);
2189
2513
  if (options.input?.text) {
@@ -2330,7 +2654,7 @@ Current user's request: ${currentInput}`;
2330
2654
  if (self.conversationMemory && enhancedOptions.context?.sessionId) {
2331
2655
  const sessionId = enhancedOptions.context?.sessionId;
2332
2656
  const userId = enhancedOptions.context?.userId;
2333
- let providerDetails = undefined;
2657
+ let providerDetails;
2334
2658
  if (enhancedOptions.model) {
2335
2659
  providerDetails = {
2336
2660
  provider: providerName,
@@ -2557,7 +2881,7 @@ Current user's request: ${currentInput}`;
2557
2881
  const sessionId = enhancedOptions?.context?.sessionId;
2558
2882
  const userId = enhancedOptions?.context
2559
2883
  ?.userId;
2560
- let providerDetails = undefined;
2884
+ let providerDetails;
2561
2885
  if (options.model) {
2562
2886
  providerDetails = {
2563
2887
  provider: providerName,
@@ -3907,7 +4231,10 @@ Current user's request: ${currentInput}`;
3907
4231
  async hasProviderEnvVars(providerName) {
3908
4232
  const { ProviderHealthChecker } = await import("./utils/providerHealth.js");
3909
4233
  try {
3910
- const health = await ProviderHealthChecker.checkProviderHealth(providerName, { includeConnectivityTest: false, cacheResults: false });
4234
+ const health = await ProviderHealthChecker.checkProviderHealth(providerName, {
4235
+ includeConnectivityTest: false,
4236
+ cacheResults: false,
4237
+ });
3911
4238
  return health.isConfigured && health.hasApiKey;
3912
4239
  }
3913
4240
  catch (error) {
@@ -4511,7 +4838,7 @@ Current user's request: ${currentInput}`;
4511
4838
  // Import the integration module
4512
4839
  const { initializeConversationMemory } = await import("./core/conversationMemoryInitializer.js");
4513
4840
  // Use the integration module to create the appropriate memory manager
4514
- const memoryManager = await initializeConversationMemory(this.conversationMemoryConfig, this.emitter);
4841
+ const memoryManager = await initializeConversationMemory(this.conversationMemoryConfig);
4515
4842
  // Assign to conversationMemory with proper type to handle both memory manager types
4516
4843
  this.conversationMemory = memoryManager;
4517
4844
  // Reset the lazy init flag since we've now initialized
@@ -1,9 +1,9 @@
1
1
  import { BedrockRuntimeClient } from "@aws-sdk/client-bedrock-runtime";
2
+ import type { AIProviderName } from "../constants/enums.js";
2
3
  import { BaseProvider } from "../core/baseProvider.js";
4
+ import type { NeuroLink } from "../neurolink.js";
3
5
  import type { EnhancedGenerateResult, TextGenerationOptions } from "../types/index.js";
4
- import { AIProviderName } from "../constants/enums.js";
5
6
  import type { StreamOptions, StreamResult } from "../types/streamTypes.js";
6
- import type { NeuroLink } from "../neurolink.js";
7
7
  export declare class AmazonBedrockProvider extends BaseProvider {
8
8
  private bedrockClient;
9
9
  private conversationHistory;
@@ -17,6 +17,11 @@ export declare class AmazonBedrockProvider extends BaseProvider {
17
17
  getAISDKModel(): never;
18
18
  getProviderName(): AIProviderName;
19
19
  getDefaultModel(): string;
20
+ /**
21
+ * Get the default embedding model for Amazon Bedrock
22
+ * @returns The default Bedrock embedding model name
23
+ */
24
+ protected getDefaultEmbeddingModel(): string;
20
25
  generate(optionsOrPrompt: TextGenerationOptions | string): Promise<EnhancedGenerateResult | null>;
21
26
  private conversationLoop;
22
27
  private callBedrock;
@@ -40,4 +45,12 @@ export declare class AmazonBedrockProvider extends BaseProvider {
40
45
  */
41
46
  checkBedrockHealth(): Promise<void>;
42
47
  handleProviderError(error: unknown): Error;
48
+ /**
49
+ * Generate embeddings for text using Amazon Bedrock embedding models
50
+ * Uses the native AWS SDK InvokeModel command for Titan embeddings
51
+ * @param text - The text to embed
52
+ * @param modelName - The embedding model to use (default: amazon.titan-embed-text-v2:0)
53
+ * @returns Promise resolving to the embedding vector
54
+ */
55
+ embed(text: string, modelName?: string): Promise<number[]>;
43
56
  }
@@ -1,14 +1,13 @@
1
- import { BedrockRuntimeClient, ConverseCommand, ConverseStreamCommand, ImageFormat, } from "@aws-sdk/client-bedrock-runtime";
2
1
  import { BedrockClient, ListFoundationModelsCommand, } from "@aws-sdk/client-bedrock";
2
+ import { BedrockRuntimeClient, ConverseCommand, ConverseStreamCommand, ImageFormat, } from "@aws-sdk/client-bedrock-runtime";
3
+ import path from "path";
4
+ import { createAnalytics } from "../core/analytics.js";
3
5
  import { BaseProvider } from "../core/baseProvider.js";
4
- import { AIProviderName } from "../constants/enums.js";
6
+ import { DEFAULT_MAX_STEPS } from "../core/constants.js";
5
7
  import { logger } from "../utils/logger.js";
6
- import { convertZodToJsonSchema } from "../utils/schemaConversion.js";
7
8
  import { buildMultimodalMessagesArray } from "../utils/messageBuilder.js";
8
9
  import { buildMultimodalOptions } from "../utils/multimodalOptionsBuilder.js";
9
- import { DEFAULT_MAX_STEPS } from "../core/constants.js";
10
- import { createAnalytics } from "../core/analytics.js";
11
- import path from "path";
10
+ import { convertZodToJsonSchema } from "../utils/schemaConversion.js";
12
11
  // Bedrock-specific types now imported from ../types/providerSpecific.js
13
12
  export class AmazonBedrockProvider extends BaseProvider {
14
13
  bedrockClient;
@@ -88,6 +87,15 @@ export class AmazonBedrockProvider extends BaseProvider {
88
87
  getDefaultModel() {
89
88
  return (process.env.BEDROCK_MODEL || "anthropic.claude-3-sonnet-20240229-v1:0");
90
89
  }
90
+ /**
91
+ * Get the default embedding model for Amazon Bedrock
92
+ * @returns The default Bedrock embedding model name
93
+ */
94
+ getDefaultEmbeddingModel() {
95
+ return (process.env.BEDROCK_EMBEDDING_MODEL ||
96
+ process.env.AWS_EMBEDDING_MODEL ||
97
+ "amazon.titan-embed-text-v2:0");
98
+ }
91
99
  // Override the main generate method to implement conversation management
92
100
  async generate(optionsOrPrompt) {
93
101
  logger.debug("[AmazonBedrockProvider] generate() called with conversation management");
@@ -158,7 +166,6 @@ export class AmazonBedrockProvider extends BaseProvider {
158
166
  logger.debug(`[AmazonBedrockProvider] Handle response result:`, result);
159
167
  if (result.shouldContinue) {
160
168
  logger.debug(`[AmazonBedrockProvider] Continuing conversation loop...`);
161
- continue;
162
169
  }
163
170
  else {
164
171
  logger.debug(`[AmazonBedrockProvider] Conversation completed with final text`);
@@ -876,7 +883,9 @@ export class AmazonBedrockProvider extends BaseProvider {
876
883
  logger.info(`🔍 [AmazonBedrockProvider] Message ${index}: role=${msg.role}, content=${JSON.stringify(msg.content)}`);
877
884
  });
878
885
  // Get all available tools
879
- const aiTools = await this.getAllTools();
886
+ // BaseProvider.stream() pre-merges base tools + external tools into options.tools
887
+ const aiTools = options.tools ||
888
+ (await this.getAllTools());
880
889
  const allTools = this.convertAISDKToolsToToolDefinitions(aiTools);
881
890
  const toolConfig = this.formatToolsForBedrock(allTools);
882
891
  const convertedMessages = this.convertToAWSMessages(this.conversationHistory);
@@ -1177,5 +1186,53 @@ export class AmazonBedrockProvider extends BaseProvider {
1177
1186
  }
1178
1187
  return new Error(`AWS Bedrock error: ${message}`);
1179
1188
  }
1189
+ /**
1190
+ * Generate embeddings for text using Amazon Bedrock embedding models
1191
+ * Uses the native AWS SDK InvokeModel command for Titan embeddings
1192
+ * @param text - The text to embed
1193
+ * @param modelName - The embedding model to use (default: amazon.titan-embed-text-v2:0)
1194
+ * @returns Promise resolving to the embedding vector
1195
+ */
1196
+ async embed(text, modelName) {
1197
+ const embeddingModelName = modelName || "amazon.titan-embed-text-v2:0";
1198
+ logger.debug("Generating embedding", {
1199
+ provider: this.providerName,
1200
+ model: embeddingModelName,
1201
+ textLength: text.length,
1202
+ });
1203
+ try {
1204
+ const { InvokeModelCommand } = await import("@aws-sdk/client-bedrock-runtime");
1205
+ // Titan Embed models expect a specific input format
1206
+ const requestBody = JSON.stringify({
1207
+ inputText: text,
1208
+ });
1209
+ const command = new InvokeModelCommand({
1210
+ modelId: embeddingModelName,
1211
+ contentType: "application/json",
1212
+ accept: "application/json",
1213
+ body: requestBody,
1214
+ });
1215
+ const response = await this.bedrockClient.send(command);
1216
+ // Parse the response
1217
+ const responseBody = JSON.parse(new TextDecoder().decode(response.body));
1218
+ if (!responseBody.embedding || !Array.isArray(responseBody.embedding)) {
1219
+ throw new Error("Invalid embedding response from Bedrock");
1220
+ }
1221
+ logger.debug("Embedding generated successfully", {
1222
+ provider: this.providerName,
1223
+ model: embeddingModelName,
1224
+ embeddingDimension: responseBody.embedding.length,
1225
+ });
1226
+ return responseBody.embedding;
1227
+ }
1228
+ catch (error) {
1229
+ logger.error("Embedding generation failed", {
1230
+ error: error instanceof Error ? error.message : String(error),
1231
+ model: embeddingModelName,
1232
+ textLength: text.length,
1233
+ });
1234
+ throw this.handleProviderError(error);
1235
+ }
1236
+ }
1180
1237
  }
1181
1238
  //# sourceMappingURL=amazonBedrock.js.map
@@ -1,8 +1,8 @@
1
1
  import { type LanguageModelV1 } from "ai";
2
- import type { ValidationSchema } from "../types/typeAliases.js";
3
- import { AIProviderName } from "../constants/enums.js";
4
- import type { StreamOptions, StreamResult } from "../types/streamTypes.js";
2
+ import { type AIProviderName } from "../constants/enums.js";
5
3
  import { BaseProvider } from "../core/baseProvider.js";
4
+ import type { StreamOptions, StreamResult } from "../types/streamTypes.js";
5
+ import type { ValidationSchema } from "../types/typeAliases.js";
6
6
  /**
7
7
  * Anthropic Provider v2 - BaseProvider Implementation
8
8
  * Fixed syntax and enhanced with proper error handling