@juspay/neurolink 9.54.6 → 9.54.7

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 (408) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/dist/action/actionInputs.d.ts +1 -1
  3. package/dist/adapters/video/directorPipeline.js +6 -0
  4. package/dist/adapters/video/vertexVideoHandler.js +6 -0
  5. package/dist/agent/directTools.d.ts +3 -23
  6. package/dist/auth/AuthProviderFactory.d.ts +1 -3
  7. package/dist/auth/anthropicOAuth.d.ts +4 -7
  8. package/dist/auth/anthropicOAuth.js +23 -0
  9. package/dist/auth/errors.d.ts +1 -1
  10. package/dist/auth/index.d.ts +11 -0
  11. package/dist/auth/index.js +14 -0
  12. package/dist/auth/middleware/AuthMiddleware.d.ts +5 -60
  13. package/dist/auth/middleware/AuthMiddleware.js +3 -0
  14. package/dist/auth/middleware/rateLimitByUser.d.ts +4 -93
  15. package/dist/auth/middleware/rateLimitByUser.js +4 -0
  16. package/dist/auth/providers/BaseAuthProvider.d.ts +1 -1
  17. package/dist/auth/providers/CognitoProvider.js +3 -0
  18. package/dist/auth/providers/KeycloakProvider.js +3 -0
  19. package/dist/auth/providers/auth0.d.ts +1 -1
  20. package/dist/auth/sessionManager.d.ts +2 -0
  21. package/dist/auth/sessionManager.js +53 -11
  22. package/dist/auth/tokenStore.d.ts +2 -0
  23. package/dist/auth/tokenStore.js +45 -4
  24. package/dist/autoresearch/tools.d.ts +1 -16
  25. package/dist/browser/neurolink.min.js +353 -353
  26. package/dist/cli/commands/config.d.ts +3 -123
  27. package/dist/cli/commands/config.js +4 -2
  28. package/dist/cli/commands/evaluate.d.ts +1 -19
  29. package/dist/cli/commands/proxy.d.ts +1 -1
  30. package/dist/cli/commands/proxy.js +3 -0
  31. package/dist/cli/commands/rag.js +3 -0
  32. package/dist/cli/commands/setup-anthropic.d.ts +2 -6
  33. package/dist/cli/commands/setup-anthropic.js +1 -1
  34. package/dist/cli/commands/setup-azure.d.ts +2 -6
  35. package/dist/cli/commands/setup-azure.js +1 -1
  36. package/dist/cli/commands/setup-bedrock.d.ts +2 -6
  37. package/dist/cli/commands/setup-bedrock.js +1 -1
  38. package/dist/cli/commands/setup-gcp.d.ts +2 -6
  39. package/dist/cli/commands/setup-google-ai.d.ts +2 -6
  40. package/dist/cli/commands/setup-google-ai.js +1 -1
  41. package/dist/cli/commands/setup-huggingface.d.ts +1 -5
  42. package/dist/cli/commands/setup-mistral.d.ts +1 -5
  43. package/dist/cli/commands/setup-openai.d.ts +2 -6
  44. package/dist/cli/commands/setup-openai.js +1 -1
  45. package/dist/cli/commands/setup.d.ts +1 -8
  46. package/dist/cli/commands/task.js +1 -0
  47. package/dist/cli/commands/voiceServer.d.ts +1 -4
  48. package/dist/cli/loop/session.js +31 -10
  49. package/dist/cli/utils/interactiveSetup.d.ts +2 -15
  50. package/dist/cli/utils/videoFileUtils.d.ts +1 -15
  51. package/dist/client/aiSdkAdapter.d.ts +1 -1
  52. package/dist/client/aiSdkAdapter.js +1 -0
  53. package/dist/client/httpClient.d.ts +1 -0
  54. package/dist/client/httpClient.js +13 -0
  55. package/dist/client/sseClient.d.ts +1 -0
  56. package/dist/client/sseClient.js +29 -0
  57. package/dist/client/streamingClient.d.ts +2 -0
  58. package/dist/client/streamingClient.js +19 -0
  59. package/dist/client/wsClient.d.ts +6 -0
  60. package/dist/client/wsClient.js +90 -10
  61. package/dist/context/budgetChecker.js +3 -1
  62. package/dist/context/contextCompactor.js +163 -143
  63. package/dist/context/fileSummarizationService.d.ts +1 -9
  64. package/dist/context/summarizationEngine.js +29 -16
  65. package/dist/core/baseProvider.js +124 -153
  66. package/dist/core/infrastructure/baseRegistry.d.ts +1 -7
  67. package/dist/core/modules/GenerationHandler.d.ts +3 -2
  68. package/dist/core/modules/GenerationHandler.js +9 -1
  69. package/dist/core/modules/StreamHandler.js +9 -0
  70. package/dist/core/modules/ToolsManager.js +18 -2
  71. package/dist/evaluation/BatchEvaluator.d.ts +1 -97
  72. package/dist/evaluation/EvaluationAggregator.d.ts +1 -118
  73. package/dist/evaluation/EvaluatorFactory.d.ts +1 -13
  74. package/dist/evaluation/EvaluatorRegistry.d.ts +1 -50
  75. package/dist/evaluation/errors/EvaluationError.d.ts +2 -27
  76. package/dist/evaluation/hooks/langfuseAdapter.d.ts +1 -39
  77. package/dist/evaluation/hooks/observabilityHooks.d.ts +3 -55
  78. package/dist/evaluation/hooks/observabilityHooks.js +3 -0
  79. package/dist/evaluation/pipeline/strategies/batchStrategy.d.ts +7 -61
  80. package/dist/evaluation/pipeline/strategies/batchStrategy.js +7 -7
  81. package/dist/evaluation/ragasEvaluator.js +54 -37
  82. package/dist/evaluation/reporting/metricsCollector.d.ts +1 -60
  83. package/dist/evaluation/reporting/reportGenerator.d.ts +1 -17
  84. package/dist/evaluation/scorers/rule/contentSimilarityScorer.d.ts +1 -29
  85. package/dist/evaluation/scorers/rule/formatScorer.d.ts +1 -42
  86. package/dist/evaluation/scorers/rule/keywordCoverageScorer.d.ts +1 -19
  87. package/dist/evaluation/scorers/rule/lengthScorer.d.ts +1 -33
  88. package/dist/factories/providerFactory.d.ts +1 -16
  89. package/dist/factories/providerFactory.js +2 -0
  90. package/dist/image-gen/ImageGenService.d.ts +3 -0
  91. package/dist/image-gen/ImageGenService.js +3 -0
  92. package/dist/lib/action/actionInputs.d.ts +1 -1
  93. package/dist/lib/adapters/video/directorPipeline.js +6 -0
  94. package/dist/lib/adapters/video/vertexVideoHandler.js +6 -0
  95. package/dist/lib/agent/directTools.d.ts +3 -23
  96. package/dist/lib/auth/AuthProviderFactory.d.ts +1 -3
  97. package/dist/lib/auth/anthropicOAuth.d.ts +4 -7
  98. package/dist/lib/auth/anthropicOAuth.js +23 -0
  99. package/dist/lib/auth/errors.d.ts +1 -1
  100. package/dist/lib/auth/index.d.ts +11 -0
  101. package/dist/lib/auth/index.js +14 -0
  102. package/dist/lib/auth/middleware/AuthMiddleware.d.ts +5 -60
  103. package/dist/lib/auth/middleware/AuthMiddleware.js +3 -0
  104. package/dist/lib/auth/middleware/rateLimitByUser.d.ts +4 -93
  105. package/dist/lib/auth/middleware/rateLimitByUser.js +4 -0
  106. package/dist/lib/auth/providers/BaseAuthProvider.d.ts +1 -1
  107. package/dist/lib/auth/providers/CognitoProvider.js +3 -0
  108. package/dist/lib/auth/providers/KeycloakProvider.js +3 -0
  109. package/dist/lib/auth/providers/auth0.d.ts +1 -1
  110. package/dist/lib/auth/sessionManager.d.ts +2 -0
  111. package/dist/lib/auth/sessionManager.js +53 -11
  112. package/dist/lib/auth/tokenStore.d.ts +2 -0
  113. package/dist/lib/auth/tokenStore.js +45 -4
  114. package/dist/lib/autoresearch/tools.d.ts +1 -16
  115. package/dist/lib/client/aiSdkAdapter.d.ts +1 -1
  116. package/dist/lib/client/aiSdkAdapter.js +1 -0
  117. package/dist/lib/client/httpClient.d.ts +1 -0
  118. package/dist/lib/client/httpClient.js +13 -0
  119. package/dist/lib/client/sseClient.d.ts +1 -0
  120. package/dist/lib/client/sseClient.js +29 -0
  121. package/dist/lib/client/streamingClient.d.ts +2 -0
  122. package/dist/lib/client/streamingClient.js +19 -0
  123. package/dist/lib/client/wsClient.d.ts +6 -0
  124. package/dist/lib/client/wsClient.js +90 -10
  125. package/dist/lib/context/budgetChecker.js +3 -1
  126. package/dist/lib/context/contextCompactor.js +163 -143
  127. package/dist/lib/context/fileSummarizationService.d.ts +1 -9
  128. package/dist/lib/context/summarizationEngine.js +29 -16
  129. package/dist/lib/core/baseProvider.js +124 -153
  130. package/dist/lib/core/infrastructure/baseRegistry.d.ts +1 -7
  131. package/dist/lib/core/modules/GenerationHandler.d.ts +3 -2
  132. package/dist/lib/core/modules/GenerationHandler.js +9 -1
  133. package/dist/lib/core/modules/StreamHandler.js +9 -0
  134. package/dist/lib/core/modules/ToolsManager.js +18 -2
  135. package/dist/lib/evaluation/BatchEvaluator.d.ts +1 -97
  136. package/dist/lib/evaluation/EvaluationAggregator.d.ts +1 -118
  137. package/dist/lib/evaluation/EvaluatorFactory.d.ts +1 -13
  138. package/dist/lib/evaluation/EvaluatorRegistry.d.ts +1 -50
  139. package/dist/lib/evaluation/errors/EvaluationError.d.ts +2 -27
  140. package/dist/lib/evaluation/hooks/langfuseAdapter.d.ts +1 -39
  141. package/dist/lib/evaluation/hooks/observabilityHooks.d.ts +3 -55
  142. package/dist/lib/evaluation/hooks/observabilityHooks.js +3 -0
  143. package/dist/lib/evaluation/pipeline/strategies/batchStrategy.d.ts +7 -61
  144. package/dist/lib/evaluation/pipeline/strategies/batchStrategy.js +7 -7
  145. package/dist/lib/evaluation/ragasEvaluator.js +54 -37
  146. package/dist/lib/evaluation/reporting/metricsCollector.d.ts +1 -60
  147. package/dist/lib/evaluation/reporting/reportGenerator.d.ts +1 -17
  148. package/dist/lib/evaluation/scorers/rule/contentSimilarityScorer.d.ts +1 -29
  149. package/dist/lib/evaluation/scorers/rule/formatScorer.d.ts +1 -42
  150. package/dist/lib/evaluation/scorers/rule/keywordCoverageScorer.d.ts +1 -19
  151. package/dist/lib/evaluation/scorers/rule/lengthScorer.d.ts +1 -33
  152. package/dist/lib/factories/providerFactory.d.ts +1 -16
  153. package/dist/lib/factories/providerFactory.js +2 -0
  154. package/dist/lib/image-gen/ImageGenService.d.ts +3 -0
  155. package/dist/lib/image-gen/ImageGenService.js +3 -0
  156. package/dist/lib/mcp/batching/requestBatcher.js +99 -73
  157. package/dist/lib/mcp/httpRateLimiter.js +3 -1
  158. package/dist/lib/mcp/httpRetryHandler.js +3 -1
  159. package/dist/lib/mcp/mcpClientFactory.js +3 -1
  160. package/dist/lib/mcp/multiServerManager.d.ts +1 -14
  161. package/dist/lib/mcp/servers/aiProviders/aiAnalysisTools.js +5 -1
  162. package/dist/lib/mcp/servers/aiProviders/aiWorkflowTools.js +1 -0
  163. package/dist/lib/mcp/toolDiscoveryService.js +70 -57
  164. package/dist/lib/mcp/toolRegistry.js +11 -1
  165. package/dist/lib/memory/memoryRetrievalTools.js +182 -141
  166. package/dist/lib/neurolink.js +236 -40
  167. package/dist/lib/observability/exporterRegistry.d.ts +3 -21
  168. package/dist/lib/observability/exporters/sentryExporter.js +1 -0
  169. package/dist/lib/observability/metricsAggregator.d.ts +1 -31
  170. package/dist/lib/observability/tokenTracker.d.ts +7 -16
  171. package/dist/lib/observability/tokenTracker.js +6 -4
  172. package/dist/lib/observability/utils/spanSerializer.d.ts +5 -1
  173. package/dist/lib/observability/utils/spanSerializer.js +24 -4
  174. package/dist/lib/processors/base/BaseFileProcessor.js +66 -53
  175. package/dist/lib/processors/document/ExcelProcessor.d.ts +1 -1
  176. package/dist/lib/processors/errors/errorHelpers.d.ts +1 -31
  177. package/dist/lib/processors/errors/errorSerializer.d.ts +1 -45
  178. package/dist/lib/processors/registry/ProcessorRegistry.js +17 -6
  179. package/dist/lib/providers/amazonBedrock.js +189 -15
  180. package/dist/lib/providers/amazonSagemaker.js +25 -11
  181. package/dist/lib/providers/anthropic.js +13 -0
  182. package/dist/lib/providers/azureOpenai.js +2 -0
  183. package/dist/lib/providers/googleAiStudio.js +82 -0
  184. package/dist/lib/providers/googleVertex.js +52 -0
  185. package/dist/lib/providers/huggingFace.js +2 -0
  186. package/dist/lib/providers/litellm.js +2 -0
  187. package/dist/lib/providers/mistral.js +2 -0
  188. package/dist/lib/providers/ollama.js +84 -5
  189. package/dist/lib/providers/openAI.d.ts +2 -0
  190. package/dist/lib/providers/openAI.js +17 -6
  191. package/dist/lib/providers/openRouter.js +2 -0
  192. package/dist/lib/providers/openaiCompatible.js +2 -0
  193. package/dist/lib/providers/sagemaker/detection.d.ts +1 -33
  194. package/dist/lib/providers/sagemaker/diagnostics.d.ts +1 -25
  195. package/dist/lib/providers/sagemaker/language-model.d.ts +1 -1
  196. package/dist/lib/proxy/proxyConfig.js +4 -0
  197. package/dist/lib/proxy/proxyEnv.d.ts +1 -17
  198. package/dist/lib/proxy/proxyTracer.d.ts +1 -36
  199. package/dist/lib/proxy/proxyTracer.js +9 -0
  200. package/dist/lib/proxy/quietDetector.d.ts +1 -7
  201. package/dist/lib/proxy/rawStreamCapture.d.ts +1 -10
  202. package/dist/lib/proxy/requestLogger.d.ts +1 -21
  203. package/dist/lib/proxy/sseInterceptor.d.ts +1 -66
  204. package/dist/lib/proxy/sseInterceptor.js +6 -0
  205. package/dist/lib/proxy/updateChecker.d.ts +1 -6
  206. package/dist/lib/proxy/updateState.d.ts +1 -12
  207. package/dist/lib/rag/chunkers/BaseChunker.js +36 -22
  208. package/dist/lib/rag/chunking/jsonChunker.d.ts +1 -1
  209. package/dist/lib/rag/errors/RAGError.d.ts +1 -2
  210. package/dist/lib/rag/ragIntegration.js +45 -32
  211. package/dist/lib/rag/reranker/reranker.js +151 -122
  212. package/dist/lib/rag/retrieval/vectorQueryTool.js +79 -65
  213. package/dist/lib/sdk/toolRegistration.d.ts +10 -44
  214. package/dist/lib/sdk/toolRegistration.js +1 -1
  215. package/dist/lib/server/middleware/abortSignal.d.ts +1 -11
  216. package/dist/lib/server/middleware/auth.d.ts +1 -21
  217. package/dist/lib/server/middleware/auth.js +12 -0
  218. package/dist/lib/server/middleware/common.js +48 -32
  219. package/dist/lib/server/middleware/deprecation.d.ts +1 -20
  220. package/dist/lib/server/middleware/rateLimit.d.ts +1 -75
  221. package/dist/lib/server/middleware/validation.d.ts +3 -81
  222. package/dist/lib/server/middleware/validation.js +3 -0
  223. package/dist/lib/server/openapi/generator.d.ts +1 -47
  224. package/dist/lib/server/routes/agentRoutes.js +112 -57
  225. package/dist/lib/server/routes/claudeProxyRoutes.d.ts +1 -6
  226. package/dist/lib/server/routes/claudeProxyRoutes.js +127 -13
  227. package/dist/lib/server/routes/healthRoutes.js +58 -12
  228. package/dist/lib/server/routes/index.d.ts +1 -26
  229. package/dist/lib/server/routes/mcpRoutes.js +40 -7
  230. package/dist/lib/server/routes/memoryRoutes.js +22 -7
  231. package/dist/lib/server/routes/openApiRoutes.js +30 -6
  232. package/dist/lib/server/routes/toolRoutes.js +140 -68
  233. package/dist/lib/server/streaming/dataStream.d.ts +1 -35
  234. package/dist/lib/server/streaming/dataStream.js +15 -0
  235. package/dist/lib/services/server/ai/observability/instrumentation.js +114 -14
  236. package/dist/lib/session/globalSessionState.d.ts +1 -10
  237. package/dist/lib/tasks/tools/taskTools.d.ts +2 -2
  238. package/dist/lib/telemetry/traceContext.d.ts +9 -0
  239. package/dist/lib/telemetry/traceContext.js +19 -0
  240. package/dist/lib/telemetry/tracers.d.ts +2 -0
  241. package/dist/lib/telemetry/tracers.js +2 -0
  242. package/dist/lib/types/action.d.ts +2 -0
  243. package/dist/lib/types/artifact.d.ts +7 -0
  244. package/dist/lib/types/auth.d.ts +125 -18
  245. package/dist/lib/types/autoresearch.d.ts +12 -0
  246. package/dist/lib/types/cli.d.ts +415 -0
  247. package/dist/lib/types/client.d.ts +34 -0
  248. package/dist/lib/types/common.d.ts +12 -41
  249. package/dist/lib/types/context.d.ts +5 -0
  250. package/dist/lib/types/evaluation.d.ts +332 -1
  251. package/dist/lib/types/file.d.ts +4 -0
  252. package/dist/lib/types/mcp.d.ts +102 -2
  253. package/dist/lib/types/middleware.d.ts +116 -0
  254. package/dist/lib/types/multimodal.d.ts +65 -0
  255. package/dist/lib/types/observability.d.ts +81 -0
  256. package/dist/lib/types/processor.d.ts +47 -0
  257. package/dist/lib/types/providers.d.ts +120 -16
  258. package/dist/lib/types/proxy.d.ts +321 -1
  259. package/dist/lib/types/rag.d.ts +22 -0
  260. package/dist/lib/types/scorer.d.ts +141 -0
  261. package/dist/lib/types/server.d.ts +99 -0
  262. package/dist/lib/types/span.d.ts +2 -1
  263. package/dist/lib/types/span.js +1 -0
  264. package/dist/lib/types/tools.d.ts +44 -0
  265. package/dist/lib/types/tts.d.ts +6 -0
  266. package/dist/lib/types/utilities.d.ts +22 -0
  267. package/dist/lib/types/workflow.d.ts +18 -0
  268. package/dist/lib/utils/async/retry.d.ts +2 -8
  269. package/dist/lib/utils/async/retry.js +9 -9
  270. package/dist/lib/utils/imageCompressor.d.ts +1 -21
  271. package/dist/lib/utils/imageCompressor.js +5 -1
  272. package/dist/lib/utils/messageBuilder.d.ts +1 -1
  273. package/dist/lib/utils/redis.d.ts +1 -4
  274. package/dist/lib/utils/toolEndEmitter.d.ts +25 -0
  275. package/dist/lib/utils/toolEndEmitter.js +65 -0
  276. package/dist/lib/workflow/config.d.ts +7 -32
  277. package/dist/lib/workflow/core/ensembleExecutor.js +28 -0
  278. package/dist/lib/workflow/core/judgeScorer.js +23 -0
  279. package/dist/lib/workflow/core/responseConditioner.js +17 -0
  280. package/dist/lib/workflow/core/workflowRunner.d.ts +1 -19
  281. package/dist/lib/workflow/core/workflowRunner.js +202 -147
  282. package/dist/mcp/batching/requestBatcher.js +99 -73
  283. package/dist/mcp/httpRateLimiter.js +3 -1
  284. package/dist/mcp/httpRetryHandler.js +3 -1
  285. package/dist/mcp/mcpClientFactory.js +3 -1
  286. package/dist/mcp/multiServerManager.d.ts +1 -14
  287. package/dist/mcp/servers/aiProviders/aiAnalysisTools.js +5 -1
  288. package/dist/mcp/servers/aiProviders/aiWorkflowTools.js +1 -0
  289. package/dist/mcp/toolDiscoveryService.js +70 -57
  290. package/dist/mcp/toolRegistry.js +11 -1
  291. package/dist/memory/memoryRetrievalTools.js +182 -141
  292. package/dist/neurolink.js +236 -40
  293. package/dist/observability/exporterRegistry.d.ts +3 -21
  294. package/dist/observability/exporters/sentryExporter.js +1 -0
  295. package/dist/observability/metricsAggregator.d.ts +1 -31
  296. package/dist/observability/tokenTracker.d.ts +7 -16
  297. package/dist/observability/tokenTracker.js +6 -4
  298. package/dist/observability/utils/spanSerializer.d.ts +5 -1
  299. package/dist/observability/utils/spanSerializer.js +24 -4
  300. package/dist/processors/base/BaseFileProcessor.js +66 -53
  301. package/dist/processors/document/ExcelProcessor.d.ts +1 -1
  302. package/dist/processors/errors/errorHelpers.d.ts +1 -31
  303. package/dist/processors/errors/errorSerializer.d.ts +1 -45
  304. package/dist/processors/registry/ProcessorRegistry.js +17 -6
  305. package/dist/providers/amazonBedrock.js +189 -15
  306. package/dist/providers/amazonSagemaker.js +25 -11
  307. package/dist/providers/anthropic.js +13 -0
  308. package/dist/providers/azureOpenai.js +2 -0
  309. package/dist/providers/googleAiStudio.js +82 -0
  310. package/dist/providers/googleVertex.js +52 -0
  311. package/dist/providers/huggingFace.js +2 -0
  312. package/dist/providers/litellm.js +2 -0
  313. package/dist/providers/mistral.js +2 -0
  314. package/dist/providers/ollama.js +84 -5
  315. package/dist/providers/openAI.d.ts +2 -0
  316. package/dist/providers/openAI.js +17 -6
  317. package/dist/providers/openRouter.js +2 -0
  318. package/dist/providers/openaiCompatible.js +2 -0
  319. package/dist/providers/sagemaker/detection.d.ts +1 -33
  320. package/dist/providers/sagemaker/diagnostics.d.ts +1 -25
  321. package/dist/providers/sagemaker/language-model.d.ts +1 -1
  322. package/dist/proxy/proxyConfig.js +4 -0
  323. package/dist/proxy/proxyEnv.d.ts +1 -17
  324. package/dist/proxy/proxyTracer.d.ts +1 -36
  325. package/dist/proxy/proxyTracer.js +9 -0
  326. package/dist/proxy/quietDetector.d.ts +1 -7
  327. package/dist/proxy/rawStreamCapture.d.ts +1 -10
  328. package/dist/proxy/requestLogger.d.ts +1 -21
  329. package/dist/proxy/sseInterceptor.d.ts +1 -66
  330. package/dist/proxy/sseInterceptor.js +6 -0
  331. package/dist/proxy/updateChecker.d.ts +1 -6
  332. package/dist/proxy/updateState.d.ts +1 -12
  333. package/dist/rag/chunkers/BaseChunker.js +36 -22
  334. package/dist/rag/chunking/jsonChunker.d.ts +1 -1
  335. package/dist/rag/errors/RAGError.d.ts +1 -2
  336. package/dist/rag/ragIntegration.js +45 -32
  337. package/dist/rag/reranker/reranker.js +151 -122
  338. package/dist/rag/retrieval/vectorQueryTool.js +79 -65
  339. package/dist/sdk/toolRegistration.d.ts +10 -44
  340. package/dist/sdk/toolRegistration.js +1 -1
  341. package/dist/server/middleware/abortSignal.d.ts +1 -11
  342. package/dist/server/middleware/auth.d.ts +1 -21
  343. package/dist/server/middleware/auth.js +12 -0
  344. package/dist/server/middleware/common.js +48 -32
  345. package/dist/server/middleware/deprecation.d.ts +1 -20
  346. package/dist/server/middleware/rateLimit.d.ts +1 -75
  347. package/dist/server/middleware/validation.d.ts +3 -81
  348. package/dist/server/middleware/validation.js +3 -0
  349. package/dist/server/openapi/generator.d.ts +1 -47
  350. package/dist/server/routes/agentRoutes.js +112 -57
  351. package/dist/server/routes/claudeProxyRoutes.d.ts +1 -6
  352. package/dist/server/routes/claudeProxyRoutes.js +127 -13
  353. package/dist/server/routes/healthRoutes.js +58 -12
  354. package/dist/server/routes/index.d.ts +1 -26
  355. package/dist/server/routes/mcpRoutes.js +40 -7
  356. package/dist/server/routes/memoryRoutes.js +22 -7
  357. package/dist/server/routes/openApiRoutes.js +30 -6
  358. package/dist/server/routes/toolRoutes.js +140 -68
  359. package/dist/server/streaming/dataStream.d.ts +1 -35
  360. package/dist/server/streaming/dataStream.js +15 -0
  361. package/dist/services/server/ai/observability/instrumentation.js +114 -14
  362. package/dist/session/globalSessionState.d.ts +1 -10
  363. package/dist/tasks/tools/taskTools.d.ts +2 -2
  364. package/dist/telemetry/traceContext.d.ts +9 -0
  365. package/dist/telemetry/traceContext.js +18 -0
  366. package/dist/telemetry/tracers.d.ts +2 -0
  367. package/dist/telemetry/tracers.js +2 -0
  368. package/dist/types/action.d.ts +2 -0
  369. package/dist/types/artifact.d.ts +7 -0
  370. package/dist/types/auth.d.ts +125 -18
  371. package/dist/types/autoresearch.d.ts +12 -0
  372. package/dist/types/cli.d.ts +415 -0
  373. package/dist/types/client.d.ts +34 -0
  374. package/dist/types/common.d.ts +12 -41
  375. package/dist/types/context.d.ts +5 -0
  376. package/dist/types/evaluation.d.ts +332 -1
  377. package/dist/types/file.d.ts +4 -0
  378. package/dist/types/mcp.d.ts +102 -2
  379. package/dist/types/middleware.d.ts +116 -0
  380. package/dist/types/multimodal.d.ts +65 -0
  381. package/dist/types/observability.d.ts +81 -0
  382. package/dist/types/processor.d.ts +47 -0
  383. package/dist/types/providers.d.ts +120 -16
  384. package/dist/types/proxy.d.ts +321 -1
  385. package/dist/types/rag.d.ts +22 -0
  386. package/dist/types/scorer.d.ts +141 -0
  387. package/dist/types/server.d.ts +99 -0
  388. package/dist/types/span.d.ts +2 -1
  389. package/dist/types/span.js +1 -0
  390. package/dist/types/tools.d.ts +44 -0
  391. package/dist/types/tts.d.ts +6 -0
  392. package/dist/types/utilities.d.ts +22 -0
  393. package/dist/types/workflow.d.ts +18 -0
  394. package/dist/utils/async/retry.d.ts +2 -8
  395. package/dist/utils/async/retry.js +9 -9
  396. package/dist/utils/imageCompressor.d.ts +1 -21
  397. package/dist/utils/imageCompressor.js +5 -1
  398. package/dist/utils/messageBuilder.d.ts +1 -1
  399. package/dist/utils/redis.d.ts +1 -4
  400. package/dist/utils/toolEndEmitter.d.ts +25 -0
  401. package/dist/utils/toolEndEmitter.js +64 -0
  402. package/dist/workflow/config.d.ts +4 -29
  403. package/dist/workflow/core/ensembleExecutor.js +28 -0
  404. package/dist/workflow/core/judgeScorer.js +23 -0
  405. package/dist/workflow/core/responseConditioner.js +17 -0
  406. package/dist/workflow/core/workflowRunner.d.ts +1 -19
  407. package/dist/workflow/core/workflowRunner.js +202 -147
  408. package/package.json +2 -1
