@juspay/neurolink 9.54.5 → 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.
- package/CHANGELOG.md +4 -0
- package/dist/action/actionInputs.d.ts +1 -1
- package/dist/adapters/video/directorPipeline.js +6 -0
- package/dist/adapters/video/vertexVideoHandler.js +6 -0
- package/dist/agent/directTools.d.ts +3 -23
- package/dist/auth/AuthProviderFactory.d.ts +1 -3
- package/dist/auth/anthropicOAuth.d.ts +4 -7
- package/dist/auth/anthropicOAuth.js +23 -0
- package/dist/auth/errors.d.ts +1 -1
- package/dist/auth/index.d.ts +11 -0
- package/dist/auth/index.js +14 -0
- package/dist/auth/middleware/AuthMiddleware.d.ts +5 -60
- package/dist/auth/middleware/AuthMiddleware.js +3 -0
- package/dist/auth/middleware/rateLimitByUser.d.ts +4 -93
- package/dist/auth/middleware/rateLimitByUser.js +4 -0
- package/dist/auth/providers/BaseAuthProvider.d.ts +1 -1
- package/dist/auth/providers/CognitoProvider.js +3 -0
- package/dist/auth/providers/KeycloakProvider.js +3 -0
- package/dist/auth/providers/auth0.d.ts +1 -1
- package/dist/auth/sessionManager.d.ts +2 -0
- package/dist/auth/sessionManager.js +53 -11
- package/dist/auth/tokenStore.d.ts +2 -1
- package/dist/auth/tokenStore.js +45 -4
- package/dist/autoresearch/tools.d.ts +1 -16
- package/dist/browser/neurolink.min.js +353 -353
- package/dist/cli/commands/config.d.ts +3 -123
- package/dist/cli/commands/config.js +4 -2
- package/dist/cli/commands/evaluate.d.ts +1 -19
- package/dist/cli/commands/proxy.d.ts +1 -1
- package/dist/cli/commands/proxy.js +3 -0
- package/dist/cli/commands/rag.js +3 -0
- package/dist/cli/commands/setup-anthropic.d.ts +2 -6
- package/dist/cli/commands/setup-anthropic.js +1 -1
- package/dist/cli/commands/setup-azure.d.ts +2 -6
- package/dist/cli/commands/setup-azure.js +1 -1
- package/dist/cli/commands/setup-bedrock.d.ts +2 -6
- package/dist/cli/commands/setup-bedrock.js +1 -1
- package/dist/cli/commands/setup-gcp.d.ts +2 -6
- package/dist/cli/commands/setup-google-ai.d.ts +2 -6
- package/dist/cli/commands/setup-google-ai.js +1 -1
- package/dist/cli/commands/setup-huggingface.d.ts +1 -5
- package/dist/cli/commands/setup-mistral.d.ts +1 -5
- package/dist/cli/commands/setup-openai.d.ts +2 -6
- package/dist/cli/commands/setup-openai.js +1 -1
- package/dist/cli/commands/setup.d.ts +1 -8
- package/dist/cli/commands/task.js +1 -0
- package/dist/cli/commands/voiceServer.d.ts +1 -4
- package/dist/cli/loop/session.js +31 -10
- package/dist/cli/utils/interactiveSetup.d.ts +2 -15
- package/dist/cli/utils/videoFileUtils.d.ts +1 -15
- package/dist/client/aiSdkAdapter.d.ts +1 -1
- package/dist/client/aiSdkAdapter.js +1 -0
- package/dist/client/httpClient.d.ts +2 -2
- package/dist/client/httpClient.js +13 -0
- package/dist/client/sseClient.d.ts +2 -2
- package/dist/client/sseClient.js +29 -0
- package/dist/client/streamingClient.d.ts +2 -0
- package/dist/client/streamingClient.js +19 -0
- package/dist/client/wsClient.d.ts +7 -2
- package/dist/client/wsClient.js +90 -10
- package/dist/context/budgetChecker.js +3 -1
- package/dist/context/contextCompactor.js +163 -143
- package/dist/context/fileSummarizationService.d.ts +1 -9
- package/dist/context/summarizationEngine.js +29 -16
- package/dist/core/baseProvider.js +124 -153
- package/dist/core/infrastructure/baseRegistry.d.ts +1 -7
- package/dist/core/modules/GenerationHandler.d.ts +3 -2
- package/dist/core/modules/GenerationHandler.js +9 -1
- package/dist/core/modules/StreamHandler.js +9 -0
- package/dist/core/modules/ToolsManager.js +18 -2
- package/dist/core/toolEvents.d.ts +0 -1
- package/dist/evaluation/BatchEvaluator.d.ts +1 -97
- package/dist/evaluation/EvaluationAggregator.d.ts +1 -118
- package/dist/evaluation/EvaluatorFactory.d.ts +1 -13
- package/dist/evaluation/EvaluatorRegistry.d.ts +1 -50
- package/dist/evaluation/errors/EvaluationError.d.ts +2 -27
- package/dist/evaluation/hooks/langfuseAdapter.d.ts +1 -39
- package/dist/evaluation/hooks/observabilityHooks.d.ts +3 -55
- package/dist/evaluation/hooks/observabilityHooks.js +3 -0
- package/dist/evaluation/pipeline/strategies/batchStrategy.d.ts +7 -61
- package/dist/evaluation/pipeline/strategies/batchStrategy.js +7 -7
- package/dist/evaluation/ragasEvaluator.js +54 -37
- package/dist/evaluation/reporting/metricsCollector.d.ts +1 -60
- package/dist/evaluation/reporting/reportGenerator.d.ts +1 -17
- package/dist/evaluation/scorers/rule/contentSimilarityScorer.d.ts +1 -29
- package/dist/evaluation/scorers/rule/formatScorer.d.ts +1 -42
- package/dist/evaluation/scorers/rule/keywordCoverageScorer.d.ts +1 -19
- package/dist/evaluation/scorers/rule/lengthScorer.d.ts +1 -33
- package/dist/factories/providerFactory.d.ts +1 -16
- package/dist/factories/providerFactory.js +2 -0
- package/dist/image-gen/ImageGenService.d.ts +3 -0
- package/dist/image-gen/ImageGenService.js +3 -0
- package/dist/lib/action/actionInputs.d.ts +1 -1
- package/dist/lib/adapters/video/directorPipeline.js +6 -0
- package/dist/lib/adapters/video/vertexVideoHandler.js +6 -0
- package/dist/lib/agent/directTools.d.ts +3 -23
- package/dist/lib/auth/AuthProviderFactory.d.ts +1 -3
- package/dist/lib/auth/anthropicOAuth.d.ts +4 -7
- package/dist/lib/auth/anthropicOAuth.js +23 -0
- package/dist/lib/auth/errors.d.ts +1 -1
- package/dist/lib/auth/index.d.ts +11 -0
- package/dist/lib/auth/index.js +14 -0
- package/dist/lib/auth/middleware/AuthMiddleware.d.ts +5 -60
- package/dist/lib/auth/middleware/AuthMiddleware.js +3 -0
- package/dist/lib/auth/middleware/rateLimitByUser.d.ts +4 -93
- package/dist/lib/auth/middleware/rateLimitByUser.js +4 -0
- package/dist/lib/auth/providers/BaseAuthProvider.d.ts +1 -1
- package/dist/lib/auth/providers/CognitoProvider.js +3 -0
- package/dist/lib/auth/providers/KeycloakProvider.js +3 -0
- package/dist/lib/auth/providers/auth0.d.ts +1 -1
- package/dist/lib/auth/sessionManager.d.ts +2 -0
- package/dist/lib/auth/sessionManager.js +53 -11
- package/dist/lib/auth/tokenStore.d.ts +2 -1
- package/dist/lib/auth/tokenStore.js +45 -4
- package/dist/lib/autoresearch/tools.d.ts +1 -16
- package/dist/lib/client/aiSdkAdapter.d.ts +1 -1
- package/dist/lib/client/aiSdkAdapter.js +1 -0
- package/dist/lib/client/httpClient.d.ts +2 -2
- package/dist/lib/client/httpClient.js +13 -0
- package/dist/lib/client/sseClient.d.ts +2 -2
- package/dist/lib/client/sseClient.js +29 -0
- package/dist/lib/client/streamingClient.d.ts +2 -0
- package/dist/lib/client/streamingClient.js +19 -0
- package/dist/lib/client/wsClient.d.ts +7 -2
- package/dist/lib/client/wsClient.js +90 -10
- package/dist/lib/context/budgetChecker.js +3 -1
- package/dist/lib/context/contextCompactor.js +163 -143
- package/dist/lib/context/fileSummarizationService.d.ts +1 -9
- package/dist/lib/context/summarizationEngine.js +29 -16
- package/dist/lib/core/baseProvider.js +124 -153
- package/dist/lib/core/infrastructure/baseRegistry.d.ts +1 -7
- package/dist/lib/core/modules/GenerationHandler.d.ts +3 -2
- package/dist/lib/core/modules/GenerationHandler.js +9 -1
- package/dist/lib/core/modules/StreamHandler.js +9 -0
- package/dist/lib/core/modules/ToolsManager.js +18 -2
- package/dist/lib/core/toolEvents.d.ts +0 -1
- package/dist/lib/evaluation/BatchEvaluator.d.ts +1 -97
- package/dist/lib/evaluation/EvaluationAggregator.d.ts +1 -118
- package/dist/lib/evaluation/EvaluatorFactory.d.ts +1 -13
- package/dist/lib/evaluation/EvaluatorRegistry.d.ts +1 -50
- package/dist/lib/evaluation/errors/EvaluationError.d.ts +2 -27
- package/dist/lib/evaluation/hooks/langfuseAdapter.d.ts +1 -39
- package/dist/lib/evaluation/hooks/observabilityHooks.d.ts +3 -55
- package/dist/lib/evaluation/hooks/observabilityHooks.js +3 -0
- package/dist/lib/evaluation/pipeline/strategies/batchStrategy.d.ts +7 -61
- package/dist/lib/evaluation/pipeline/strategies/batchStrategy.js +7 -7
- package/dist/lib/evaluation/ragasEvaluator.js +54 -37
- package/dist/lib/evaluation/reporting/metricsCollector.d.ts +1 -60
- package/dist/lib/evaluation/reporting/reportGenerator.d.ts +1 -17
- package/dist/lib/evaluation/scorers/rule/contentSimilarityScorer.d.ts +1 -29
- package/dist/lib/evaluation/scorers/rule/formatScorer.d.ts +1 -42
- package/dist/lib/evaluation/scorers/rule/keywordCoverageScorer.d.ts +1 -19
- package/dist/lib/evaluation/scorers/rule/lengthScorer.d.ts +1 -33
- package/dist/lib/factories/providerFactory.d.ts +1 -16
- package/dist/lib/factories/providerFactory.js +2 -0
- package/dist/lib/image-gen/ImageGenService.d.ts +3 -0
- package/dist/lib/image-gen/ImageGenService.js +3 -0
- package/dist/lib/mcp/batching/requestBatcher.js +99 -73
- package/dist/lib/mcp/httpRateLimiter.js +3 -1
- package/dist/lib/mcp/httpRetryHandler.js +3 -1
- package/dist/lib/mcp/mcpClientFactory.js +3 -1
- package/dist/lib/mcp/multiServerManager.d.ts +1 -14
- package/dist/lib/mcp/servers/aiProviders/aiAnalysisTools.js +5 -1
- package/dist/lib/mcp/servers/aiProviders/aiWorkflowTools.js +1 -0
- package/dist/lib/mcp/toolDiscoveryService.js +70 -57
- package/dist/lib/mcp/toolRegistry.js +11 -1
- package/dist/lib/memory/hippocampusInitializer.d.ts +1 -2
- package/dist/lib/memory/hippocampusInitializer.js +1 -1
- package/dist/lib/memory/memoryRetrievalTools.js +182 -141
- package/dist/lib/models/anthropicModels.d.ts +0 -1
- package/dist/lib/models/anthropicModels.js +1 -0
- package/dist/lib/neurolink.js +237 -41
- package/dist/lib/observability/exporterRegistry.d.ts +3 -22
- package/dist/lib/observability/exporters/sentryExporter.js +1 -0
- package/dist/lib/observability/metricsAggregator.d.ts +1 -31
- package/dist/lib/observability/retryPolicy.d.ts +0 -1
- package/dist/lib/observability/sampling/samplers.d.ts +0 -1
- package/dist/lib/observability/spanProcessor.d.ts +0 -1
- package/dist/lib/observability/tokenTracker.d.ts +7 -16
- package/dist/lib/observability/tokenTracker.js +6 -4
- package/dist/lib/observability/utils/spanSerializer.d.ts +5 -1
- package/dist/lib/observability/utils/spanSerializer.js +24 -4
- package/dist/lib/processors/base/BaseFileProcessor.js +66 -53
- package/dist/lib/processors/document/ExcelProcessor.d.ts +1 -1
- package/dist/lib/processors/errors/errorHelpers.d.ts +1 -31
- package/dist/lib/processors/errors/errorSerializer.d.ts +1 -45
- package/dist/lib/processors/registry/ProcessorRegistry.js +17 -6
- package/dist/lib/providers/amazonBedrock.js +189 -15
- package/dist/lib/providers/amazonSagemaker.js +25 -11
- package/dist/lib/providers/anthropic.js +13 -0
- package/dist/lib/providers/azureOpenai.js +2 -0
- package/dist/lib/providers/googleAiStudio.js +82 -0
- package/dist/lib/providers/googleNativeGemini3.d.ts +1 -2
- package/dist/lib/providers/googleVertex.js +52 -0
- package/dist/lib/providers/huggingFace.js +2 -0
- package/dist/lib/providers/litellm.js +2 -0
- package/dist/lib/providers/mistral.js +2 -0
- package/dist/lib/providers/ollama.js +84 -5
- package/dist/lib/providers/openAI.d.ts +2 -0
- package/dist/lib/providers/openAI.js +17 -6
- package/dist/lib/providers/openRouter.js +2 -0
- package/dist/lib/providers/openaiCompatible.js +2 -0
- package/dist/lib/providers/sagemaker/detection.d.ts +1 -33
- package/dist/lib/providers/sagemaker/diagnostics.d.ts +1 -25
- package/dist/lib/providers/sagemaker/language-model.d.ts +1 -1
- package/dist/lib/proxy/proxyConfig.js +4 -0
- package/dist/lib/proxy/proxyEnv.d.ts +1 -17
- package/dist/lib/proxy/proxyHealth.d.ts +0 -1
- package/dist/lib/proxy/proxyTracer.d.ts +1 -36
- package/dist/lib/proxy/proxyTracer.js +9 -0
- package/dist/lib/proxy/quietDetector.d.ts +1 -7
- package/dist/lib/proxy/rawStreamCapture.d.ts +1 -10
- package/dist/lib/proxy/requestLogger.d.ts +1 -21
- package/dist/lib/proxy/routingPolicy.d.ts +1 -2
- package/dist/lib/proxy/sseInterceptor.d.ts +1 -66
- package/dist/lib/proxy/sseInterceptor.js +6 -0
- package/dist/lib/proxy/updateChecker.d.ts +1 -6
- package/dist/lib/proxy/updateState.d.ts +1 -12
- package/dist/lib/rag/chunkers/BaseChunker.js +36 -22
- package/dist/lib/rag/chunking/jsonChunker.d.ts +1 -1
- package/dist/lib/rag/errors/RAGError.d.ts +1 -2
- package/dist/lib/rag/ragIntegration.js +45 -32
- package/dist/lib/rag/reranker/reranker.js +151 -122
- package/dist/lib/rag/retrieval/vectorQueryTool.js +79 -65
- package/dist/lib/sdk/toolRegistration.d.ts +10 -44
- package/dist/lib/sdk/toolRegistration.js +1 -1
- package/dist/lib/server/middleware/abortSignal.d.ts +1 -11
- package/dist/lib/server/middleware/auth.d.ts +1 -21
- package/dist/lib/server/middleware/auth.js +12 -0
- package/dist/lib/server/middleware/common.js +48 -32
- package/dist/lib/server/middleware/deprecation.d.ts +1 -20
- package/dist/lib/server/middleware/rateLimit.d.ts +1 -75
- package/dist/lib/server/middleware/validation.d.ts +3 -81
- package/dist/lib/server/middleware/validation.js +3 -0
- package/dist/lib/server/openapi/generator.d.ts +1 -47
- package/dist/lib/server/routes/agentRoutes.js +112 -57
- package/dist/lib/server/routes/claudeProxyRoutes.d.ts +1 -6
- package/dist/lib/server/routes/claudeProxyRoutes.js +127 -13
- package/dist/lib/server/routes/healthRoutes.js +58 -12
- package/dist/lib/server/routes/index.d.ts +1 -26
- package/dist/lib/server/routes/mcpRoutes.js +40 -7
- package/dist/lib/server/routes/memoryRoutes.js +22 -7
- package/dist/lib/server/routes/openApiRoutes.js +30 -6
- package/dist/lib/server/routes/toolRoutes.js +140 -68
- package/dist/lib/server/streaming/dataStream.d.ts +1 -35
- package/dist/lib/server/streaming/dataStream.js +15 -0
- package/dist/lib/services/server/ai/observability/instrumentation.js +114 -14
- package/dist/lib/session/globalSessionState.d.ts +1 -10
- package/dist/lib/tasks/tools/taskTools.d.ts +2 -2
- package/dist/lib/telemetry/traceContext.d.ts +9 -0
- package/dist/lib/telemetry/traceContext.js +19 -0
- package/dist/lib/telemetry/tracers.d.ts +2 -0
- package/dist/lib/telemetry/tracers.js +2 -0
- package/dist/lib/types/action.d.ts +2 -0
- package/dist/lib/types/artifact.d.ts +7 -0
- package/dist/lib/types/auth.d.ts +125 -18
- package/dist/lib/types/autoresearch.d.ts +12 -0
- package/dist/lib/types/cli.d.ts +415 -0
- package/dist/lib/types/client.d.ts +34 -0
- package/dist/lib/types/common.d.ts +12 -41
- package/dist/lib/types/context.d.ts +5 -0
- package/dist/lib/types/evaluation.d.ts +332 -1
- package/dist/lib/types/file.d.ts +4 -0
- package/dist/lib/types/mcp.d.ts +102 -2
- package/dist/lib/types/middleware.d.ts +116 -0
- package/dist/lib/types/multimodal.d.ts +65 -0
- package/dist/lib/types/observability.d.ts +81 -0
- package/dist/lib/types/processor.d.ts +47 -0
- package/dist/lib/types/providers.d.ts +120 -16
- package/dist/lib/types/proxy.d.ts +321 -1
- package/dist/lib/types/rag.d.ts +22 -0
- package/dist/lib/types/scorer.d.ts +141 -0
- package/dist/lib/types/server.d.ts +99 -0
- package/dist/lib/types/span.d.ts +2 -1
- package/dist/lib/types/span.js +1 -0
- package/dist/lib/types/tools.d.ts +44 -0
- package/dist/lib/types/tts.d.ts +6 -0
- package/dist/lib/types/utilities.d.ts +22 -0
- package/dist/lib/types/workflow.d.ts +18 -0
- package/dist/lib/utils/async/retry.d.ts +2 -8
- package/dist/lib/utils/async/retry.js +9 -9
- package/dist/lib/utils/imageCompressor.d.ts +1 -21
- package/dist/lib/utils/imageCompressor.js +5 -1
- package/dist/lib/utils/messageBuilder.d.ts +1 -1
- package/dist/lib/utils/redis.d.ts +1 -4
- package/dist/lib/utils/sanitizers/filename.d.ts +0 -1
- package/dist/lib/utils/toolEndEmitter.d.ts +25 -0
- package/dist/lib/utils/toolEndEmitter.js +65 -0
- package/dist/lib/workflow/config.d.ts +7 -32
- package/dist/lib/workflow/core/ensembleExecutor.js +28 -0
- package/dist/lib/workflow/core/judgeScorer.js +23 -0
- package/dist/lib/workflow/core/responseConditioner.js +17 -0
- package/dist/lib/workflow/core/workflowRunner.d.ts +1 -19
- package/dist/lib/workflow/core/workflowRunner.js +202 -147
- package/dist/mcp/batching/requestBatcher.js +99 -73
- package/dist/mcp/httpRateLimiter.js +3 -1
- package/dist/mcp/httpRetryHandler.js +3 -1
- package/dist/mcp/mcpClientFactory.js +3 -1
- package/dist/mcp/multiServerManager.d.ts +1 -14
- package/dist/mcp/servers/aiProviders/aiAnalysisTools.js +5 -1
- package/dist/mcp/servers/aiProviders/aiWorkflowTools.js +1 -0
- package/dist/mcp/toolDiscoveryService.js +70 -57
- package/dist/mcp/toolRegistry.js +11 -1
- package/dist/memory/hippocampusInitializer.d.ts +1 -2
- package/dist/memory/hippocampusInitializer.js +1 -1
- package/dist/memory/memoryRetrievalTools.js +182 -141
- package/dist/models/anthropicModels.d.ts +0 -1
- package/dist/models/anthropicModels.js +1 -0
- package/dist/neurolink.js +237 -41
- package/dist/observability/exporterRegistry.d.ts +3 -22
- package/dist/observability/exporters/sentryExporter.js +1 -0
- package/dist/observability/metricsAggregator.d.ts +1 -31
- package/dist/observability/retryPolicy.d.ts +0 -1
- package/dist/observability/sampling/samplers.d.ts +0 -1
- package/dist/observability/spanProcessor.d.ts +0 -1
- package/dist/observability/tokenTracker.d.ts +7 -16
- package/dist/observability/tokenTracker.js +6 -4
- package/dist/observability/utils/spanSerializer.d.ts +5 -1
- package/dist/observability/utils/spanSerializer.js +24 -4
- package/dist/processors/base/BaseFileProcessor.js +66 -53
- package/dist/processors/document/ExcelProcessor.d.ts +1 -1
- package/dist/processors/errors/errorHelpers.d.ts +1 -31
- package/dist/processors/errors/errorSerializer.d.ts +1 -45
- package/dist/processors/registry/ProcessorRegistry.js +17 -6
- package/dist/providers/amazonBedrock.js +189 -15
- package/dist/providers/amazonSagemaker.js +25 -11
- package/dist/providers/anthropic.js +13 -0
- package/dist/providers/azureOpenai.js +2 -0
- package/dist/providers/googleAiStudio.js +82 -0
- package/dist/providers/googleNativeGemini3.d.ts +1 -2
- package/dist/providers/googleVertex.js +52 -0
- package/dist/providers/huggingFace.js +2 -0
- package/dist/providers/litellm.js +2 -0
- package/dist/providers/mistral.js +2 -0
- package/dist/providers/ollama.js +84 -5
- package/dist/providers/openAI.d.ts +2 -0
- package/dist/providers/openAI.js +17 -6
- package/dist/providers/openRouter.js +2 -0
- package/dist/providers/openaiCompatible.js +2 -0
- package/dist/providers/sagemaker/detection.d.ts +1 -33
- package/dist/providers/sagemaker/diagnostics.d.ts +1 -25
- package/dist/providers/sagemaker/language-model.d.ts +1 -1
- package/dist/proxy/proxyConfig.js +4 -0
- package/dist/proxy/proxyEnv.d.ts +1 -17
- package/dist/proxy/proxyHealth.d.ts +0 -1
- package/dist/proxy/proxyTracer.d.ts +1 -36
- package/dist/proxy/proxyTracer.js +9 -0
- package/dist/proxy/quietDetector.d.ts +1 -7
- package/dist/proxy/rawStreamCapture.d.ts +1 -10
- package/dist/proxy/requestLogger.d.ts +1 -21
- package/dist/proxy/routingPolicy.d.ts +1 -2
- package/dist/proxy/sseInterceptor.d.ts +1 -66
- package/dist/proxy/sseInterceptor.js +6 -0
- package/dist/proxy/updateChecker.d.ts +1 -6
- package/dist/proxy/updateState.d.ts +1 -12
- package/dist/rag/chunkers/BaseChunker.js +36 -22
- package/dist/rag/chunking/jsonChunker.d.ts +1 -1
- package/dist/rag/errors/RAGError.d.ts +1 -2
- package/dist/rag/ragIntegration.js +45 -32
- package/dist/rag/reranker/reranker.js +151 -122
- package/dist/rag/retrieval/vectorQueryTool.js +79 -65
- package/dist/sdk/toolRegistration.d.ts +10 -44
- package/dist/sdk/toolRegistration.js +1 -1
- package/dist/server/middleware/abortSignal.d.ts +1 -11
- package/dist/server/middleware/auth.d.ts +1 -21
- package/dist/server/middleware/auth.js +12 -0
- package/dist/server/middleware/common.js +48 -32
- package/dist/server/middleware/deprecation.d.ts +1 -20
- package/dist/server/middleware/rateLimit.d.ts +1 -75
- package/dist/server/middleware/validation.d.ts +3 -81
- package/dist/server/middleware/validation.js +3 -0
- package/dist/server/openapi/generator.d.ts +1 -47
- package/dist/server/routes/agentRoutes.js +112 -57
- package/dist/server/routes/claudeProxyRoutes.d.ts +1 -6
- package/dist/server/routes/claudeProxyRoutes.js +127 -13
- package/dist/server/routes/healthRoutes.js +58 -12
- package/dist/server/routes/index.d.ts +1 -26
- package/dist/server/routes/mcpRoutes.js +40 -7
- package/dist/server/routes/memoryRoutes.js +22 -7
- package/dist/server/routes/openApiRoutes.js +30 -6
- package/dist/server/routes/toolRoutes.js +140 -68
- package/dist/server/streaming/dataStream.d.ts +1 -35
- package/dist/server/streaming/dataStream.js +15 -0
- package/dist/services/server/ai/observability/instrumentation.js +114 -14
- package/dist/session/globalSessionState.d.ts +1 -10
- package/dist/tasks/tools/taskTools.d.ts +2 -2
- package/dist/telemetry/traceContext.d.ts +9 -0
- package/dist/telemetry/traceContext.js +18 -0
- package/dist/telemetry/tracers.d.ts +2 -0
- package/dist/telemetry/tracers.js +2 -0
- package/dist/types/action.d.ts +2 -0
- package/dist/types/artifact.d.ts +7 -0
- package/dist/types/auth.d.ts +125 -18
- package/dist/types/autoresearch.d.ts +12 -0
- package/dist/types/cli.d.ts +415 -0
- package/dist/types/client.d.ts +34 -0
- package/dist/types/common.d.ts +12 -41
- package/dist/types/context.d.ts +5 -0
- package/dist/types/evaluation.d.ts +332 -1
- package/dist/types/file.d.ts +4 -0
- package/dist/types/mcp.d.ts +102 -2
- package/dist/types/middleware.d.ts +116 -0
- package/dist/types/multimodal.d.ts +65 -0
- package/dist/types/observability.d.ts +81 -0
- package/dist/types/processor.d.ts +47 -0
- package/dist/types/providers.d.ts +120 -16
- package/dist/types/proxy.d.ts +321 -1
- package/dist/types/rag.d.ts +22 -0
- package/dist/types/scorer.d.ts +141 -0
- package/dist/types/server.d.ts +99 -0
- package/dist/types/span.d.ts +2 -1
- package/dist/types/span.js +1 -0
- package/dist/types/tools.d.ts +44 -0
- package/dist/types/tts.d.ts +6 -0
- package/dist/types/utilities.d.ts +22 -0
- package/dist/types/workflow.d.ts +18 -0
- package/dist/utils/async/retry.d.ts +2 -8
- package/dist/utils/async/retry.js +9 -9
- package/dist/utils/imageCompressor.d.ts +1 -21
- package/dist/utils/imageCompressor.js +5 -1
- package/dist/utils/messageBuilder.d.ts +1 -1
- package/dist/utils/redis.d.ts +1 -4
- package/dist/utils/sanitizers/filename.d.ts +0 -1
- package/dist/utils/toolEndEmitter.d.ts +25 -0
- package/dist/utils/toolEndEmitter.js +64 -0
- package/dist/workflow/config.d.ts +4 -29
- package/dist/workflow/core/ensembleExecutor.js +28 -0
- package/dist/workflow/core/judgeScorer.js +23 -0
- package/dist/workflow/core/responseConditioner.js +17 -0
- package/dist/workflow/core/workflowRunner.d.ts +1 -19
- package/dist/workflow/core/workflowRunner.js +202 -147
- package/package.json +2 -1
|
@@ -69,6 +69,9 @@ function extractSSEEvents(buffer) {
|
|
|
69
69
|
}
|
|
70
70
|
return { events, remainder: buffer.slice(cursor) };
|
|
71
71
|
}
|
|
72
|
+
// ---------------------------------------------------------------------------
|
|
73
|
+
// Telemetry accumulator
|
|
74
|
+
// ---------------------------------------------------------------------------
|
|
72
75
|
function createAccumulator(captureRawText) {
|
|
73
76
|
return {
|
|
74
77
|
messageId: "",
|
|
@@ -338,6 +341,9 @@ function processEvent(acc, event) {
|
|
|
338
341
|
break;
|
|
339
342
|
}
|
|
340
343
|
}
|
|
344
|
+
// ---------------------------------------------------------------------------
|
|
345
|
+
// Public API
|
|
346
|
+
// ---------------------------------------------------------------------------
|
|
341
347
|
/**
|
|
342
348
|
* Create an SSE interceptor that extracts telemetry from an Anthropic
|
|
343
349
|
* streaming response while passing all bytes through unmodified.
|
|
@@ -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
|
|
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
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
strategy: this.strategy,
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
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 {
|
|
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
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
?
|
|
288
|
-
|
|
289
|
-
|
|
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
|
|
292
|
-
sources:
|
|
293
|
-
|
|
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
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
result
|
|
69
|
-
score
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
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
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
.
|
|
155
|
-
|
|
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
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
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
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
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)
|