@juspay/neurolink 9.31.2 → 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 +12 -0
- package/dist/auth/AuthProviderFactory.d.ts +71 -0
- package/dist/auth/AuthProviderFactory.js +111 -0
- package/dist/auth/AuthProviderRegistry.d.ts +33 -0
- package/dist/auth/AuthProviderRegistry.js +190 -0
- package/dist/auth/RequestContext.d.ts +23 -0
- package/dist/auth/RequestContext.js +78 -0
- package/dist/auth/anthropicOAuth.js +1 -1
- package/dist/auth/authContext.d.ts +198 -0
- package/dist/auth/authContext.js +314 -0
- package/dist/auth/errors.d.ts +63 -0
- package/dist/auth/errors.js +39 -0
- package/dist/auth/index.d.ts +20 -8
- package/dist/auth/index.js +35 -7
- package/dist/auth/middleware/AuthMiddleware.d.ts +181 -0
- package/dist/auth/middleware/AuthMiddleware.js +519 -0
- package/dist/auth/middleware/rateLimitByUser.d.ts +282 -0
- package/dist/auth/middleware/rateLimitByUser.js +554 -0
- package/dist/auth/providers/BaseAuthProvider.d.ts +259 -0
- package/dist/auth/providers/BaseAuthProvider.js +723 -0
- package/dist/auth/providers/CognitoProvider.d.ts +61 -0
- package/dist/auth/providers/CognitoProvider.js +304 -0
- package/dist/auth/providers/KeycloakProvider.d.ts +61 -0
- package/dist/auth/providers/KeycloakProvider.js +393 -0
- package/dist/auth/providers/auth0.d.ts +59 -0
- package/dist/auth/providers/auth0.js +274 -0
- package/dist/auth/providers/betterAuth.d.ts +51 -0
- package/dist/auth/providers/betterAuth.js +182 -0
- package/dist/auth/providers/clerk.d.ts +65 -0
- package/dist/auth/providers/clerk.js +317 -0
- package/dist/auth/providers/custom.d.ts +64 -0
- package/dist/auth/providers/custom.js +112 -0
- package/dist/auth/providers/firebase.d.ts +63 -0
- package/dist/auth/providers/firebase.js +226 -0
- package/dist/auth/providers/jwt.d.ts +68 -0
- package/dist/auth/providers/jwt.js +212 -0
- package/dist/auth/providers/oauth2.d.ts +73 -0
- package/dist/auth/providers/oauth2.js +303 -0
- package/dist/auth/providers/supabase.d.ts +63 -0
- package/dist/auth/providers/supabase.js +259 -0
- package/dist/auth/providers/workos.d.ts +61 -0
- package/dist/auth/providers/workos.js +284 -0
- package/dist/auth/serverBridge.d.ts +14 -0
- package/dist/auth/serverBridge.js +25 -0
- package/dist/auth/sessionManager.d.ts +142 -0
- package/dist/auth/sessionManager.js +437 -0
- package/dist/cli/commands/authProviders.d.ts +43 -0
- package/dist/cli/commands/authProviders.js +399 -0
- package/dist/cli/commands/proxy.js +18 -5
- package/dist/cli/factories/authCommandFactory.d.ts +23 -5
- package/dist/cli/factories/authCommandFactory.js +108 -5
- package/dist/cli/parser.js +1 -1
- package/dist/client/aiSdkAdapter.js +1 -1
- package/dist/client/index.js +138 -477
- package/dist/core/factory.js +0 -1
- package/dist/core/infrastructure/baseRegistry.d.ts +3 -1
- package/dist/core/infrastructure/baseRegistry.js +5 -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/index.d.ts +1 -0
- package/dist/index.js +25 -0
- package/dist/lib/auth/AuthProviderFactory.d.ts +71 -0
- package/dist/lib/auth/AuthProviderFactory.js +112 -0
- package/dist/lib/auth/AuthProviderRegistry.d.ts +33 -0
- package/dist/lib/auth/AuthProviderRegistry.js +191 -0
- package/dist/lib/auth/RequestContext.d.ts +23 -0
- package/dist/lib/auth/RequestContext.js +79 -0
- package/dist/lib/auth/authContext.d.ts +198 -0
- package/dist/lib/auth/authContext.js +315 -0
- package/dist/lib/auth/errors.d.ts +63 -0
- package/dist/lib/auth/errors.js +40 -0
- package/dist/lib/auth/index.d.ts +20 -8
- package/dist/lib/auth/index.js +35 -7
- package/dist/lib/auth/middleware/AuthMiddleware.d.ts +181 -0
- package/dist/lib/auth/middleware/AuthMiddleware.js +520 -0
- package/dist/lib/auth/middleware/rateLimitByUser.d.ts +282 -0
- package/dist/lib/auth/middleware/rateLimitByUser.js +555 -0
- package/dist/lib/auth/providers/BaseAuthProvider.d.ts +259 -0
- package/dist/lib/auth/providers/BaseAuthProvider.js +724 -0
- package/dist/lib/auth/providers/CognitoProvider.d.ts +61 -0
- package/dist/lib/auth/providers/CognitoProvider.js +305 -0
- package/dist/lib/auth/providers/KeycloakProvider.d.ts +61 -0
- package/dist/lib/auth/providers/KeycloakProvider.js +394 -0
- package/dist/lib/auth/providers/auth0.d.ts +59 -0
- package/dist/lib/auth/providers/auth0.js +275 -0
- package/dist/lib/auth/providers/betterAuth.d.ts +51 -0
- package/dist/lib/auth/providers/betterAuth.js +183 -0
- package/dist/lib/auth/providers/clerk.d.ts +65 -0
- package/dist/lib/auth/providers/clerk.js +318 -0
- package/dist/lib/auth/providers/custom.d.ts +64 -0
- package/dist/lib/auth/providers/custom.js +113 -0
- package/dist/lib/auth/providers/firebase.d.ts +63 -0
- package/dist/lib/auth/providers/firebase.js +227 -0
- package/dist/lib/auth/providers/jwt.d.ts +68 -0
- package/dist/lib/auth/providers/jwt.js +213 -0
- package/dist/lib/auth/providers/oauth2.d.ts +73 -0
- package/dist/lib/auth/providers/oauth2.js +304 -0
- package/dist/lib/auth/providers/supabase.d.ts +63 -0
- package/dist/lib/auth/providers/supabase.js +260 -0
- package/dist/lib/auth/providers/workos.d.ts +61 -0
- package/dist/lib/auth/providers/workos.js +285 -0
- package/dist/lib/auth/serverBridge.d.ts +14 -0
- package/dist/lib/auth/serverBridge.js +26 -0
- package/dist/lib/auth/sessionManager.d.ts +142 -0
- package/dist/lib/auth/sessionManager.js +438 -0
- package/dist/lib/core/infrastructure/baseRegistry.d.ts +3 -1
- package/dist/lib/core/infrastructure/baseRegistry.js +5 -1
- package/dist/lib/index.d.ts +1 -0
- package/dist/lib/index.js +25 -0
- package/dist/lib/mcp/toolRegistry.js +11 -1
- package/dist/lib/neurolink.d.ts +42 -1
- package/dist/lib/neurolink.js +218 -0
- package/dist/lib/rag/ChunkerRegistry.js +2 -2
- package/dist/lib/rag/metadata/MetadataExtractorRegistry.js +2 -2
- package/dist/lib/rag/reranker/RerankerRegistry.js +2 -2
- package/dist/lib/server/routes/agentRoutes.js +20 -2
- package/dist/lib/server/routes/claudeProxyRoutes.js +45 -9
- package/dist/lib/types/authTypes.d.ts +937 -1
- package/dist/lib/types/authTypes.js +2 -1
- package/dist/lib/types/configTypes.d.ts +46 -0
- package/dist/lib/types/generateTypes.d.ts +6 -0
- package/dist/lib/types/index.d.ts +1 -0
- package/dist/lib/types/streamTypes.d.ts +6 -0
- package/dist/mcp/elicitationProtocol.js +1 -1
- package/dist/mcp/servers/agent/directToolsServer.js +0 -1
- package/dist/mcp/toolRegistry.js +11 -1
- package/dist/neurolink.d.ts +42 -1
- package/dist/neurolink.js +218 -0
- package/dist/providers/azureOpenai.js +1 -1
- package/dist/providers/huggingFace.js +0 -1
- package/dist/providers/openaiCompatible.js +0 -1
- package/dist/rag/ChunkerRegistry.js +2 -2
- package/dist/rag/metadata/MetadataExtractorRegistry.js +2 -2
- package/dist/rag/reranker/RerankerRegistry.js +2 -2
- package/dist/sdk/toolRegistration.js +0 -1
- package/dist/server/openapi/generator.js +1 -1
- package/dist/server/routes/agentRoutes.js +20 -2
- package/dist/server/routes/claudeProxyRoutes.js +45 -9
- package/dist/types/authTypes.d.ts +937 -1
- package/dist/types/authTypes.js +2 -1
- package/dist/types/configTypes.d.ts +46 -0
- package/dist/types/configTypes.js +0 -5
- package/dist/types/generateTypes.d.ts +6 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/modelTypes.js +0 -1
- package/dist/types/streamTypes.d.ts +6 -0
- 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 +3 -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/anthropicOAuth.js +0 -974
- 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 -49
- 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 -719
- 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 -8015
- 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 -171
- 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 -8
- 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,238 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Video Analysis Handler
|
|
3
|
-
*
|
|
4
|
-
* Provides video analysis using Google's Gemini 2.5 Flash model.
|
|
5
|
-
* Supports both Vertex AI and Gemini API providers.
|
|
6
|
-
*
|
|
7
|
-
* @module adapters/video/geminiVideoAnalyzer
|
|
8
|
-
*/
|
|
9
|
-
import { AIProviderName, ErrorSeverity, ErrorCategory, } from "../../constants/enums.js";
|
|
10
|
-
import { logger } from "../../utils/logger.js";
|
|
11
|
-
import { readFile } from "node:fs/promises";
|
|
12
|
-
import { NeuroLinkError, ErrorFactory } from "../../utils/errorHandling.js";
|
|
13
|
-
// ---------------------------------------------------------------------------
|
|
14
|
-
// Shared config
|
|
15
|
-
// ---------------------------------------------------------------------------
|
|
16
|
-
const DEFAULT_MODEL = "gemini-2.5-flash";
|
|
17
|
-
const DEFAULT_LOCATION = "us-central1";
|
|
18
|
-
/**
|
|
19
|
-
* Extract content items from user messages
|
|
20
|
-
*
|
|
21
|
-
* @param messages - Array of ModelMessage objects
|
|
22
|
-
* @returns Flattened array of content items from user messages
|
|
23
|
-
*/
|
|
24
|
-
function extractUserContent(messages) {
|
|
25
|
-
const userMessages = messages.filter((msg) => msg.role === "user");
|
|
26
|
-
return userMessages.flatMap((msg) => Array.isArray(msg.content) ? msg.content : []);
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Convert ModelMessage content array to Gemini parts format
|
|
30
|
-
*
|
|
31
|
-
* @param messages - Array of ModelMessage objects
|
|
32
|
-
* @returns Array of parts in Gemini API format
|
|
33
|
-
*/
|
|
34
|
-
function buildContentParts(messages) {
|
|
35
|
-
const allContent = extractUserContent(messages);
|
|
36
|
-
return allContent
|
|
37
|
-
.map((item) => {
|
|
38
|
-
if (item.type === "text") {
|
|
39
|
-
// Accept text parts regardless of whether text is empty
|
|
40
|
-
return { text: item.text || "" };
|
|
41
|
-
}
|
|
42
|
-
else if (item.type === "image" && item.image) {
|
|
43
|
-
let base64Data;
|
|
44
|
-
// Handle Buffer or Uint8Array
|
|
45
|
-
if (Buffer.isBuffer(item.image) || item.image instanceof Uint8Array) {
|
|
46
|
-
base64Data = Buffer.from(item.image).toString("base64");
|
|
47
|
-
}
|
|
48
|
-
else if (typeof item.image === "string") {
|
|
49
|
-
// Strip data URI prefix if present (e.g., "data:image/jpeg;base64,")
|
|
50
|
-
base64Data = item.image.replace(/^data:image\/[a-z]+;base64,/, "");
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
throw ErrorFactory.invalidConfiguration("image data type", `expected string, Buffer, or Uint8Array, got ${typeof item.image}`, { itemType: item.type, dataType: typeof item.image });
|
|
54
|
-
}
|
|
55
|
-
return {
|
|
56
|
-
inlineData: {
|
|
57
|
-
mimeType: "image/jpeg",
|
|
58
|
-
data: base64Data,
|
|
59
|
-
},
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
else if (item.type === "file") {
|
|
63
|
-
// Skip file parts - not supported in Gemini parts format
|
|
64
|
-
return null;
|
|
65
|
-
}
|
|
66
|
-
// Return null for unsupported types
|
|
67
|
-
return null;
|
|
68
|
-
})
|
|
69
|
-
.filter((part) => part !== null);
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Configuration for video frame analysis.
|
|
73
|
-
* Generic prompt that handles both general content and technical bug reporting.
|
|
74
|
-
*/
|
|
75
|
-
function buildConfig() {
|
|
76
|
-
return {
|
|
77
|
-
systemInstruction: `You are a Visual Analysis Assistant.
|
|
78
|
-
Your task is to analyze images or video frames provided by the user and extract structured visual features. The user may or may not provide an issue description. Your role is to understand the visual content, optionally correlate it with the provided issue, and produce a structured output that can be directly consumed by another LLM for analysis, debugging, or decision-making.
|
|
79
|
-
|
|
80
|
-
Follow these rules strictly:
|
|
81
|
-
- The analysis must be generic and applicable to any domain (UI, dashboards, video frames, animations, charts, documents, etc.).
|
|
82
|
-
- Support both images and videos (single frame or multiple frames).
|
|
83
|
-
- Extract only what is visually observable; do not assume backend behavior unless supported by visuals.
|
|
84
|
-
- The JSON must be structured, consistent, and machine-readable.
|
|
85
|
-
- Logs are optional and should only be included if explicitly provided.
|
|
86
|
-
- The final output must be clear, concise, and actionable for an LLM.
|
|
87
|
-
|
|
88
|
-
Always produce the output in the following format:
|
|
89
|
-
|
|
90
|
-
Issue:
|
|
91
|
-
<Refined issue description if provided, otherwise a clear description of the observed visual situation>
|
|
92
|
-
|
|
93
|
-
Image/Video Patterns:
|
|
94
|
-
<Structured JSON describing extracted visual features and anomalies>
|
|
95
|
-
|
|
96
|
-
Steps to Reproduce:
|
|
97
|
-
<Ordered steps that reliably reproduce the issue based on the visual context>
|
|
98
|
-
|
|
99
|
-
[Logs: Include ONLY if provided by the user]
|
|
100
|
-
|
|
101
|
-
Proof:
|
|
102
|
-
<Visual evidence explaining how the image/video confirms the issue>
|
|
103
|
-
Ensure the final response is fully self-sufficient and does not reference external context.`,
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
// ---------------------------------------------------------------------------
|
|
107
|
-
// Vertex AI
|
|
108
|
-
// ---------------------------------------------------------------------------
|
|
109
|
-
export async function analyzeVideoWithVertexAI(messages, options = {}) {
|
|
110
|
-
const startTime = Date.now();
|
|
111
|
-
const { GoogleGenAI } = await import("@google/genai");
|
|
112
|
-
// Get default config and merge with provided options
|
|
113
|
-
const config = await getVertexConfig();
|
|
114
|
-
const project = options.project ?? config.project;
|
|
115
|
-
const location = options.location ?? config.location;
|
|
116
|
-
const model = options.model || DEFAULT_MODEL;
|
|
117
|
-
// Convert frames content to parts array for Gemini
|
|
118
|
-
const parts = buildContentParts(messages);
|
|
119
|
-
const frameCount = parts.filter((part) => "inlineData" in part && part.inlineData).length;
|
|
120
|
-
logger.debug("[GeminiVideoAnalyzer] Analyzing video with Vertex AI", {
|
|
121
|
-
project,
|
|
122
|
-
location,
|
|
123
|
-
model,
|
|
124
|
-
frameCount,
|
|
125
|
-
});
|
|
126
|
-
const ai = new GoogleGenAI({ vertexai: true, project, location });
|
|
127
|
-
const response = await ai.models.generateContent({
|
|
128
|
-
model,
|
|
129
|
-
config: buildConfig(),
|
|
130
|
-
contents: [
|
|
131
|
-
{
|
|
132
|
-
role: "user",
|
|
133
|
-
parts,
|
|
134
|
-
},
|
|
135
|
-
],
|
|
136
|
-
});
|
|
137
|
-
const responseText = response.text || "";
|
|
138
|
-
const processingTime = Date.now() - startTime;
|
|
139
|
-
logger.debug("[GeminiVideoAnalyzer] Vertex response received", {
|
|
140
|
-
responseLength: responseText.length,
|
|
141
|
-
processingTime,
|
|
142
|
-
});
|
|
143
|
-
return responseText;
|
|
144
|
-
}
|
|
145
|
-
// ---------------------------------------------------------------------------
|
|
146
|
-
// Gemini API (Google AI)
|
|
147
|
-
// ---------------------------------------------------------------------------
|
|
148
|
-
export async function analyzeVideoWithGeminiAPI(messages, options = {}) {
|
|
149
|
-
const startTime = Date.now();
|
|
150
|
-
const { GoogleGenAI } = await import("@google/genai");
|
|
151
|
-
const apiKey = options.apiKey || process.env.GOOGLE_AI_API_KEY;
|
|
152
|
-
const model = options.model || DEFAULT_MODEL;
|
|
153
|
-
if (!apiKey) {
|
|
154
|
-
throw new Error("GOOGLE_AI_API_KEY environment variable is required for Gemini API video analysis");
|
|
155
|
-
}
|
|
156
|
-
// Convert frames content to parts array for Gemini
|
|
157
|
-
const parts = buildContentParts(messages);
|
|
158
|
-
const frameCount = parts.filter((part) => "inlineData" in part && part.inlineData).length;
|
|
159
|
-
logger.debug("[GeminiVideoAnalyzer] Analyzing video with Gemini API", {
|
|
160
|
-
model,
|
|
161
|
-
frameCount,
|
|
162
|
-
});
|
|
163
|
-
const ai = new GoogleGenAI({ apiKey });
|
|
164
|
-
logger.debug("[GeminiVideoAnalyzer] Generating analysis with frames");
|
|
165
|
-
const response = await ai.models.generateContent({
|
|
166
|
-
model,
|
|
167
|
-
config: buildConfig(),
|
|
168
|
-
contents: [
|
|
169
|
-
{
|
|
170
|
-
role: "user",
|
|
171
|
-
parts,
|
|
172
|
-
},
|
|
173
|
-
],
|
|
174
|
-
});
|
|
175
|
-
const responseText = response.text || "";
|
|
176
|
-
const processingTime = Date.now() - startTime;
|
|
177
|
-
logger.debug("[GeminiVideoAnalyzer] Gemini API response received", {
|
|
178
|
-
responseLength: responseText.length,
|
|
179
|
-
processingTime,
|
|
180
|
-
});
|
|
181
|
-
return responseText;
|
|
182
|
-
}
|
|
183
|
-
async function getVertexConfig() {
|
|
184
|
-
const location = process.env.GOOGLE_VERTEX_LOCATION || DEFAULT_LOCATION;
|
|
185
|
-
// Try environment variables first
|
|
186
|
-
let project = process.env.GOOGLE_VERTEX_PROJECT ||
|
|
187
|
-
process.env.GOOGLE_CLOUD_PROJECT ||
|
|
188
|
-
process.env.GOOGLE_CLOUD_PROJECT_ID ||
|
|
189
|
-
process.env.VERTEX_PROJECT_ID;
|
|
190
|
-
// Fallback: read from ADC credentials file
|
|
191
|
-
if (!project && process.env.GOOGLE_APPLICATION_CREDENTIALS) {
|
|
192
|
-
try {
|
|
193
|
-
const credData = JSON.parse(await readFile(process.env.GOOGLE_APPLICATION_CREDENTIALS, "utf-8"));
|
|
194
|
-
project = credData.quota_project_id || credData.project_id;
|
|
195
|
-
}
|
|
196
|
-
catch (e) {
|
|
197
|
-
// Ignore read errors, will throw below if project still not found
|
|
198
|
-
logger.debug("Failed to read project from credentials file", {
|
|
199
|
-
error: e instanceof Error ? e.message : String(e),
|
|
200
|
-
});
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
if (!project) {
|
|
204
|
-
throw new NeuroLinkError({
|
|
205
|
-
code: "PROVIDER_NOT_CONFIGURED",
|
|
206
|
-
message: "Google Cloud project not found. Set GOOGLE_VERTEX_PROJECT or GOOGLE_CLOUD_PROJECT environment variable, or ensure ADC credentials contain project_id",
|
|
207
|
-
category: ErrorCategory.CONFIGURATION,
|
|
208
|
-
severity: ErrorSeverity.HIGH,
|
|
209
|
-
retriable: false,
|
|
210
|
-
context: {
|
|
211
|
-
missingVar: "GOOGLE_VERTEX_PROJECT",
|
|
212
|
-
feature: "video-generation",
|
|
213
|
-
checkedEnvVars: [
|
|
214
|
-
"GOOGLE_VERTEX_PROJECT",
|
|
215
|
-
"GOOGLE_CLOUD_PROJECT",
|
|
216
|
-
"GOOGLE_CLOUD_PROJECT_ID",
|
|
217
|
-
"VERTEX_PROJECT_ID",
|
|
218
|
-
],
|
|
219
|
-
},
|
|
220
|
-
});
|
|
221
|
-
}
|
|
222
|
-
return { project, location };
|
|
223
|
-
}
|
|
224
|
-
export async function analyzeVideo(messages, options = {}) {
|
|
225
|
-
const provider = options.provider || AIProviderName.AUTO;
|
|
226
|
-
// Vertex — only when Vertex credentials are configured
|
|
227
|
-
if (provider === AIProviderName.VERTEX ||
|
|
228
|
-
(provider === AIProviderName.AUTO &&
|
|
229
|
-
(process.env.GOOGLE_VERTEX_PROJECT || process.env.GOOGLE_CLOUD_PROJECT))) {
|
|
230
|
-
return analyzeVideoWithVertexAI(messages, options);
|
|
231
|
-
}
|
|
232
|
-
// Gemini API — when Google AI API key is available
|
|
233
|
-
if (provider === AIProviderName.GOOGLE_AI ||
|
|
234
|
-
(provider === AIProviderName.AUTO && process.env.GOOGLE_AI_API_KEY)) {
|
|
235
|
-
return analyzeVideoWithGeminiAPI(messages, options);
|
|
236
|
-
}
|
|
237
|
-
throw ErrorFactory.invalidConfiguration("video analysis provider", "No valid provider configuration found. Set GOOGLE_VERTEX_PROJECT for Vertex AI or GOOGLE_AI_API_KEY for Gemini API.");
|
|
238
|
-
}
|
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Video Merger for Director Mode
|
|
3
|
-
*
|
|
4
|
-
* Concatenates multiple MP4 video buffers into a single MP4 using FFmpeg's
|
|
5
|
-
* concat demuxer for lossless concatenation when codecs match.
|
|
6
|
-
*
|
|
7
|
-
* Uses the shared FFmpeg adapter for binary resolution, temp file management,
|
|
8
|
-
* and process execution — following the adapter pattern in `adapters/tts/`.
|
|
9
|
-
*
|
|
10
|
-
* @module adapters/video/videoMerger
|
|
11
|
-
*/
|
|
12
|
-
import { ErrorCategory, ErrorSeverity } from "../../constants/enums.js";
|
|
13
|
-
import { logger } from "../../utils/logger.js";
|
|
14
|
-
import { cleanupTempFiles, createTrackedTempDir, FFMPEG_MERGE_MAX_BUFFER, FFMPEG_MERGE_TIMEOUT_MS, isValidMp4Buffer, join, readFile, runFfmpeg, writeFile, } from "./ffmpegAdapter.js";
|
|
15
|
-
import { VIDEO_ERROR_CODES } from "../../constants/videoErrors.js";
|
|
16
|
-
import { VideoError } from "./vertexVideoHandler.js";
|
|
17
|
-
// ============================================================================
|
|
18
|
-
// INTERNAL HELPERS
|
|
19
|
-
// ============================================================================
|
|
20
|
-
/**
|
|
21
|
-
* Write clip buffers to temp files and build the FFmpeg concat list.
|
|
22
|
-
*
|
|
23
|
-
* @returns Paths of all written clip files
|
|
24
|
-
*/
|
|
25
|
-
async function writeClipsAndBuildConcatList(videoBuffers, tempDir, concatListPath) {
|
|
26
|
-
const inputPaths = [];
|
|
27
|
-
const concatLines = [];
|
|
28
|
-
for (let i = 0; i < videoBuffers.length; i++) {
|
|
29
|
-
const inputPath = join(tempDir, `clip_${i}.mp4`);
|
|
30
|
-
await writeFile(inputPath, videoBuffers[i]);
|
|
31
|
-
inputPaths.push(inputPath);
|
|
32
|
-
// Normalize backslashes to forward slashes for FFmpeg, then escape single quotes
|
|
33
|
-
const safePath = inputPath.replace(/\\/g, "/").replace(/'/g, "'\\''");
|
|
34
|
-
concatLines.push(`file '${safePath}'`);
|
|
35
|
-
}
|
|
36
|
-
await writeFile(concatListPath, concatLines.join("\n"));
|
|
37
|
-
return inputPaths;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Attempt lossless concat, falling back to H.264 re-encode on failure.
|
|
41
|
-
*/
|
|
42
|
-
async function concatWithFallback(concatListPath, outputPath) {
|
|
43
|
-
const ffmpegOpts = {
|
|
44
|
-
timeoutMs: FFMPEG_MERGE_TIMEOUT_MS,
|
|
45
|
-
maxBuffer: FFMPEG_MERGE_MAX_BUFFER,
|
|
46
|
-
};
|
|
47
|
-
try {
|
|
48
|
-
// Try lossless concat first (fastest — no re-encoding)
|
|
49
|
-
await runFfmpeg([
|
|
50
|
-
"-y",
|
|
51
|
-
"-f",
|
|
52
|
-
"concat",
|
|
53
|
-
"-safe",
|
|
54
|
-
"0",
|
|
55
|
-
"-i",
|
|
56
|
-
concatListPath,
|
|
57
|
-
"-c",
|
|
58
|
-
"copy",
|
|
59
|
-
outputPath,
|
|
60
|
-
], ffmpegOpts);
|
|
61
|
-
}
|
|
62
|
-
catch (concatError) {
|
|
63
|
-
// Fallback: re-encode with H.264 if codecs mismatch
|
|
64
|
-
logger.warn("Lossless concat failed, falling back to H.264 re-encoding", {
|
|
65
|
-
error: concatError instanceof Error
|
|
66
|
-
? concatError.message
|
|
67
|
-
: String(concatError),
|
|
68
|
-
});
|
|
69
|
-
await runFfmpeg([
|
|
70
|
-
"-y",
|
|
71
|
-
"-f",
|
|
72
|
-
"concat",
|
|
73
|
-
"-safe",
|
|
74
|
-
"0",
|
|
75
|
-
"-i",
|
|
76
|
-
concatListPath,
|
|
77
|
-
"-c:v",
|
|
78
|
-
"libx264",
|
|
79
|
-
"-preset",
|
|
80
|
-
"fast",
|
|
81
|
-
"-crf",
|
|
82
|
-
"18",
|
|
83
|
-
"-c:a",
|
|
84
|
-
"aac",
|
|
85
|
-
"-b:a",
|
|
86
|
-
"192k",
|
|
87
|
-
"-movflags",
|
|
88
|
-
"+faststart",
|
|
89
|
-
outputPath,
|
|
90
|
-
], ffmpegOpts);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
// ============================================================================
|
|
94
|
-
// PUBLIC API
|
|
95
|
-
// ============================================================================
|
|
96
|
-
/**
|
|
97
|
-
* Merge multiple MP4 video buffers into a single MP4.
|
|
98
|
-
*
|
|
99
|
-
* Uses FFmpeg concat demuxer for lossless concatenation. If codecs don't match
|
|
100
|
-
* (unlikely since all clips come from Veo), falls back to re-encoding with H.264.
|
|
101
|
-
*
|
|
102
|
-
* @param videoBuffers - Array of MP4 video buffers to concatenate in order
|
|
103
|
-
* @returns Merged MP4 video buffer
|
|
104
|
-
* @throws {VideoError} If merge fails or no valid buffers provided
|
|
105
|
-
*/
|
|
106
|
-
export async function mergeVideoBuffers(videoBuffers) {
|
|
107
|
-
if (videoBuffers.length === 0) {
|
|
108
|
-
throw new VideoError({
|
|
109
|
-
code: VIDEO_ERROR_CODES.DIRECTOR_MERGE_FAILED,
|
|
110
|
-
message: "No video buffers provided to merge",
|
|
111
|
-
category: ErrorCategory.VALIDATION,
|
|
112
|
-
severity: ErrorSeverity.HIGH,
|
|
113
|
-
retriable: false,
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
// Validate each input buffer
|
|
117
|
-
for (let i = 0; i < videoBuffers.length; i++) {
|
|
118
|
-
if (!isValidMp4Buffer(videoBuffers[i])) {
|
|
119
|
-
throw new VideoError({
|
|
120
|
-
code: VIDEO_ERROR_CODES.DIRECTOR_MERGE_FAILED,
|
|
121
|
-
message: `Clip ${i} is not a valid MP4 buffer (missing ftyp header or too small)`,
|
|
122
|
-
category: ErrorCategory.VALIDATION,
|
|
123
|
-
severity: ErrorSeverity.HIGH,
|
|
124
|
-
retriable: false,
|
|
125
|
-
context: {
|
|
126
|
-
clipIndex: i,
|
|
127
|
-
bufferSize: videoBuffers[i].length,
|
|
128
|
-
headerHex: videoBuffers[i].subarray(0, 12).toString("hex"),
|
|
129
|
-
},
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
if (videoBuffers.length === 1) {
|
|
134
|
-
return videoBuffers[0];
|
|
135
|
-
}
|
|
136
|
-
const startTime = Date.now();
|
|
137
|
-
const tempDir = await createTrackedTempDir("merge");
|
|
138
|
-
const concatListPath = join(tempDir, "concat.txt");
|
|
139
|
-
const outputPath = join(tempDir, "merged.mp4");
|
|
140
|
-
let inputPaths = [];
|
|
141
|
-
try {
|
|
142
|
-
inputPaths = await writeClipsAndBuildConcatList(videoBuffers, tempDir, concatListPath);
|
|
143
|
-
await concatWithFallback(concatListPath, outputPath);
|
|
144
|
-
const mergedBuffer = await readFile(outputPath);
|
|
145
|
-
logger.info("Video merge complete", {
|
|
146
|
-
inputClips: videoBuffers.length,
|
|
147
|
-
totalInputSize: videoBuffers.reduce((sum, b) => sum + b.length, 0),
|
|
148
|
-
outputSize: mergedBuffer.length,
|
|
149
|
-
elapsedMs: Date.now() - startTime,
|
|
150
|
-
});
|
|
151
|
-
return mergedBuffer;
|
|
152
|
-
}
|
|
153
|
-
catch (error) {
|
|
154
|
-
// Re-throw VideoErrors as-is
|
|
155
|
-
if (error instanceof VideoError) {
|
|
156
|
-
throw error;
|
|
157
|
-
}
|
|
158
|
-
throw new VideoError({
|
|
159
|
-
code: VIDEO_ERROR_CODES.DIRECTOR_MERGE_FAILED,
|
|
160
|
-
message: `Video merge failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
161
|
-
category: ErrorCategory.EXECUTION,
|
|
162
|
-
severity: ErrorSeverity.HIGH,
|
|
163
|
-
retriable: false,
|
|
164
|
-
context: { clipCount: videoBuffers.length },
|
|
165
|
-
originalError: error instanceof Error ? error : undefined,
|
|
166
|
-
});
|
|
167
|
-
}
|
|
168
|
-
finally {
|
|
169
|
-
await cleanupTempFiles(tempDir, concatListPath, outputPath, ...inputPaths);
|
|
170
|
-
}
|
|
171
|
-
}
|