@juspay/neurolink 9.32.0 → 9.32.1
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 +6 -0
- package/dist/auth/anthropicOAuth.js +1 -1
- package/dist/cli/commands/proxy.js +18 -5
- package/dist/client/aiSdkAdapter.js +1 -1
- package/dist/client/index.js +137 -501
- package/dist/core/factory.js +0 -1
- package/dist/core/redisConversationMemoryManager.js +1 -1
- package/dist/features/ppt/slideGenerator.js +0 -1
- package/dist/features/ppt/utils.js +0 -1
- package/dist/lib/server/routes/claudeProxyRoutes.js +45 -9
- package/dist/mcp/elicitationProtocol.js +1 -1
- package/dist/mcp/servers/agent/directToolsServer.js +0 -1
- package/dist/providers/azureOpenai.js +1 -1
- package/dist/providers/huggingFace.js +0 -1
- package/dist/providers/openaiCompatible.js +0 -1
- package/dist/sdk/toolRegistration.js +0 -1
- package/dist/server/openapi/generator.js +1 -1
- package/dist/server/routes/claudeProxyRoutes.js +45 -9
- package/dist/types/configTypes.js +0 -5
- package/dist/types/modelTypes.js +0 -1
- package/dist/types/tools.js +0 -1
- package/dist/types/typeAliases.js +0 -1
- package/dist/types/utilities.js +1 -1
- package/dist/types/workflowTypes.js +0 -1
- package/dist/utils/providerRetry.js +0 -1
- package/dist/utils/providerUtils.js +0 -1
- package/package.json +2 -2
- package/dist/client/adapters/providerImageAdapter.js +0 -588
- package/dist/client/adapters/tts/googleTTSHandler.js +0 -344
- package/dist/client/adapters/video/directorPipeline.js +0 -516
- package/dist/client/adapters/video/ffmpegAdapter.js +0 -206
- package/dist/client/adapters/video/frameExtractor.js +0 -143
- package/dist/client/adapters/video/vertexVideoHandler.js +0 -763
- package/dist/client/adapters/video/videoAnalyzer.js +0 -238
- package/dist/client/adapters/video/videoMerger.js +0 -171
- package/dist/client/agent/directTools.js +0 -840
- package/dist/client/auth/AuthProviderFactory.js +0 -111
- package/dist/client/auth/AuthProviderRegistry.js +0 -190
- package/dist/client/auth/RequestContext.js +0 -78
- package/dist/client/auth/accountPool.js +0 -178
- package/dist/client/auth/anthropicOAuth.js +0 -974
- package/dist/client/auth/authContext.js +0 -314
- package/dist/client/auth/errors.js +0 -39
- package/dist/client/auth/index.js +0 -61
- package/dist/client/auth/middleware/AuthMiddleware.js +0 -519
- package/dist/client/auth/middleware/rateLimitByUser.js +0 -554
- package/dist/client/auth/providers/BaseAuthProvider.js +0 -723
- package/dist/client/auth/providers/CognitoProvider.js +0 -304
- package/dist/client/auth/providers/KeycloakProvider.js +0 -393
- package/dist/client/auth/providers/auth0.js +0 -274
- package/dist/client/auth/providers/betterAuth.js +0 -182
- package/dist/client/auth/providers/clerk.js +0 -317
- package/dist/client/auth/providers/custom.js +0 -112
- package/dist/client/auth/providers/firebase.js +0 -226
- package/dist/client/auth/providers/jwt.js +0 -212
- package/dist/client/auth/providers/oauth2.js +0 -303
- package/dist/client/auth/providers/supabase.js +0 -259
- package/dist/client/auth/providers/workos.js +0 -284
- package/dist/client/auth/serverBridge.js +0 -25
- package/dist/client/auth/sessionManager.js +0 -437
- package/dist/client/auth/tokenStore.js +0 -799
- package/dist/client/client/aiSdkAdapter.js +0 -487
- package/dist/client/client/auth.js +0 -473
- package/dist/client/client/errors.js +0 -552
- package/dist/client/client/httpClient.js +0 -837
- package/dist/client/client/index.js +0 -172
- package/dist/client/client/interceptors.js +0 -601
- package/dist/client/client/sseClient.js +0 -545
- package/dist/client/client/streamingClient.js +0 -917
- package/dist/client/client/wsClient.js +0 -369
- package/dist/client/config/configManager.js +0 -303
- package/dist/client/config/conversationMemory.js +0 -86
- package/dist/client/config/taskClassificationConfig.js +0 -148
- package/dist/client/constants/contextWindows.js +0 -295
- package/dist/client/constants/enums.js +0 -853
- package/dist/client/constants/index.js +0 -207
- package/dist/client/constants/performance.js +0 -389
- package/dist/client/constants/retry.js +0 -266
- package/dist/client/constants/timeouts.js +0 -182
- package/dist/client/constants/tokens.js +0 -380
- package/dist/client/constants/videoErrors.js +0 -46
- package/dist/client/context/budgetChecker.js +0 -98
- package/dist/client/context/contextCompactor.js +0 -205
- package/dist/client/context/emergencyTruncation.js +0 -88
- package/dist/client/context/errorDetection.js +0 -171
- package/dist/client/context/errors.js +0 -21
- package/dist/client/context/fileTokenBudget.js +0 -127
- package/dist/client/context/prompts/summarizationPrompt.js +0 -117
- package/dist/client/context/stages/fileReadDeduplicator.js +0 -66
- package/dist/client/context/stages/slidingWindowTruncator.js +0 -190
- package/dist/client/context/stages/structuredSummarizer.js +0 -99
- package/dist/client/context/stages/toolOutputPruner.js +0 -52
- package/dist/client/context/summarizationEngine.js +0 -136
- package/dist/client/context/toolOutputLimits.js +0 -78
- package/dist/client/context/toolPairRepair.js +0 -66
- package/dist/client/core/analytics.js +0 -88
- package/dist/client/core/baseProvider.js +0 -1385
- package/dist/client/core/constants.js +0 -140
- package/dist/client/core/conversationMemoryFactory.js +0 -141
- package/dist/client/core/conversationMemoryInitializer.js +0 -128
- package/dist/client/core/conversationMemoryManager.js +0 -344
- package/dist/client/core/dynamicModels.js +0 -358
- package/dist/client/core/evaluation.js +0 -309
- package/dist/client/core/evaluationProviders.js +0 -248
- package/dist/client/core/factory.js +0 -412
- package/dist/client/core/infrastructure/baseError.js +0 -22
- package/dist/client/core/infrastructure/baseFactory.js +0 -54
- package/dist/client/core/infrastructure/baseRegistry.js +0 -53
- package/dist/client/core/infrastructure/index.js +0 -5
- package/dist/client/core/infrastructure/retry.js +0 -20
- package/dist/client/core/infrastructure/typedEventEmitter.js +0 -23
- package/dist/client/core/modelConfiguration.js +0 -851
- package/dist/client/core/modules/GenerationHandler.js +0 -588
- package/dist/client/core/modules/MessageBuilder.js +0 -273
- package/dist/client/core/modules/StreamHandler.js +0 -185
- package/dist/client/core/modules/TelemetryHandler.js +0 -203
- package/dist/client/core/modules/ToolsManager.js +0 -499
- package/dist/client/core/modules/Utilities.js +0 -331
- package/dist/client/core/redisConversationMemoryManager.js +0 -1435
- package/dist/client/core/streamAnalytics.js +0 -131
- package/dist/client/evaluation/contextBuilder.js +0 -134
- package/dist/client/evaluation/index.js +0 -61
- package/dist/client/evaluation/prompts.js +0 -73
- package/dist/client/evaluation/ragasEvaluator.js +0 -110
- package/dist/client/evaluation/retryManager.js +0 -78
- package/dist/client/evaluation/scoring.js +0 -61
- package/dist/client/factories/providerFactory.js +0 -166
- package/dist/client/factories/providerRegistry.js +0 -166
- package/dist/client/features/ppt/constants.js +0 -896
- package/dist/client/features/ppt/contentPlanner.js +0 -529
- package/dist/client/features/ppt/presentationOrchestrator.js +0 -236
- package/dist/client/features/ppt/slideGenerator.js +0 -532
- package/dist/client/features/ppt/slideRenderers.js +0 -2383
- package/dist/client/features/ppt/slideTypeInference.js +0 -405
- package/dist/client/features/ppt/types.js +0 -13
- package/dist/client/features/ppt/utils.js +0 -443
- package/dist/client/files/fileReferenceRegistry.js +0 -1543
- package/dist/client/files/fileTools.js +0 -450
- package/dist/client/files/streamingReader.js +0 -321
- package/dist/client/files/types.js +0 -23
- package/dist/client/hitl/hitlErrors.js +0 -54
- package/dist/client/hitl/hitlManager.js +0 -460
- package/dist/client/mcp/agentExposure.js +0 -356
- package/dist/client/mcp/auth/index.js +0 -11
- package/dist/client/mcp/auth/oauthClientProvider.js +0 -325
- package/dist/client/mcp/auth/tokenStorage.js +0 -134
- package/dist/client/mcp/batching/index.js +0 -10
- package/dist/client/mcp/batching/requestBatcher.js +0 -441
- package/dist/client/mcp/caching/index.js +0 -10
- package/dist/client/mcp/caching/toolCache.js +0 -433
- package/dist/client/mcp/elicitation/elicitationManager.js +0 -376
- package/dist/client/mcp/elicitation/index.js +0 -11
- package/dist/client/mcp/elicitation/types.js +0 -10
- package/dist/client/mcp/elicitationProtocol.js +0 -375
- package/dist/client/mcp/enhancedToolDiscovery.js +0 -481
- package/dist/client/mcp/externalServerManager.js +0 -1478
- package/dist/client/mcp/factory.js +0 -161
- package/dist/client/mcp/flexibleToolValidator.js +0 -161
- package/dist/client/mcp/httpRateLimiter.js +0 -391
- package/dist/client/mcp/httpRetryHandler.js +0 -178
- package/dist/client/mcp/index.js +0 -74
- package/dist/client/mcp/mcpCircuitBreaker.js +0 -427
- package/dist/client/mcp/mcpClientFactory.js +0 -708
- package/dist/client/mcp/mcpRegistryClient.js +0 -488
- package/dist/client/mcp/mcpServerBase.js +0 -373
- package/dist/client/mcp/multiServerManager.js +0 -579
- package/dist/client/mcp/registry.js +0 -158
- package/dist/client/mcp/routing/index.js +0 -10
- package/dist/client/mcp/routing/toolRouter.js +0 -416
- package/dist/client/mcp/serverCapabilities.js +0 -502
- package/dist/client/mcp/servers/agent/directToolsServer.js +0 -150
- package/dist/client/mcp/toolAnnotations.js +0 -239
- package/dist/client/mcp/toolConverter.js +0 -258
- package/dist/client/mcp/toolDiscoveryService.js +0 -798
- package/dist/client/mcp/toolIntegration.js +0 -334
- package/dist/client/mcp/toolRegistry.js +0 -729
- package/dist/client/memory/hippocampusInitializer.js +0 -19
- package/dist/client/memory/memoryRetrievalTools.js +0 -166
- package/dist/client/middleware/builtin/analytics.js +0 -132
- package/dist/client/middleware/builtin/autoEvaluation.js +0 -203
- package/dist/client/middleware/builtin/guardrails.js +0 -109
- package/dist/client/middleware/builtin/lifecycle.js +0 -168
- package/dist/client/middleware/factory.js +0 -327
- package/dist/client/middleware/registry.js +0 -295
- package/dist/client/middleware/utils/guardrailsUtils.js +0 -396
- package/dist/client/models/anthropicModels.js +0 -527
- package/dist/client/neurolink.js +0 -8233
- package/dist/client/observability/exporterRegistry.js +0 -413
- package/dist/client/observability/exporters/arizeExporter.js +0 -138
- package/dist/client/observability/exporters/baseExporter.js +0 -190
- package/dist/client/observability/exporters/braintrustExporter.js +0 -154
- package/dist/client/observability/exporters/datadogExporter.js +0 -196
- package/dist/client/observability/exporters/laminarExporter.js +0 -302
- package/dist/client/observability/exporters/langfuseExporter.js +0 -209
- package/dist/client/observability/exporters/langsmithExporter.js +0 -143
- package/dist/client/observability/exporters/otelExporter.js +0 -164
- package/dist/client/observability/exporters/posthogExporter.js +0 -287
- package/dist/client/observability/exporters/sentryExporter.js +0 -165
- package/dist/client/observability/index.js +0 -31
- package/dist/client/observability/metricsAggregator.js +0 -556
- package/dist/client/observability/otelBridge.js +0 -131
- package/dist/client/observability/retryPolicy.js +0 -383
- package/dist/client/observability/sampling/samplers.js +0 -216
- package/dist/client/observability/spanProcessor.js +0 -303
- package/dist/client/observability/tokenTracker.js +0 -413
- package/dist/client/observability/types/exporterTypes.js +0 -5
- package/dist/client/observability/types/index.js +0 -4
- package/dist/client/observability/types/spanTypes.js +0 -92
- package/dist/client/observability/utils/safeMetadata.js +0 -25
- package/dist/client/observability/utils/spanSerializer.js +0 -292
- package/dist/client/processors/archive/ArchiveProcessor.js +0 -1308
- package/dist/client/processors/base/BaseFileProcessor.js +0 -614
- package/dist/client/processors/base/types.js +0 -82
- package/dist/client/processors/config/fileTypes.js +0 -520
- package/dist/client/processors/config/index.js +0 -92
- package/dist/client/processors/config/languageMap.js +0 -410
- package/dist/client/processors/config/mimeTypes.js +0 -363
- package/dist/client/processors/config/sizeLimits.js +0 -258
- package/dist/client/processors/document/ExcelProcessor.js +0 -590
- package/dist/client/processors/document/OpenDocumentProcessor.js +0 -212
- package/dist/client/processors/document/PptxProcessor.js +0 -157
- package/dist/client/processors/document/RtfProcessor.js +0 -361
- package/dist/client/processors/document/WordProcessor.js +0 -353
- package/dist/client/processors/errors/FileErrorCode.js +0 -255
- package/dist/client/processors/errors/errorHelpers.js +0 -386
- package/dist/client/processors/errors/errorSerializer.js +0 -507
- package/dist/client/processors/errors/index.js +0 -49
- package/dist/client/processors/markup/SvgProcessor.js +0 -240
- package/dist/client/processors/media/AudioProcessor.js +0 -707
- package/dist/client/processors/media/VideoProcessor.js +0 -1045
- package/dist/client/providers/amazonBedrock.js +0 -1512
- package/dist/client/providers/amazonSagemaker.js +0 -162
- package/dist/client/providers/anthropic.js +0 -831
- package/dist/client/providers/azureOpenai.js +0 -143
- package/dist/client/providers/googleAiStudio.js +0 -1200
- package/dist/client/providers/googleNativeGemini3.js +0 -543
- package/dist/client/providers/googleVertex.js +0 -2936
- package/dist/client/providers/huggingFace.js +0 -315
- package/dist/client/providers/litellm.js +0 -488
- package/dist/client/providers/mistral.js +0 -157
- package/dist/client/providers/ollama.js +0 -1579
- package/dist/client/providers/openAI.js +0 -627
- package/dist/client/providers/openRouter.js +0 -543
- package/dist/client/providers/openaiCompatible.js +0 -290
- package/dist/client/providers/providerTypeUtils.js +0 -46
- package/dist/client/providers/sagemaker/adaptive-semaphore.js +0 -215
- package/dist/client/providers/sagemaker/client.js +0 -472
- package/dist/client/providers/sagemaker/config.js +0 -317
- package/dist/client/providers/sagemaker/detection.js +0 -606
- package/dist/client/providers/sagemaker/error-constants.js +0 -227
- package/dist/client/providers/sagemaker/errors.js +0 -299
- package/dist/client/providers/sagemaker/language-model.js +0 -775
- package/dist/client/providers/sagemaker/parsers.js +0 -634
- package/dist/client/providers/sagemaker/streaming.js +0 -331
- package/dist/client/providers/sagemaker/structured-parser.js +0 -625
- package/dist/client/proxy/accountQuota.js +0 -162
- package/dist/client/proxy/claudeFormat.js +0 -595
- package/dist/client/proxy/modelRouter.js +0 -29
- package/dist/client/proxy/oauthFetch.js +0 -367
- package/dist/client/proxy/proxyFetch.js +0 -586
- package/dist/client/proxy/requestLogger.js +0 -207
- package/dist/client/proxy/tokenRefresh.js +0 -124
- package/dist/client/proxy/usageStats.js +0 -74
- package/dist/client/proxy/utils/noProxyUtils.js +0 -149
- package/dist/client/rag/ChunkerFactory.js +0 -320
- package/dist/client/rag/ChunkerRegistry.js +0 -421
- package/dist/client/rag/chunkers/BaseChunker.js +0 -143
- package/dist/client/rag/chunkers/CharacterChunker.js +0 -28
- package/dist/client/rag/chunkers/HTMLChunker.js +0 -38
- package/dist/client/rag/chunkers/JSONChunker.js +0 -68
- package/dist/client/rag/chunkers/LaTeXChunker.js +0 -63
- package/dist/client/rag/chunkers/MarkdownChunker.js +0 -306
- package/dist/client/rag/chunkers/RecursiveChunker.js +0 -139
- package/dist/client/rag/chunkers/SemanticMarkdownChunker.js +0 -138
- package/dist/client/rag/chunkers/SentenceChunker.js +0 -66
- package/dist/client/rag/chunkers/TokenChunker.js +0 -61
- package/dist/client/rag/chunkers/index.js +0 -15
- package/dist/client/rag/chunking/characterChunker.js +0 -142
- package/dist/client/rag/chunking/chunkerRegistry.js +0 -194
- package/dist/client/rag/chunking/htmlChunker.js +0 -247
- package/dist/client/rag/chunking/index.js +0 -17
- package/dist/client/rag/chunking/jsonChunker.js +0 -281
- package/dist/client/rag/chunking/latexChunker.js +0 -251
- package/dist/client/rag/chunking/markdownChunker.js +0 -373
- package/dist/client/rag/chunking/recursiveChunker.js +0 -148
- package/dist/client/rag/chunking/semanticChunker.js +0 -306
- package/dist/client/rag/chunking/sentenceChunker.js +0 -230
- package/dist/client/rag/chunking/tokenChunker.js +0 -183
- package/dist/client/rag/document/MDocument.js +0 -392
- package/dist/client/rag/document/index.js +0 -5
- package/dist/client/rag/document/loaders.js +0 -500
- package/dist/client/rag/errors/RAGError.js +0 -274
- package/dist/client/rag/errors/index.js +0 -6
- package/dist/client/rag/graphRag/graphRAG.js +0 -401
- package/dist/client/rag/graphRag/index.js +0 -4
- package/dist/client/rag/index.js +0 -141
- package/dist/client/rag/metadata/MetadataExtractorFactory.js +0 -418
- package/dist/client/rag/metadata/MetadataExtractorRegistry.js +0 -362
- package/dist/client/rag/metadata/index.js +0 -9
- package/dist/client/rag/metadata/metadataExtractor.js +0 -280
- package/dist/client/rag/pipeline/RAGPipeline.js +0 -436
- package/dist/client/rag/pipeline/contextAssembly.js +0 -341
- package/dist/client/rag/pipeline/index.js +0 -5
- package/dist/client/rag/ragIntegration.js +0 -321
- package/dist/client/rag/reranker/RerankerFactory.js +0 -430
- package/dist/client/rag/reranker/RerankerRegistry.js +0 -402
- package/dist/client/rag/reranker/index.js +0 -9
- package/dist/client/rag/reranker/reranker.js +0 -277
- package/dist/client/rag/resilience/CircuitBreaker.js +0 -431
- package/dist/client/rag/resilience/RetryHandler.js +0 -304
- package/dist/client/rag/resilience/index.js +0 -7
- package/dist/client/rag/retrieval/hybridSearch.js +0 -335
- package/dist/client/rag/retrieval/index.js +0 -5
- package/dist/client/rag/retrieval/vectorQueryTool.js +0 -307
- package/dist/client/rag/types.js +0 -8
- package/dist/client/sdk/toolRegistration.js +0 -377
- package/dist/client/server/abstract/baseServerAdapter.js +0 -575
- package/dist/client/server/adapters/expressAdapter.js +0 -486
- package/dist/client/server/adapters/fastifyAdapter.js +0 -472
- package/dist/client/server/adapters/honoAdapter.js +0 -632
- package/dist/client/server/adapters/koaAdapter.js +0 -510
- package/dist/client/server/errors.js +0 -486
- package/dist/client/server/factory/serverAdapterFactory.js +0 -160
- package/dist/client/server/index.js +0 -108
- package/dist/client/server/middleware/abortSignal.js +0 -111
- package/dist/client/server/middleware/auth.js +0 -388
- package/dist/client/server/middleware/cache.js +0 -359
- package/dist/client/server/middleware/common.js +0 -281
- package/dist/client/server/middleware/deprecation.js +0 -190
- package/dist/client/server/middleware/mcpBodyAttachment.js +0 -63
- package/dist/client/server/middleware/rateLimit.js +0 -227
- package/dist/client/server/middleware/validation.js +0 -388
- package/dist/client/server/openapi/generator.js +0 -398
- package/dist/client/server/openapi/index.js +0 -36
- package/dist/client/server/openapi/schemas.js +0 -695
- package/dist/client/server/openapi/templates.js +0 -374
- package/dist/client/server/routes/agentRoutes.js +0 -189
- package/dist/client/server/routes/claudeProxyRoutes.js +0 -1600
- package/dist/client/server/routes/healthRoutes.js +0 -187
- package/dist/client/server/routes/index.js +0 -57
- package/dist/client/server/routes/mcpRoutes.js +0 -342
- package/dist/client/server/routes/memoryRoutes.js +0 -350
- package/dist/client/server/routes/openApiRoutes.js +0 -126
- package/dist/client/server/routes/toolRoutes.js +0 -199
- package/dist/client/server/streaming/dataStream.js +0 -486
- package/dist/client/server/streaming/index.js +0 -11
- package/dist/client/server/types.js +0 -67
- package/dist/client/server/utils/redaction.js +0 -334
- package/dist/client/server/utils/validation.js +0 -243
- package/dist/client/server/websocket/WebSocketHandler.js +0 -383
- package/dist/client/server/websocket/index.js +0 -4
- package/dist/client/services/server/ai/observability/instrumentation.js +0 -808
- package/dist/client/telemetry/attributes.js +0 -100
- package/dist/client/telemetry/index.js +0 -26
- package/dist/client/telemetry/telemetryService.js +0 -308
- package/dist/client/telemetry/tracers.js +0 -17
- package/dist/client/telemetry/withSpan.js +0 -34
- package/dist/client/types/actionTypes.js +0 -6
- package/dist/client/types/analytics.js +0 -5
- package/dist/client/types/authTypes.js +0 -9
- package/dist/client/types/circuitBreakerErrors.js +0 -34
- package/dist/client/types/cli.js +0 -21
- package/dist/client/types/clientTypes.js +0 -10
- package/dist/client/types/common.js +0 -51
- package/dist/client/types/configTypes.js +0 -49
- package/dist/client/types/content.js +0 -19
- package/dist/client/types/contextTypes.js +0 -400
- package/dist/client/types/conversation.js +0 -47
- package/dist/client/types/conversationMemoryInterface.js +0 -6
- package/dist/client/types/domainTypes.js +0 -5
- package/dist/client/types/errors.js +0 -167
- package/dist/client/types/evaluation.js +0 -5
- package/dist/client/types/evaluationProviders.js +0 -5
- package/dist/client/types/evaluationTypes.js +0 -1
- package/dist/client/types/externalMcp.js +0 -6
- package/dist/client/types/fileReferenceTypes.js +0 -8
- package/dist/client/types/fileTypes.js +0 -4
- package/dist/client/types/generateTypes.js +0 -1
- package/dist/client/types/guardrails.js +0 -1
- package/dist/client/types/hitlTypes.js +0 -8
- package/dist/client/types/index.js +0 -57
- package/dist/client/types/mcpTypes.js +0 -5
- package/dist/client/types/middlewareTypes.js +0 -1
- package/dist/client/types/modelTypes.js +0 -30
- package/dist/client/types/multimodal.js +0 -135
- package/dist/client/types/observability.js +0 -6
- package/dist/client/types/pptTypes.js +0 -82
- package/dist/client/types/providers.js +0 -111
- package/dist/client/types/proxyTypes.js +0 -16
- package/dist/client/types/ragTypes.js +0 -7
- package/dist/client/types/sdkTypes.js +0 -8
- package/dist/client/types/serviceTypes.js +0 -5
- package/dist/client/types/streamTypes.js +0 -1
- package/dist/client/types/subscriptionTypes.js +0 -9
- package/dist/client/types/taskClassificationTypes.js +0 -5
- package/dist/client/types/tools.js +0 -24
- package/dist/client/types/ttsTypes.js +0 -57
- package/dist/client/types/typeAliases.js +0 -48
- package/dist/client/types/utilities.js +0 -4
- package/dist/client/types/workflowTypes.js +0 -30
- package/dist/client/utils/async/withTimeout.js +0 -98
- package/dist/client/utils/asyncMutex.js +0 -60
- package/dist/client/utils/conversationMemory.js +0 -431
- package/dist/client/utils/csvProcessor.js +0 -846
- package/dist/client/utils/errorHandling.js +0 -936
- package/dist/client/utils/evaluationUtils.js +0 -131
- package/dist/client/utils/factoryProcessing.js +0 -589
- package/dist/client/utils/fileDetector.js +0 -2161
- package/dist/client/utils/imageCache.js +0 -376
- package/dist/client/utils/imageProcessor.js +0 -704
- package/dist/client/utils/logger.js +0 -491
- package/dist/client/utils/mcpDefaults.js +0 -134
- package/dist/client/utils/messageBuilder.js +0 -1653
- package/dist/client/utils/modelAliasResolver.js +0 -54
- package/dist/client/utils/modelDetection.js +0 -80
- package/dist/client/utils/modelRouter.js +0 -292
- package/dist/client/utils/multimodalOptionsBuilder.js +0 -65
- package/dist/client/utils/observabilityHelpers.js +0 -47
- package/dist/client/utils/parameterValidation.js +0 -966
- package/dist/client/utils/pdfProcessor.js +0 -410
- package/dist/client/utils/performance.js +0 -222
- package/dist/client/utils/pricing.js +0 -340
- package/dist/client/utils/promptRedaction.js +0 -62
- package/dist/client/utils/providerConfig.js +0 -1009
- package/dist/client/utils/providerHealth.js +0 -1237
- package/dist/client/utils/providerRetry.js +0 -112
- package/dist/client/utils/providerUtils.js +0 -434
- package/dist/client/utils/rateLimiter.js +0 -200
- package/dist/client/utils/redis.js +0 -368
- package/dist/client/utils/retryHandler.js +0 -269
- package/dist/client/utils/retryability.js +0 -22
- package/dist/client/utils/sanitizers/svg.js +0 -481
- package/dist/client/utils/schemaConversion.js +0 -255
- package/dist/client/utils/taskClassificationUtils.js +0 -149
- package/dist/client/utils/taskClassifier.js +0 -94
- package/dist/client/utils/thinkingConfig.js +0 -104
- package/dist/client/utils/timeout.js +0 -359
- package/dist/client/utils/tokenEstimation.js +0 -142
- package/dist/client/utils/tokenLimits.js +0 -125
- package/dist/client/utils/tokenUtils.js +0 -239
- package/dist/client/utils/toolUtils.js +0 -75
- package/dist/client/utils/transformationUtils.js +0 -554
- package/dist/client/utils/ttsProcessor.js +0 -286
- package/dist/client/utils/typeUtils.js +0 -97
- package/dist/client/utils/videoAnalysisProcessor.js +0 -67
- package/dist/client/workflow/config.js +0 -398
- package/dist/client/workflow/core/ensembleExecutor.js +0 -407
- package/dist/client/workflow/core/judgeScorer.js +0 -544
- package/dist/client/workflow/core/responseConditioner.js +0 -225
- package/dist/client/workflow/core/types/conditionerTypes.js +0 -7
- package/dist/client/workflow/core/types/ensembleTypes.js +0 -7
- package/dist/client/workflow/core/types/index.js +0 -7
- package/dist/client/workflow/core/types/judgeTypes.js +0 -7
- package/dist/client/workflow/core/types/layerTypes.js +0 -7
- package/dist/client/workflow/core/types/registryTypes.js +0 -7
- package/dist/client/workflow/core/workflowRegistry.js +0 -304
- package/dist/client/workflow/core/workflowRunner.js +0 -586
- package/dist/client/workflow/index.js +0 -50
- package/dist/client/workflow/types.js +0 -9
- package/dist/client/workflow/utils/types/index.js +0 -7
- package/dist/client/workflow/utils/workflowMetrics.js +0 -311
- package/dist/client/workflow/utils/workflowValidation.js +0 -420
- package/dist/client/workflow/workflows/adaptiveWorkflow.js +0 -366
- package/dist/client/workflow/workflows/consensusWorkflow.js +0 -192
- package/dist/client/workflow/workflows/fallbackWorkflow.js +0 -225
- package/dist/client/workflow/workflows/multiJudgeWorkflow.js +0 -351
- /package/dist/client/{client/reactHooks.js → reactHooks.js} +0 -0
|
@@ -1,304 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* RAG Retry Handler
|
|
3
|
-
*
|
|
4
|
-
* Provides retry logic with exponential backoff and jitter
|
|
5
|
-
* specifically designed for RAG operations including embeddings,
|
|
6
|
-
* vector queries, and LLM-based extraction.
|
|
7
|
-
*/
|
|
8
|
-
import { withRetry } from "../../core/infrastructure/index.js";
|
|
9
|
-
import { isAbortError } from "../../utils/errorHandling.js";
|
|
10
|
-
import { logger } from "../../utils/logger.js";
|
|
11
|
-
import { EmbeddingError, isRetryableRAGError, MetadataExtractionError, RAGError, RAGErrorCodes, VectorQueryError, } from "../errors/RAGError.js";
|
|
12
|
-
/**
|
|
13
|
-
* Default retry configuration
|
|
14
|
-
*/
|
|
15
|
-
export const DEFAULT_RAG_RETRY_CONFIG = {
|
|
16
|
-
maxRetries: 3,
|
|
17
|
-
initialDelay: 1000,
|
|
18
|
-
maxDelay: 30000,
|
|
19
|
-
backoffMultiplier: 2,
|
|
20
|
-
jitter: true,
|
|
21
|
-
retryableErrorCodes: [
|
|
22
|
-
RAGErrorCodes.EMBEDDING_RATE_LIMIT,
|
|
23
|
-
RAGErrorCodes.VECTOR_QUERY_TIMEOUT,
|
|
24
|
-
RAGErrorCodes.VECTOR_STORE_CONNECTION_ERROR,
|
|
25
|
-
RAGErrorCodes.METADATA_EXTRACTION_TIMEOUT,
|
|
26
|
-
RAGErrorCodes.RERANKER_API_ERROR,
|
|
27
|
-
RAGErrorCodes.OPERATION_TIMEOUT,
|
|
28
|
-
],
|
|
29
|
-
retryableStatusCodes: [408, 429, 500, 502, 503, 504],
|
|
30
|
-
};
|
|
31
|
-
/**
|
|
32
|
-
* Calculate delay with exponential backoff
|
|
33
|
-
*/
|
|
34
|
-
function calculateDelay(attempt, config) {
|
|
35
|
-
const exponentialDelay = config.initialDelay * config.backoffMultiplier ** attempt;
|
|
36
|
-
const delay = Math.min(exponentialDelay, config.maxDelay);
|
|
37
|
-
if (config.jitter) {
|
|
38
|
-
// Add random jitter between 0 and 50% of the delay
|
|
39
|
-
const jitterFactor = 0.5 * Math.random();
|
|
40
|
-
return delay * (1 + jitterFactor);
|
|
41
|
-
}
|
|
42
|
-
return delay;
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Sleep utility
|
|
46
|
-
*/
|
|
47
|
-
function sleep(ms) {
|
|
48
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Check if an error is retryable based on configuration
|
|
52
|
-
*/
|
|
53
|
-
export function isRetryable(error, config = DEFAULT_RAG_RETRY_CONFIG) {
|
|
54
|
-
// Never retry abort errors - the operation was intentionally cancelled
|
|
55
|
-
if (isAbortError(error)) {
|
|
56
|
-
return false;
|
|
57
|
-
}
|
|
58
|
-
// Use custom shouldRetry if provided
|
|
59
|
-
if (config.shouldRetry) {
|
|
60
|
-
return config.shouldRetry(error);
|
|
61
|
-
}
|
|
62
|
-
// Check if it's a RAG error with retryable flag
|
|
63
|
-
if (isRetryableRAGError(error)) {
|
|
64
|
-
return true;
|
|
65
|
-
}
|
|
66
|
-
// Check error code
|
|
67
|
-
if (error instanceof RAGError && config.retryableErrorCodes) {
|
|
68
|
-
if (config.retryableErrorCodes.includes(error.code)) {
|
|
69
|
-
return true;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
// Check for common network/timeout errors
|
|
73
|
-
if (error && typeof error === "object") {
|
|
74
|
-
const errorObj = error;
|
|
75
|
-
// Timeout errors
|
|
76
|
-
if (errorObj.name === "TimeoutError" ||
|
|
77
|
-
errorObj.code === "TIMEOUT" ||
|
|
78
|
-
errorObj.code === "ETIMEDOUT") {
|
|
79
|
-
return true;
|
|
80
|
-
}
|
|
81
|
-
// Network errors
|
|
82
|
-
if (errorObj.code === "ECONNRESET" ||
|
|
83
|
-
errorObj.code === "ENOTFOUND" ||
|
|
84
|
-
errorObj.code === "ECONNREFUSED" ||
|
|
85
|
-
errorObj.code === "ECONNABORTED" ||
|
|
86
|
-
errorObj.code === "EPIPE" ||
|
|
87
|
-
errorObj.code === "ENETUNREACH" ||
|
|
88
|
-
errorObj.code === "EHOSTUNREACH") {
|
|
89
|
-
return true;
|
|
90
|
-
}
|
|
91
|
-
// HTTP status codes
|
|
92
|
-
if (typeof errorObj.status === "number" &&
|
|
93
|
-
config.retryableStatusCodes?.includes(errorObj.status)) {
|
|
94
|
-
return true;
|
|
95
|
-
}
|
|
96
|
-
if (typeof errorObj.statusCode === "number" &&
|
|
97
|
-
config.retryableStatusCodes?.includes(errorObj.statusCode)) {
|
|
98
|
-
return true;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
return false;
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Execute a RAG operation with retry logic
|
|
105
|
-
*
|
|
106
|
-
* Implements exponential backoff with jitter to prevent thundering herd.
|
|
107
|
-
* Only retries on errors that are considered retryable.
|
|
108
|
-
*
|
|
109
|
-
* @param operation - Async operation to execute with retries
|
|
110
|
-
* @param config - Partial retry configuration (merged with defaults)
|
|
111
|
-
* @returns Result of the operation
|
|
112
|
-
* @throws Last error if all retry attempts fail
|
|
113
|
-
*/
|
|
114
|
-
export async function withRAGRetry(operation, config = {}) {
|
|
115
|
-
const mergedConfig = {
|
|
116
|
-
...DEFAULT_RAG_RETRY_CONFIG,
|
|
117
|
-
...config,
|
|
118
|
-
};
|
|
119
|
-
let lastError;
|
|
120
|
-
let attempt = 0;
|
|
121
|
-
while (attempt <= mergedConfig.maxRetries) {
|
|
122
|
-
try {
|
|
123
|
-
return await operation();
|
|
124
|
-
}
|
|
125
|
-
catch (error) {
|
|
126
|
-
lastError = error;
|
|
127
|
-
// Don't retry if this is the last attempt
|
|
128
|
-
if (attempt === mergedConfig.maxRetries) {
|
|
129
|
-
logger.debug(`[RAGRetryHandler] All ${mergedConfig.maxRetries} attempts exhausted`);
|
|
130
|
-
break;
|
|
131
|
-
}
|
|
132
|
-
// Check if we should retry this error
|
|
133
|
-
if (!isRetryable(error, mergedConfig)) {
|
|
134
|
-
logger.debug(`[RAGRetryHandler] Non-retryable error encountered: ${error instanceof Error ? error.message : String(error)}`);
|
|
135
|
-
break;
|
|
136
|
-
}
|
|
137
|
-
// Calculate delay with backoff and jitter
|
|
138
|
-
const delay = calculateDelay(attempt, mergedConfig);
|
|
139
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
140
|
-
logger.warn(`[RAGRetryHandler] Attempt ${attempt + 1}/${mergedConfig.maxRetries + 1} failed: ${errorMessage}. Retrying in ${Math.round(delay)}ms...`);
|
|
141
|
-
await sleep(delay);
|
|
142
|
-
attempt++;
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
// Wrap the last error if it's not already a RAG error
|
|
146
|
-
if (lastError instanceof RAGError) {
|
|
147
|
-
throw lastError;
|
|
148
|
-
}
|
|
149
|
-
throw new RAGError(`RAG operation failed after ${attempt + 1} attempts: ${lastError instanceof Error ? lastError.message : String(lastError)}`, RAGErrorCodes.RETRY_EXHAUSTED, {
|
|
150
|
-
retryable: false,
|
|
151
|
-
cause: lastError instanceof Error ? lastError : undefined,
|
|
152
|
-
details: {
|
|
153
|
-
totalAttempts: attempt + 1,
|
|
154
|
-
maxRetries: mergedConfig.maxRetries,
|
|
155
|
-
},
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* RAG Retry Handler class for more complex retry scenarios
|
|
160
|
-
*/
|
|
161
|
-
export class RAGRetryHandler {
|
|
162
|
-
config;
|
|
163
|
-
constructor(config = {}) {
|
|
164
|
-
this.config = { ...DEFAULT_RAG_RETRY_CONFIG, ...config };
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Execute an operation with retry logic
|
|
168
|
-
*/
|
|
169
|
-
async executeWithRetry(operation, maxRetries) {
|
|
170
|
-
const config = maxRetries !== undefined ? { ...this.config, maxRetries } : this.config;
|
|
171
|
-
return withRAGRetry(operation, config);
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
* Execute multiple operations with retry, collecting results
|
|
175
|
-
* Returns successful results and failed operations with their errors
|
|
176
|
-
*/
|
|
177
|
-
async executeBatch(items, operation, options) {
|
|
178
|
-
const { concurrency = 5, continueOnError = true } = options ?? {};
|
|
179
|
-
const successful = [];
|
|
180
|
-
const failed = [];
|
|
181
|
-
// Process in batches for concurrency control
|
|
182
|
-
for (let i = 0; i < items.length; i += concurrency) {
|
|
183
|
-
const batch = items.slice(i, i + concurrency);
|
|
184
|
-
const batchPromises = batch.map(async (item, batchIndex) => {
|
|
185
|
-
const index = i + batchIndex;
|
|
186
|
-
try {
|
|
187
|
-
const result = await this.executeWithRetry(() => operation(item, index));
|
|
188
|
-
successful.push({ item, result, index });
|
|
189
|
-
}
|
|
190
|
-
catch (error) {
|
|
191
|
-
const errorObj = error instanceof Error ? error : new Error(String(error));
|
|
192
|
-
failed.push({ item, error: errorObj, index });
|
|
193
|
-
if (!continueOnError) {
|
|
194
|
-
throw error;
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
});
|
|
198
|
-
await Promise.all(batchPromises);
|
|
199
|
-
}
|
|
200
|
-
const total = successful.length + failed.length;
|
|
201
|
-
const successRate = total > 0 ? successful.length / total : 0;
|
|
202
|
-
return { successful, failed, successRate };
|
|
203
|
-
}
|
|
204
|
-
/**
|
|
205
|
-
* Get current configuration
|
|
206
|
-
*/
|
|
207
|
-
getConfig() {
|
|
208
|
-
return { ...this.config };
|
|
209
|
-
}
|
|
210
|
-
/**
|
|
211
|
-
* Update configuration
|
|
212
|
-
*/
|
|
213
|
-
updateConfig(config) {
|
|
214
|
-
this.config = { ...this.config, ...config };
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
/**
|
|
218
|
-
* Specialized retry handler for embedding operations
|
|
219
|
-
*/
|
|
220
|
-
export class EmbeddingRetryHandler extends RAGRetryHandler {
|
|
221
|
-
constructor(config) {
|
|
222
|
-
super({
|
|
223
|
-
maxRetries: 5, // More retries for rate-limited embedding APIs
|
|
224
|
-
initialDelay: 2000, // Longer initial delay
|
|
225
|
-
retryableErrorCodes: [
|
|
226
|
-
RAGErrorCodes.EMBEDDING_ERROR,
|
|
227
|
-
RAGErrorCodes.EMBEDDING_RATE_LIMIT,
|
|
228
|
-
RAGErrorCodes.EMBEDDING_PROVIDER_ERROR,
|
|
229
|
-
],
|
|
230
|
-
shouldRetry: (error) => {
|
|
231
|
-
// Always retry rate limit errors
|
|
232
|
-
if (error instanceof EmbeddingError) {
|
|
233
|
-
return error.retryable;
|
|
234
|
-
}
|
|
235
|
-
return isRetryable(error);
|
|
236
|
-
},
|
|
237
|
-
...config,
|
|
238
|
-
});
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
/**
|
|
242
|
-
* Specialized retry handler for vector store operations
|
|
243
|
-
*/
|
|
244
|
-
export class VectorStoreRetryHandler extends RAGRetryHandler {
|
|
245
|
-
constructor(config) {
|
|
246
|
-
super({
|
|
247
|
-
maxRetries: 3,
|
|
248
|
-
initialDelay: 1000,
|
|
249
|
-
retryableErrorCodes: [
|
|
250
|
-
RAGErrorCodes.VECTOR_QUERY_ERROR,
|
|
251
|
-
RAGErrorCodes.VECTOR_QUERY_TIMEOUT,
|
|
252
|
-
RAGErrorCodes.VECTOR_STORE_UNAVAILABLE,
|
|
253
|
-
RAGErrorCodes.VECTOR_STORE_CONNECTION_ERROR,
|
|
254
|
-
],
|
|
255
|
-
shouldRetry: (error) => {
|
|
256
|
-
if (error instanceof VectorQueryError) {
|
|
257
|
-
return error.retryable;
|
|
258
|
-
}
|
|
259
|
-
return isRetryable(error);
|
|
260
|
-
},
|
|
261
|
-
...config,
|
|
262
|
-
});
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
/**
|
|
266
|
-
* Specialized retry handler for metadata extraction
|
|
267
|
-
*/
|
|
268
|
-
export class MetadataExtractionRetryHandler extends RAGRetryHandler {
|
|
269
|
-
constructor(config) {
|
|
270
|
-
super({
|
|
271
|
-
maxRetries: 3,
|
|
272
|
-
initialDelay: 1500,
|
|
273
|
-
retryableErrorCodes: [
|
|
274
|
-
RAGErrorCodes.METADATA_EXTRACTION_ERROR,
|
|
275
|
-
RAGErrorCodes.METADATA_EXTRACTION_TIMEOUT,
|
|
276
|
-
],
|
|
277
|
-
shouldRetry: (error) => {
|
|
278
|
-
if (error instanceof MetadataExtractionError) {
|
|
279
|
-
return error.retryable;
|
|
280
|
-
}
|
|
281
|
-
return isRetryable(error);
|
|
282
|
-
},
|
|
283
|
-
...config,
|
|
284
|
-
});
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
/**
|
|
288
|
-
* Create a retry handler with the core infrastructure withRetry
|
|
289
|
-
*/
|
|
290
|
-
export function createRetryHandler(config = {}) {
|
|
291
|
-
const mergedConfig = { ...DEFAULT_RAG_RETRY_CONFIG, ...config };
|
|
292
|
-
return (operation) => withRetry(operation, {
|
|
293
|
-
maxRetries: mergedConfig.maxRetries,
|
|
294
|
-
baseDelayMs: mergedConfig.initialDelay,
|
|
295
|
-
maxDelayMs: mergedConfig.maxDelay,
|
|
296
|
-
shouldRetry: (error) => isRetryable(error, mergedConfig),
|
|
297
|
-
});
|
|
298
|
-
}
|
|
299
|
-
/**
|
|
300
|
-
* Global retry handlers for common RAG operations
|
|
301
|
-
*/
|
|
302
|
-
export const embeddingRetryHandler = new EmbeddingRetryHandler();
|
|
303
|
-
export const vectorStoreRetryHandler = new VectorStoreRetryHandler();
|
|
304
|
-
export const metadataExtractionRetryHandler = new MetadataExtractionRetryHandler();
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Resilience Index
|
|
3
|
-
*
|
|
4
|
-
* Exports resilience patterns for RAG operations.
|
|
5
|
-
*/
|
|
6
|
-
export { RAGCircuitBreaker, RAGCircuitBreakerManager, ragCircuitBreakerManager, getCircuitBreaker, executeWithCircuitBreaker, } from "./CircuitBreaker.js";
|
|
7
|
-
export { RAGRetryHandler, EmbeddingRetryHandler, VectorStoreRetryHandler, MetadataExtractionRetryHandler, withRAGRetry, isRetryable, createRetryHandler, embeddingRetryHandler, vectorStoreRetryHandler, metadataExtractionRetryHandler, DEFAULT_RAG_RETRY_CONFIG, } from "./RetryHandler.js";
|
|
@@ -1,335 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Hybrid Search Implementation
|
|
3
|
-
*
|
|
4
|
-
* Combines vector (dense) search with BM25 (sparse) search for improved retrieval.
|
|
5
|
-
* Supports multiple fusion methods: Reciprocal Rank Fusion (RRF) and Linear Combination.
|
|
6
|
-
*/
|
|
7
|
-
import { ProviderFactory } from "../../factories/providerFactory.js";
|
|
8
|
-
import { SpanSerializer, SpanType, SpanStatus, getMetricsAggregator, } from "../../observability/index.js";
|
|
9
|
-
import { logger } from "../../utils/logger.js";
|
|
10
|
-
import { rerank } from "../reranker/reranker.js";
|
|
11
|
-
/**
|
|
12
|
-
* In-memory BM25 implementation for testing and development
|
|
13
|
-
*/
|
|
14
|
-
export class InMemoryBM25Index {
|
|
15
|
-
documents = new Map();
|
|
16
|
-
avgDocLength = 0;
|
|
17
|
-
k1 = 1.5; // BM25 parameter
|
|
18
|
-
b = 0.75; // BM25 parameter
|
|
19
|
-
async search(query, topK = 10) {
|
|
20
|
-
const queryTokens = this.tokenize(query);
|
|
21
|
-
if (queryTokens.length === 0 || this.documents.size === 0) {
|
|
22
|
-
return [];
|
|
23
|
-
}
|
|
24
|
-
// Calculate IDF for each query term
|
|
25
|
-
const idfValues = new Map();
|
|
26
|
-
for (const token of queryTokens) {
|
|
27
|
-
const docCount = this.countDocumentsWithTerm(token);
|
|
28
|
-
const idf = Math.log((this.documents.size - docCount + 0.5) / (docCount + 0.5) + 1);
|
|
29
|
-
idfValues.set(token, idf);
|
|
30
|
-
}
|
|
31
|
-
// Calculate BM25 score for each document
|
|
32
|
-
const scores = [];
|
|
33
|
-
for (const [id, doc] of this.documents) {
|
|
34
|
-
let score = 0;
|
|
35
|
-
const docLength = doc.tokens.length;
|
|
36
|
-
for (const token of queryTokens) {
|
|
37
|
-
const tf = this.countTermFrequency(doc.tokens, token);
|
|
38
|
-
const idf = idfValues.get(token) || 0;
|
|
39
|
-
// BM25 scoring formula
|
|
40
|
-
const numerator = tf * (this.k1 + 1);
|
|
41
|
-
const denominator = tf +
|
|
42
|
-
this.k1 * (1 - this.b + this.b * (docLength / this.avgDocLength));
|
|
43
|
-
score += idf * (numerator / denominator);
|
|
44
|
-
}
|
|
45
|
-
if (score > 0) {
|
|
46
|
-
scores.push({
|
|
47
|
-
id,
|
|
48
|
-
score,
|
|
49
|
-
text: doc.text,
|
|
50
|
-
metadata: doc.metadata,
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
// Sort by score descending
|
|
55
|
-
scores.sort((a, b) => b.score - a.score);
|
|
56
|
-
return scores.slice(0, topK);
|
|
57
|
-
}
|
|
58
|
-
async addDocuments(documents) {
|
|
59
|
-
for (const doc of documents) {
|
|
60
|
-
const tokens = this.tokenize(doc.text);
|
|
61
|
-
this.documents.set(doc.id, {
|
|
62
|
-
text: doc.text,
|
|
63
|
-
tokens,
|
|
64
|
-
metadata: doc.metadata || {},
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
// Recalculate average document length
|
|
68
|
-
let totalLength = 0;
|
|
69
|
-
for (const doc of this.documents.values()) {
|
|
70
|
-
totalLength += doc.tokens.length;
|
|
71
|
-
}
|
|
72
|
-
this.avgDocLength =
|
|
73
|
-
this.documents.size > 0 ? totalLength / this.documents.size : 0;
|
|
74
|
-
}
|
|
75
|
-
tokenize(text) {
|
|
76
|
-
return text
|
|
77
|
-
.toLowerCase()
|
|
78
|
-
.replace(/[^\w\s]/g, " ")
|
|
79
|
-
.split(/\s+/)
|
|
80
|
-
.filter((t) => t.length > 0);
|
|
81
|
-
}
|
|
82
|
-
countTermFrequency(tokens, term) {
|
|
83
|
-
return tokens.filter((t) => t === term).length;
|
|
84
|
-
}
|
|
85
|
-
countDocumentsWithTerm(term) {
|
|
86
|
-
let count = 0;
|
|
87
|
-
for (const doc of this.documents.values()) {
|
|
88
|
-
if (doc.tokens.includes(term)) {
|
|
89
|
-
count++;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
return count;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Reciprocal Rank Fusion
|
|
97
|
-
* Combines rankings from multiple retrieval methods
|
|
98
|
-
*
|
|
99
|
-
* @param rankings - Array of ranking lists, each with id and rank
|
|
100
|
-
* @param k - RRF constant (default: 60)
|
|
101
|
-
* @returns Map of document IDs to fused scores
|
|
102
|
-
*/
|
|
103
|
-
export function reciprocalRankFusion(rankings, k = 60) {
|
|
104
|
-
const scores = new Map();
|
|
105
|
-
for (const ranking of rankings) {
|
|
106
|
-
for (const { id, rank } of ranking) {
|
|
107
|
-
const currentScore = scores.get(id) || 0;
|
|
108
|
-
scores.set(id, currentScore + 1 / (k + rank));
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
return scores;
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Linear Combination of normalized scores
|
|
115
|
-
*
|
|
116
|
-
* @param vectorScores - Vector search scores
|
|
117
|
-
* @param bm25Scores - BM25 search scores
|
|
118
|
-
* @param alpha - Weight for vector scores (0-1), bm25 gets 1-alpha
|
|
119
|
-
* @returns Map of document IDs to combined scores
|
|
120
|
-
*/
|
|
121
|
-
export function linearCombination(vectorScores, bm25Scores, alpha = 0.5) {
|
|
122
|
-
const combined = new Map();
|
|
123
|
-
// Get all document IDs
|
|
124
|
-
const allIds = new Set([...vectorScores.keys(), ...bm25Scores.keys()]);
|
|
125
|
-
// Normalize scores
|
|
126
|
-
const normalizedVector = normalizeScores(vectorScores);
|
|
127
|
-
const normalizedBM25 = normalizeScores(bm25Scores);
|
|
128
|
-
for (const id of allIds) {
|
|
129
|
-
const vectorScore = normalizedVector.get(id) || 0;
|
|
130
|
-
const bm25Score = normalizedBM25.get(id) || 0;
|
|
131
|
-
combined.set(id, alpha * vectorScore + (1 - alpha) * bm25Score);
|
|
132
|
-
}
|
|
133
|
-
return combined;
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Normalize scores to 0-1 range
|
|
137
|
-
*/
|
|
138
|
-
function normalizeScores(scores) {
|
|
139
|
-
const values = Array.from(scores.values());
|
|
140
|
-
if (values.length === 0) {
|
|
141
|
-
return new Map();
|
|
142
|
-
}
|
|
143
|
-
const min = Math.min(...values);
|
|
144
|
-
const max = Math.max(...values);
|
|
145
|
-
const range = max - min || 1;
|
|
146
|
-
const normalized = new Map();
|
|
147
|
-
for (const [id, score] of scores) {
|
|
148
|
-
normalized.set(id, (score - min) / range);
|
|
149
|
-
}
|
|
150
|
-
return normalized;
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Create a hybrid search function
|
|
154
|
-
*
|
|
155
|
-
* @param options - Search options
|
|
156
|
-
* @returns Hybrid search function
|
|
157
|
-
*/
|
|
158
|
-
export function createHybridSearch(options) {
|
|
159
|
-
const { vectorStore, bm25Index, indexName, embeddingModel, defaultConfig = {}, } = options;
|
|
160
|
-
/**
|
|
161
|
-
* Execute hybrid search combining vector and BM25 retrieval
|
|
162
|
-
*
|
|
163
|
-
* @param query - Search query
|
|
164
|
-
* @param config - Search configuration
|
|
165
|
-
* @returns Hybrid search results
|
|
166
|
-
*/
|
|
167
|
-
return async function hybridSearch(query, config) {
|
|
168
|
-
const startTime = Date.now();
|
|
169
|
-
const { vectorWeight = defaultConfig.vectorWeight ?? 0.5, bm25Weight = defaultConfig.bm25Weight ?? 0.5, fusionMethod = defaultConfig.fusionMethod ?? "rrf", rrfK = defaultConfig.rrfK ?? 60, topK = defaultConfig.topK ?? 10, enableReranking = defaultConfig.enableReranking ?? false, reranker: rerankerConfig = defaultConfig.reranker, } = config || {};
|
|
170
|
-
const span = SpanSerializer.createSpan(SpanType.RAG, "rag.search", {
|
|
171
|
-
"rag.operation": "search",
|
|
172
|
-
"rag.topK": topK,
|
|
173
|
-
"rag.fusionMethod": fusionMethod,
|
|
174
|
-
"rag.query": query.slice(0, 200),
|
|
175
|
-
});
|
|
176
|
-
const spanStartTime = Date.now();
|
|
177
|
-
try {
|
|
178
|
-
// Generate query embedding
|
|
179
|
-
const embeddingProvider = await ProviderFactory.createProvider(embeddingModel?.provider, embeddingModel?.modelName);
|
|
180
|
-
if (typeof embeddingProvider
|
|
181
|
-
.embed !== "function") {
|
|
182
|
-
throw new Error(`Embedding provider does not support the embed() method. ` +
|
|
183
|
-
`Please use a provider that supports embeddings (e.g., OpenAI text-embedding-3-small, Vertex text-embedding-004).`);
|
|
184
|
-
}
|
|
185
|
-
const queryEmbedding = await embeddingProvider.embed(query);
|
|
186
|
-
// Parallel retrieval
|
|
187
|
-
const [vectorResults, bm25Results] = await Promise.all([
|
|
188
|
-
vectorStore.query({
|
|
189
|
-
indexName,
|
|
190
|
-
queryVector: queryEmbedding,
|
|
191
|
-
topK: topK * 2, // Get more for fusion
|
|
192
|
-
}),
|
|
193
|
-
bm25Index.search(query, topK * 2),
|
|
194
|
-
]);
|
|
195
|
-
// Fuse results
|
|
196
|
-
let fusedResults;
|
|
197
|
-
if (fusionMethod === "rrf") {
|
|
198
|
-
// Reciprocal Rank Fusion
|
|
199
|
-
const vectorRanking = vectorResults.map((r, i) => ({
|
|
200
|
-
id: r.id,
|
|
201
|
-
rank: i + 1,
|
|
202
|
-
}));
|
|
203
|
-
const bm25Ranking = bm25Results.map((r, i) => ({
|
|
204
|
-
id: r.id,
|
|
205
|
-
rank: i + 1,
|
|
206
|
-
}));
|
|
207
|
-
const rrfScores = reciprocalRankFusion([vectorRanking, bm25Ranking], rrfK);
|
|
208
|
-
// Combine with original data
|
|
209
|
-
const resultMap = new Map();
|
|
210
|
-
for (const r of vectorResults) {
|
|
211
|
-
resultMap.set(r.id, { text: r.text || "", metadata: r.metadata });
|
|
212
|
-
}
|
|
213
|
-
for (const r of bm25Results) {
|
|
214
|
-
if (!resultMap.has(r.id)) {
|
|
215
|
-
resultMap.set(r.id, { text: r.text, metadata: r.metadata });
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
fusedResults = Array.from(rrfScores.entries())
|
|
219
|
-
.sort((a, b) => b[1] - a[1])
|
|
220
|
-
.slice(0, topK)
|
|
221
|
-
.map(([id, score]) => ({
|
|
222
|
-
id,
|
|
223
|
-
score,
|
|
224
|
-
text: resultMap.get(id)?.text || "",
|
|
225
|
-
metadata: resultMap.get(id)?.metadata,
|
|
226
|
-
scores: {
|
|
227
|
-
combined: score,
|
|
228
|
-
},
|
|
229
|
-
}));
|
|
230
|
-
}
|
|
231
|
-
else {
|
|
232
|
-
// Linear combination
|
|
233
|
-
const vectorScoreMap = new Map(vectorResults.map((r) => [r.id, r.score || 0]));
|
|
234
|
-
const bm25ScoreMap = new Map(bm25Results.map((r) => [r.id, r.score]));
|
|
235
|
-
// Adjust weights based on config
|
|
236
|
-
const totalWeight = vectorWeight + bm25Weight;
|
|
237
|
-
const normalizedVectorWeight = vectorWeight / totalWeight;
|
|
238
|
-
const combinedScores = linearCombination(vectorScoreMap, bm25ScoreMap, normalizedVectorWeight);
|
|
239
|
-
// Combine with original data
|
|
240
|
-
const resultMap = new Map();
|
|
241
|
-
for (const r of vectorResults) {
|
|
242
|
-
resultMap.set(r.id, {
|
|
243
|
-
text: r.text || "",
|
|
244
|
-
metadata: r.metadata,
|
|
245
|
-
vectorScore: r.score,
|
|
246
|
-
});
|
|
247
|
-
}
|
|
248
|
-
for (const r of bm25Results) {
|
|
249
|
-
const existing = resultMap.get(r.id);
|
|
250
|
-
if (existing) {
|
|
251
|
-
existing.bm25Score = r.score;
|
|
252
|
-
}
|
|
253
|
-
else {
|
|
254
|
-
resultMap.set(r.id, {
|
|
255
|
-
text: r.text,
|
|
256
|
-
metadata: r.metadata,
|
|
257
|
-
bm25Score: r.score,
|
|
258
|
-
});
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
fusedResults = Array.from(combinedScores.entries())
|
|
262
|
-
.sort((a, b) => b[1] - a[1])
|
|
263
|
-
.slice(0, topK)
|
|
264
|
-
.map(([id, score]) => {
|
|
265
|
-
const data = resultMap.get(id);
|
|
266
|
-
return {
|
|
267
|
-
id,
|
|
268
|
-
score,
|
|
269
|
-
text: data?.text || "",
|
|
270
|
-
metadata: data?.metadata,
|
|
271
|
-
scores: {
|
|
272
|
-
vector: data?.vectorScore,
|
|
273
|
-
bm25: data?.bm25Score,
|
|
274
|
-
combined: score,
|
|
275
|
-
},
|
|
276
|
-
};
|
|
277
|
-
});
|
|
278
|
-
}
|
|
279
|
-
// Apply reranking if configured
|
|
280
|
-
if (enableReranking && rerankerConfig && fusedResults.length > 0) {
|
|
281
|
-
const rerankerModel = await ProviderFactory.createProvider(rerankerConfig.model.provider, rerankerConfig.model.modelName);
|
|
282
|
-
const rerankedResults = await rerank(fusedResults.map((r) => ({
|
|
283
|
-
id: r.id,
|
|
284
|
-
text: r.text,
|
|
285
|
-
score: r.score,
|
|
286
|
-
metadata: r.metadata,
|
|
287
|
-
})), query, rerankerModel, {
|
|
288
|
-
weights: rerankerConfig.weights,
|
|
289
|
-
topK: rerankerConfig.topK || topK,
|
|
290
|
-
});
|
|
291
|
-
fusedResults = rerankedResults.map((r) => ({
|
|
292
|
-
id: r.result.id,
|
|
293
|
-
score: r.score,
|
|
294
|
-
text: r.result.text || "",
|
|
295
|
-
metadata: r.result.metadata,
|
|
296
|
-
scores: {
|
|
297
|
-
...(fusedResults.find((f) => f.id === r.result.id)?.scores || {}),
|
|
298
|
-
reranked: r.score,
|
|
299
|
-
},
|
|
300
|
-
}));
|
|
301
|
-
}
|
|
302
|
-
const queryTime = Date.now() - startTime;
|
|
303
|
-
logger.info("[HybridSearch] Search completed", {
|
|
304
|
-
query: query.slice(0, 50),
|
|
305
|
-
vectorResults: vectorResults.length,
|
|
306
|
-
bm25Results: bm25Results.length,
|
|
307
|
-
fusedResults: fusedResults.length,
|
|
308
|
-
fusionMethod,
|
|
309
|
-
queryTime,
|
|
310
|
-
});
|
|
311
|
-
span.durationMs = Date.now() - spanStartTime;
|
|
312
|
-
const endedSpan = SpanSerializer.endSpan(span, SpanStatus.OK);
|
|
313
|
-
endedSpan.attributes = {
|
|
314
|
-
...endedSpan.attributes,
|
|
315
|
-
"rag.results_count": fusedResults.length,
|
|
316
|
-
"rag.vector_results": vectorResults.length,
|
|
317
|
-
"rag.bm25_results": bm25Results.length,
|
|
318
|
-
};
|
|
319
|
-
getMetricsAggregator().recordSpan(endedSpan);
|
|
320
|
-
return fusedResults;
|
|
321
|
-
}
|
|
322
|
-
catch (error) {
|
|
323
|
-
span.durationMs = Date.now() - spanStartTime;
|
|
324
|
-
const endedSpan = SpanSerializer.endSpan(span, SpanStatus.ERROR);
|
|
325
|
-
endedSpan.statusMessage =
|
|
326
|
-
error instanceof Error ? error.message : String(error);
|
|
327
|
-
getMetricsAggregator().recordSpan(endedSpan);
|
|
328
|
-
logger.error("[HybridSearch] Search failed", {
|
|
329
|
-
query: query.slice(0, 50),
|
|
330
|
-
error: error instanceof Error ? error.message : String(error),
|
|
331
|
-
});
|
|
332
|
-
throw error;
|
|
333
|
-
}
|
|
334
|
-
};
|
|
335
|
-
}
|