@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,413 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Exporter Registry
|
|
3
|
-
* Manages multiple observability exporters with circuit breaker protection
|
|
4
|
-
*/
|
|
5
|
-
import { logger } from "../utils/logger.js";
|
|
6
|
-
import { AlwaysSampler } from "./sampling/samplers.js";
|
|
7
|
-
/** Default timeout for exporter API calls (30 seconds) */
|
|
8
|
-
const DEFAULT_EXPORT_TIMEOUT_MS = 30_000;
|
|
9
|
-
/**
|
|
10
|
-
* Wrap a promise with a timeout. Rejects with a descriptive error if the
|
|
11
|
-
* promise does not settle within `timeoutMs` milliseconds.
|
|
12
|
-
*/
|
|
13
|
-
function withExportTimeout(promise, timeoutMs, label) {
|
|
14
|
-
return new Promise((resolve, reject) => {
|
|
15
|
-
const timer = setTimeout(() => {
|
|
16
|
-
reject(new Error(`Export to '${label}' timed out after ${timeoutMs}ms`));
|
|
17
|
-
}, timeoutMs);
|
|
18
|
-
promise.then((v) => {
|
|
19
|
-
clearTimeout(timer);
|
|
20
|
-
resolve(v);
|
|
21
|
-
}, (e) => {
|
|
22
|
-
clearTimeout(timer);
|
|
23
|
-
reject(e);
|
|
24
|
-
});
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Registry for managing multiple observability exporters
|
|
29
|
-
* Includes circuit breaker protection to prevent cascading failures
|
|
30
|
-
*/
|
|
31
|
-
export class ExporterRegistry {
|
|
32
|
-
exporters = new Map();
|
|
33
|
-
defaultExporter = null;
|
|
34
|
-
sampler = new AlwaysSampler();
|
|
35
|
-
circuitBreakers = new Map();
|
|
36
|
-
circuitBreakerConfig = {
|
|
37
|
-
failureThreshold: 5,
|
|
38
|
-
resetTimeout: 30000, // 30 seconds
|
|
39
|
-
};
|
|
40
|
-
/**
|
|
41
|
-
* Register an exporter
|
|
42
|
-
*/
|
|
43
|
-
register(exporter) {
|
|
44
|
-
this.exporters.set(exporter.getName(), exporter);
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Unregister an exporter
|
|
48
|
-
*/
|
|
49
|
-
unregister(name) {
|
|
50
|
-
return this.exporters.delete(name);
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Get an exporter by name
|
|
54
|
-
*/
|
|
55
|
-
get(name) {
|
|
56
|
-
return this.exporters.get(name);
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Get all registered exporter names
|
|
60
|
-
*/
|
|
61
|
-
getNames() {
|
|
62
|
-
return Array.from(this.exporters.keys());
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Get total exporter count
|
|
66
|
-
*/
|
|
67
|
-
getCount() {
|
|
68
|
-
return this.exporters.size;
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Set the default exporter
|
|
72
|
-
*/
|
|
73
|
-
setDefault(name) {
|
|
74
|
-
if (!this.exporters.has(name)) {
|
|
75
|
-
throw new Error(`Exporter '${name}' not registered`);
|
|
76
|
-
}
|
|
77
|
-
this.defaultExporter = name;
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Get the default exporter
|
|
81
|
-
*/
|
|
82
|
-
getDefault() {
|
|
83
|
-
if (!this.defaultExporter) {
|
|
84
|
-
return undefined;
|
|
85
|
-
}
|
|
86
|
-
return this.exporters.get(this.defaultExporter);
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Set the sampler for the registry
|
|
90
|
-
*/
|
|
91
|
-
setSampler(sampler) {
|
|
92
|
-
this.sampler = sampler;
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Get the current sampler
|
|
96
|
-
*/
|
|
97
|
-
getSampler() {
|
|
98
|
-
return this.sampler;
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Configure the circuit breaker settings
|
|
102
|
-
* @param config - Partial circuit breaker configuration
|
|
103
|
-
*/
|
|
104
|
-
configureCircuitBreaker(config) {
|
|
105
|
-
Object.assign(this.circuitBreakerConfig, config);
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Check if circuit is open for an exporter
|
|
109
|
-
* @param exporterName - Name of the exporter
|
|
110
|
-
* @returns true if circuit is open (exporter should be skipped)
|
|
111
|
-
*/
|
|
112
|
-
isCircuitOpen(exporterName) {
|
|
113
|
-
const breaker = this.circuitBreakers.get(exporterName);
|
|
114
|
-
if (!breaker) {
|
|
115
|
-
return false;
|
|
116
|
-
}
|
|
117
|
-
if (breaker.state === "open") {
|
|
118
|
-
// Check if we should try half-open
|
|
119
|
-
if (Date.now() - breaker.lastFailure >
|
|
120
|
-
this.circuitBreakerConfig.resetTimeout) {
|
|
121
|
-
breaker.state = "half-open";
|
|
122
|
-
logger.info(`[ExporterRegistry] Circuit half-open for ${exporterName}, attempting recovery`);
|
|
123
|
-
return false;
|
|
124
|
-
}
|
|
125
|
-
return true;
|
|
126
|
-
}
|
|
127
|
-
return false;
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Record a failure for an exporter's circuit breaker
|
|
131
|
-
* @param exporterName - Name of the exporter
|
|
132
|
-
*/
|
|
133
|
-
recordFailure(exporterName) {
|
|
134
|
-
let breaker = this.circuitBreakers.get(exporterName);
|
|
135
|
-
if (!breaker) {
|
|
136
|
-
breaker = { failures: 0, lastFailure: 0, state: "closed" };
|
|
137
|
-
this.circuitBreakers.set(exporterName, breaker);
|
|
138
|
-
}
|
|
139
|
-
breaker.failures++;
|
|
140
|
-
breaker.lastFailure = Date.now();
|
|
141
|
-
if (breaker.failures >= this.circuitBreakerConfig.failureThreshold) {
|
|
142
|
-
breaker.state = "open";
|
|
143
|
-
logger.warn(`[ExporterRegistry] Circuit opened for ${exporterName} after ${breaker.failures} failures`);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* Record a success for an exporter's circuit breaker
|
|
148
|
-
* Resets the circuit to closed state
|
|
149
|
-
* @param exporterName - Name of the exporter
|
|
150
|
-
*/
|
|
151
|
-
recordSuccess(exporterName) {
|
|
152
|
-
const breaker = this.circuitBreakers.get(exporterName);
|
|
153
|
-
if (breaker) {
|
|
154
|
-
if (breaker.state === "half-open") {
|
|
155
|
-
logger.info(`[ExporterRegistry] Circuit closed for ${exporterName} after successful recovery`);
|
|
156
|
-
}
|
|
157
|
-
breaker.failures = 0;
|
|
158
|
-
breaker.state = "closed";
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
/**
|
|
162
|
-
* Get circuit breaker status for an exporter
|
|
163
|
-
* @param exporterName - Name of the exporter
|
|
164
|
-
* @returns Circuit breaker state or undefined if not tracked
|
|
165
|
-
*/
|
|
166
|
-
getCircuitBreakerStatus(exporterName) {
|
|
167
|
-
return this.circuitBreakers.get(exporterName);
|
|
168
|
-
}
|
|
169
|
-
/**
|
|
170
|
-
* Reset circuit breaker for an exporter
|
|
171
|
-
* @param exporterName - Name of the exporter
|
|
172
|
-
*/
|
|
173
|
-
resetCircuitBreaker(exporterName) {
|
|
174
|
-
this.circuitBreakers.delete(exporterName);
|
|
175
|
-
}
|
|
176
|
-
/**
|
|
177
|
-
* Export span to all registered exporters
|
|
178
|
-
* Applies sampling and circuit breaker protection before export
|
|
179
|
-
*/
|
|
180
|
-
async exportToAll(span) {
|
|
181
|
-
const results = new Map();
|
|
182
|
-
// Apply sampling
|
|
183
|
-
if (!this.sampler.shouldSample(span)) {
|
|
184
|
-
// Return empty results if not sampled
|
|
185
|
-
return results;
|
|
186
|
-
}
|
|
187
|
-
const exportPromises = Array.from(this.exporters.entries()).map(async ([name, exporter]) => {
|
|
188
|
-
// Check circuit breaker before attempting export
|
|
189
|
-
if (this.isCircuitOpen(name)) {
|
|
190
|
-
results.set(name, {
|
|
191
|
-
success: false,
|
|
192
|
-
exportedCount: 0,
|
|
193
|
-
failedCount: 1,
|
|
194
|
-
errors: [
|
|
195
|
-
{
|
|
196
|
-
spanId: span.spanId,
|
|
197
|
-
error: "Circuit breaker open - exporter temporarily disabled",
|
|
198
|
-
retryable: true,
|
|
199
|
-
},
|
|
200
|
-
],
|
|
201
|
-
durationMs: 0,
|
|
202
|
-
});
|
|
203
|
-
return;
|
|
204
|
-
}
|
|
205
|
-
if (exporter.isInitialized()) {
|
|
206
|
-
try {
|
|
207
|
-
const result = await withExportTimeout(exporter.exportSpan(span), DEFAULT_EXPORT_TIMEOUT_MS, name);
|
|
208
|
-
results.set(name, result);
|
|
209
|
-
// Record success or failure based on result
|
|
210
|
-
if (result.success) {
|
|
211
|
-
this.recordSuccess(name);
|
|
212
|
-
}
|
|
213
|
-
else {
|
|
214
|
-
this.recordFailure(name);
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
catch (error) {
|
|
218
|
-
this.recordFailure(name);
|
|
219
|
-
results.set(name, {
|
|
220
|
-
success: false,
|
|
221
|
-
exportedCount: 0,
|
|
222
|
-
failedCount: 1,
|
|
223
|
-
errors: [
|
|
224
|
-
{
|
|
225
|
-
spanId: span.spanId,
|
|
226
|
-
error: error instanceof Error ? error.message : String(error),
|
|
227
|
-
retryable: true,
|
|
228
|
-
},
|
|
229
|
-
],
|
|
230
|
-
durationMs: 0,
|
|
231
|
-
});
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
else {
|
|
235
|
-
logger.debug(`[ExporterRegistry] Skipping uninitialized exporter '${name}' for span ${span.spanId}`);
|
|
236
|
-
}
|
|
237
|
-
});
|
|
238
|
-
await Promise.all(exportPromises);
|
|
239
|
-
return results;
|
|
240
|
-
}
|
|
241
|
-
/**
|
|
242
|
-
* Export span to a specific exporter
|
|
243
|
-
* Applies sampling and circuit breaker protection
|
|
244
|
-
*/
|
|
245
|
-
async exportTo(name, span) {
|
|
246
|
-
const exporter = this.exporters.get(name);
|
|
247
|
-
if (!exporter) {
|
|
248
|
-
return null;
|
|
249
|
-
}
|
|
250
|
-
if (!exporter.isInitialized()) {
|
|
251
|
-
logger.debug(`[ExporterRegistry] Skipping uninitialized exporter '${name}' for span ${span.spanId}`);
|
|
252
|
-
return null;
|
|
253
|
-
}
|
|
254
|
-
// Check circuit breaker before attempting export
|
|
255
|
-
if (this.isCircuitOpen(name)) {
|
|
256
|
-
return {
|
|
257
|
-
success: false,
|
|
258
|
-
exportedCount: 0,
|
|
259
|
-
failedCount: 1,
|
|
260
|
-
errors: [
|
|
261
|
-
{
|
|
262
|
-
spanId: span.spanId,
|
|
263
|
-
error: "Circuit breaker open - exporter temporarily disabled",
|
|
264
|
-
retryable: true,
|
|
265
|
-
},
|
|
266
|
-
],
|
|
267
|
-
durationMs: 0,
|
|
268
|
-
};
|
|
269
|
-
}
|
|
270
|
-
// Apply sampling
|
|
271
|
-
if (!this.sampler.shouldSample(span)) {
|
|
272
|
-
return {
|
|
273
|
-
success: true,
|
|
274
|
-
exportedCount: 0,
|
|
275
|
-
failedCount: 0,
|
|
276
|
-
durationMs: 0,
|
|
277
|
-
};
|
|
278
|
-
}
|
|
279
|
-
try {
|
|
280
|
-
const result = await withExportTimeout(exporter.exportSpan(span), DEFAULT_EXPORT_TIMEOUT_MS, name);
|
|
281
|
-
if (result.success) {
|
|
282
|
-
this.recordSuccess(name);
|
|
283
|
-
}
|
|
284
|
-
else {
|
|
285
|
-
this.recordFailure(name);
|
|
286
|
-
}
|
|
287
|
-
return result;
|
|
288
|
-
}
|
|
289
|
-
catch (error) {
|
|
290
|
-
this.recordFailure(name);
|
|
291
|
-
return {
|
|
292
|
-
success: false,
|
|
293
|
-
exportedCount: 0,
|
|
294
|
-
failedCount: 1,
|
|
295
|
-
errors: [
|
|
296
|
-
{
|
|
297
|
-
spanId: span.spanId,
|
|
298
|
-
error: error instanceof Error ? error.message : String(error),
|
|
299
|
-
retryable: true,
|
|
300
|
-
},
|
|
301
|
-
],
|
|
302
|
-
durationMs: 0,
|
|
303
|
-
};
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
/**
|
|
307
|
-
* Initialize all exporters
|
|
308
|
-
*/
|
|
309
|
-
async initializeAll() {
|
|
310
|
-
const results = await Promise.allSettled(Array.from(this.exporters.entries()).map(([name, e]) => e.initialize().catch((err) => {
|
|
311
|
-
logger.error(`[ExporterRegistry] Failed to initialize exporter '${name}':`, err);
|
|
312
|
-
throw err;
|
|
313
|
-
})));
|
|
314
|
-
for (const result of results) {
|
|
315
|
-
if (result.status === "rejected") {
|
|
316
|
-
logger.warn(`[ExporterRegistry] One or more exporters failed to initialize`);
|
|
317
|
-
break;
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
/**
|
|
322
|
-
* Shutdown all exporters
|
|
323
|
-
*/
|
|
324
|
-
async shutdownAll() {
|
|
325
|
-
const results = await Promise.allSettled(Array.from(this.exporters.entries()).map(([name, e]) => e.shutdown().catch((err) => {
|
|
326
|
-
logger.error(`[ExporterRegistry] Failed to shutdown exporter '${name}':`, err);
|
|
327
|
-
throw err;
|
|
328
|
-
})));
|
|
329
|
-
for (const result of results) {
|
|
330
|
-
if (result.status === "rejected") {
|
|
331
|
-
logger.warn(`[ExporterRegistry] One or more exporters failed to shutdown`);
|
|
332
|
-
break;
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
/**
|
|
337
|
-
* Flush all exporters
|
|
338
|
-
*/
|
|
339
|
-
async flushAll() {
|
|
340
|
-
const results = await Promise.allSettled(Array.from(this.exporters.entries()).map(([name, e]) => e.flush().catch((err) => {
|
|
341
|
-
logger.error(`[ExporterRegistry] Failed to flush exporter '${name}':`, err);
|
|
342
|
-
throw err;
|
|
343
|
-
})));
|
|
344
|
-
for (const result of results) {
|
|
345
|
-
if (result.status === "rejected") {
|
|
346
|
-
logger.warn(`[ExporterRegistry] One or more exporters failed to flush`);
|
|
347
|
-
break;
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
/**
|
|
352
|
-
* Get health status of all exporters
|
|
353
|
-
*/
|
|
354
|
-
async healthCheckAll() {
|
|
355
|
-
const results = new Map();
|
|
356
|
-
const healthPromises = Array.from(this.exporters.entries()).map(async ([name, exporter]) => {
|
|
357
|
-
const status = await exporter.healthCheck();
|
|
358
|
-
results.set(name, status);
|
|
359
|
-
});
|
|
360
|
-
await Promise.all(healthPromises);
|
|
361
|
-
return results;
|
|
362
|
-
}
|
|
363
|
-
/**
|
|
364
|
-
* Check if all exporters are healthy
|
|
365
|
-
*/
|
|
366
|
-
async isHealthy() {
|
|
367
|
-
const statuses = await this.healthCheckAll();
|
|
368
|
-
return Array.from(statuses.values()).every((s) => s.healthy);
|
|
369
|
-
}
|
|
370
|
-
/**
|
|
371
|
-
* Get total pending spans across all exporters
|
|
372
|
-
*/
|
|
373
|
-
getTotalPendingSpans() {
|
|
374
|
-
let total = 0;
|
|
375
|
-
const exporterArray = Array.from(this.exporters.values());
|
|
376
|
-
for (const exporter of exporterArray) {
|
|
377
|
-
total += exporter.getPendingCount();
|
|
378
|
-
}
|
|
379
|
-
return total;
|
|
380
|
-
}
|
|
381
|
-
/**
|
|
382
|
-
* Clear all registered exporters and reset state
|
|
383
|
-
* (For testing and cleanup)
|
|
384
|
-
*/
|
|
385
|
-
clear() {
|
|
386
|
-
this.exporters.clear();
|
|
387
|
-
this.defaultExporter = null;
|
|
388
|
-
this.circuitBreakers.clear();
|
|
389
|
-
this.sampler = new AlwaysSampler();
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
/**
|
|
393
|
-
* Global exporter registry instance (singleton pattern from main)
|
|
394
|
-
*/
|
|
395
|
-
let globalRegistry = null;
|
|
396
|
-
/**
|
|
397
|
-
* Get the global exporter registry instance
|
|
398
|
-
*/
|
|
399
|
-
export function getExporterRegistry() {
|
|
400
|
-
if (!globalRegistry) {
|
|
401
|
-
globalRegistry = new ExporterRegistry();
|
|
402
|
-
}
|
|
403
|
-
return globalRegistry;
|
|
404
|
-
}
|
|
405
|
-
/**
|
|
406
|
-
* Reset the global exporter registry (for testing)
|
|
407
|
-
*/
|
|
408
|
-
export function resetExporterRegistry() {
|
|
409
|
-
if (globalRegistry) {
|
|
410
|
-
globalRegistry.clear();
|
|
411
|
-
}
|
|
412
|
-
globalRegistry = null;
|
|
413
|
-
}
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Arize Exporter
|
|
3
|
-
* Exports spans to Arize ML monitoring platform
|
|
4
|
-
*/
|
|
5
|
-
import { BaseExporter } from "./baseExporter.js";
|
|
6
|
-
/**
|
|
7
|
-
* Arize exporter for ML monitoring and prediction logs
|
|
8
|
-
* Supports feature tracking and model performance monitoring
|
|
9
|
-
*/
|
|
10
|
-
export class ArizeExporter extends BaseExporter {
|
|
11
|
-
spaceKey;
|
|
12
|
-
apiKey;
|
|
13
|
-
modelId;
|
|
14
|
-
modelVersion;
|
|
15
|
-
endpoint = "https://api.arize.com/v1";
|
|
16
|
-
constructor(config) {
|
|
17
|
-
super("arize", config);
|
|
18
|
-
this.spaceKey = config.spaceKey;
|
|
19
|
-
this.apiKey = config.apiKey;
|
|
20
|
-
this.modelId = config.modelId ?? "neurolink-ai";
|
|
21
|
-
this.modelVersion = config.modelVersion ?? "1.0.0";
|
|
22
|
-
}
|
|
23
|
-
async initialize() {
|
|
24
|
-
if (this.initialized) {
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
this.initialized = true;
|
|
28
|
-
this.startFlushInterval(this.config.flushIntervalMs ?? 10000);
|
|
29
|
-
}
|
|
30
|
-
async exportSpan(span) {
|
|
31
|
-
const startTime = Date.now();
|
|
32
|
-
try {
|
|
33
|
-
const prediction = this.convertToArizePrediction(span);
|
|
34
|
-
const response = await fetch(`${this.endpoint}/log`, {
|
|
35
|
-
method: "POST",
|
|
36
|
-
headers: {
|
|
37
|
-
"Content-Type": "application/json",
|
|
38
|
-
Authorization: `Bearer ${this.apiKey}`,
|
|
39
|
-
"space-key": this.spaceKey,
|
|
40
|
-
},
|
|
41
|
-
body: JSON.stringify(prediction),
|
|
42
|
-
});
|
|
43
|
-
if (!response.ok) {
|
|
44
|
-
throw new Error(`Export failed: ${response.statusText}`);
|
|
45
|
-
}
|
|
46
|
-
return this.createSuccessResult(1, Date.now() - startTime);
|
|
47
|
-
}
|
|
48
|
-
catch (error) {
|
|
49
|
-
return this.createFailureResult([span.spanId], error instanceof Error ? error.message : String(error), Date.now() - startTime);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
async exportBatch(spans) {
|
|
53
|
-
// Arize's /v1/log endpoint does not support batch payloads, so we send
|
|
54
|
-
// individual requests in parallel. This is intentional — not a missed
|
|
55
|
-
// optimization.
|
|
56
|
-
const results = await Promise.all(spans.map((s) => this.exportSpan(s)));
|
|
57
|
-
const successful = results.filter((r) => r.success).length;
|
|
58
|
-
const failed = spans.length - successful;
|
|
59
|
-
return {
|
|
60
|
-
success: failed === 0,
|
|
61
|
-
exportedCount: successful,
|
|
62
|
-
failedCount: failed,
|
|
63
|
-
errors: results.flatMap((r) => r.errors ?? []),
|
|
64
|
-
durationMs: results.reduce((sum, r) => sum + r.durationMs, 0),
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
async flush() {
|
|
68
|
-
if (!this.initialized || this.buffer.length === 0) {
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
const spans = [...this.buffer];
|
|
72
|
-
this.buffer = [];
|
|
73
|
-
await this.exportBatch(spans);
|
|
74
|
-
}
|
|
75
|
-
async shutdown() {
|
|
76
|
-
await this.flush();
|
|
77
|
-
this.stopFlushInterval();
|
|
78
|
-
this.initialized = false;
|
|
79
|
-
}
|
|
80
|
-
async healthCheck() {
|
|
81
|
-
try {
|
|
82
|
-
await this.withRetry(() => this.ping(), "health check");
|
|
83
|
-
return this.createHealthStatus(true);
|
|
84
|
-
}
|
|
85
|
-
catch {
|
|
86
|
-
return this.createHealthStatus(false, ["Health check failed"]);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Verify connectivity to Arize API
|
|
91
|
-
*/
|
|
92
|
-
async ping() {
|
|
93
|
-
const response = await fetch(`${this.endpoint}/health`, {
|
|
94
|
-
method: "GET",
|
|
95
|
-
headers: {
|
|
96
|
-
Authorization: `Bearer ${this.apiKey}`,
|
|
97
|
-
"space-key": this.spaceKey,
|
|
98
|
-
},
|
|
99
|
-
});
|
|
100
|
-
if (!response.ok && response.status !== 404) {
|
|
101
|
-
// 404 is acceptable as health endpoint may not exist
|
|
102
|
-
throw new Error(`Arize API unreachable: ${response.status}`);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Convert span to Arize prediction log format
|
|
107
|
-
*/
|
|
108
|
-
convertToArizePrediction(span) {
|
|
109
|
-
return {
|
|
110
|
-
space_key: this.spaceKey,
|
|
111
|
-
model_id: span.attributes["ai.model"] ?? this.modelId,
|
|
112
|
-
model_version: this.modelVersion,
|
|
113
|
-
prediction_id: span.spanId,
|
|
114
|
-
prediction_timestamp: new Date(span.startTime).getTime(),
|
|
115
|
-
features: {
|
|
116
|
-
provider: span.attributes["ai.provider"],
|
|
117
|
-
temperature: span.attributes["ai.temperature"],
|
|
118
|
-
max_tokens: span.attributes["ai.max_tokens"],
|
|
119
|
-
user_id: span.attributes["user.id"],
|
|
120
|
-
session_id: span.attributes["session.id"],
|
|
121
|
-
},
|
|
122
|
-
prediction: {
|
|
123
|
-
input: span.attributes["input"],
|
|
124
|
-
output: span.attributes["output"],
|
|
125
|
-
},
|
|
126
|
-
tags: {
|
|
127
|
-
span_type: span.type,
|
|
128
|
-
environment: this.config.environment,
|
|
129
|
-
},
|
|
130
|
-
latency_ms: span.durationMs,
|
|
131
|
-
token_count: {
|
|
132
|
-
prompt: span.attributes["ai.tokens.input"],
|
|
133
|
-
completion: span.attributes["ai.tokens.output"],
|
|
134
|
-
total: span.attributes["ai.tokens.total"],
|
|
135
|
-
},
|
|
136
|
-
};
|
|
137
|
-
}
|
|
138
|
-
}
|