@@ -6,11 +6,7 @@
6
6
  * Designed to be non-blocking and failure-tolerant — any error (network,
7
7
  * timeout, parse) silently returns `updateAvailable: false`.
8
8
  */
9
- type UpdateCheckResult = {
10
- currentVersion: string;
11
- latestVersion: string;
12
- updateAvailable: boolean;
13
- };
9
+ import type { UpdateCheckResult } from "../types/index.js";
14
10
  /**
15
11
  * Query npm for the latest version of `@juspay/neurolink` and compare it
16
12
  * against {@link currentVersion}.
@@ -19,4 +15,3 @@ type UpdateCheckResult = {
19
15
  * `{ updateAvailable: false, latestVersion: currentVersion }`.
20
16
  */
21
17
  export declare function checkForUpdate(currentVersion: string): Promise<UpdateCheckResult>;
22
- export {};
@@ -6,17 +6,7 @@
6
6
  * State file location: ~/.neurolink/update-state.json
7
7
  * Suppressed versions expire after 24 hours.
8
8
  */
9
- type SuppressedVersion = {
10
- suppressedAt: string;
11
- reason: string;
12
- };
13
- type UpdateState = {
14
- lastCheckAt: string;
15
- lastCheckVersion: string;
16
- suppressedVersions: Record<string, SuppressedVersion>;
17
- lastUpdateAt: string | null;
18
- lastUpdateVersion: string | null;
19
- };
9
+ import type { UpdateState } from "../types/index.js";
20
10
  /**
21
11
  * Return an empty/initial UpdateState.
22
12
  */
