@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,383 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Retry Policy
|
|
3
|
-
* Configurable retry strategies for observability exporters
|
|
4
|
-
*/
|
|
5
|
-
import { logger } from "../utils/logger.js";
|
|
6
|
-
/**
|
|
7
|
-
* Base retry policy with common configuration
|
|
8
|
-
*/
|
|
9
|
-
export class BaseRetryPolicy {
|
|
10
|
-
maxAttempts;
|
|
11
|
-
maxTotalTimeMs;
|
|
12
|
-
retryableErrors;
|
|
13
|
-
nonRetryableErrors;
|
|
14
|
-
constructor(config) {
|
|
15
|
-
this.maxAttempts = config.maxAttempts ?? 3;
|
|
16
|
-
this.maxTotalTimeMs = config.maxTotalTimeMs ?? 60000; // 1 minute
|
|
17
|
-
this.retryableErrors = new Set(config.retryableErrors ?? [
|
|
18
|
-
"ECONNRESET",
|
|
19
|
-
"ETIMEDOUT",
|
|
20
|
-
"ECONNREFUSED",
|
|
21
|
-
"EPIPE",
|
|
22
|
-
"ENOTFOUND",
|
|
23
|
-
"ENETUNREACH",
|
|
24
|
-
"EAI_AGAIN",
|
|
25
|
-
"429", // Rate limit
|
|
26
|
-
"500", // Internal server error
|
|
27
|
-
"502", // Bad gateway
|
|
28
|
-
"503", // Service unavailable
|
|
29
|
-
"504", // Gateway timeout
|
|
30
|
-
]);
|
|
31
|
-
this.nonRetryableErrors = new Set(config.nonRetryableErrors ?? [
|
|
32
|
-
"400", // Bad request
|
|
33
|
-
"401", // Unauthorized
|
|
34
|
-
"403", // Forbidden
|
|
35
|
-
"404", // Not found
|
|
36
|
-
"422", // Unprocessable entity
|
|
37
|
-
]);
|
|
38
|
-
}
|
|
39
|
-
isRetryableError(error) {
|
|
40
|
-
const errorCode = this.extractErrorCode(error);
|
|
41
|
-
// Check if explicitly non-retryable
|
|
42
|
-
if (this.nonRetryableErrors.has(errorCode)) {
|
|
43
|
-
return false;
|
|
44
|
-
}
|
|
45
|
-
// Check if explicitly retryable
|
|
46
|
-
if (this.retryableErrors.has(errorCode)) {
|
|
47
|
-
return true;
|
|
48
|
-
}
|
|
49
|
-
// Default: retry on network-like errors
|
|
50
|
-
return (error.message.includes("timeout") ||
|
|
51
|
-
error.message.includes("ECONNRESET") ||
|
|
52
|
-
error.message.includes("network"));
|
|
53
|
-
}
|
|
54
|
-
extractErrorCode(error) {
|
|
55
|
-
// Check for HTTP status code in error
|
|
56
|
-
const httpMatch = error.message.match(/(\d{3})/);
|
|
57
|
-
if (httpMatch) {
|
|
58
|
-
return httpMatch[1];
|
|
59
|
-
}
|
|
60
|
-
// Check for Node.js error code
|
|
61
|
-
const nodeError = error;
|
|
62
|
-
if (nodeError.code) {
|
|
63
|
-
return nodeError.code;
|
|
64
|
-
}
|
|
65
|
-
return "UNKNOWN";
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Exponential backoff retry policy
|
|
70
|
-
* Delay increases exponentially with each attempt
|
|
71
|
-
*/
|
|
72
|
-
export class ExponentialBackoffPolicy extends BaseRetryPolicy {
|
|
73
|
-
name = "exponential-backoff";
|
|
74
|
-
baseDelayMs;
|
|
75
|
-
maxDelayMs;
|
|
76
|
-
jitterFactor;
|
|
77
|
-
constructor(config) {
|
|
78
|
-
super(config ?? {});
|
|
79
|
-
this.baseDelayMs = config?.baseDelayMs ?? 1000;
|
|
80
|
-
this.maxDelayMs = config?.maxDelayMs ?? 30000;
|
|
81
|
-
this.jitterFactor = config?.jitterFactor ?? 0.1;
|
|
82
|
-
}
|
|
83
|
-
shouldRetry(context) {
|
|
84
|
-
// Check max attempts
|
|
85
|
-
if (context.attempt >= this.maxAttempts) {
|
|
86
|
-
return {
|
|
87
|
-
shouldRetry: false,
|
|
88
|
-
delayMs: 0,
|
|
89
|
-
reason: `Max attempts (${this.maxAttempts}) exceeded`,
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
// Check max total time
|
|
93
|
-
if (context.elapsedMs >= this.maxTotalTimeMs) {
|
|
94
|
-
return {
|
|
95
|
-
shouldRetry: false,
|
|
96
|
-
delayMs: 0,
|
|
97
|
-
reason: `Max total time (${this.maxTotalTimeMs}ms) exceeded`,
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
// Check if error is retryable
|
|
101
|
-
if (!this.isRetryableError(context.error)) {
|
|
102
|
-
return {
|
|
103
|
-
shouldRetry: false,
|
|
104
|
-
delayMs: 0,
|
|
105
|
-
reason: `Error not retryable: ${context.error.message}`,
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
// Calculate delay with exponential backoff
|
|
109
|
-
const exponentialDelay = this.baseDelayMs * 2 ** context.attempt;
|
|
110
|
-
const cappedDelay = Math.min(exponentialDelay, this.maxDelayMs);
|
|
111
|
-
// Add jitter
|
|
112
|
-
const jitter = cappedDelay * this.jitterFactor * (Math.random() * 2 - 1);
|
|
113
|
-
const delayMs = Math.max(0, Math.round(cappedDelay + jitter));
|
|
114
|
-
return {
|
|
115
|
-
shouldRetry: true,
|
|
116
|
-
delayMs,
|
|
117
|
-
reason: `Retrying after ${delayMs}ms (attempt ${context.attempt + 1}/${this.maxAttempts})`,
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Linear backoff retry policy
|
|
123
|
-
* Delay increases linearly with each attempt
|
|
124
|
-
*/
|
|
125
|
-
export class LinearBackoffPolicy extends BaseRetryPolicy {
|
|
126
|
-
name = "linear-backoff";
|
|
127
|
-
delayIncrementMs;
|
|
128
|
-
initialDelayMs;
|
|
129
|
-
constructor(config) {
|
|
130
|
-
super(config ?? {});
|
|
131
|
-
this.initialDelayMs = config?.initialDelayMs ?? 1000;
|
|
132
|
-
this.delayIncrementMs = config?.delayIncrementMs ?? 1000;
|
|
133
|
-
}
|
|
134
|
-
shouldRetry(context) {
|
|
135
|
-
if (context.attempt >= this.maxAttempts) {
|
|
136
|
-
return {
|
|
137
|
-
shouldRetry: false,
|
|
138
|
-
delayMs: 0,
|
|
139
|
-
reason: `Max attempts (${this.maxAttempts}) exceeded`,
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
if (context.elapsedMs >= this.maxTotalTimeMs) {
|
|
143
|
-
return {
|
|
144
|
-
shouldRetry: false,
|
|
145
|
-
delayMs: 0,
|
|
146
|
-
reason: `Max total time (${this.maxTotalTimeMs}ms) exceeded`,
|
|
147
|
-
};
|
|
148
|
-
}
|
|
149
|
-
if (!this.isRetryableError(context.error)) {
|
|
150
|
-
return {
|
|
151
|
-
shouldRetry: false,
|
|
152
|
-
delayMs: 0,
|
|
153
|
-
reason: `Error not retryable: ${context.error.message}`,
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
const delayMs = this.initialDelayMs + context.attempt * this.delayIncrementMs;
|
|
157
|
-
return {
|
|
158
|
-
shouldRetry: true,
|
|
159
|
-
delayMs,
|
|
160
|
-
reason: `Retrying after ${delayMs}ms (attempt ${context.attempt + 1}/${this.maxAttempts})`,
|
|
161
|
-
};
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
/**
|
|
165
|
-
* Fixed delay retry policy
|
|
166
|
-
* Same delay for all retry attempts
|
|
167
|
-
*/
|
|
168
|
-
export class FixedDelayPolicy extends BaseRetryPolicy {
|
|
169
|
-
name = "fixed-delay";
|
|
170
|
-
delayMs;
|
|
171
|
-
constructor(config) {
|
|
172
|
-
super(config ?? {});
|
|
173
|
-
this.delayMs = config?.delayMs ?? 1000;
|
|
174
|
-
}
|
|
175
|
-
shouldRetry(context) {
|
|
176
|
-
if (context.attempt >= this.maxAttempts) {
|
|
177
|
-
return {
|
|
178
|
-
shouldRetry: false,
|
|
179
|
-
delayMs: 0,
|
|
180
|
-
reason: `Max attempts (${this.maxAttempts}) exceeded`,
|
|
181
|
-
};
|
|
182
|
-
}
|
|
183
|
-
if (context.elapsedMs >= this.maxTotalTimeMs) {
|
|
184
|
-
return {
|
|
185
|
-
shouldRetry: false,
|
|
186
|
-
delayMs: 0,
|
|
187
|
-
reason: `Max total time (${this.maxTotalTimeMs}ms) exceeded`,
|
|
188
|
-
};
|
|
189
|
-
}
|
|
190
|
-
if (!this.isRetryableError(context.error)) {
|
|
191
|
-
return {
|
|
192
|
-
shouldRetry: false,
|
|
193
|
-
delayMs: 0,
|
|
194
|
-
reason: `Error not retryable: ${context.error.message}`,
|
|
195
|
-
};
|
|
196
|
-
}
|
|
197
|
-
return {
|
|
198
|
-
shouldRetry: true,
|
|
199
|
-
delayMs: this.delayMs,
|
|
200
|
-
reason: `Retrying after ${this.delayMs}ms (attempt ${context.attempt + 1}/${this.maxAttempts})`,
|
|
201
|
-
};
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
/**
|
|
205
|
-
* No retry policy - never retries
|
|
206
|
-
*/
|
|
207
|
-
export class NoRetryPolicy {
|
|
208
|
-
name = "no-retry";
|
|
209
|
-
maxAttempts = 1;
|
|
210
|
-
maxTotalTimeMs = 0;
|
|
211
|
-
shouldRetry(_context) {
|
|
212
|
-
return {
|
|
213
|
-
shouldRetry: false,
|
|
214
|
-
delayMs: 0,
|
|
215
|
-
reason: "Retry disabled",
|
|
216
|
-
};
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
/**
|
|
220
|
-
* Circuit breaker aware retry policy
|
|
221
|
-
* Works with circuit breaker state to prevent retries when circuit is open
|
|
222
|
-
*/
|
|
223
|
-
export class CircuitBreakerAwarePolicy extends BaseRetryPolicy {
|
|
224
|
-
name = "circuit-breaker-aware";
|
|
225
|
-
innerPolicy;
|
|
226
|
-
failures = 0;
|
|
227
|
-
lastFailure = 0;
|
|
228
|
-
circuitState = "closed";
|
|
229
|
-
failureThreshold;
|
|
230
|
-
resetTimeoutMs;
|
|
231
|
-
constructor(config) {
|
|
232
|
-
super(config ?? {});
|
|
233
|
-
this.innerPolicy = config?.innerPolicy ?? new ExponentialBackoffPolicy();
|
|
234
|
-
this.failureThreshold = config?.failureThreshold ?? 5;
|
|
235
|
-
this.resetTimeoutMs = config?.resetTimeoutMs ?? 30000;
|
|
236
|
-
}
|
|
237
|
-
shouldRetry(context) {
|
|
238
|
-
// Check circuit state
|
|
239
|
-
if (this.circuitState === "open") {
|
|
240
|
-
if (Date.now() - this.lastFailure > this.resetTimeoutMs) {
|
|
241
|
-
this.circuitState = "half-open";
|
|
242
|
-
logger.info(`[${this.name}] Circuit half-open, allowing probe request`);
|
|
243
|
-
}
|
|
244
|
-
else {
|
|
245
|
-
return {
|
|
246
|
-
shouldRetry: false,
|
|
247
|
-
delayMs: 0,
|
|
248
|
-
reason: "Circuit breaker open",
|
|
249
|
-
};
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
// Delegate to inner policy
|
|
253
|
-
const decision = this.innerPolicy.shouldRetry(context);
|
|
254
|
-
// Record result for circuit breaker
|
|
255
|
-
if (!decision.shouldRetry) {
|
|
256
|
-
this.recordFailure();
|
|
257
|
-
}
|
|
258
|
-
return decision;
|
|
259
|
-
}
|
|
260
|
-
recordFailure() {
|
|
261
|
-
this.failures++;
|
|
262
|
-
this.lastFailure = Date.now();
|
|
263
|
-
if (this.failures >= this.failureThreshold) {
|
|
264
|
-
this.circuitState = "open";
|
|
265
|
-
logger.warn(`[${this.name}] Circuit opened after ${this.failures} failures`);
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
recordSuccess() {
|
|
269
|
-
if (this.circuitState === "half-open") {
|
|
270
|
-
logger.info(`[${this.name}] Circuit closed after successful request`);
|
|
271
|
-
}
|
|
272
|
-
this.failures = 0;
|
|
273
|
-
this.circuitState = "closed";
|
|
274
|
-
}
|
|
275
|
-
getCircuitState() {
|
|
276
|
-
return this.circuitState;
|
|
277
|
-
}
|
|
278
|
-
reset() {
|
|
279
|
-
this.failures = 0;
|
|
280
|
-
this.circuitState = "closed";
|
|
281
|
-
this.lastFailure = 0;
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
/**
|
|
285
|
-
* Retry executor - executes operations with retry policy
|
|
286
|
-
*/
|
|
287
|
-
export class RetryExecutor {
|
|
288
|
-
policy;
|
|
289
|
-
constructor(policy) {
|
|
290
|
-
this.policy = policy;
|
|
291
|
-
}
|
|
292
|
-
/**
|
|
293
|
-
* Execute an operation with retry
|
|
294
|
-
* @param operation - The async operation to execute
|
|
295
|
-
* @param operationName - Name for logging
|
|
296
|
-
* @returns The result of the operation
|
|
297
|
-
* @throws The last error if all retries fail
|
|
298
|
-
*/
|
|
299
|
-
async execute(operation, operationName) {
|
|
300
|
-
const startTime = Date.now();
|
|
301
|
-
let lastError;
|
|
302
|
-
let attempt = 0;
|
|
303
|
-
while (attempt < this.policy.maxAttempts) {
|
|
304
|
-
try {
|
|
305
|
-
const result = await operation();
|
|
306
|
-
// Record success if policy supports it
|
|
307
|
-
if (this.policy instanceof CircuitBreakerAwarePolicy) {
|
|
308
|
-
this.policy.recordSuccess();
|
|
309
|
-
}
|
|
310
|
-
return result;
|
|
311
|
-
}
|
|
312
|
-
catch (error) {
|
|
313
|
-
lastError = error;
|
|
314
|
-
const elapsed = Date.now() - startTime;
|
|
315
|
-
const decision = this.policy.shouldRetry({
|
|
316
|
-
attempt,
|
|
317
|
-
error: lastError,
|
|
318
|
-
elapsedMs: elapsed,
|
|
319
|
-
operationName,
|
|
320
|
-
});
|
|
321
|
-
if (!decision.shouldRetry) {
|
|
322
|
-
logger.warn(`[RetryExecutor] ${operationName}: ${decision.reason}`);
|
|
323
|
-
break;
|
|
324
|
-
}
|
|
325
|
-
logger.debug(`[RetryExecutor] ${operationName}: ${decision.reason}`);
|
|
326
|
-
await this.delay(decision.delayMs);
|
|
327
|
-
attempt++;
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
throw (lastError ??
|
|
331
|
-
new Error(`${operationName} failed after ${attempt} attempts`));
|
|
332
|
-
}
|
|
333
|
-
delay(ms) {
|
|
334
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
/**
|
|
338
|
-
* Factory for creating retry policies
|
|
339
|
-
*/
|
|
340
|
-
export class RetryPolicyFactory {
|
|
341
|
-
/**
|
|
342
|
-
* Create a default policy for production use
|
|
343
|
-
*/
|
|
344
|
-
static createDefault() {
|
|
345
|
-
return new ExponentialBackoffPolicy({
|
|
346
|
-
maxAttempts: 3,
|
|
347
|
-
baseDelayMs: 1000,
|
|
348
|
-
maxDelayMs: 30000,
|
|
349
|
-
});
|
|
350
|
-
}
|
|
351
|
-
/**
|
|
352
|
-
* Create an aggressive policy for critical operations
|
|
353
|
-
*/
|
|
354
|
-
static createAggressive() {
|
|
355
|
-
return new ExponentialBackoffPolicy({
|
|
356
|
-
maxAttempts: 5,
|
|
357
|
-
maxTotalTimeMs: 120000,
|
|
358
|
-
baseDelayMs: 500,
|
|
359
|
-
maxDelayMs: 60000,
|
|
360
|
-
});
|
|
361
|
-
}
|
|
362
|
-
/**
|
|
363
|
-
* Create a conservative policy for non-critical operations
|
|
364
|
-
*/
|
|
365
|
-
static createConservative() {
|
|
366
|
-
return new LinearBackoffPolicy({
|
|
367
|
-
maxAttempts: 2,
|
|
368
|
-
maxTotalTimeMs: 10000,
|
|
369
|
-
initialDelayMs: 500,
|
|
370
|
-
delayIncrementMs: 500,
|
|
371
|
-
});
|
|
372
|
-
}
|
|
373
|
-
/**
|
|
374
|
-
* Create a circuit breaker aware policy
|
|
375
|
-
*/
|
|
376
|
-
static createWithCircuitBreaker(config) {
|
|
377
|
-
return new CircuitBreakerAwarePolicy({
|
|
378
|
-
innerPolicy: RetryPolicyFactory.createDefault(),
|
|
379
|
-
failureThreshold: config?.failureThreshold ?? 5,
|
|
380
|
-
resetTimeoutMs: config?.resetTimeoutMs ?? 30000,
|
|
381
|
-
});
|
|
382
|
-
}
|
|
383
|
-
}
|
|
@@ -1,216 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Sampling Strategies
|
|
3
|
-
* Control which spans are exported for production optimization
|
|
4
|
-
*/
|
|
5
|
-
import { SpanStatus } from "../types/spanTypes.js";
|
|
6
|
-
/**
|
|
7
|
-
* Always sample all spans
|
|
8
|
-
*/
|
|
9
|
-
export class AlwaysSampler {
|
|
10
|
-
name = "always";
|
|
11
|
-
shouldSample(_span) {
|
|
12
|
-
return true;
|
|
13
|
-
}
|
|
14
|
-
getDescription() {
|
|
15
|
-
return "Samples 100% of spans";
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Never sample any spans
|
|
20
|
-
*/
|
|
21
|
-
export class NeverSampler {
|
|
22
|
-
name = "never";
|
|
23
|
-
shouldSample(_span) {
|
|
24
|
-
return false;
|
|
25
|
-
}
|
|
26
|
-
getDescription() {
|
|
27
|
-
return "Samples 0% of spans";
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Sample spans based on a probability ratio
|
|
32
|
-
*/
|
|
33
|
-
export class RatioSampler {
|
|
34
|
-
name = "ratio";
|
|
35
|
-
ratio;
|
|
36
|
-
constructor(ratio) {
|
|
37
|
-
if (ratio < 0 || ratio > 1) {
|
|
38
|
-
throw new Error("Ratio must be between 0 and 1");
|
|
39
|
-
}
|
|
40
|
-
this.ratio = ratio;
|
|
41
|
-
}
|
|
42
|
-
shouldSample(_span) {
|
|
43
|
-
return Math.random() < this.ratio;
|
|
44
|
-
}
|
|
45
|
-
getDescription() {
|
|
46
|
-
return `Samples ${this.ratio * 100}% of spans`;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Sample based on trace ID for consistent sampling across a trace
|
|
51
|
-
*/
|
|
52
|
-
export class TraceIdRatioSampler {
|
|
53
|
-
name = "trace-id-ratio";
|
|
54
|
-
ratio;
|
|
55
|
-
upperBound;
|
|
56
|
-
constructor(ratio) {
|
|
57
|
-
if (ratio < 0 || ratio > 1) {
|
|
58
|
-
throw new Error("Ratio must be between 0 and 1");
|
|
59
|
-
}
|
|
60
|
-
this.ratio = ratio;
|
|
61
|
-
this.upperBound = Math.floor(ratio * 0xffffffff);
|
|
62
|
-
}
|
|
63
|
-
shouldSample(span) {
|
|
64
|
-
// Use first 8 chars of trace ID as hash
|
|
65
|
-
const hash = parseInt(span.traceId.substring(0, 8), 16);
|
|
66
|
-
return !isNaN(hash) && hash < this.upperBound;
|
|
67
|
-
}
|
|
68
|
-
getDescription() {
|
|
69
|
-
return `Samples ${this.ratio * 100}% of traces (consistent per trace)`;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Sample based on span attributes (e.g., errors, specific providers)
|
|
74
|
-
*/
|
|
75
|
-
export class AttributeBasedSampler {
|
|
76
|
-
name = "attribute-based";
|
|
77
|
-
rules;
|
|
78
|
-
defaultSampler;
|
|
79
|
-
constructor(rules, defaultSampler = new RatioSampler(0.1)) {
|
|
80
|
-
// Sort rules by priority (higher first)
|
|
81
|
-
this.rules = [...rules].sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
|
|
82
|
-
this.defaultSampler = defaultSampler;
|
|
83
|
-
}
|
|
84
|
-
shouldSample(span) {
|
|
85
|
-
for (const rule of this.rules) {
|
|
86
|
-
if (this.matchesRule(span, rule)) {
|
|
87
|
-
return rule.sample;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
return this.defaultSampler.shouldSample(span);
|
|
91
|
-
}
|
|
92
|
-
matchesRule(span, rule) {
|
|
93
|
-
for (const [key, value] of Object.entries(rule.conditions)) {
|
|
94
|
-
const spanValue = span.attributes[key];
|
|
95
|
-
// Support wildcard matching
|
|
96
|
-
if (value === "*" && spanValue !== undefined) {
|
|
97
|
-
continue;
|
|
98
|
-
}
|
|
99
|
-
if (spanValue !== value) {
|
|
100
|
-
return false;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
return true;
|
|
104
|
-
}
|
|
105
|
-
getDescription() {
|
|
106
|
-
return `Attribute-based sampling with ${this.rules.length} rules`;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Priority-based sampler - always sample high-priority spans
|
|
111
|
-
*/
|
|
112
|
-
export class PrioritySampler {
|
|
113
|
-
name = "priority";
|
|
114
|
-
highPriorityTypes;
|
|
115
|
-
fallbackSampler;
|
|
116
|
-
constructor(highPriorityTypes = ["model.generation", "tool.call"], fallbackSampler = new RatioSampler(0.1)) {
|
|
117
|
-
this.highPriorityTypes = highPriorityTypes;
|
|
118
|
-
this.fallbackSampler = fallbackSampler;
|
|
119
|
-
}
|
|
120
|
-
shouldSample(span) {
|
|
121
|
-
// Always sample errors
|
|
122
|
-
if (span.status === SpanStatus.ERROR) {
|
|
123
|
-
return true;
|
|
124
|
-
}
|
|
125
|
-
// Always sample high-priority span types
|
|
126
|
-
if (this.highPriorityTypes.includes(span.type)) {
|
|
127
|
-
return true;
|
|
128
|
-
}
|
|
129
|
-
return this.fallbackSampler.shouldSample(span);
|
|
130
|
-
}
|
|
131
|
-
getDescription() {
|
|
132
|
-
return `Priority sampling for ${this.highPriorityTypes.join(", ")} spans`;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Error-only sampler - only sample error spans
|
|
137
|
-
*/
|
|
138
|
-
export class ErrorOnlySampler {
|
|
139
|
-
name = "error-only";
|
|
140
|
-
shouldSample(span) {
|
|
141
|
-
return span.status === SpanStatus.ERROR;
|
|
142
|
-
}
|
|
143
|
-
getDescription() {
|
|
144
|
-
return "Samples only error spans";
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
/**
|
|
148
|
-
* Composite sampler that combines multiple samplers
|
|
149
|
-
*/
|
|
150
|
-
export class CompositeSampler {
|
|
151
|
-
name = "composite";
|
|
152
|
-
samplers;
|
|
153
|
-
totalWeight;
|
|
154
|
-
constructor(samplers) {
|
|
155
|
-
this.samplers = samplers;
|
|
156
|
-
this.totalWeight = samplers.reduce((sum, s) => sum + s.weight, 0);
|
|
157
|
-
}
|
|
158
|
-
shouldSample(span) {
|
|
159
|
-
let random = Math.random() * this.totalWeight;
|
|
160
|
-
for (const { sampler, weight } of this.samplers) {
|
|
161
|
-
random -= weight;
|
|
162
|
-
if (random <= 0) {
|
|
163
|
-
return sampler.shouldSample(span);
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
return this.samplers[this.samplers.length - 1].sampler.shouldSample(span);
|
|
167
|
-
}
|
|
168
|
-
getDescription() {
|
|
169
|
-
return `Composite of ${this.samplers.length} samplers`;
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* Custom sampler that uses a user-provided function
|
|
174
|
-
*/
|
|
175
|
-
export class CustomSampler {
|
|
176
|
-
name = "custom";
|
|
177
|
-
sampleFn;
|
|
178
|
-
description;
|
|
179
|
-
constructor(sampleFn, description = "Custom sampling function") {
|
|
180
|
-
this.sampleFn = sampleFn;
|
|
181
|
-
this.description = description;
|
|
182
|
-
}
|
|
183
|
-
shouldSample(span) {
|
|
184
|
-
return this.sampleFn(span);
|
|
185
|
-
}
|
|
186
|
-
getDescription() {
|
|
187
|
-
return this.description;
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* Factory for creating samplers from configuration
|
|
192
|
-
*/
|
|
193
|
-
export class SamplerFactory {
|
|
194
|
-
static create(config) {
|
|
195
|
-
switch (config.type) {
|
|
196
|
-
case "always":
|
|
197
|
-
return new AlwaysSampler();
|
|
198
|
-
case "never":
|
|
199
|
-
return new NeverSampler();
|
|
200
|
-
case "ratio":
|
|
201
|
-
return new RatioSampler(config.ratio ?? 0.1);
|
|
202
|
-
case "trace-id-ratio":
|
|
203
|
-
return new TraceIdRatioSampler(config.ratio ?? 0.1);
|
|
204
|
-
case "attribute-based":
|
|
205
|
-
return new AttributeBasedSampler(config.rules ?? [], config.defaultRatio !== undefined
|
|
206
|
-
? new RatioSampler(config.defaultRatio)
|
|
207
|
-
: undefined);
|
|
208
|
-
case "priority":
|
|
209
|
-
return new PrioritySampler();
|
|
210
|
-
case "error-only":
|
|
211
|
-
return new ErrorOnlySampler();
|
|
212
|
-
default:
|
|
213
|
-
return new RatioSampler(0.1);
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
}
|