@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,112 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Provider-level retry utility for AI SDK calls (NL11)
|
|
3
|
-
*
|
|
4
|
-
* The Vercel AI SDK's `generateText()` and `streamText()` have built-in retry
|
|
5
|
-
* logic (`_retryWithExponentialBackoff()` with default `maxRetries: 2`) that
|
|
6
|
-
* retries on HTTP 429/500/503. These retries are completely invisible to OTel
|
|
7
|
-
* because they happen inside the AI SDK.
|
|
8
|
-
*
|
|
9
|
-
* This module provides an instrumented retry wrapper that:
|
|
10
|
-
* 1. Disables the AI SDK's internal retries (via `maxRetries: 0`)
|
|
11
|
-
* 2. Implements our own retry loop with full OTel span events
|
|
12
|
-
* 3. Records retry attempts, delays, status codes, and total attempt count
|
|
13
|
-
*
|
|
14
|
-
* @module utils/providerRetry
|
|
15
|
-
*/
|
|
16
|
-
import { APICallError } from "@ai-sdk/provider";
|
|
17
|
-
import { logger } from "./logger.js";
|
|
18
|
-
/** Maximum number of retry attempts after the initial call (total = 1 + MAX_PROVIDER_RETRIES). */
|
|
19
|
-
export const MAX_PROVIDER_RETRIES = 2;
|
|
20
|
-
/** Base delay in ms for exponential backoff between retries. */
|
|
21
|
-
export const BASE_RETRY_DELAY_MS = 1000;
|
|
22
|
-
/**
|
|
23
|
-
* Check whether an error thrown by the AI SDK is retryable.
|
|
24
|
-
*
|
|
25
|
-
* Uses `APICallError.isInstance()` for proper type-safe detection (the class
|
|
26
|
-
* uses a branded symbol marker, so `instanceof` doesn't work across package
|
|
27
|
-
* boundaries). Falls back to duck-typing for non-APICallError cases.
|
|
28
|
-
*/
|
|
29
|
-
export function isRetryableProviderError(error) {
|
|
30
|
-
// Preferred path: use the AI SDK's own branded type check + isRetryable flag
|
|
31
|
-
if (APICallError.isInstance(error)) {
|
|
32
|
-
return error.isRetryable;
|
|
33
|
-
}
|
|
34
|
-
// Fallback: duck-type for status codes on errors that aren't APICallError
|
|
35
|
-
if (error && typeof error === "object" && "statusCode" in error) {
|
|
36
|
-
const statusCode = error.statusCode;
|
|
37
|
-
return statusCode === 429 || statusCode >= 500;
|
|
38
|
-
}
|
|
39
|
-
return false;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Extract the HTTP status code from an AI SDK error, if available.
|
|
43
|
-
*/
|
|
44
|
-
export function getErrorStatusCode(error) {
|
|
45
|
-
if (APICallError.isInstance(error)) {
|
|
46
|
-
return error.statusCode;
|
|
47
|
-
}
|
|
48
|
-
if (error && typeof error === "object" && "statusCode" in error) {
|
|
49
|
-
return error.statusCode;
|
|
50
|
-
}
|
|
51
|
-
return undefined;
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Execute a provider call with instrumented retry logic.
|
|
55
|
-
*
|
|
56
|
-
* @param operation - The async operation to execute (should already use `maxRetries: 0`)
|
|
57
|
-
* @param span - The OTel span to annotate with retry events and attributes
|
|
58
|
-
* @param label - A human-readable label for log messages (e.g. "generateText", "streamText")
|
|
59
|
-
* @returns The result of the operation
|
|
60
|
-
*/
|
|
61
|
-
export async function withProviderRetry(operation, span, label) {
|
|
62
|
-
for (let attempt = 0; attempt <= MAX_PROVIDER_RETRIES; attempt++) {
|
|
63
|
-
try {
|
|
64
|
-
const result = await operation();
|
|
65
|
-
// Record how many attempts it took on the span
|
|
66
|
-
span.setAttribute("gen_ai.provider.total_attempts", attempt + 1);
|
|
67
|
-
if (attempt > 0) {
|
|
68
|
-
logger.info(`[providerRetry] ${label} succeeded after ${attempt + 1} attempts`);
|
|
69
|
-
}
|
|
70
|
-
return result;
|
|
71
|
-
}
|
|
72
|
-
catch (error) {
|
|
73
|
-
const retryable = isRetryableProviderError(error);
|
|
74
|
-
const statusCode = getErrorStatusCode(error);
|
|
75
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
76
|
-
if (!retryable || attempt === MAX_PROVIDER_RETRIES) {
|
|
77
|
-
// Record failure details before re-throwing
|
|
78
|
-
span.setAttribute("gen_ai.provider.total_attempts", attempt + 1);
|
|
79
|
-
if (attempt > 0) {
|
|
80
|
-
span.setAttribute("gen_ai.provider.retries_exhausted", true);
|
|
81
|
-
}
|
|
82
|
-
logger.warn(`[providerRetry] ${label} failed (non-retryable or retries exhausted)`, {
|
|
83
|
-
attempt: attempt + 1,
|
|
84
|
-
retryable,
|
|
85
|
-
statusCode,
|
|
86
|
-
error: errorMessage,
|
|
87
|
-
});
|
|
88
|
-
throw error;
|
|
89
|
-
}
|
|
90
|
-
// Calculate exponential backoff delay
|
|
91
|
-
const delay = BASE_RETRY_DELAY_MS * Math.pow(2, attempt);
|
|
92
|
-
// Record retry event on the OTel span
|
|
93
|
-
span.addEvent("gen_ai.provider.retry", {
|
|
94
|
-
"retry.attempt": attempt + 1,
|
|
95
|
-
"retry.delay_ms": delay,
|
|
96
|
-
...(statusCode !== undefined && { "retry.status_code": statusCode }),
|
|
97
|
-
"retry.error": errorMessage.slice(0, 256),
|
|
98
|
-
});
|
|
99
|
-
logger.warn(`[providerRetry] ${label} retrying after ${statusCode || "unknown"} error`, {
|
|
100
|
-
attempt: attempt + 1,
|
|
101
|
-
maxRetries: MAX_PROVIDER_RETRIES,
|
|
102
|
-
delayMs: delay,
|
|
103
|
-
statusCode,
|
|
104
|
-
error: errorMessage,
|
|
105
|
-
});
|
|
106
|
-
await new Promise((r) => setTimeout(r, delay));
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
// This should never be reached due to the throw inside the loop,
|
|
110
|
-
// but TypeScript requires it for exhaustiveness.
|
|
111
|
-
throw new Error(`[providerRetry] ${label} exhausted all retries`);
|
|
112
|
-
}
|
|
@@ -1,434 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Utility functions for AI provider management
|
|
3
|
-
* Consolidated from providerUtils-fixed.ts
|
|
4
|
-
*/
|
|
5
|
-
import { AIProviderFactory } from "../core/factory.js";
|
|
6
|
-
import { logger } from "./logger.js";
|
|
7
|
-
import { ProviderHealthChecker } from "./providerHealth.js";
|
|
8
|
-
import { API_KEY_FORMATS, API_KEY_LENGTHS, PROJECT_ID_FORMAT, } from "./providerConfig.js";
|
|
9
|
-
/**
|
|
10
|
-
* Get the best available provider based on real-time availability checks
|
|
11
|
-
* Enhanced version consolidated from providerUtils-fixed.ts
|
|
12
|
-
* @param requestedProvider - Optional preferred provider name
|
|
13
|
-
* @returns The best provider name to use
|
|
14
|
-
*/
|
|
15
|
-
export async function getBestProvider(requestedProvider) {
|
|
16
|
-
// Check requested provider FIRST - explicit user choice overrides defaults
|
|
17
|
-
if (requestedProvider && requestedProvider !== "auto") {
|
|
18
|
-
// For explicit provider requests, ALWAYS honor the request
|
|
19
|
-
// Never override explicit provider selection with health-based fallbacks
|
|
20
|
-
logger.debug(`[getBestProvider] Using explicitly requested provider: ${requestedProvider}`);
|
|
21
|
-
// Optional health check for logging purposes only
|
|
22
|
-
try {
|
|
23
|
-
const health = await ProviderHealthChecker.checkProviderHealth(requestedProvider, { includeConnectivityTest: false, cacheResults: true });
|
|
24
|
-
if (health.isHealthy) {
|
|
25
|
-
logger.debug(`[getBestProvider] Explicitly requested provider ${requestedProvider} is healthy`);
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
logger.warn(`[getBestProvider] Explicitly requested provider ${requestedProvider} may have issues, but using anyway`, { error: health.error });
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
catch (error) {
|
|
32
|
-
logger.warn(`[getBestProvider] Health check failed for explicitly requested provider ${requestedProvider}, using anyway`, { error: error instanceof Error ? error.message : String(error) });
|
|
33
|
-
}
|
|
34
|
-
// ALWAYS return the explicitly requested provider
|
|
35
|
-
return requestedProvider;
|
|
36
|
-
}
|
|
37
|
-
// Use health checker to get best available provider
|
|
38
|
-
const healthyProvider = await ProviderHealthChecker.getBestHealthyProvider();
|
|
39
|
-
if (healthyProvider) {
|
|
40
|
-
logger.debug(`[getBestProvider] Selected healthy provider: ${healthyProvider}`);
|
|
41
|
-
return healthyProvider;
|
|
42
|
-
}
|
|
43
|
-
// Fallback to legacy provider checking if health system fails
|
|
44
|
-
logger.warn("[getBestProvider] Health system failed, falling back to legacy checking");
|
|
45
|
-
// Check for explicit default provider in env (only when no provider requested)
|
|
46
|
-
if (process.env.DEFAULT_PROVIDER &&
|
|
47
|
-
(await isProviderAvailable(process.env.DEFAULT_PROVIDER))) {
|
|
48
|
-
logger.debug(`[getBestProvider] Using default provider from env: ${process.env.DEFAULT_PROVIDER}`);
|
|
49
|
-
return process.env.DEFAULT_PROVIDER;
|
|
50
|
-
}
|
|
51
|
-
// Special case for Ollama - prioritize local when available
|
|
52
|
-
if (process.env.OLLAMA_BASE_URL && process.env.OLLAMA_MODEL) {
|
|
53
|
-
try {
|
|
54
|
-
if (await isProviderAvailable("ollama")) {
|
|
55
|
-
logger.debug(`[getBestProvider] Prioritizing working local Ollama`);
|
|
56
|
-
return "ollama"; // Prioritize working local AI
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
catch {
|
|
60
|
-
// Fall through to cloud providers
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Provider priority order rationale:
|
|
65
|
-
* - Vertex (Google Cloud AI) is prioritized first for its enterprise-grade reliability and advanced model capabilities.
|
|
66
|
-
* - Google AI follows as second priority for comprehensive Google AI ecosystem support.
|
|
67
|
-
* - OpenAI maintains high priority due to its consistent reliability and broad model support.
|
|
68
|
-
* - Other providers are ordered based on a combination of reliability, feature set, and historical performance in our use cases.
|
|
69
|
-
* - Ollama is kept as a fallback for local deployments when available.
|
|
70
|
-
* Please update this comment if the order is changed in the future, and document the rationale for maintainability.
|
|
71
|
-
*/
|
|
72
|
-
const providers = [
|
|
73
|
-
"vertex", // Prioritize Google Cloud AI (Vertex) first
|
|
74
|
-
"google-ai", // Google AI ecosystem support
|
|
75
|
-
"openai", // Reliable with broad model support
|
|
76
|
-
"anthropic",
|
|
77
|
-
"bedrock",
|
|
78
|
-
"azure",
|
|
79
|
-
"mistral",
|
|
80
|
-
"huggingface",
|
|
81
|
-
"ollama", // Keep as fallback
|
|
82
|
-
];
|
|
83
|
-
for (const provider of providers) {
|
|
84
|
-
if (await isProviderAvailable(provider)) {
|
|
85
|
-
logger.debug(`[getBestProvider] Selected provider: ${provider}`);
|
|
86
|
-
return provider;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
throw new Error("No available AI providers. Please check your configurations.");
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Check if a provider is truly available by performing a quick authentication test.
|
|
93
|
-
* Enhanced function consolidated from providerUtils-fixed.ts
|
|
94
|
-
* @param providerName - The name of the provider to check.
|
|
95
|
-
* @returns True if the provider is available and authenticated.
|
|
96
|
-
*/
|
|
97
|
-
async function isProviderAvailable(providerName) {
|
|
98
|
-
if (!hasProviderEnvVars(providerName) && providerName !== "ollama") {
|
|
99
|
-
return false;
|
|
100
|
-
}
|
|
101
|
-
if (providerName === "ollama") {
|
|
102
|
-
try {
|
|
103
|
-
const response = await fetch("http://localhost:11434/api/tags", {
|
|
104
|
-
method: "GET",
|
|
105
|
-
signal: AbortSignal.timeout(2000),
|
|
106
|
-
});
|
|
107
|
-
if (response.ok) {
|
|
108
|
-
const { models } = await response.json();
|
|
109
|
-
const defaultOllamaModel = "llama3.2:latest";
|
|
110
|
-
return models.some((m) => m.name === defaultOllamaModel);
|
|
111
|
-
}
|
|
112
|
-
return false;
|
|
113
|
-
}
|
|
114
|
-
catch {
|
|
115
|
-
return false;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
try {
|
|
119
|
-
const provider = await AIProviderFactory.createProvider(providerName);
|
|
120
|
-
await provider.generate({ prompt: "test", maxTokens: 1 });
|
|
121
|
-
return true;
|
|
122
|
-
}
|
|
123
|
-
catch {
|
|
124
|
-
return false;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Validate environment variable values for a provider
|
|
129
|
-
* Addresses GitHub Copilot comment about adding environment variable validation
|
|
130
|
-
* @param provider - Provider name to validate
|
|
131
|
-
* @returns Validation result with detailed information
|
|
132
|
-
*/
|
|
133
|
-
export function validateProviderEnvVars(provider) {
|
|
134
|
-
const result = {
|
|
135
|
-
isValid: true,
|
|
136
|
-
missingVars: [],
|
|
137
|
-
invalidVars: [],
|
|
138
|
-
warnings: [],
|
|
139
|
-
};
|
|
140
|
-
switch (provider.toLowerCase()) {
|
|
141
|
-
case "bedrock":
|
|
142
|
-
case "amazon":
|
|
143
|
-
case "aws":
|
|
144
|
-
validateAwsCredentials(result);
|
|
145
|
-
break;
|
|
146
|
-
case "vertex":
|
|
147
|
-
case "googlevertex":
|
|
148
|
-
case "google":
|
|
149
|
-
case "gemini":
|
|
150
|
-
validateVertexCredentials(result);
|
|
151
|
-
break;
|
|
152
|
-
case "openai":
|
|
153
|
-
case "gpt":
|
|
154
|
-
validateOpenAICredentials(result);
|
|
155
|
-
break;
|
|
156
|
-
case "anthropic":
|
|
157
|
-
case "claude":
|
|
158
|
-
validateAnthropicCredentials(result);
|
|
159
|
-
break;
|
|
160
|
-
case "azure":
|
|
161
|
-
case "azureopenai":
|
|
162
|
-
validateAzureCredentials(result);
|
|
163
|
-
break;
|
|
164
|
-
case "google-ai":
|
|
165
|
-
case "google-studio":
|
|
166
|
-
validateGoogleAICredentials(result);
|
|
167
|
-
break;
|
|
168
|
-
case "huggingface":
|
|
169
|
-
case "hugging-face":
|
|
170
|
-
case "hf":
|
|
171
|
-
validateHuggingFaceCredentials(result);
|
|
172
|
-
break;
|
|
173
|
-
case "mistral":
|
|
174
|
-
case "mistral-ai":
|
|
175
|
-
case "mistralai":
|
|
176
|
-
validateMistralCredentials(result);
|
|
177
|
-
break;
|
|
178
|
-
case "ollama":
|
|
179
|
-
case "local":
|
|
180
|
-
case "local-ollama":
|
|
181
|
-
// Ollama doesn't require environment variables
|
|
182
|
-
break;
|
|
183
|
-
case "litellm":
|
|
184
|
-
// LiteLLM validation can be added if needed
|
|
185
|
-
break;
|
|
186
|
-
default:
|
|
187
|
-
result.isValid = false;
|
|
188
|
-
result.warnings.push(`Unknown provider: ${provider}`);
|
|
189
|
-
}
|
|
190
|
-
result.isValid =
|
|
191
|
-
result.missingVars.length === 0 && result.invalidVars.length === 0;
|
|
192
|
-
return result;
|
|
193
|
-
}
|
|
194
|
-
/**
|
|
195
|
-
* Validate AWS credentials with flexible validation
|
|
196
|
-
* Note: AWS credential formats can vary, so validation is kept reasonably flexible
|
|
197
|
-
*/
|
|
198
|
-
function validateAwsCredentials(result) {
|
|
199
|
-
const accessKeyId = process.env.AWS_ACCESS_KEY_ID;
|
|
200
|
-
const secretAccessKey = process.env.AWS_SECRET_ACCESS_KEY;
|
|
201
|
-
const region = process.env.AWS_REGION || process.env.AWS_DEFAULT_REGION;
|
|
202
|
-
if (!accessKeyId) {
|
|
203
|
-
result.missingVars.push("AWS_ACCESS_KEY_ID");
|
|
204
|
-
}
|
|
205
|
-
else if (!/^[A-Z0-9]{16,}$/.test(accessKeyId)) {
|
|
206
|
-
// Flexible validation: at least 16 uppercase alphanumeric characters
|
|
207
|
-
result.invalidVars.push("AWS_ACCESS_KEY_ID (should be uppercase alphanumeric characters, typically 20 chars)");
|
|
208
|
-
}
|
|
209
|
-
if (!secretAccessKey) {
|
|
210
|
-
result.missingVars.push("AWS_SECRET_ACCESS_KEY");
|
|
211
|
-
}
|
|
212
|
-
else if (!/^[A-Za-z0-9+/]{30,}$/.test(secretAccessKey)) {
|
|
213
|
-
// Flexible validation: at least 30 base64 characters (can vary in length)
|
|
214
|
-
result.invalidVars.push("AWS_SECRET_ACCESS_KEY (should be base64 characters, typically 40+ chars)");
|
|
215
|
-
}
|
|
216
|
-
if (!region) {
|
|
217
|
-
result.warnings.push("AWS_REGION not set, will use default region");
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
/**
|
|
221
|
-
* Validate Google Vertex credentials
|
|
222
|
-
*/
|
|
223
|
-
function validateVertexCredentials(result) {
|
|
224
|
-
const projectId = process.env.GOOGLE_CLOUD_PROJECT_ID ||
|
|
225
|
-
process.env.VERTEX_PROJECT_ID ||
|
|
226
|
-
process.env.GOOGLE_VERTEX_PROJECT ||
|
|
227
|
-
process.env.GOOGLE_CLOUD_PROJECT;
|
|
228
|
-
const hasCredentials = process.env.GOOGLE_APPLICATION_CREDENTIALS ||
|
|
229
|
-
process.env.GOOGLE_SERVICE_ACCOUNT_KEY ||
|
|
230
|
-
(process.env.GOOGLE_AUTH_CLIENT_EMAIL &&
|
|
231
|
-
process.env.GOOGLE_AUTH_PRIVATE_KEY);
|
|
232
|
-
if (!projectId) {
|
|
233
|
-
result.missingVars.push("GOOGLE_CLOUD_PROJECT_ID (or variant)");
|
|
234
|
-
}
|
|
235
|
-
else if (!PROJECT_ID_FORMAT.PATTERN.test(projectId)) {
|
|
236
|
-
result.invalidVars.push("Project ID format invalid (must be 6-30 lowercase letters, digits, hyphens)");
|
|
237
|
-
}
|
|
238
|
-
if (!hasCredentials) {
|
|
239
|
-
result.missingVars.push("Google credentials (GOOGLE_APPLICATION_CREDENTIALS or explicit auth)");
|
|
240
|
-
}
|
|
241
|
-
if (process.env.GOOGLE_AUTH_CLIENT_EMAIL &&
|
|
242
|
-
!isValidEmail(process.env.GOOGLE_AUTH_CLIENT_EMAIL)) {
|
|
243
|
-
result.invalidVars.push("GOOGLE_AUTH_CLIENT_EMAIL (invalid email format)");
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
/**
|
|
247
|
-
* Validate OpenAI credentials
|
|
248
|
-
*/
|
|
249
|
-
function validateOpenAICredentials(result) {
|
|
250
|
-
const apiKey = process.env.OPENAI_API_KEY;
|
|
251
|
-
if (!apiKey) {
|
|
252
|
-
result.missingVars.push("OPENAI_API_KEY");
|
|
253
|
-
}
|
|
254
|
-
else if (!API_KEY_FORMATS.openai.test(apiKey)) {
|
|
255
|
-
result.invalidVars.push(`OPENAI_API_KEY (should start with 'sk-' followed by ${API_KEY_LENGTHS.OPENAI_MIN}+ characters)`);
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
/**
|
|
259
|
-
* Validate Anthropic credentials
|
|
260
|
-
*/
|
|
261
|
-
function validateAnthropicCredentials(result) {
|
|
262
|
-
const apiKey = process.env.ANTHROPIC_API_KEY;
|
|
263
|
-
if (!apiKey) {
|
|
264
|
-
result.missingVars.push("ANTHROPIC_API_KEY");
|
|
265
|
-
}
|
|
266
|
-
else if (!API_KEY_FORMATS.anthropic.test(apiKey)) {
|
|
267
|
-
result.invalidVars.push(`ANTHROPIC_API_KEY (should start with 'sk-ant-' followed by ${API_KEY_LENGTHS.ANTHROPIC_MIN}+ characters)`);
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
/**
|
|
271
|
-
* Validate Azure credentials
|
|
272
|
-
*/
|
|
273
|
-
function validateAzureCredentials(result) {
|
|
274
|
-
const apiKey = process.env.AZURE_OPENAI_API_KEY;
|
|
275
|
-
const endpoint = process.env.AZURE_OPENAI_ENDPOINT;
|
|
276
|
-
if (!apiKey) {
|
|
277
|
-
result.missingVars.push("AZURE_OPENAI_API_KEY");
|
|
278
|
-
}
|
|
279
|
-
else if (!API_KEY_FORMATS.azure.test(apiKey)) {
|
|
280
|
-
result.invalidVars.push(`AZURE_OPENAI_API_KEY (should be at least ${API_KEY_LENGTHS.AZURE_MIN} alphanumeric characters)`);
|
|
281
|
-
}
|
|
282
|
-
if (!endpoint) {
|
|
283
|
-
result.missingVars.push("AZURE_OPENAI_ENDPOINT");
|
|
284
|
-
}
|
|
285
|
-
else if (!isValidUrl(endpoint)) {
|
|
286
|
-
result.invalidVars.push("AZURE_OPENAI_ENDPOINT (should be a valid HTTPS URL)");
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
/**
|
|
290
|
-
* Validate Google AI credentials
|
|
291
|
-
*/
|
|
292
|
-
function validateGoogleAICredentials(result) {
|
|
293
|
-
const apiKey = process.env.GOOGLE_AI_API_KEY || process.env.GOOGLE_GENERATIVE_AI_API_KEY;
|
|
294
|
-
if (!apiKey) {
|
|
295
|
-
result.missingVars.push("GOOGLE_AI_API_KEY (or GOOGLE_GENERATIVE_AI_API_KEY)");
|
|
296
|
-
}
|
|
297
|
-
else if (!API_KEY_FORMATS["google-ai"].test(apiKey)) {
|
|
298
|
-
result.invalidVars.push(`GOOGLE_AI_API_KEY (should be ${API_KEY_LENGTHS.GOOGLE_AI_EXACT} alphanumeric characters with dashes/underscores)`);
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
/**
|
|
302
|
-
* Validate HuggingFace credentials
|
|
303
|
-
*/
|
|
304
|
-
function validateHuggingFaceCredentials(result) {
|
|
305
|
-
const apiKey = process.env.HUGGINGFACE_API_KEY || process.env.HF_TOKEN;
|
|
306
|
-
if (!apiKey) {
|
|
307
|
-
result.missingVars.push("HUGGINGFACE_API_KEY (or HF_TOKEN)");
|
|
308
|
-
}
|
|
309
|
-
else if (!API_KEY_FORMATS.huggingface.test(apiKey)) {
|
|
310
|
-
result.invalidVars.push(`HUGGINGFACE_API_KEY (should start with 'hf_' followed by ${API_KEY_LENGTHS.HUGGINGFACE_EXACT} characters)`);
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
/**
|
|
314
|
-
* Validate Mistral credentials
|
|
315
|
-
*/
|
|
316
|
-
function validateMistralCredentials(result) {
|
|
317
|
-
const apiKey = process.env.MISTRAL_API_KEY;
|
|
318
|
-
if (!apiKey) {
|
|
319
|
-
result.missingVars.push("MISTRAL_API_KEY");
|
|
320
|
-
}
|
|
321
|
-
else if (!API_KEY_FORMATS.mistral.test(apiKey)) {
|
|
322
|
-
result.invalidVars.push(`MISTRAL_API_KEY (should be ${API_KEY_LENGTHS.MISTRAL_EXACT} alphanumeric characters)`);
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
/**
|
|
326
|
-
* Helper function to validate email format
|
|
327
|
-
*/
|
|
328
|
-
function isValidEmail(email) {
|
|
329
|
-
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
330
|
-
return emailRegex.test(email);
|
|
331
|
-
}
|
|
332
|
-
/**
|
|
333
|
-
* Helper function to validate URL format
|
|
334
|
-
*/
|
|
335
|
-
function isValidUrl(url) {
|
|
336
|
-
try {
|
|
337
|
-
const parsedUrl = new URL(url);
|
|
338
|
-
return parsedUrl.protocol === "https:";
|
|
339
|
-
}
|
|
340
|
-
catch {
|
|
341
|
-
return false;
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
/**
|
|
345
|
-
* Check if a provider has the minimum required environment variables
|
|
346
|
-
* NOTE: This only checks if variables exist, not if they're valid
|
|
347
|
-
* For validation, use validateProviderEnvVars instead
|
|
348
|
-
* @param provider - Provider name to check
|
|
349
|
-
* @returns True if the provider has required environment variables
|
|
350
|
-
*/
|
|
351
|
-
export function hasProviderEnvVars(provider) {
|
|
352
|
-
switch (provider.toLowerCase()) {
|
|
353
|
-
case "bedrock":
|
|
354
|
-
case "amazon":
|
|
355
|
-
case "aws":
|
|
356
|
-
return !!(process.env.AWS_ACCESS_KEY_ID && process.env.AWS_SECRET_ACCESS_KEY);
|
|
357
|
-
case "vertex":
|
|
358
|
-
case "googlevertex":
|
|
359
|
-
case "google":
|
|
360
|
-
case "gemini":
|
|
361
|
-
return !!((process.env.GOOGLE_CLOUD_PROJECT_ID ||
|
|
362
|
-
process.env.VERTEX_PROJECT_ID ||
|
|
363
|
-
process.env.GOOGLE_VERTEX_PROJECT ||
|
|
364
|
-
process.env.GOOGLE_CLOUD_PROJECT) &&
|
|
365
|
-
(process.env.GOOGLE_APPLICATION_CREDENTIALS ||
|
|
366
|
-
process.env.GOOGLE_SERVICE_ACCOUNT_KEY ||
|
|
367
|
-
(process.env.GOOGLE_AUTH_CLIENT_EMAIL &&
|
|
368
|
-
process.env.GOOGLE_AUTH_PRIVATE_KEY)));
|
|
369
|
-
case "openai":
|
|
370
|
-
case "gpt":
|
|
371
|
-
return !!process.env.OPENAI_API_KEY;
|
|
372
|
-
case "anthropic":
|
|
373
|
-
case "claude":
|
|
374
|
-
return !!process.env.ANTHROPIC_API_KEY;
|
|
375
|
-
case "azure":
|
|
376
|
-
case "azureopenai":
|
|
377
|
-
return !!process.env.AZURE_OPENAI_API_KEY;
|
|
378
|
-
case "google-ai":
|
|
379
|
-
case "google-studio":
|
|
380
|
-
return !!(process.env.GOOGLE_AI_API_KEY ||
|
|
381
|
-
process.env.GOOGLE_GENERATIVE_AI_API_KEY);
|
|
382
|
-
case "huggingface":
|
|
383
|
-
case "hugging-face":
|
|
384
|
-
case "hf":
|
|
385
|
-
return !!(process.env.HUGGINGFACE_API_KEY || process.env.HF_TOKEN);
|
|
386
|
-
case "ollama":
|
|
387
|
-
case "local":
|
|
388
|
-
case "local-ollama":
|
|
389
|
-
// For Ollama, we check if the service is potentially available
|
|
390
|
-
// This is a basic check - actual connectivity will be verified during usage
|
|
391
|
-
return true; // Ollama doesn't require environment variables, just local service
|
|
392
|
-
case "mistral":
|
|
393
|
-
case "mistral-ai":
|
|
394
|
-
case "mistralai":
|
|
395
|
-
return !!process.env.MISTRAL_API_KEY;
|
|
396
|
-
case "litellm":
|
|
397
|
-
// LiteLLM requires a proxy server, which can be checked for availability
|
|
398
|
-
// Default base URL is assumed, or can be configured via environment
|
|
399
|
-
return true; // LiteLLM proxy availability will be checked during usage
|
|
400
|
-
default:
|
|
401
|
-
return false;
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
/**
|
|
405
|
-
* Get available provider names
|
|
406
|
-
* @returns Array of available provider names
|
|
407
|
-
*/
|
|
408
|
-
export function getAvailableProviders() {
|
|
409
|
-
return [
|
|
410
|
-
"bedrock",
|
|
411
|
-
"vertex",
|
|
412
|
-
"openai",
|
|
413
|
-
"anthropic",
|
|
414
|
-
"azure",
|
|
415
|
-
"google-ai",
|
|
416
|
-
"huggingface",
|
|
417
|
-
"ollama",
|
|
418
|
-
"mistral",
|
|
419
|
-
];
|
|
420
|
-
}
|
|
421
|
-
/**
|
|
422
|
-
* Validate provider name
|
|
423
|
-
* @param provider - Provider name to validate
|
|
424
|
-
* @returns True if provider name is valid
|
|
425
|
-
*/
|
|
426
|
-
export function isValidProvider(provider) {
|
|
427
|
-
return getAvailableProviders().includes(provider.toLowerCase());
|
|
428
|
-
}
|
|
429
|
-
/**
|
|
430
|
-
* Type guard for provider error
|
|
431
|
-
*/
|
|
432
|
-
export function isProviderError(error) {
|
|
433
|
-
return error instanceof Error && "provider" in error;
|
|
434
|
-
}
|