@@ -65,4 +55,3 @@ export declare function recordSuccessfulUpdate(version: string, stateFilePath?:
65
55
  * @param stateFilePath - Override path for testing
66
56
  */
67
57
  export declare function recordCheck(latestVersion: string, stateFilePath?: string): void;
68
- export {};
@@ -6,6 +6,8 @@
6
6
  */
7
7
  import { v4 as uuidv4 } from "uuid";
8
8
  import { ChunkingError, RAGErrorCodes } from "../errors/RAGError.js";
9
+ import { withSpan } from "../../telemetry/withSpan.js";
10
+ import { tracers } from "../../telemetry/tracers.js";
9
11
  /**
10
12
  * Default chunker configuration
11
13
  */
@@ -64,29 +66,41 @@ export class BaseChunker {
64
66
  * Chunk content into smaller pieces
65
67
  */
66
68
  async chunk(content, config) {
67
- const effectiveConfig = { ...this.config, ...config };
68
- if (!content || content.trim().length === 0) {
69
- throw new ChunkingError("Content is empty", {
70
- code: RAGErrorCodes.CHUNKING_EMPTY_CONTENT,
71
- strategy: this.strategy,
72
- contentLength: 0,
73
- });
74
- }
75
- try {
76
- const chunks = await this.doChunk(content, effectiveConfig);
77
- return this.filterChunks(chunks, effectiveConfig);
78
- }
79
- catch (error) {
80
- if (error instanceof ChunkingError) {
81
- throw error;
69
+ return withSpan({
70
+ name: "neurolink.rag.chunk",
71
+ tracer: tracers.rag,
72
+ attributes: {
73
+ "rag.chunker.strategy": this.strategy,
74
+ "rag.chunker.content_chars": content.length,
75
+ "rag.chunker.content_bytes": Buffer.byteLength(content, "utf8"),
76
+ },
77
+ }, async (span) => {
78
+ const effectiveConfig = { ...this.config, ...config };
79
+ if (!content || content.trim().length === 0) {
80
+ throw new ChunkingError("Content is empty", {
81
+ code: RAGErrorCodes.CHUNKING_EMPTY_CONTENT,
82
+ strategy: this.strategy,
83
+ contentLength: 0,
84
+ });
82
85
  }
83
- throw new ChunkingError(`Chunking failed: ${error instanceof Error ? error.message : String(error)}`, {
84
- code: RAGErrorCodes.CHUNKING_ERROR,
85
- cause: error instanceof Error ? error : undefined,
86
- strategy: this.strategy,
87
- contentLength: content.length,
88
- });
89
- }
86
+ try {
87
+ const chunks = await this.doChunk(content, effectiveConfig);
88
+ const result = this.filterChunks(chunks, effectiveConfig);
89
+ span.setAttribute("rag.chunker.chunk_count", result.length);
90
+ return result;
91
+ }
92
+ catch (error) {
93
+ if (error instanceof ChunkingError) {
94
+ throw error;
95
+ }
96
+ throw new ChunkingError(`Chunking failed: ${error instanceof Error ? error.message : String(error)}`, {
97
+ code: RAGErrorCodes.CHUNKING_ERROR,
98
+ cause: error instanceof Error ? error : undefined,
99
+ strategy: this.strategy,
100
+ contentLength: content.length,
101
+ });
102
+ }
103
+ }); // end withSpan
90
104
  }
91
105
  /**
92
106
  * Filter chunks based on minimum size
@@ -4,7 +4,7 @@
4
4
  * Splits JSON documents based on structure (arrays, objects, keys).
5
5
  * Best for API responses, configuration files, and structured data.
6
6
  */
7
- import type { Chunker, Chunk, ChunkerValidationResult, JSONChunkerConfig, BaseChunkerConfig } from "../../types/index.js";
7
+ import type { BaseChunkerConfig, Chunk, Chunker, ChunkerValidationResult, JSONChunkerConfig } from "../../types/index.js";
8
8
  /**
9
9
  * JSON-aware chunker implementation
10
10
  * Splits based on JSON structure
@@ -6,6 +6,7 @@
6
6
  * Uses the NeuroLinkFeatureError pattern for consistency.
7
7
  */
8
8
  import { NeuroLinkFeatureError } from "../../core/infrastructure/index.js";
9
+ import type { RAGErrorCode } from "../../types/index.js";
9
10
  /**
10
11
  * RAG error codes for all RAG-related operations
11
12
  */
@@ -43,7 +44,6 @@ export declare const RAGErrorCodes: {
43
44
  readonly RETRY_EXHAUSTED: "RAG_RETRY_EXHAUSTED";
44
45
  readonly INVALID_CONFIGURATION: "RAG_INVALID_CONFIGURATION";
45
46
  };
46
- type RAGErrorCode = (typeof RAGErrorCodes)[keyof typeof RAGErrorCodes];
47
47
  /**
48
48
  * RAG error factory using the infrastructure pattern
49
49
  */
@@ -242,4 +242,3 @@ export declare function isRetryableRAGError(error: unknown): boolean;
242
242
  * Type guard for partial failure errors
243
243
  */
244
244
  export declare function isPartialFailure(error: unknown): error is PipelineError;
245
- export {};
@@ -13,6 +13,8 @@ import { SpanSerializer, SpanType, SpanStatus, getMetricsAggregator, } from "../
13
13
  import { logger } from "../utils/logger.js";
14
14
  import { createChunker } from "./ChunkerFactory.js";
15
15
  import { createVectorQueryTool, InMemoryVectorStore, } from "./retrieval/vectorQueryTool.js";
16
+ import { withSpan } from "../telemetry/withSpan.js";
17
+ import { tracers } from "../telemetry/tracers.js";
16
18
  /**
17
19
  * Maps file extensions to recommended chunking strategies
18
20
  */
@@ -272,40 +274,51 @@ async function _prepareRAGToolInner(ragConfig, fallbackProvider) {
272
274
  .describe("The search query to find relevant information"),
273
275
  }),
274
276
  execute: async ({ query }) => {
275
- // For the in-memory store with simple embeddings,
276
- // generate a query embedding using the same method
277
- const queryEmbedding = generateSimpleEmbedding(query, EMBEDDING_DIMENSION);
278
- // Fetch more candidates than needed so diversity can select across files
279
- const fetchK = fileContents.length > 1 ? topK * 3 : topK;
280
- const rawResults = await vectorStore.query({
281
- indexName,
282
- queryVector: queryEmbedding,
283
- topK: fetchK,
284
- });
285
- // Apply source-file diversity for multi-file RAG
286
- const results = fileContents.length > 1
287
- ? diversifyResults(rawResults, topK)
288
- : rawResults.slice(0, topK);
289
- if (results.length === 0) {
277
+ return withSpan({
278
+ name: "neurolink.rag.search",
279
+ tracer: tracers.rag,
280
+ attributes: {
281
+ "rag.query_length": query ? String(query).length : 0,
282
+ "rag.top_k": topK ?? 5,
283
+ },
284
+ }, async (span) => {
285
+ // For the in-memory store with simple embeddings,
286
+ // generate a query embedding using the same method
287
+ const queryEmbedding = generateSimpleEmbedding(query, EMBEDDING_DIMENSION);
288
+ // Fetch more candidates than needed so diversity can select across files
289
+ const fetchK = fileContents.length > 1 ? topK * 3 : topK;
290
+ const rawResults = await vectorStore.query({
291
+ indexName,
292
+ queryVector: queryEmbedding,
293
+ topK: fetchK,
294
+ });
295
+ // Apply source-file diversity for multi-file RAG
296
+ const results = fileContents.length > 1
297
+ ? diversifyResults(rawResults, topK)
298
+ : rawResults.slice(0, topK);
299
+ if (results.length === 0) {
300
+ span.setAttribute("rag.results_count", 0);
301
+ return {
302
+ relevantContext: "No relevant documents found for the query.",
303
+ sources: [],
304
+ totalResults: 0,
305
+ };
306
+ }
307
+ const relevantContext = results
308
+ .map((r, i) => `[${i + 1}] ${r.metadata?.text || r.text || ""}`)
309
+ .join("\n\n");
310
+ span.setAttribute("rag.results_count", results.length);
290
311
  return {
291
- relevantContext: "No relevant documents found for the query.",
292
- sources: [],
293
- totalResults: 0,
312
+ relevantContext,
313
+ sources: results.map((r) => ({
314
+ id: r.id,
315
+ score: r.score,
316
+ source: r.metadata?.source,
317
+ text: (r.metadata?.text || r.text || "").slice(0, 200),
318
+ })),
319
+ totalResults: results.length,
294
320
  };
295
- }
296
- const relevantContext = results
297
- .map((r, i) => `[${i + 1}] ${r.metadata?.text || r.text || ""}`)
298
- .join("\n\n");
299
- return {
300
- relevantContext,
301
- sources: results.map((r) => ({
302
- id: r.id,
303
- score: r.score,
304
- source: r.metadata?.source,
305
- text: (r.metadata?.text || r.text || "").slice(0, 200),
306
- })),
307
- totalResults: results.length,
308
- };
321
+ });
309
322
  },
310
323
  };
311
324
  return {
@@ -4,6 +4,8 @@
4
4
  * Multi-factor scoring system for reranking retrieval results.
5
5
  * Combines semantic relevance (LLM-based), vector similarity, and position.
6
6
  */
7
+ import { withSpan } from "../../telemetry/withSpan.js";
8
+ import { tracers } from "../../telemetry/tracers.js";
7
9
  import { logger } from "../../utils/logger.js";
8
10
  /**
9
11
  * Default scoring weights
@@ -28,60 +30,73 @@ const DEFAULT_WEIGHTS = {
28
30
  * @returns Reranked results with detailed scores
29
31
  */
30
32
  export async function rerank(results, query, model, options) {
31
- const { queryEmbedding: _queryEmbedding, topK = 3, weights = DEFAULT_WEIGHTS, } = options || {};
32
- if (results.length === 0) {
33
- return [];
34
- }
35
- // Validate weights sum to 1.0
36
- const totalWeight = (weights.semantic || DEFAULT_WEIGHTS.semantic) +
37
- (weights.vector || DEFAULT_WEIGHTS.vector) +
38
- (weights.position || DEFAULT_WEIGHTS.position);
39
- if (Math.abs(totalWeight - 1.0) > 0.01) {
40
- logger.warn("[Reranker] Weights do not sum to 1.0, normalizing", {
41
- original: weights,
42
- total: totalWeight,
43
- });
44
- }
45
- const normalizedWeights = {
46
- semantic: (weights.semantic || DEFAULT_WEIGHTS.semantic) / totalWeight,
47
- vector: (weights.vector || DEFAULT_WEIGHTS.vector) / totalWeight,
48
- position: (weights.position || DEFAULT_WEIGHTS.position) / totalWeight,
49
- };
50
- const rerankedResults = [];
51
- // Process results in parallel batches for efficiency
52
- const batchSize = 5;
53
- for (let i = 0; i < results.length; i += batchSize) {
54
- const batch = results.slice(i, i + batchSize);
55
- const batchPromises = batch.map(async (result, batchIndex) => {
56
- const globalIndex = i + batchIndex;
57
- // Calculate vector score (use existing score or 0)
58
- const vectorScore = result.score ?? 0;
59
- // Calculate position score (inverse of position)
60
- const positionScore = 1 - globalIndex / results.length;
61
- // Calculate semantic score using LLM
62
- const semanticResult = await calculateSemanticScore(query, result.text || result.metadata?.text || "", model);
63
- // Combine scores
64
- const combinedScore = normalizedWeights.semantic * semanticResult.score +
65
- normalizedWeights.vector * vectorScore +
66
- normalizedWeights.position * positionScore;
67
- return {
68
- result,
69
- score: combinedScore,
70
- details: {
71
- semantic: semanticResult.score,
72
- vector: vectorScore,
73
- position: positionScore,
74
- queryAnalysis: semanticResult.analysis,
75
- },
76
- };
77
- });
78
- const batchResults = await Promise.all(batchPromises);
79
- rerankedResults.push(...batchResults);
80
- }
81
- // Sort by combined score descending
82
- rerankedResults.sort((a, b) => b.score - a.score);
83
- // Return top K results
84
- return rerankedResults.slice(0, topK);
33
+ return withSpan({
34
+ name: "neurolink.rag.rerank",
35
+ tracer: tracers.rag,
36
+ attributes: {
37
+ "rag.reranker.input_count": results.length,
38
+ "rag.reranker.top_k": options?.topK ?? 3,
39
+ "rag.reranker.query_length": query.length,
40
+ },
41
+ }, async (span) => {
42
+ const { queryEmbedding: _queryEmbedding, topK = 3, weights = DEFAULT_WEIGHTS, } = options || {};
43
+ if (results.length === 0) {
44
+ span.setAttribute("rag.reranker.output_count", 0);
45
+ return [];
46
+ }
47
+ // Validate weights sum to 1.0
48
+ const totalWeight = (weights.semantic || DEFAULT_WEIGHTS.semantic) +
49
+ (weights.vector || DEFAULT_WEIGHTS.vector) +
50
+ (weights.position || DEFAULT_WEIGHTS.position);
51
+ if (Math.abs(totalWeight - 1.0) > 0.01) {
52
+ logger.warn("[Reranker] Weights do not sum to 1.0, normalizing", {
53
+ original: weights,
54
+ total: totalWeight,
55
+ });
56
+ }
57
+ const normalizedWeights = {
58
+ semantic: (weights.semantic || DEFAULT_WEIGHTS.semantic) / totalWeight,
59
+ vector: (weights.vector || DEFAULT_WEIGHTS.vector) / totalWeight,
60
+ position: (weights.position || DEFAULT_WEIGHTS.position) / totalWeight,
61
+ };
62
+ const rerankedResults = [];
63
+ // Process results in parallel batches for efficiency
64
+ const batchSize = 5;
65
+ for (let i = 0; i < results.length; i += batchSize) {
66
+ const batch = results.slice(i, i + batchSize);
67
+ const batchPromises = batch.map(async (result, batchIndex) => {
68
+ const globalIndex = i + batchIndex;
69
+ // Calculate vector score (use existing score or 0)
70
+ const vectorScore = result.score ?? 0;
71
+ // Calculate position score (inverse of position)
72
+ const positionScore = 1 - globalIndex / results.length;
73
+ // Calculate semantic score using LLM
74
+ const semanticResult = await calculateSemanticScore(query, result.text || result.metadata?.text || "", model);
75
+ // Combine scores
76
+ const combinedScore = normalizedWeights.semantic * semanticResult.score +
77
+ normalizedWeights.vector * vectorScore +
78
+ normalizedWeights.position * positionScore;
79
+ return {
80
+ result,
81
+ score: combinedScore,
82
+ details: {
83
+ semantic: semanticResult.score,
84
+ vector: vectorScore,
85
+ position: positionScore,
86
+ queryAnalysis: semanticResult.analysis,
87
+ },
88
+ };
89
+ });
90
+ const batchResults = await Promise.all(batchPromises);
91
+ rerankedResults.push(...batchResults);
92
+ }
93
+ // Sort by combined score descending
94
+ rerankedResults.sort((a, b) => b.score - a.score);
95
+ // Return top K results
96
+ const output = rerankedResults.slice(0, topK);
97
+ span.setAttribute("rag.reranker.output_count", output.length);
98
+ return output;
99
+ }); // end withSpan
85
100
  }
86
101
  /**
87
102
  * Calculate semantic relevance score using LLM
@@ -135,24 +150,35 @@ Score:`;
135
150
  * @returns Reranked results
136
151
  */
137
152
  export async function batchRerank(results, query, model, options) {
138
- const { topK = 3, weights = DEFAULT_WEIGHTS } = options || {};
139
- if (results.length === 0) {
140
- return [];
141
- }
142
- // Normalize weights
143
- const totalWeight = (weights.semantic || DEFAULT_WEIGHTS.semantic) +
144
- (weights.vector || DEFAULT_WEIGHTS.vector) +
145
- (weights.position || DEFAULT_WEIGHTS.position);
146
- const normalizedWeights = {
147
- semantic: (weights.semantic || DEFAULT_WEIGHTS.semantic) / totalWeight,
148
- vector: (weights.vector || DEFAULT_WEIGHTS.vector) / totalWeight,
149
- position: (weights.position || DEFAULT_WEIGHTS.position) / totalWeight,
150
- };
151
- // Build batch scoring prompt
152
- const documentsText = results
153
- .map((r, i) => `[${i + 1}] ${(r.text || r.metadata?.text || "").slice(0, 300)}`)
154
- .join("\n\n");
155
- const prompt = `Rate the relevance of each document to the query on a scale of 0 to 1.
153
+ return withSpan({
154
+ name: "neurolink.rag.batchRerank",
155
+ tracer: tracers.rag,
156
+ attributes: {
157
+ "rag.reranker.input_count": results.length,
158
+ "rag.reranker.top_k": options?.topK ?? 3,
159
+ "rag.reranker.query_length": query.length,
160
+ "rag.reranker.batch": true,
161
+ },
162
+ }, async (span) => {
163
+ const { topK = 3, weights = DEFAULT_WEIGHTS } = options || {};
164
+ if (results.length === 0) {
165
+ span.setAttribute("rag.reranker.output_count", 0);
166
+ return [];
167
+ }
168
+ // Normalize weights
169
+ const totalWeight = (weights.semantic || DEFAULT_WEIGHTS.semantic) +
170
+ (weights.vector || DEFAULT_WEIGHTS.vector) +
171
+ (weights.position || DEFAULT_WEIGHTS.position);
172
+ const normalizedWeights = {
173
+ semantic: (weights.semantic || DEFAULT_WEIGHTS.semantic) / totalWeight,
174
+ vector: (weights.vector || DEFAULT_WEIGHTS.vector) / totalWeight,
175
+ position: (weights.position || DEFAULT_WEIGHTS.position) / totalWeight,
176
+ };
177
+ // Build batch scoring prompt
178
+ const documentsText = results
179
+ .map((r, i) => `[${i + 1}] ${(r.text || r.metadata?.text || "").slice(0, 300)}`)
180
+ .join("\n\n");
181
+ const prompt = `Rate the relevance of each document to the query on a scale of 0 to 1.
156
182
 
157
183
  Query: ${query}
158
184
 
@@ -161,58 +187,61 @@ ${documentsText}
161
187
 
162
188
  For each document, provide a score between 0 and 1.
163
189
  Respond with only the scores, one per line, in order:`;
164
- try {
165
- const result = await model.generate({
166
- prompt,
167
- maxTokens: 50,
168
- temperature: 0,
169
- });
170
- // Parse scores from response
171
- const scoreLines = (result?.content || "")
172
- .trim()
173
- .split("\n")
174
- .map((line) => line.trim())
175
- .filter((line) => line.length > 0);
176
- const semanticScores = [];
177
- for (let i = 0; i < results.length; i++) {
178
- const scoreLine = scoreLines[i];
179
- if (scoreLine) {
180
- const score = parseFloat(scoreLine.match(/[\d.]+/)?.[0] || "0.5");
181
- semanticScores.push(isNaN(score) || score < 0 || score > 1 ? 0.5 : score);
182
- }
183
- else {
184
- semanticScores.push(0.5);
190
+ try {
191
+ const result = await model.generate({
192
+ prompt,
193
+ maxTokens: 50,
194
+ temperature: 0,
195
+ });
196
+ // Parse scores from response
197
+ const scoreLines = (result?.content || "")
198
+ .trim()
199
+ .split("\n")
200
+ .map((line) => line.trim())
201
+ .filter((line) => line.length > 0);
202
+ const semanticScores = [];
203
+ for (let i = 0; i < results.length; i++) {
204
+ const scoreLine = scoreLines[i];
205
+ if (scoreLine) {
206
+ const score = parseFloat(scoreLine.match(/[\d.]+/)?.[0] || "0.5");
207
+ semanticScores.push(isNaN(score) || score < 0 || score > 1 ? 0.5 : score);
208
+ }
209
+ else {
210
+ semanticScores.push(0.5);
211
+ }
185
212
  }
213
+ // Calculate combined scores
214
+ const rerankedResults = results.map((result, i) => {
215
+ const vectorScore = result.score ?? 0;
216
+ const positionScore = 1 - i / results.length;
217
+ const semanticScore = semanticScores[i] ?? 0.5;
218
+ const combinedScore = normalizedWeights.semantic * semanticScore +
219
+ normalizedWeights.vector * vectorScore +
220
+ normalizedWeights.position * positionScore;
221
+ return {
222
+ result,
223
+ score: combinedScore,
224
+ details: {
225
+ semantic: semanticScore,
226
+ vector: vectorScore,
227
+ position: positionScore,
228
+ },
229
+ };
230
+ });
231
+ // Sort and return top K
232
+ rerankedResults.sort((a, b) => b.score - a.score);
233
+ const output = rerankedResults.slice(0, topK);
234
+ span.setAttribute("rag.reranker.output_count", output.length);
235
+ return output;
186
236
  }
187
- // Calculate combined scores
188
- const rerankedResults = results.map((result, i) => {
189
- const vectorScore = result.score ?? 0;
190
- const positionScore = 1 - i / results.length;
191
- const semanticScore = semanticScores[i] ?? 0.5;
192
- const combinedScore = normalizedWeights.semantic * semanticScore +
193
- normalizedWeights.vector * vectorScore +
194
- normalizedWeights.position * positionScore;
195
- return {
196
- result,
197
- score: combinedScore,
198
- details: {
199
- semantic: semanticScore,
200
- vector: vectorScore,
201
- position: positionScore,
202
- },
203
- };
204
- });
205
- // Sort and return top K
206
- rerankedResults.sort((a, b) => b.score - a.score);
207
- return rerankedResults.slice(0, topK);
208
- }
209
- catch (error) {
210
- logger.warn("[Reranker] Batch scoring failed, using individual scoring", {
211
- error: error instanceof Error ? error.message : String(error),
212
- });
213
- // Fall back to individual scoring
214
- return rerank(results, query, model, options);
215
- }
237
+ catch (error) {
238
+ logger.warn("[Reranker] Batch scoring failed, using individual scoring", {
239
+ error: error instanceof Error ? error.message : String(error),
240
+ });
241
+ // Fall back to individual scoring
242
+ return rerank(results, query, model, options);
243
+ }
244
+ }); // end withSpan
216
245
  }
217
246
  /**
218
247
  * Simple position-based reranker (no LLM required)