@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,309 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* NeuroLink Evaluation System
|
|
3
|
-
*/
|
|
4
|
-
import { logger } from "../utils/logger.js";
|
|
5
|
-
import { AIProviderFactory } from "./factory.js";
|
|
6
|
-
import { z } from "zod";
|
|
7
|
-
import { ProviderRegistry } from "../factories/providerRegistry.js";
|
|
8
|
-
import { modelConfig } from "./modelConfiguration.js";
|
|
9
|
-
import { normalizeEvaluationData } from "../utils/evaluationUtils.js";
|
|
10
|
-
// Zod schema for validation
|
|
11
|
-
const EvaluationSchema = z.object({
|
|
12
|
-
relevance: z.number().min(1).max(10),
|
|
13
|
-
accuracy: z.number().min(1).max(10),
|
|
14
|
-
completeness: z.number().min(1).max(10),
|
|
15
|
-
overall: z.number().min(1).max(10),
|
|
16
|
-
domainAlignment: z.number().min(1).max(10).optional(),
|
|
17
|
-
terminologyAccuracy: z.number().min(1).max(10).optional(),
|
|
18
|
-
toolEffectiveness: z.number().min(1).max(10).optional(),
|
|
19
|
-
});
|
|
20
|
-
/**
|
|
21
|
-
* Get default evaluation when evaluation fails
|
|
22
|
-
*/
|
|
23
|
-
function getDefaultEvaluation(reason, evaluationTime, context) {
|
|
24
|
-
const functionTag = "getDefaultEvaluation";
|
|
25
|
-
logger.debug(`[${functionTag}] Creating default evaluation`, {
|
|
26
|
-
reason,
|
|
27
|
-
evaluationTime,
|
|
28
|
-
hasContext: !!context,
|
|
29
|
-
});
|
|
30
|
-
return {
|
|
31
|
-
relevance: 1,
|
|
32
|
-
accuracy: 1,
|
|
33
|
-
completeness: 1,
|
|
34
|
-
overall: 1,
|
|
35
|
-
domainAlignment: 1,
|
|
36
|
-
terminologyAccuracy: 1,
|
|
37
|
-
toolEffectiveness: 1,
|
|
38
|
-
isOffTopic: false,
|
|
39
|
-
alertSeverity: "low",
|
|
40
|
-
reasoning: `Default evaluation used due to: ${reason}`,
|
|
41
|
-
contextUtilization: {
|
|
42
|
-
conversationUsed: false,
|
|
43
|
-
toolsUsed: false,
|
|
44
|
-
domainKnowledgeUsed: false,
|
|
45
|
-
},
|
|
46
|
-
evaluationContext: {
|
|
47
|
-
domain: context.primaryDomain || "general",
|
|
48
|
-
toolsEvaluated: [],
|
|
49
|
-
conversationTurns: 0,
|
|
50
|
-
},
|
|
51
|
-
evaluationModel: "default",
|
|
52
|
-
evaluationTime,
|
|
53
|
-
evaluationProvider: "default",
|
|
54
|
-
evaluationAttempt: 1,
|
|
55
|
-
evaluationConfig: {
|
|
56
|
-
mode: "fallback",
|
|
57
|
-
fallbackUsed: true,
|
|
58
|
-
costEstimate: 0,
|
|
59
|
-
},
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Parse unified evaluation result from text response
|
|
64
|
-
*/
|
|
65
|
-
function parseEvaluationResult(response, context) {
|
|
66
|
-
const functionTag = "parseEvaluationResult";
|
|
67
|
-
try {
|
|
68
|
-
logger.debug(`[${functionTag}] Parsing evaluation response`, {
|
|
69
|
-
responseLength: response.length,
|
|
70
|
-
domain: context.primaryDomain,
|
|
71
|
-
hasToolUsage: !!context.toolUsage?.length,
|
|
72
|
-
hasConversationHistory: !!context.conversationHistory?.length,
|
|
73
|
-
});
|
|
74
|
-
// Try JSON parsing first
|
|
75
|
-
const jsonMatch = response.match(/\{[^}]*\}/s);
|
|
76
|
-
if (jsonMatch) {
|
|
77
|
-
try {
|
|
78
|
-
const parsed = JSON.parse(jsonMatch[0]);
|
|
79
|
-
return parsed;
|
|
80
|
-
}
|
|
81
|
-
catch (jsonError) {
|
|
82
|
-
logger.debug(`[${functionTag}] JSON parsing failed, trying regex`, {
|
|
83
|
-
error: jsonError instanceof Error ? jsonError.message : String(jsonError),
|
|
84
|
-
jsonContent: jsonMatch[0].substring(0, 100), // First 100 chars for debugging
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
// Fallback to regex parsing
|
|
89
|
-
const result = {};
|
|
90
|
-
const patterns = {
|
|
91
|
-
relevance: /relevance[:\s]*([0-9]+(?:\.[0-9]+)?)/i,
|
|
92
|
-
accuracy: /accuracy[:\s]*([0-9]+(?:\.[0-9]+)?)/i,
|
|
93
|
-
completeness: /completeness[:\s]*([0-9]+(?:\.[0-9]+)?)/i,
|
|
94
|
-
overall: /overall[:\s]*([0-9]+(?:\.[0-9]+)?)/i,
|
|
95
|
-
reasoning: /reasoning[:\s]*(.+?)(?=\n\s*\w+:|\n\s*$|$)/is,
|
|
96
|
-
};
|
|
97
|
-
for (const [key, pattern] of Object.entries(patterns)) {
|
|
98
|
-
const match = response.match(pattern);
|
|
99
|
-
if (match) {
|
|
100
|
-
if (key === "reasoning") {
|
|
101
|
-
// Extract reasoning text
|
|
102
|
-
result.reasoning = match[1].trim();
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
// Extract numerical scores
|
|
106
|
-
const value = parseFloat(match[1]);
|
|
107
|
-
if (value >= 1 && value <= 10) {
|
|
108
|
-
const roundedValue = Math.round(value);
|
|
109
|
-
if (key === "relevance") {
|
|
110
|
-
result.relevance = roundedValue;
|
|
111
|
-
}
|
|
112
|
-
else if (key === "accuracy") {
|
|
113
|
-
result.accuracy = roundedValue;
|
|
114
|
-
}
|
|
115
|
-
else if (key === "completeness") {
|
|
116
|
-
result.completeness = roundedValue;
|
|
117
|
-
}
|
|
118
|
-
else if (key === "overall") {
|
|
119
|
-
result.overall = roundedValue;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
// Ensure minimum valid scores and validate with schema
|
|
126
|
-
// Use context to enhance evaluation data
|
|
127
|
-
const evaluationData = {
|
|
128
|
-
relevance: result.relevance || 1,
|
|
129
|
-
accuracy: result.accuracy || 1,
|
|
130
|
-
completeness: result.completeness || 1,
|
|
131
|
-
overall: result.overall || 1,
|
|
132
|
-
domainAlignment: result.domainAlignment || (context.primaryDomain ? 5 : undefined), // Default to 5 if domain-specific
|
|
133
|
-
terminologyAccuracy: result.terminologyAccuracy || (context.primaryDomain ? 5 : undefined),
|
|
134
|
-
toolEffectiveness: result.toolEffectiveness || (context.toolUsage?.length ? 5 : undefined), // Default to 5 if tools were used
|
|
135
|
-
};
|
|
136
|
-
// Validate against schema
|
|
137
|
-
try {
|
|
138
|
-
const validated = EvaluationSchema.parse(evaluationData);
|
|
139
|
-
// Enhance reasoning with context information
|
|
140
|
-
let enhancedReasoning = result.reasoning || "No detailed reasoning provided";
|
|
141
|
-
if (context.primaryDomain) {
|
|
142
|
-
enhancedReasoning += ` (Domain: ${context.primaryDomain})`;
|
|
143
|
-
}
|
|
144
|
-
if (context.toolUsage?.length) {
|
|
145
|
-
enhancedReasoning += ` (Tools used: ${context.toolUsage.map((t) => t.toolName).join(", ")})`;
|
|
146
|
-
}
|
|
147
|
-
if (context.conversationHistory?.length) {
|
|
148
|
-
enhancedReasoning += ` (Conversation turns: ${context.conversationHistory.length})`;
|
|
149
|
-
}
|
|
150
|
-
return {
|
|
151
|
-
...validated,
|
|
152
|
-
reasoning: enhancedReasoning,
|
|
153
|
-
};
|
|
154
|
-
}
|
|
155
|
-
catch (validationError) {
|
|
156
|
-
logger.warn(`[${functionTag}] Schema validation failed, using fallback`, {
|
|
157
|
-
validationError,
|
|
158
|
-
originalData: evaluationData,
|
|
159
|
-
});
|
|
160
|
-
return {
|
|
161
|
-
relevance: Math.max(1, Math.min(10, result.relevance || 1)),
|
|
162
|
-
accuracy: Math.max(1, Math.min(10, result.accuracy || 1)),
|
|
163
|
-
completeness: Math.max(1, Math.min(10, result.completeness || 1)),
|
|
164
|
-
overall: Math.max(1, Math.min(10, result.overall || 1)),
|
|
165
|
-
reasoning: result.reasoning || "No detailed reasoning provided",
|
|
166
|
-
};
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
catch (error) {
|
|
170
|
-
logger.error(`[${functionTag}] Failed to parse evaluation result`, {
|
|
171
|
-
error,
|
|
172
|
-
});
|
|
173
|
-
return {
|
|
174
|
-
relevance: 1,
|
|
175
|
-
accuracy: 1,
|
|
176
|
-
completeness: 1,
|
|
177
|
-
overall: 1,
|
|
178
|
-
reasoning: "Error occurred during evaluation parsing",
|
|
179
|
-
};
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* Main unified evaluation function
|
|
184
|
-
*/
|
|
185
|
-
export async function generateEvaluation(context) {
|
|
186
|
-
const functionTag = "generateEvaluation";
|
|
187
|
-
const startTime = Date.now();
|
|
188
|
-
logger.debug(`[${functionTag}] Starting evaluation`, {
|
|
189
|
-
hasUserQuery: !!context.userQuery,
|
|
190
|
-
hasAiResponse: !!context.aiResponse,
|
|
191
|
-
domain: context.primaryDomain,
|
|
192
|
-
});
|
|
193
|
-
try {
|
|
194
|
-
// Ensure providers are registered
|
|
195
|
-
await ProviderRegistry.registerAllProviders();
|
|
196
|
-
// Get evaluation provider
|
|
197
|
-
const evaluationProvider = process.env.NEUROLINK_EVALUATION_PROVIDER || "google-ai";
|
|
198
|
-
// Use configurable model selection instead of hardcoded default
|
|
199
|
-
const evaluationModel = process.env.NEUROLINK_EVALUATION_MODEL ||
|
|
200
|
-
modelConfig.getModelForTier(evaluationProvider, "fast") ||
|
|
201
|
-
"gemini-2.5-flash"; // Ultimate fallback
|
|
202
|
-
logger.debug(`[${functionTag}] Using provider: ${evaluationProvider}, model: ${evaluationModel}`);
|
|
203
|
-
const provider = await AIProviderFactory.createProvider(evaluationProvider, evaluationModel);
|
|
204
|
-
if (!provider) {
|
|
205
|
-
logger.debug(`[${functionTag}] No evaluation provider available, returning defaults`);
|
|
206
|
-
return getDefaultEvaluation("no-provider", Date.now() - startTime, context);
|
|
207
|
-
}
|
|
208
|
-
// Create evaluation prompt
|
|
209
|
-
const prompt = `
|
|
210
|
-
Evaluate this AI response on a scale of 1-10 for each criterion:
|
|
211
|
-
|
|
212
|
-
User Query: ${context.userQuery}
|
|
213
|
-
AI Response: ${context.aiResponse}
|
|
214
|
-
|
|
215
|
-
Rate on these criteria (1-10 scale):
|
|
216
|
-
- Relevance: How well does the response address the user's question?
|
|
217
|
-
- Accuracy: How factually correct and precise is the information?
|
|
218
|
-
- Completeness: How thoroughly does it cover the topic?
|
|
219
|
-
- Overall: General quality assessment
|
|
220
|
-
|
|
221
|
-
Respond in this exact format:
|
|
222
|
-
Relevance: [score]
|
|
223
|
-
Accuracy: [score]
|
|
224
|
-
Completeness: [score]
|
|
225
|
-
Overall: [score]
|
|
226
|
-
Reasoning: [Provide a detailed explanation of your evaluation, explaining why you gave these scores. Include specific observations about the response's strengths and all possible areas for improvement.]
|
|
227
|
-
`;
|
|
228
|
-
// Generate evaluation (simple text prompt only - no file processing)
|
|
229
|
-
const result = await provider.generate({
|
|
230
|
-
input: { text: prompt },
|
|
231
|
-
disableTools: true, // Evaluation doesn't need tools
|
|
232
|
-
});
|
|
233
|
-
if (!result) {
|
|
234
|
-
logger.debug(`[${functionTag}] No response from provider`);
|
|
235
|
-
return getDefaultEvaluation("no-response", Date.now() - startTime, context);
|
|
236
|
-
}
|
|
237
|
-
// Extract text from result
|
|
238
|
-
const response = typeof result === "string" ? result : result?.content || String(result);
|
|
239
|
-
// Parse evaluation result
|
|
240
|
-
const parsed = parseEvaluationResult(response, context);
|
|
241
|
-
// Validate and enhance result using schema
|
|
242
|
-
const baseResult = {
|
|
243
|
-
relevance: parsed.relevance || 1,
|
|
244
|
-
accuracy: parsed.accuracy || 1,
|
|
245
|
-
completeness: parsed.completeness || 1,
|
|
246
|
-
overall: parsed.overall || 1,
|
|
247
|
-
domainAlignment: parsed.domainAlignment,
|
|
248
|
-
terminologyAccuracy: parsed.terminologyAccuracy,
|
|
249
|
-
toolEffectiveness: parsed.toolEffectiveness,
|
|
250
|
-
};
|
|
251
|
-
// Validate against schema before finalizing
|
|
252
|
-
try {
|
|
253
|
-
const validatedScores = EvaluationSchema.parse(baseResult);
|
|
254
|
-
const validatedResult = normalizeEvaluationData({
|
|
255
|
-
...parsed,
|
|
256
|
-
...validatedScores,
|
|
257
|
-
evaluationModel: `${evaluationProvider}/${evaluationModel}`,
|
|
258
|
-
evaluationTime: Date.now() - startTime,
|
|
259
|
-
evaluationProvider,
|
|
260
|
-
evaluationAttempt: 1,
|
|
261
|
-
evaluationConfig: {
|
|
262
|
-
mode: "standard",
|
|
263
|
-
fallbackUsed: false,
|
|
264
|
-
costEstimate: 0.001, // Rough estimate
|
|
265
|
-
},
|
|
266
|
-
});
|
|
267
|
-
logger.debug(`[${functionTag}] Schema validation passed`, {
|
|
268
|
-
validatedScores,
|
|
269
|
-
});
|
|
270
|
-
return validatedResult;
|
|
271
|
-
}
|
|
272
|
-
catch (validationError) {
|
|
273
|
-
logger.warn(`[${functionTag}] Schema validation failed in main evaluation`, {
|
|
274
|
-
validationError,
|
|
275
|
-
baseResult,
|
|
276
|
-
});
|
|
277
|
-
// Fallback with clamped values using normalizer
|
|
278
|
-
const validatedResult = normalizeEvaluationData({
|
|
279
|
-
...parsed,
|
|
280
|
-
relevance: parsed.relevance || 1,
|
|
281
|
-
accuracy: parsed.accuracy || 1,
|
|
282
|
-
completeness: parsed.completeness || 1,
|
|
283
|
-
overall: parsed.overall || 1,
|
|
284
|
-
evaluationModel: `${evaluationProvider}/${evaluationModel}`,
|
|
285
|
-
evaluationTime: Date.now() - startTime,
|
|
286
|
-
evaluationProvider,
|
|
287
|
-
evaluationAttempt: 1,
|
|
288
|
-
evaluationConfig: {
|
|
289
|
-
mode: "standard",
|
|
290
|
-
fallbackUsed: false,
|
|
291
|
-
costEstimate: 0.001, // Rough estimate
|
|
292
|
-
},
|
|
293
|
-
});
|
|
294
|
-
return validatedResult;
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
catch (error) {
|
|
298
|
-
logger.error(`[${functionTag}] Evaluation failed`, {
|
|
299
|
-
error: error instanceof Error ? error.message : String(error),
|
|
300
|
-
});
|
|
301
|
-
return getDefaultEvaluation(error instanceof Error ? error.message : "unknown-error", Date.now() - startTime, context);
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
// Simplified evaluation function
|
|
305
|
-
export async function evaluateResponse(context) {
|
|
306
|
-
return generateEvaluation(context);
|
|
307
|
-
}
|
|
308
|
-
// Export additional utilities
|
|
309
|
-
export { getDefaultEvaluation, parseEvaluationResult };
|
|
@@ -1,248 +0,0 @@
|
|
|
1
|
-
import { modelConfig } from "./modelConfiguration.js";
|
|
2
|
-
const PERFORMANCE_THRESHOLDS = {
|
|
3
|
-
EXCELLENT_SUCCESS_RATE: 0.95,
|
|
4
|
-
EXCELLENT_RESPONSE_TIME_MS: 2000,
|
|
5
|
-
GOOD_SUCCESS_RATE: 0.9,
|
|
6
|
-
FAIR_SUCCESS_RATE: 0.8,
|
|
7
|
-
};
|
|
8
|
-
const providerMetrics = new Map();
|
|
9
|
-
/**
|
|
10
|
-
* Convert new configuration format to legacy format for backwards compatibility
|
|
11
|
-
*/
|
|
12
|
-
function convertToLegacyFormat(config) {
|
|
13
|
-
return {
|
|
14
|
-
provider: config.provider,
|
|
15
|
-
models: Object.keys(config.models || {}),
|
|
16
|
-
costPerToken: config.defaultCost,
|
|
17
|
-
requiresApiKey: config.requiredEnvVars,
|
|
18
|
-
performance: config.performance,
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Get all provider configurations using the new configuration system
|
|
23
|
-
* Replaces hardcoded EVALUATION_PROVIDER_CONFIGS with configurable system
|
|
24
|
-
*/
|
|
25
|
-
function getEvaluationProviderConfigs() {
|
|
26
|
-
const configs = {};
|
|
27
|
-
const allConfigs = modelConfig.getAllConfigurations();
|
|
28
|
-
for (const [provider, config] of allConfigs) {
|
|
29
|
-
configs[provider] = convertToLegacyFormat(config);
|
|
30
|
-
}
|
|
31
|
-
return configs;
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Dynamic provider configurations for evaluation
|
|
35
|
-
* Now uses configurable system instead of hardcoded values
|
|
36
|
-
*/
|
|
37
|
-
export const EVALUATION_PROVIDER_CONFIGS = getEvaluationProviderConfigs();
|
|
38
|
-
/**
|
|
39
|
-
* Get provider configuration by name
|
|
40
|
-
* Now uses the configurable system
|
|
41
|
-
*/
|
|
42
|
-
export function getProviderConfig(providerName) {
|
|
43
|
-
const config = modelConfig.getProviderConfiguration(providerName);
|
|
44
|
-
return config ? convertToLegacyFormat(config) : null;
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Get all available providers with required API keys present
|
|
48
|
-
* Now uses the configurable system
|
|
49
|
-
*/
|
|
50
|
-
export function getAvailableProviders() {
|
|
51
|
-
return modelConfig
|
|
52
|
-
.getAvailableProviders()
|
|
53
|
-
.map((config) => convertToLegacyFormat(config));
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Sort providers by preference (cost, speed, quality)
|
|
57
|
-
*/
|
|
58
|
-
export function sortProvidersByPreference(providers, preferCheap = true) {
|
|
59
|
-
return [...providers].sort((a, b) => {
|
|
60
|
-
const aPerf = a.performance || { cost: 0, speed: 0, quality: 0 };
|
|
61
|
-
const bPerf = b.performance || { cost: 0, speed: 0, quality: 0 };
|
|
62
|
-
if (preferCheap) {
|
|
63
|
-
// Cost > Speed > Quality for cheap preference
|
|
64
|
-
if ((aPerf.cost || 0) !== (bPerf.cost || 0)) {
|
|
65
|
-
return (bPerf.cost || 0) - (aPerf.cost || 0);
|
|
66
|
-
}
|
|
67
|
-
if ((aPerf.speed || 0) !== (bPerf.speed || 0)) {
|
|
68
|
-
return (bPerf.speed || 0) - (aPerf.speed || 0);
|
|
69
|
-
}
|
|
70
|
-
return (bPerf.quality || 0) - (aPerf.quality || 0);
|
|
71
|
-
}
|
|
72
|
-
else {
|
|
73
|
-
// Quality > Speed > Cost for quality preference
|
|
74
|
-
if ((aPerf.quality || 0) !== (bPerf.quality || 0)) {
|
|
75
|
-
return (bPerf.quality || 0) - (aPerf.quality || 0);
|
|
76
|
-
}
|
|
77
|
-
if ((aPerf.speed || 0) !== (bPerf.speed || 0)) {
|
|
78
|
-
return (bPerf.speed || 0) - (aPerf.speed || 0);
|
|
79
|
-
}
|
|
80
|
-
return (bPerf.cost || 0) - (aPerf.cost || 0);
|
|
81
|
-
}
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Estimate cost for a specific provider and token usage
|
|
86
|
-
* Now uses the configurable system
|
|
87
|
-
*/
|
|
88
|
-
export function estimateProviderCost(providerName, input, output) {
|
|
89
|
-
const costInfo = modelConfig.getCostInfo(providerName);
|
|
90
|
-
if (!costInfo) {
|
|
91
|
-
return 0;
|
|
92
|
-
}
|
|
93
|
-
return input * costInfo.input + output * costInfo.output;
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Check if a provider is available (has required API keys)
|
|
97
|
-
* Now uses the configurable system
|
|
98
|
-
*/
|
|
99
|
-
export function isProviderAvailable(providerName) {
|
|
100
|
-
return modelConfig.isProviderAvailable(providerName);
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Get the best available provider based on preference
|
|
104
|
-
*/
|
|
105
|
-
export function getBestAvailableProvider(preferCheap = true) {
|
|
106
|
-
const availableProviders = getAvailableProviders();
|
|
107
|
-
if (availableProviders.length === 0) {
|
|
108
|
-
return null;
|
|
109
|
-
}
|
|
110
|
-
const sortedProviders = sortProvidersByPreference(availableProviders, preferCheap);
|
|
111
|
-
return sortedProviders[0];
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
Record actual provider performance for optimization
|
|
115
|
-
*/
|
|
116
|
-
export function recordProviderPerformanceFromMetrics(providerName, metrics) {
|
|
117
|
-
const existing = providerMetrics.get(providerName) || {
|
|
118
|
-
responseTime: [],
|
|
119
|
-
successRate: 0,
|
|
120
|
-
tokenThroughput: 0,
|
|
121
|
-
costEfficiency: 0,
|
|
122
|
-
lastUpdated: new Date(),
|
|
123
|
-
sampleCount: 0,
|
|
124
|
-
};
|
|
125
|
-
// Keep rolling window of last 50 response times
|
|
126
|
-
existing.responseTime.push(metrics.responseTime);
|
|
127
|
-
if (existing.responseTime.length > 50) {
|
|
128
|
-
existing.responseTime.shift();
|
|
129
|
-
}
|
|
130
|
-
// Update success rate
|
|
131
|
-
const totalSamples = existing.sampleCount + 1;
|
|
132
|
-
existing.successRate =
|
|
133
|
-
(existing.successRate * existing.sampleCount + (metrics.success ? 1 : 0)) /
|
|
134
|
-
totalSamples;
|
|
135
|
-
// Update throughput (tokens per second)
|
|
136
|
-
if (metrics.responseTime > 0) {
|
|
137
|
-
const tokensPerSecond = metrics.tokensGenerated / (metrics.responseTime / 1000);
|
|
138
|
-
existing.tokenThroughput =
|
|
139
|
-
(existing.tokenThroughput * existing.sampleCount + tokensPerSecond) /
|
|
140
|
-
totalSamples;
|
|
141
|
-
}
|
|
142
|
-
// If responseTime is 0, skip updating tokenThroughput for this sample
|
|
143
|
-
// but still update other metrics
|
|
144
|
-
// Update cost efficiency (tokens per dollar)
|
|
145
|
-
if (metrics.cost > 0) {
|
|
146
|
-
const tokensPerDollar = metrics.tokensGenerated / metrics.cost;
|
|
147
|
-
existing.costEfficiency =
|
|
148
|
-
(existing.costEfficiency * existing.sampleCount + tokensPerDollar) /
|
|
149
|
-
totalSamples;
|
|
150
|
-
}
|
|
151
|
-
existing.sampleCount = totalSamples;
|
|
152
|
-
existing.lastUpdated = new Date();
|
|
153
|
-
providerMetrics.set(providerName, existing);
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* Get performance-optimized provider based on real metrics
|
|
157
|
-
*/
|
|
158
|
-
export function getPerformanceOptimizedProvider(priority = "speed") {
|
|
159
|
-
const availableProviders = getAvailableProviders();
|
|
160
|
-
if (availableProviders.length === 0) {
|
|
161
|
-
return null;
|
|
162
|
-
}
|
|
163
|
-
// Score providers based on real performance data.
|
|
164
|
-
// Only consider providers that have runtime metrics (sampleCount >= 3).
|
|
165
|
-
// Providers without metrics are excluded to avoid misleading recommendations
|
|
166
|
-
// (e.g. ollama appearing as "recommended" when it has no requiredEnvVars and
|
|
167
|
-
// thus always passes the "available" check, even when not actually in use).
|
|
168
|
-
const scoredProviders = [];
|
|
169
|
-
for (const provider of availableProviders) {
|
|
170
|
-
const metrics = providerMetrics.get(provider.provider);
|
|
171
|
-
if (!metrics || metrics.sampleCount < 3) {
|
|
172
|
-
// Skip providers without sufficient runtime data
|
|
173
|
-
continue;
|
|
174
|
-
}
|
|
175
|
-
let score = 0;
|
|
176
|
-
switch (priority) {
|
|
177
|
-
case "speed": {
|
|
178
|
-
const avgResponseTime = metrics.responseTime.reduce((a, b) => a + b, 0) /
|
|
179
|
-
metrics.responseTime.length;
|
|
180
|
-
score =
|
|
181
|
-
metrics.tokenThroughput * 0.6 +
|
|
182
|
-
(5000 / Math.max(avgResponseTime, 100)) * 0.4;
|
|
183
|
-
break;
|
|
184
|
-
}
|
|
185
|
-
case "cost": {
|
|
186
|
-
score = metrics.costEfficiency * 0.7 + metrics.successRate * 0.3;
|
|
187
|
-
break;
|
|
188
|
-
}
|
|
189
|
-
case "reliability": {
|
|
190
|
-
score = metrics.successRate * 0.8 + (metrics.sampleCount / 100) * 0.2;
|
|
191
|
-
break;
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
scoredProviders.push({ provider, score });
|
|
195
|
-
}
|
|
196
|
-
if (scoredProviders.length === 0) {
|
|
197
|
-
// No providers have sufficient runtime data to make a recommendation
|
|
198
|
-
return null;
|
|
199
|
-
}
|
|
200
|
-
// Sort by score and return best
|
|
201
|
-
scoredProviders.sort((a, b) => b.score - a.score);
|
|
202
|
-
return scoredProviders[0].provider;
|
|
203
|
-
}
|
|
204
|
-
export function getProviderPerformanceAnalytics() {
|
|
205
|
-
const analytics = {};
|
|
206
|
-
for (const [providerName, metrics] of providerMetrics.entries()) {
|
|
207
|
-
if (metrics.sampleCount === 0) {
|
|
208
|
-
continue;
|
|
209
|
-
}
|
|
210
|
-
const avgResponseTime = metrics.responseTime.reduce((a, b) => a + b, 0) /
|
|
211
|
-
metrics.responseTime.length;
|
|
212
|
-
let recommendation;
|
|
213
|
-
if (metrics.successRate > PERFORMANCE_THRESHOLDS.EXCELLENT_SUCCESS_RATE &&
|
|
214
|
-
avgResponseTime < PERFORMANCE_THRESHOLDS.EXCELLENT_RESPONSE_TIME_MS) {
|
|
215
|
-
recommendation = "Excellent - Recommended for production";
|
|
216
|
-
}
|
|
217
|
-
else if (metrics.successRate > PERFORMANCE_THRESHOLDS.GOOD_SUCCESS_RATE) {
|
|
218
|
-
recommendation = "Good - Suitable for most tasks";
|
|
219
|
-
}
|
|
220
|
-
else if (metrics.successRate > PERFORMANCE_THRESHOLDS.FAIR_SUCCESS_RATE) {
|
|
221
|
-
recommendation = "Fair - Monitor closely";
|
|
222
|
-
}
|
|
223
|
-
else {
|
|
224
|
-
recommendation = "Poor - Consider alternative providers";
|
|
225
|
-
}
|
|
226
|
-
analytics[providerName] = {
|
|
227
|
-
avgResponseTime,
|
|
228
|
-
successRate: metrics.successRate,
|
|
229
|
-
tokenThroughput: metrics.tokenThroughput,
|
|
230
|
-
costEfficiency: metrics.costEfficiency,
|
|
231
|
-
recommendation,
|
|
232
|
-
sampleCount: metrics.sampleCount,
|
|
233
|
-
};
|
|
234
|
-
}
|
|
235
|
-
return analytics;
|
|
236
|
-
}
|
|
237
|
-
/**
|
|
238
|
-
* Reset performance metrics for a provider or all providers.
|
|
239
|
-
* @param providerName - (Optional) The name of the provider to reset. If omitted, resets all providers.
|
|
240
|
-
*/
|
|
241
|
-
export function resetProviderMetrics(providerName) {
|
|
242
|
-
if (providerName) {
|
|
243
|
-
providerMetrics.delete(providerName);
|
|
244
|
-
}
|
|
245
|
-
else {
|
|
246
|
-
providerMetrics.clear();
|
|
247
|
-
}
|
|
248
|
-
}
|