@framers/agentos 0.1.113 → 0.1.114
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/README.md +39 -5
- package/dist/api/AgentOS.d.ts +45 -12
- package/dist/api/AgentOS.d.ts.map +1 -1
- package/dist/api/AgentOS.js +225 -78
- package/dist/api/AgentOS.js.map +1 -1
- package/dist/api/AgentOSOrchestrator.d.ts +8 -0
- package/dist/api/AgentOSOrchestrator.d.ts.map +1 -1
- package/dist/api/AgentOSOrchestrator.js +350 -59
- package/dist/api/AgentOSOrchestrator.js.map +1 -1
- package/dist/api/StreamChunkEmitter.d.ts.map +1 -1
- package/dist/api/StreamChunkEmitter.js +2 -0
- package/dist/api/StreamChunkEmitter.js.map +1 -1
- package/dist/api/agency.d.ts.map +1 -1
- package/dist/api/agency.js +47 -1
- package/dist/api/agency.js.map +1 -1
- package/dist/api/agent.d.ts +18 -5
- package/dist/api/agent.d.ts.map +1 -1
- package/dist/api/agent.js +48 -9
- package/dist/api/agent.js.map +1 -1
- package/dist/api/agentExport.d.ts +202 -0
- package/dist/api/agentExport.d.ts.map +1 -0
- package/dist/api/agentExport.js +323 -0
- package/dist/api/agentExport.js.map +1 -0
- package/dist/api/editImage.d.ts +119 -0
- package/dist/api/editImage.d.ts.map +1 -0
- package/dist/api/editImage.js +150 -0
- package/dist/api/editImage.js.map +1 -0
- package/dist/api/embedText.d.ts +137 -0
- package/dist/api/embedText.d.ts.map +1 -0
- package/dist/api/embedText.js +229 -0
- package/dist/api/embedText.js.map +1 -0
- package/dist/api/externalToolRegistry.d.ts +44 -0
- package/dist/api/externalToolRegistry.d.ts.map +1 -0
- package/dist/api/externalToolRegistry.js +245 -0
- package/dist/api/externalToolRegistry.js.map +1 -0
- package/dist/api/generateImage.d.ts +1 -1
- package/dist/api/generateImage.d.ts.map +1 -1
- package/dist/api/generateImage.js +17 -13
- package/dist/api/generateImage.js.map +1 -1
- package/dist/api/generateObject.d.ts +185 -0
- package/dist/api/generateObject.d.ts.map +1 -0
- package/dist/api/generateObject.js +249 -0
- package/dist/api/generateObject.js.map +1 -0
- package/dist/api/generateText.d.ts +13 -3
- package/dist/api/generateText.d.ts.map +1 -1
- package/dist/api/generateText.js +20 -5
- package/dist/api/generateText.js.map +1 -1
- package/dist/api/interfaces/IAgentOS.d.ts +29 -1
- package/dist/api/interfaces/IAgentOS.d.ts.map +1 -1
- package/dist/api/model.d.ts +7 -7
- package/dist/api/model.d.ts.map +1 -1
- package/dist/api/model.js +22 -16
- package/dist/api/model.js.map +1 -1
- package/dist/api/processRequestWithExternalTools.d.ts +26 -0
- package/dist/api/processRequestWithExternalTools.d.ts.map +1 -0
- package/dist/api/processRequestWithExternalTools.js +52 -0
- package/dist/api/processRequestWithExternalTools.js.map +1 -0
- package/dist/api/processRequestWithRegisteredTools.d.ts +56 -0
- package/dist/api/processRequestWithRegisteredTools.d.ts.map +1 -0
- package/dist/api/processRequestWithRegisteredTools.js +125 -0
- package/dist/api/processRequestWithRegisteredTools.js.map +1 -0
- package/dist/api/provider-defaults.d.ts.map +1 -1
- package/dist/api/provider-defaults.js +28 -0
- package/dist/api/provider-defaults.js.map +1 -1
- package/dist/api/resumeExternalToolRequestWithRegisteredTools.d.ts +71 -0
- package/dist/api/resumeExternalToolRequestWithRegisteredTools.d.ts.map +1 -0
- package/dist/api/resumeExternalToolRequestWithRegisteredTools.js +159 -0
- package/dist/api/resumeExternalToolRequestWithRegisteredTools.js.map +1 -0
- package/dist/api/strategies/agentGraphBuilder.d.ts +170 -0
- package/dist/api/strategies/agentGraphBuilder.d.ts.map +1 -0
- package/dist/api/strategies/agentGraphBuilder.js +299 -0
- package/dist/api/strategies/agentGraphBuilder.js.map +1 -0
- package/dist/api/strategies/graphCompiler.d.ts +84 -0
- package/dist/api/strategies/graphCompiler.d.ts.map +1 -0
- package/dist/api/strategies/graphCompiler.js +617 -0
- package/dist/api/strategies/graphCompiler.js.map +1 -0
- package/dist/api/strategies/hierarchical.d.ts.map +1 -1
- package/dist/api/strategies/hierarchical.js +2 -1
- package/dist/api/strategies/hierarchical.js.map +1 -1
- package/dist/api/strategies/index.d.ts +3 -0
- package/dist/api/strategies/index.d.ts.map +1 -1
- package/dist/api/strategies/index.js +2 -0
- package/dist/api/strategies/index.js.map +1 -1
- package/dist/api/strategies/shared.d.ts +1 -1
- package/dist/api/strategies/shared.d.ts.map +1 -1
- package/dist/api/strategies/shared.js +3 -2
- package/dist/api/strategies/shared.js.map +1 -1
- package/dist/api/streamObject.d.ts +166 -0
- package/dist/api/streamObject.d.ts.map +1 -0
- package/dist/api/streamObject.js +268 -0
- package/dist/api/streamObject.js.map +1 -0
- package/dist/api/streamText.d.ts +1 -1
- package/dist/api/streamText.d.ts.map +1 -1
- package/dist/api/streamText.js +26 -8
- package/dist/api/streamText.js.map +1 -1
- package/dist/api/toolAdapter.d.ts +44 -8
- package/dist/api/toolAdapter.d.ts.map +1 -1
- package/dist/api/toolAdapter.js +224 -45
- package/dist/api/toolAdapter.js.map +1 -1
- package/dist/api/types/AgentOSExternalToolRequest.d.ts +35 -0
- package/dist/api/types/AgentOSExternalToolRequest.d.ts.map +1 -0
- package/dist/api/types/AgentOSExternalToolRequest.js +2 -0
- package/dist/api/types/AgentOSExternalToolRequest.js.map +1 -0
- package/dist/api/types/AgentOSResponse.d.ts +25 -0
- package/dist/api/types/AgentOSResponse.d.ts.map +1 -1
- package/dist/api/types/AgentOSResponse.js +20 -0
- package/dist/api/types/AgentOSResponse.js.map +1 -1
- package/dist/api/types/AgentOSToolResult.d.ts +11 -0
- package/dist/api/types/AgentOSToolResult.d.ts.map +1 -0
- package/dist/api/types/AgentOSToolResult.js +2 -0
- package/dist/api/types/AgentOSToolResult.js.map +1 -0
- package/dist/api/types.d.ts +28 -4
- package/dist/api/types.d.ts.map +1 -1
- package/dist/api/types.js.map +1 -1
- package/dist/api/upscaleImage.d.ts +92 -0
- package/dist/api/upscaleImage.d.ts.map +1 -0
- package/dist/api/upscaleImage.js +133 -0
- package/dist/api/upscaleImage.js.map +1 -0
- package/dist/api/variateImage.d.ts +102 -0
- package/dist/api/variateImage.d.ts.map +1 -0
- package/dist/api/variateImage.js +154 -0
- package/dist/api/variateImage.js.map +1 -0
- package/dist/cognitive_substrate/GMI.d.ts +16 -2
- package/dist/cognitive_substrate/GMI.d.ts.map +1 -1
- package/dist/cognitive_substrate/GMI.js +188 -56
- package/dist/cognitive_substrate/GMI.js.map +1 -1
- package/dist/cognitive_substrate/IGMI.d.ts +10 -0
- package/dist/cognitive_substrate/IGMI.d.ts.map +1 -1
- package/dist/cognitive_substrate/IGMI.js.map +1 -1
- package/dist/config/AgentOSConfig.d.ts +19 -2
- package/dist/config/AgentOSConfig.d.ts.map +1 -1
- package/dist/config/AgentOSConfig.js +46 -29
- package/dist/config/AgentOSConfig.js.map +1 -1
- package/dist/core/guardrails/IGuardrailService.d.ts +1 -1
- package/dist/core/images/IImageProvider.d.ts +93 -0
- package/dist/core/images/IImageProvider.d.ts.map +1 -1
- package/dist/core/images/IImageProvider.js.map +1 -1
- package/dist/core/images/ImageOperationError.d.ts +52 -0
- package/dist/core/images/ImageOperationError.d.ts.map +1 -0
- package/dist/core/images/ImageOperationError.js +58 -0
- package/dist/core/images/ImageOperationError.js.map +1 -0
- package/dist/core/images/imageToBuffer.d.ts +41 -0
- package/dist/core/images/imageToBuffer.d.ts.map +1 -0
- package/dist/core/images/imageToBuffer.js +95 -0
- package/dist/core/images/imageToBuffer.js.map +1 -0
- package/dist/core/images/index.d.ts +4 -0
- package/dist/core/images/index.d.ts.map +1 -1
- package/dist/core/images/index.js +8 -0
- package/dist/core/images/index.js.map +1 -1
- package/dist/core/images/providers/FalImageProvider.d.ts +208 -0
- package/dist/core/images/providers/FalImageProvider.d.ts.map +1 -0
- package/dist/core/images/providers/FalImageProvider.js +301 -0
- package/dist/core/images/providers/FalImageProvider.js.map +1 -0
- package/dist/core/images/providers/FluxImageProvider.d.ts +197 -0
- package/dist/core/images/providers/FluxImageProvider.d.ts.map +1 -0
- package/dist/core/images/providers/FluxImageProvider.js +271 -0
- package/dist/core/images/providers/FluxImageProvider.js.map +1 -0
- package/dist/core/images/providers/OpenAIImageProvider.d.ts +33 -1
- package/dist/core/images/providers/OpenAIImageProvider.d.ts.map +1 -1
- package/dist/core/images/providers/OpenAIImageProvider.js +125 -0
- package/dist/core/images/providers/OpenAIImageProvider.js.map +1 -1
- package/dist/core/images/providers/ReplicateImageProvider.d.ts +26 -1
- package/dist/core/images/providers/ReplicateImageProvider.d.ts.map +1 -1
- package/dist/core/images/providers/ReplicateImageProvider.js +118 -0
- package/dist/core/images/providers/ReplicateImageProvider.js.map +1 -1
- package/dist/core/images/providers/StabilityImageProvider.d.ts +41 -1
- package/dist/core/images/providers/StabilityImageProvider.d.ts.map +1 -1
- package/dist/core/images/providers/StabilityImageProvider.js +180 -7
- package/dist/core/images/providers/StabilityImageProvider.js.map +1 -1
- package/dist/core/images/providers/StableDiffusionLocalProvider.d.ts +29 -1
- package/dist/core/images/providers/StableDiffusionLocalProvider.d.ts.map +1 -1
- package/dist/core/images/providers/StableDiffusionLocalProvider.js +124 -0
- package/dist/core/images/providers/StableDiffusionLocalProvider.js.map +1 -1
- package/dist/core/llm/IPromptEngine.d.ts +2 -2
- package/dist/core/llm/IPromptEngine.d.ts.map +1 -1
- package/dist/core/llm/IPromptEngine.js +2 -2
- package/dist/core/llm/IPromptEngine.js.map +1 -1
- package/dist/core/llm/providers/AIModelProviderManager.d.ts +7 -1
- package/dist/core/llm/providers/AIModelProviderManager.d.ts.map +1 -1
- package/dist/core/llm/providers/AIModelProviderManager.js +24 -0
- package/dist/core/llm/providers/AIModelProviderManager.js.map +1 -1
- package/dist/core/llm/providers/errors/AnthropicProviderError.d.ts +42 -0
- package/dist/core/llm/providers/errors/AnthropicProviderError.d.ts.map +1 -0
- package/dist/core/llm/providers/errors/AnthropicProviderError.js +45 -0
- package/dist/core/llm/providers/errors/AnthropicProviderError.js.map +1 -0
- package/dist/core/llm/providers/errors/GeminiProviderError.d.ts +45 -0
- package/dist/core/llm/providers/errors/GeminiProviderError.d.ts.map +1 -0
- package/dist/core/llm/providers/errors/GeminiProviderError.js +46 -0
- package/dist/core/llm/providers/errors/GeminiProviderError.js.map +1 -0
- package/dist/core/llm/providers/errors/OllamaProviderError.d.ts +1 -1
- package/dist/core/llm/providers/errors/OllamaProviderError.d.ts.map +1 -1
- package/dist/core/llm/providers/errors/OllamaProviderError.js +1 -1
- package/dist/core/llm/providers/errors/OllamaProviderError.js.map +1 -1
- package/dist/core/llm/providers/errors/OpenAIProviderError.d.ts +1 -1
- package/dist/core/llm/providers/errors/OpenAIProviderError.js +1 -1
- package/dist/core/llm/providers/errors/OpenRouterProviderError.d.ts +1 -1
- package/dist/core/llm/providers/errors/OpenRouterProviderError.js +1 -1
- package/dist/core/llm/providers/implementations/AnthropicProvider.d.ts +340 -0
- package/dist/core/llm/providers/implementations/AnthropicProvider.d.ts.map +1 -0
- package/dist/core/llm/providers/implementations/AnthropicProvider.js +959 -0
- package/dist/core/llm/providers/implementations/AnthropicProvider.js.map +1 -0
- package/dist/core/llm/providers/implementations/GeminiProvider.d.ts +339 -0
- package/dist/core/llm/providers/implementations/GeminiProvider.d.ts.map +1 -0
- package/dist/core/llm/providers/implementations/GeminiProvider.js +1004 -0
- package/dist/core/llm/providers/implementations/GeminiProvider.js.map +1 -0
- package/dist/core/llm/providers/implementations/GroqProvider.d.ts +105 -0
- package/dist/core/llm/providers/implementations/GroqProvider.d.ts.map +1 -0
- package/dist/core/llm/providers/implementations/GroqProvider.js +134 -0
- package/dist/core/llm/providers/implementations/GroqProvider.js.map +1 -0
- package/dist/core/llm/providers/implementations/MistralProvider.d.ts +105 -0
- package/dist/core/llm/providers/implementations/MistralProvider.d.ts.map +1 -0
- package/dist/core/llm/providers/implementations/MistralProvider.js +146 -0
- package/dist/core/llm/providers/implementations/MistralProvider.js.map +1 -0
- package/dist/core/llm/providers/implementations/TogetherProvider.d.ts +107 -0
- package/dist/core/llm/providers/implementations/TogetherProvider.d.ts.map +1 -0
- package/dist/core/llm/providers/implementations/TogetherProvider.js +138 -0
- package/dist/core/llm/providers/implementations/TogetherProvider.js.map +1 -0
- package/dist/core/llm/providers/implementations/XAIProvider.d.ts +102 -0
- package/dist/core/llm/providers/implementations/XAIProvider.d.ts.map +1 -0
- package/dist/core/llm/providers/implementations/XAIProvider.js +123 -0
- package/dist/core/llm/providers/implementations/XAIProvider.js.map +1 -0
- package/dist/core/orchestration/AgentOrchestrator.d.ts.map +1 -1
- package/dist/core/orchestration/AgentOrchestrator.js +26 -5
- package/dist/core/orchestration/AgentOrchestrator.js.map +1 -1
- package/dist/core/tools/IToolOrchestrator.d.ts +2 -2
- package/dist/core/tools/IToolOrchestrator.d.ts.map +1 -1
- package/dist/core/tools/ToolExecutor.d.ts +3 -0
- package/dist/core/tools/ToolExecutor.d.ts.map +1 -1
- package/dist/core/tools/ToolExecutor.js +2 -1
- package/dist/core/tools/ToolExecutor.js.map +1 -1
- package/dist/core/tools/ToolOrchestrator.d.ts +7 -7
- package/dist/core/tools/ToolOrchestrator.d.ts.map +1 -1
- package/dist/core/tools/ToolOrchestrator.js +135 -36
- package/dist/core/tools/ToolOrchestrator.js.map +1 -1
- package/dist/core/tools/permissions/ToolPermissionManager.d.ts +6 -5
- package/dist/core/tools/permissions/ToolPermissionManager.d.ts.map +1 -1
- package/dist/core/tools/permissions/ToolPermissionManager.js +47 -21
- package/dist/core/tools/permissions/ToolPermissionManager.js.map +1 -1
- package/dist/core/vision/VisionPipeline.d.ts +437 -0
- package/dist/core/vision/VisionPipeline.d.ts.map +1 -0
- package/dist/core/vision/VisionPipeline.js +1113 -0
- package/dist/core/vision/VisionPipeline.js.map +1 -0
- package/dist/core/vision/index.d.ts +97 -0
- package/dist/core/vision/index.d.ts.map +1 -0
- package/dist/core/vision/index.js +182 -0
- package/dist/core/vision/index.js.map +1 -0
- package/dist/core/vision/providers/LLMVisionProvider.d.ts +135 -0
- package/dist/core/vision/providers/LLMVisionProvider.d.ts.map +1 -0
- package/dist/core/vision/providers/LLMVisionProvider.js +136 -0
- package/dist/core/vision/providers/LLMVisionProvider.js.map +1 -0
- package/dist/core/vision/providers/PipelineVisionProvider.d.ts +154 -0
- package/dist/core/vision/providers/PipelineVisionProvider.d.ts.map +1 -0
- package/dist/core/vision/providers/PipelineVisionProvider.js +160 -0
- package/dist/core/vision/providers/PipelineVisionProvider.js.map +1 -0
- package/dist/core/vision/types.d.ts +286 -0
- package/dist/core/vision/types.d.ts.map +1 -0
- package/dist/core/vision/types.js +24 -0
- package/dist/core/vision/types.js.map +1 -0
- package/dist/discovery/CapabilityDiscoveryEngine.d.ts +1 -1
- package/dist/discovery/CapabilityDiscoveryEngine.d.ts.map +1 -1
- package/dist/discovery/CapabilityDiscoveryEngine.js +1 -1
- package/dist/discovery/CapabilityDiscoveryEngine.js.map +1 -1
- package/dist/emergent/ComposableToolBuilder.d.ts +15 -4
- package/dist/emergent/ComposableToolBuilder.d.ts.map +1 -1
- package/dist/emergent/ComposableToolBuilder.js +29 -14
- package/dist/emergent/ComposableToolBuilder.js.map +1 -1
- package/dist/emergent/EmergentCapabilityEngine.d.ts +3 -3
- package/dist/emergent/EmergentCapabilityEngine.d.ts.map +1 -1
- package/dist/emergent/EmergentCapabilityEngine.js +15 -12
- package/dist/emergent/EmergentCapabilityEngine.js.map +1 -1
- package/dist/emergent/EmergentJudge.d.ts +20 -0
- package/dist/emergent/EmergentJudge.d.ts.map +1 -1
- package/dist/emergent/EmergentJudge.js +121 -26
- package/dist/emergent/EmergentJudge.js.map +1 -1
- package/dist/emergent/EmergentToolRegistry.d.ts +17 -0
- package/dist/emergent/EmergentToolRegistry.d.ts.map +1 -1
- package/dist/emergent/EmergentToolRegistry.js +26 -0
- package/dist/emergent/EmergentToolRegistry.js.map +1 -1
- package/dist/emergent/ForgeToolMetaTool.d.ts +1 -1
- package/dist/emergent/ForgeToolMetaTool.d.ts.map +1 -1
- package/dist/emergent/ForgeToolMetaTool.js +15 -2
- package/dist/emergent/ForgeToolMetaTool.js.map +1 -1
- package/dist/emergent/SandboxedToolForge.d.ts +2 -2
- package/dist/emergent/SandboxedToolForge.d.ts.map +1 -1
- package/dist/emergent/SandboxedToolForge.js +13 -23
- package/dist/emergent/SandboxedToolForge.js.map +1 -1
- package/dist/emergent/SkillExporter.d.ts +119 -0
- package/dist/emergent/SkillExporter.d.ts.map +1 -0
- package/dist/emergent/SkillExporter.js +344 -0
- package/dist/emergent/SkillExporter.js.map +1 -0
- package/dist/emergent/index.d.ts +1 -0
- package/dist/emergent/index.d.ts.map +1 -1
- package/dist/emergent/index.js +1 -0
- package/dist/emergent/index.js.map +1 -1
- package/dist/emergent/types.d.ts +4 -4
- package/dist/index.d.ts +30 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -2
- package/dist/index.js.map +1 -1
- package/dist/memory/index.d.ts +10 -8
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/index.js +2 -0
- package/dist/memory/index.js.map +1 -1
- package/dist/memory/ingestion/DoclingLoader.d.ts +3 -3
- package/dist/memory/ingestion/DoclingLoader.d.ts.map +1 -1
- package/dist/memory/ingestion/DoclingLoader.js +12 -8
- package/dist/memory/ingestion/DoclingLoader.js.map +1 -1
- package/dist/memory/ingestion/FolderScanner.d.ts +7 -7
- package/dist/memory/ingestion/FolderScanner.d.ts.map +1 -1
- package/dist/memory/ingestion/FolderScanner.js +6 -6
- package/dist/memory/ingestion/FolderScanner.js.map +1 -1
- package/dist/memory/ingestion/LoaderRegistry.d.ts +8 -8
- package/dist/memory/ingestion/LoaderRegistry.d.ts.map +1 -1
- package/dist/memory/ingestion/LoaderRegistry.js +9 -11
- package/dist/memory/ingestion/LoaderRegistry.js.map +1 -1
- package/dist/memory/ingestion/MultimodalAggregator.d.ts +1 -1
- package/dist/memory/ingestion/MultimodalAggregator.js +1 -1
- package/dist/memory/ingestion/OcrPdfLoader.d.ts +2 -2
- package/dist/memory/ingestion/OcrPdfLoader.d.ts.map +1 -1
- package/dist/memory/ingestion/OcrPdfLoader.js +12 -8
- package/dist/memory/ingestion/OcrPdfLoader.js.map +1 -1
- package/dist/memory/ingestion/PdfLoader.d.ts +8 -8
- package/dist/memory/ingestion/PdfLoader.d.ts.map +1 -1
- package/dist/memory/ingestion/PdfLoader.js +13 -10
- package/dist/memory/ingestion/PdfLoader.js.map +1 -1
- package/dist/memory/io/MarkdownExporter.d.ts +1 -1
- package/dist/memory/io/MarkdownExporter.d.ts.map +1 -1
- package/dist/memory/io/MarkdownExporter.js +1 -1
- package/dist/memory/io/MarkdownExporter.js.map +1 -1
- package/dist/memory/tools/MemoryAddTool.d.ts +2 -2
- package/dist/memory/tools/MemoryAddTool.d.ts.map +1 -1
- package/dist/memory/tools/MemoryAddTool.js +8 -3
- package/dist/memory/tools/MemoryAddTool.js.map +1 -1
- package/dist/memory/tools/MemorySearchTool.d.ts +3 -3
- package/dist/memory/tools/MemorySearchTool.d.ts.map +1 -1
- package/dist/memory/tools/MemorySearchTool.js +11 -9
- package/dist/memory/tools/MemorySearchTool.js.map +1 -1
- package/dist/memory/tools/scopeContext.d.ts +11 -0
- package/dist/memory/tools/scopeContext.d.ts.map +1 -0
- package/dist/memory/tools/scopeContext.js +46 -0
- package/dist/memory/tools/scopeContext.js.map +1 -0
- package/dist/orchestration/builders/AgentGraph.d.ts +12 -11
- package/dist/orchestration/builders/AgentGraph.d.ts.map +1 -1
- package/dist/orchestration/builders/AgentGraph.js +12 -11
- package/dist/orchestration/builders/AgentGraph.js.map +1 -1
- package/dist/orchestration/builders/VoiceNodeBuilder.d.ts +2 -2
- package/dist/orchestration/builders/VoiceNodeBuilder.d.ts.map +1 -1
- package/dist/orchestration/builders/VoiceNodeBuilder.js +2 -2
- package/dist/orchestration/builders/VoiceNodeBuilder.js.map +1 -1
- package/dist/orchestration/builders/WorkflowBuilder.d.ts +1 -1
- package/dist/orchestration/builders/WorkflowBuilder.d.ts.map +1 -1
- package/dist/orchestration/builders/WorkflowBuilder.js +1 -1
- package/dist/orchestration/builders/WorkflowBuilder.js.map +1 -1
- package/dist/orchestration/checkpoint/InMemoryCheckpointStore.d.ts +7 -54
- package/dist/orchestration/checkpoint/InMemoryCheckpointStore.d.ts.map +1 -1
- package/dist/orchestration/checkpoint/InMemoryCheckpointStore.js +8 -56
- package/dist/orchestration/checkpoint/InMemoryCheckpointStore.js.map +1 -1
- package/dist/orchestration/events/GraphEvent.d.ts +12 -12
- package/dist/orchestration/events/GraphEvent.d.ts.map +1 -1
- package/dist/orchestration/events/GraphEvent.js.map +1 -1
- package/dist/orchestration/runtime/GraphRuntime.d.ts.map +1 -1
- package/dist/orchestration/runtime/GraphRuntime.js +151 -1
- package/dist/orchestration/runtime/GraphRuntime.js.map +1 -1
- package/dist/orchestration/runtime/LoopController.d.ts +3 -3
- package/dist/orchestration/runtime/LoopController.d.ts.map +1 -1
- package/dist/orchestration/runtime/LoopController.js.map +1 -1
- package/dist/orchestration/runtime/StateManager.d.ts +3 -3
- package/dist/orchestration/runtime/StateManager.js +3 -3
- package/dist/orchestration/runtime/VoiceNodeExecutor.d.ts +6 -6
- package/dist/orchestration/runtime/VoiceNodeExecutor.d.ts.map +1 -1
- package/dist/orchestration/runtime/VoiceNodeExecutor.js +27 -10
- package/dist/orchestration/runtime/VoiceNodeExecutor.js.map +1 -1
- package/dist/orchestration/runtime/VoiceTransportAdapter.d.ts +5 -5
- package/dist/orchestration/runtime/VoiceTransportAdapter.js +5 -5
- package/dist/orchestration/runtime/VoiceTurnCollector.d.ts +2 -2
- package/dist/orchestration/runtime/VoiceTurnCollector.js +2 -2
- package/dist/query-router/KeywordFallback.d.ts +70 -0
- package/dist/query-router/KeywordFallback.d.ts.map +1 -0
- package/dist/query-router/KeywordFallback.js +132 -0
- package/dist/query-router/KeywordFallback.js.map +1 -0
- package/dist/query-router/QueryClassifier.d.ts +140 -0
- package/dist/query-router/QueryClassifier.d.ts.map +1 -0
- package/dist/query-router/QueryClassifier.js +223 -0
- package/dist/query-router/QueryClassifier.js.map +1 -0
- package/dist/query-router/QueryDispatcher.d.ts +139 -0
- package/dist/query-router/QueryDispatcher.d.ts.map +1 -0
- package/dist/query-router/QueryDispatcher.js +297 -0
- package/dist/query-router/QueryDispatcher.js.map +1 -0
- package/dist/query-router/QueryGenerator.d.ts +184 -0
- package/dist/query-router/QueryGenerator.d.ts.map +1 -0
- package/dist/query-router/QueryGenerator.js +241 -0
- package/dist/query-router/QueryGenerator.js.map +1 -0
- package/dist/query-router/QueryRouter.d.ts +292 -0
- package/dist/query-router/QueryRouter.d.ts.map +1 -0
- package/dist/query-router/QueryRouter.js +803 -0
- package/dist/query-router/QueryRouter.js.map +1 -0
- package/dist/query-router/TopicExtractor.d.ts +73 -0
- package/dist/query-router/TopicExtractor.d.ts.map +1 -0
- package/dist/query-router/TopicExtractor.js +95 -0
- package/dist/query-router/TopicExtractor.js.map +1 -0
- package/dist/query-router/index.d.ts +40 -0
- package/dist/query-router/index.d.ts.map +1 -0
- package/dist/query-router/index.js +46 -0
- package/dist/query-router/index.js.map +1 -0
- package/dist/query-router/types.d.ts +508 -0
- package/dist/query-router/types.d.ts.map +1 -0
- package/dist/query-router/types.js +39 -0
- package/dist/query-router/types.js.map +1 -0
- package/dist/rag/index.d.ts +5 -0
- package/dist/rag/index.d.ts.map +1 -1
- package/dist/rag/index.js +7 -0
- package/dist/rag/index.js.map +1 -1
- package/dist/rag/multimodal/LLMVisionAdapter.d.ts +43 -0
- package/dist/rag/multimodal/LLMVisionAdapter.d.ts.map +1 -0
- package/dist/rag/multimodal/LLMVisionAdapter.js +46 -0
- package/dist/rag/multimodal/LLMVisionAdapter.js.map +1 -0
- package/dist/rag/multimodal/MultimodalIndexer.d.ts +244 -0
- package/dist/rag/multimodal/MultimodalIndexer.d.ts.map +1 -0
- package/dist/rag/multimodal/MultimodalIndexer.js +411 -0
- package/dist/rag/multimodal/MultimodalIndexer.js.map +1 -0
- package/dist/rag/multimodal/MultimodalMemoryBridge.d.ts +448 -0
- package/dist/rag/multimodal/MultimodalMemoryBridge.d.ts.map +1 -0
- package/dist/rag/multimodal/MultimodalMemoryBridge.js +941 -0
- package/dist/rag/multimodal/MultimodalMemoryBridge.js.map +1 -0
- package/dist/rag/multimodal/SpeechProviderAdapter.d.ts +139 -0
- package/dist/rag/multimodal/SpeechProviderAdapter.d.ts.map +1 -0
- package/dist/rag/multimodal/SpeechProviderAdapter.js +143 -0
- package/dist/rag/multimodal/SpeechProviderAdapter.js.map +1 -0
- package/dist/rag/multimodal/createMultimodalIndexerFromResolver.d.ts +172 -0
- package/dist/rag/multimodal/createMultimodalIndexerFromResolver.d.ts.map +1 -0
- package/dist/rag/multimodal/createMultimodalIndexerFromResolver.js +152 -0
- package/dist/rag/multimodal/createMultimodalIndexerFromResolver.js.map +1 -0
- package/dist/rag/multimodal/index.d.ts +44 -0
- package/dist/rag/multimodal/index.d.ts.map +1 -0
- package/dist/rag/multimodal/index.js +42 -0
- package/dist/rag/multimodal/index.js.map +1 -0
- package/dist/rag/multimodal/types.d.ts +276 -0
- package/dist/rag/multimodal/types.d.ts.map +1 -0
- package/dist/rag/multimodal/types.js +26 -0
- package/dist/rag/multimodal/types.js.map +1 -0
- package/dist/social-posting/SocialPostManager.d.ts +3 -3
- package/dist/social-posting/SocialPostManager.d.ts.map +1 -1
- package/dist/social-posting/SocialPostManager.js +3 -5
- package/dist/social-posting/SocialPostManager.js.map +1 -1
- package/dist/speech/FallbackProxy.d.ts +6 -6
- package/dist/speech/FallbackProxy.d.ts.map +1 -1
- package/dist/speech/FallbackProxy.js +3 -3
- package/dist/speech/FallbackProxy.js.map +1 -1
- package/dist/speech/SpeechProviderResolver.d.ts +8 -8
- package/dist/speech/SpeechProviderResolver.d.ts.map +1 -1
- package/dist/speech/SpeechProviderResolver.js +22 -11
- package/dist/speech/SpeechProviderResolver.js.map +1 -1
- package/dist/speech/SpeechRuntime.d.ts +1 -5
- package/dist/speech/SpeechRuntime.d.ts.map +1 -1
- package/dist/speech/SpeechRuntime.js +17 -9
- package/dist/speech/SpeechRuntime.js.map +1 -1
- package/dist/speech/providers/AssemblyAISTTProvider.d.ts +4 -4
- package/dist/speech/providers/AssemblyAISTTProvider.js +4 -4
- package/dist/speech/providers/AzureSpeechTTSProvider.d.ts +3 -3
- package/dist/speech/providers/AzureSpeechTTSProvider.js +2 -2
- package/dist/speech/providers/AzureSpeechTTSProvider.js.map +1 -1
- package/dist/speech/providers/BuiltInAdaptiveVadProvider.d.ts +9 -9
- package/dist/speech/providers/BuiltInAdaptiveVadProvider.d.ts.map +1 -1
- package/dist/speech/providers/BuiltInAdaptiveVadProvider.js +5 -5
- package/dist/speech/providers/BuiltInAdaptiveVadProvider.js.map +1 -1
- package/dist/speech/providers/DeepgramBatchSTTProvider.d.ts +2 -2
- package/dist/speech/providers/DeepgramBatchSTTProvider.js +2 -2
- package/dist/speech/providers/OpenAITextToSpeechProvider.d.ts +3 -3
- package/dist/speech/providers/OpenAITextToSpeechProvider.js +2 -2
- package/dist/speech/providers/OpenAIWhisperSpeechToTextProvider.d.ts +1 -1
- package/dist/speech/providers/OpenAIWhisperSpeechToTextProvider.d.ts.map +1 -1
- package/dist/speech/providers/OpenAIWhisperSpeechToTextProvider.js +1 -1
- package/dist/speech/providers/OpenAIWhisperSpeechToTextProvider.js.map +1 -1
- package/dist/voice/TelephonyStreamTransport.d.ts +6 -6
- package/dist/voice/TelephonyStreamTransport.d.ts.map +1 -1
- package/dist/voice/TelephonyStreamTransport.js +5 -5
- package/dist/voice/TelephonyStreamTransport.js.map +1 -1
- package/dist/voice-pipeline/AcousticEndpointDetector.d.ts +4 -4
- package/dist/voice-pipeline/AcousticEndpointDetector.d.ts.map +1 -1
- package/dist/voice-pipeline/AcousticEndpointDetector.js +4 -4
- package/dist/voice-pipeline/AcousticEndpointDetector.js.map +1 -1
- package/dist/voice-pipeline/HardCutBargeinHandler.d.ts +3 -3
- package/dist/voice-pipeline/HardCutBargeinHandler.js +3 -3
- package/dist/voice-pipeline/HeuristicEndpointDetector.d.ts +3 -3
- package/dist/voice-pipeline/HeuristicEndpointDetector.d.ts.map +1 -1
- package/dist/voice-pipeline/HeuristicEndpointDetector.js +3 -3
- package/dist/voice-pipeline/HeuristicEndpointDetector.js.map +1 -1
- package/dist/voice-pipeline/SoftFadeBargeinHandler.d.ts +5 -5
- package/dist/voice-pipeline/SoftFadeBargeinHandler.js +1 -1
- package/dist/voice-pipeline/VoiceInterruptError.d.ts +6 -6
- package/dist/voice-pipeline/VoiceInterruptError.d.ts.map +1 -1
- package/dist/voice-pipeline/VoiceInterruptError.js +4 -4
- package/dist/voice-pipeline/VoiceInterruptError.js.map +1 -1
- package/dist/voice-pipeline/VoicePipelineOrchestrator.d.ts +9 -9
- package/dist/voice-pipeline/VoicePipelineOrchestrator.d.ts.map +1 -1
- package/dist/voice-pipeline/VoicePipelineOrchestrator.js +8 -8
- package/dist/voice-pipeline/VoicePipelineOrchestrator.js.map +1 -1
- package/dist/voice-pipeline/WebRTCStreamTransport.d.ts +421 -0
- package/dist/voice-pipeline/WebRTCStreamTransport.d.ts.map +1 -0
- package/dist/voice-pipeline/WebRTCStreamTransport.js +573 -0
- package/dist/voice-pipeline/WebRTCStreamTransport.js.map +1 -0
- package/dist/voice-pipeline/WebSocketStreamTransport.d.ts +8 -8
- package/dist/voice-pipeline/WebSocketStreamTransport.js +5 -5
- package/dist/voice-pipeline/index.d.ts +1 -0
- package/dist/voice-pipeline/index.d.ts.map +1 -1
- package/dist/voice-pipeline/index.js +2 -0
- package/dist/voice-pipeline/index.js.map +1 -1
- package/dist/voice-pipeline/types.d.ts +43 -43
- package/dist/voice-pipeline/types.d.ts.map +1 -1
- package/package.json +19 -1
|
@@ -0,0 +1,411 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module rag/multimodal/MultimodalIndexer
|
|
3
|
+
*
|
|
4
|
+
* Indexes non-text content (images, audio) into the RAG vector store by
|
|
5
|
+
* generating text representations and embedding them. This bridges the gap
|
|
6
|
+
* between multimodal content and the text-embedding pipeline, enabling
|
|
7
|
+
* cross-modal semantic search.
|
|
8
|
+
*
|
|
9
|
+
* ## Architecture
|
|
10
|
+
*
|
|
11
|
+
* ```
|
|
12
|
+
* Image ──► Vision LLM ──► Description ──► Embedding ──► Vector Store
|
|
13
|
+
* Audio ──► STT Provider ──► Transcript ──► Embedding ──► Vector Store
|
|
14
|
+
* Text ─────────────────────────────────► Embedding ──► Vector Store
|
|
15
|
+
* │
|
|
16
|
+
* Query ─────────────────────────────────► Embedding ──► Search ◄──┘
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* Each indexed document carries a `modality` metadata field ('text', 'image',
|
|
20
|
+
* or 'audio') enabling modality-filtered search.
|
|
21
|
+
*
|
|
22
|
+
* ## Dependencies
|
|
23
|
+
*
|
|
24
|
+
* The indexer receives its dependencies via constructor injection:
|
|
25
|
+
* - {@link IEmbeddingManager} — generates vector embeddings from text
|
|
26
|
+
* - {@link IVectorStore} — stores and queries document embeddings
|
|
27
|
+
* - {@link IVisionProvider} — describes images as text (optional, required for images)
|
|
28
|
+
* - {@link ISpeechToTextProvider} — transcribes audio to text (optional, required for audio)
|
|
29
|
+
*
|
|
30
|
+
* This decoupled design allows swapping vision (GPT-4o, Gemini, LLaVA)
|
|
31
|
+
* or STT (Whisper, Deepgram, AssemblyAI) providers without touching the
|
|
32
|
+
* indexer logic.
|
|
33
|
+
*
|
|
34
|
+
* @see {@link ContentModality} for supported modalities.
|
|
35
|
+
* @see {@link MultimodalSearchResult} for search result shape.
|
|
36
|
+
* @see {@link RetrievalAugmentor} for the text-only RAG pipeline.
|
|
37
|
+
*/
|
|
38
|
+
import { randomUUID } from 'node:crypto';
|
|
39
|
+
// ---------------------------------------------------------------------------
|
|
40
|
+
// Constants
|
|
41
|
+
// ---------------------------------------------------------------------------
|
|
42
|
+
/** Default collection name when none is specified. */
|
|
43
|
+
const DEFAULT_COLLECTION = 'multimodal';
|
|
44
|
+
/**
|
|
45
|
+
* Default prompt sent to the vision LLM when describing images.
|
|
46
|
+
* Designed to produce search-friendly descriptions that capture objects,
|
|
47
|
+
* actions, colors, text, and spatial relationships.
|
|
48
|
+
*/
|
|
49
|
+
const DEFAULT_IMAGE_DESCRIPTION_PROMPT = 'Describe this image in detail for use in a search index. ' +
|
|
50
|
+
'Include objects, actions, colors, text, spatial relationships, ' +
|
|
51
|
+
'and any notable characteristics. Be thorough but concise.';
|
|
52
|
+
// ---------------------------------------------------------------------------
|
|
53
|
+
// Implementation
|
|
54
|
+
// ---------------------------------------------------------------------------
|
|
55
|
+
/**
|
|
56
|
+
* Indexes non-text content (images, audio) into the vector store by
|
|
57
|
+
* generating text descriptions and embeddings.
|
|
58
|
+
*
|
|
59
|
+
* ## Image indexing flow
|
|
60
|
+
* 1. If the image is a Buffer, convert to base64 data URL.
|
|
61
|
+
* 2. Send to the vision LLM to generate a text description.
|
|
62
|
+
* 3. Embed the description via the embedding manager.
|
|
63
|
+
* 4. Store in the vector store with `modality: 'image'` metadata.
|
|
64
|
+
*
|
|
65
|
+
* ## Audio indexing flow
|
|
66
|
+
* 1. Send the audio buffer to the STT provider for transcription.
|
|
67
|
+
* 2. Embed the transcript via the embedding manager.
|
|
68
|
+
* 3. Store in the vector store with `modality: 'audio'` metadata.
|
|
69
|
+
*
|
|
70
|
+
* ## Cross-modal search
|
|
71
|
+
* 1. Embed the text query via the embedding manager.
|
|
72
|
+
* 2. Query the vector store with optional modality filters.
|
|
73
|
+
* 3. Return results annotated with their source modality.
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* ```typescript
|
|
77
|
+
* import { MultimodalIndexer } from '../../rag/multimodal/index.js';
|
|
78
|
+
*
|
|
79
|
+
* const indexer = new MultimodalIndexer({
|
|
80
|
+
* embeddingManager,
|
|
81
|
+
* vectorStore,
|
|
82
|
+
* visionProvider,
|
|
83
|
+
* sttProvider,
|
|
84
|
+
* });
|
|
85
|
+
*
|
|
86
|
+
* // Index an image
|
|
87
|
+
* const imgResult = await indexer.indexImage({
|
|
88
|
+
* image: fs.readFileSync('./photo.jpg'),
|
|
89
|
+
* metadata: { source: 'upload' },
|
|
90
|
+
* });
|
|
91
|
+
*
|
|
92
|
+
* // Index audio
|
|
93
|
+
* const audioResult = await indexer.indexAudio({
|
|
94
|
+
* audio: fs.readFileSync('./meeting.wav'),
|
|
95
|
+
* language: 'en',
|
|
96
|
+
* });
|
|
97
|
+
*
|
|
98
|
+
* // Search across all modalities
|
|
99
|
+
* const results = await indexer.search('cats on a beach');
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
102
|
+
export class MultimodalIndexer {
|
|
103
|
+
// -------------------------------------------------------------------------
|
|
104
|
+
// Constructor
|
|
105
|
+
// -------------------------------------------------------------------------
|
|
106
|
+
/**
|
|
107
|
+
* Create a new multimodal indexer.
|
|
108
|
+
*
|
|
109
|
+
* @param deps - Dependency injection container.
|
|
110
|
+
* @param deps.embeddingManager - Manager for generating text embeddings.
|
|
111
|
+
* @param deps.vectorStore - Vector store for document storage and search.
|
|
112
|
+
* @param deps.visionProvider - Optional vision LLM for image description.
|
|
113
|
+
* @param deps.visionPipeline - Optional full vision pipeline with OCR, handwriting,
|
|
114
|
+
* document understanding, CLIP embeddings, and cloud fallback. When provided,
|
|
115
|
+
* it is wrapped as an `IVisionProvider` via `PipelineVisionProvider`,
|
|
116
|
+
* overriding any `visionProvider` passed alongside it.
|
|
117
|
+
* @param deps.sttProvider - Optional STT provider for audio transcription.
|
|
118
|
+
* @param deps.config - Optional configuration overrides.
|
|
119
|
+
*
|
|
120
|
+
* @throws {Error} If embeddingManager or vectorStore is missing.
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* ```typescript
|
|
124
|
+
* // With a simple vision LLM provider
|
|
125
|
+
* const indexer = new MultimodalIndexer({
|
|
126
|
+
* embeddingManager,
|
|
127
|
+
* vectorStore,
|
|
128
|
+
* visionProvider: myVisionLLM,
|
|
129
|
+
* sttProvider: myWhisperService,
|
|
130
|
+
* config: { defaultCollection: 'knowledge' },
|
|
131
|
+
* });
|
|
132
|
+
*
|
|
133
|
+
* // With the full vision pipeline (recommended)
|
|
134
|
+
* const indexer = new MultimodalIndexer({
|
|
135
|
+
* embeddingManager,
|
|
136
|
+
* vectorStore,
|
|
137
|
+
* visionPipeline: myVisionPipeline,
|
|
138
|
+
* });
|
|
139
|
+
* ```
|
|
140
|
+
*/
|
|
141
|
+
constructor(deps) {
|
|
142
|
+
if (!deps.embeddingManager) {
|
|
143
|
+
throw new Error('MultimodalIndexer requires an IEmbeddingManager instance.');
|
|
144
|
+
}
|
|
145
|
+
if (!deps.vectorStore) {
|
|
146
|
+
throw new Error('MultimodalIndexer requires an IVectorStore instance.');
|
|
147
|
+
}
|
|
148
|
+
this._embeddingManager = deps.embeddingManager;
|
|
149
|
+
this._vectorStore = deps.vectorStore;
|
|
150
|
+
this._sttProvider = deps.sttProvider;
|
|
151
|
+
// If a full VisionPipeline is provided, wrap it as an IVisionProvider.
|
|
152
|
+
// This gives the indexer access to the progressive OCR + vision pipeline
|
|
153
|
+
// for image description, while maintaining backward compatibility with
|
|
154
|
+
// the simpler IVisionProvider interface.
|
|
155
|
+
if (deps.visionPipeline) {
|
|
156
|
+
// Lazy import to avoid circular dependency at module load time.
|
|
157
|
+
// PipelineVisionProvider is a thin adapter — safe to require synchronously.
|
|
158
|
+
const { PipelineVisionProvider, } = require('../../core/vision/providers/PipelineVisionProvider.js');
|
|
159
|
+
this._visionProvider = new PipelineVisionProvider(deps.visionPipeline);
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
this._visionProvider = deps.visionProvider;
|
|
163
|
+
}
|
|
164
|
+
this._config = {
|
|
165
|
+
defaultCollection: deps.config?.defaultCollection ?? DEFAULT_COLLECTION,
|
|
166
|
+
imageDescriptionPrompt: deps.config?.imageDescriptionPrompt ?? DEFAULT_IMAGE_DESCRIPTION_PROMPT,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
// -------------------------------------------------------------------------
|
|
170
|
+
// Image indexing
|
|
171
|
+
// -------------------------------------------------------------------------
|
|
172
|
+
/**
|
|
173
|
+
* Index an image by generating a text description via vision LLM,
|
|
174
|
+
* then embedding and storing the description.
|
|
175
|
+
*
|
|
176
|
+
* @param opts - Image data, metadata, and collection options.
|
|
177
|
+
* @returns The document ID and generated description.
|
|
178
|
+
*
|
|
179
|
+
* @throws {Error} If no vision provider is configured.
|
|
180
|
+
* @throws {Error} If the vision LLM fails to describe the image.
|
|
181
|
+
* @throws {Error} If embedding generation or vector store upsert fails.
|
|
182
|
+
*
|
|
183
|
+
* @example
|
|
184
|
+
* ```typescript
|
|
185
|
+
* const result = await indexer.indexImage({
|
|
186
|
+
* image: 'https://example.com/photo.jpg',
|
|
187
|
+
* metadata: { source: 'web-scrape', url: 'https://example.com' },
|
|
188
|
+
* });
|
|
189
|
+
* console.log(result.description); // "A golden retriever playing fetch..."
|
|
190
|
+
* ```
|
|
191
|
+
*/
|
|
192
|
+
async indexImage(opts) {
|
|
193
|
+
if (!this._visionProvider) {
|
|
194
|
+
throw new Error('MultimodalIndexer: cannot index image — no vision provider configured. ' +
|
|
195
|
+
'Pass a visionProvider in the constructor.');
|
|
196
|
+
}
|
|
197
|
+
// Convert Buffer to base64 data URL so the vision LLM can process it.
|
|
198
|
+
// URL strings are passed through unchanged.
|
|
199
|
+
let imageUrl;
|
|
200
|
+
if (Buffer.isBuffer(opts.image)) {
|
|
201
|
+
const base64 = opts.image.toString('base64');
|
|
202
|
+
// Default to PNG MIME type since we don't inspect the magic bytes.
|
|
203
|
+
// Most vision LLMs accept any common image format regardless of the
|
|
204
|
+
// declared MIME type.
|
|
205
|
+
imageUrl = `data:image/png;base64,${base64}`;
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
imageUrl = opts.image;
|
|
209
|
+
}
|
|
210
|
+
// Step 1: Generate text description of the image
|
|
211
|
+
const description = await this._visionProvider.describeImage(imageUrl);
|
|
212
|
+
if (!description || description.trim().length === 0) {
|
|
213
|
+
throw new Error('MultimodalIndexer: vision provider returned empty description.');
|
|
214
|
+
}
|
|
215
|
+
// Step 2: Generate embedding from the description text
|
|
216
|
+
const collection = opts.collection ?? this._config.defaultCollection;
|
|
217
|
+
const docId = randomUUID();
|
|
218
|
+
const embeddingRequest = {
|
|
219
|
+
texts: [description],
|
|
220
|
+
};
|
|
221
|
+
const embeddingResponse = await this._embeddingManager.generateEmbeddings(embeddingRequest);
|
|
222
|
+
if (!embeddingResponse.embeddings ||
|
|
223
|
+
embeddingResponse.embeddings.length === 0 ||
|
|
224
|
+
embeddingResponse.embeddings[0].length === 0) {
|
|
225
|
+
throw new Error('MultimodalIndexer: embedding generation returned empty result for image description.');
|
|
226
|
+
}
|
|
227
|
+
// Step 3: Store in vector store with image modality metadata
|
|
228
|
+
const metadata = {
|
|
229
|
+
modality: 'image',
|
|
230
|
+
...opts.metadata,
|
|
231
|
+
};
|
|
232
|
+
const document = {
|
|
233
|
+
id: docId,
|
|
234
|
+
embedding: embeddingResponse.embeddings[0],
|
|
235
|
+
textContent: description,
|
|
236
|
+
metadata,
|
|
237
|
+
};
|
|
238
|
+
await this._vectorStore.upsert(collection, [document]);
|
|
239
|
+
return {
|
|
240
|
+
id: docId,
|
|
241
|
+
description,
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
// -------------------------------------------------------------------------
|
|
245
|
+
// Audio indexing
|
|
246
|
+
// -------------------------------------------------------------------------
|
|
247
|
+
/**
|
|
248
|
+
* Index an audio file by transcribing via STT, then embedding and
|
|
249
|
+
* storing the transcript.
|
|
250
|
+
*
|
|
251
|
+
* @param opts - Audio data, metadata, collection, and language options.
|
|
252
|
+
* @returns The document ID and generated transcript.
|
|
253
|
+
*
|
|
254
|
+
* @throws {Error} If no STT provider is configured.
|
|
255
|
+
* @throws {Error} If the STT provider fails to transcribe.
|
|
256
|
+
* @throws {Error} If embedding generation or vector store upsert fails.
|
|
257
|
+
*
|
|
258
|
+
* @example
|
|
259
|
+
* ```typescript
|
|
260
|
+
* const result = await indexer.indexAudio({
|
|
261
|
+
* audio: fs.readFileSync('./podcast.mp3'),
|
|
262
|
+
* metadata: { source: 'podcast', episode: 42 },
|
|
263
|
+
* language: 'en',
|
|
264
|
+
* });
|
|
265
|
+
* console.log(result.transcript); // "Welcome to episode 42..."
|
|
266
|
+
* ```
|
|
267
|
+
*/
|
|
268
|
+
async indexAudio(opts) {
|
|
269
|
+
if (!this._sttProvider) {
|
|
270
|
+
throw new Error('MultimodalIndexer: cannot index audio — no STT provider configured. ' +
|
|
271
|
+
'Pass an sttProvider in the constructor.');
|
|
272
|
+
}
|
|
273
|
+
// Step 1: Transcribe audio to text
|
|
274
|
+
const transcript = await this._sttProvider.transcribe(opts.audio, opts.language);
|
|
275
|
+
if (!transcript || transcript.trim().length === 0) {
|
|
276
|
+
throw new Error('MultimodalIndexer: STT provider returned empty transcript.');
|
|
277
|
+
}
|
|
278
|
+
// Step 2: Generate embedding from the transcript text
|
|
279
|
+
const collection = opts.collection ?? this._config.defaultCollection;
|
|
280
|
+
const docId = randomUUID();
|
|
281
|
+
const embeddingRequest = {
|
|
282
|
+
texts: [transcript],
|
|
283
|
+
};
|
|
284
|
+
const embeddingResponse = await this._embeddingManager.generateEmbeddings(embeddingRequest);
|
|
285
|
+
if (!embeddingResponse.embeddings ||
|
|
286
|
+
embeddingResponse.embeddings.length === 0 ||
|
|
287
|
+
embeddingResponse.embeddings[0].length === 0) {
|
|
288
|
+
throw new Error('MultimodalIndexer: embedding generation returned empty result for audio transcript.');
|
|
289
|
+
}
|
|
290
|
+
// Step 3: Store in vector store with audio modality metadata
|
|
291
|
+
const metadata = {
|
|
292
|
+
modality: 'audio',
|
|
293
|
+
...opts.metadata,
|
|
294
|
+
};
|
|
295
|
+
if (opts.language) {
|
|
296
|
+
metadata.language = opts.language;
|
|
297
|
+
}
|
|
298
|
+
const document = {
|
|
299
|
+
id: docId,
|
|
300
|
+
embedding: embeddingResponse.embeddings[0],
|
|
301
|
+
textContent: transcript,
|
|
302
|
+
metadata,
|
|
303
|
+
};
|
|
304
|
+
await this._vectorStore.upsert(collection, [document]);
|
|
305
|
+
return {
|
|
306
|
+
id: docId,
|
|
307
|
+
transcript,
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
// -------------------------------------------------------------------------
|
|
311
|
+
// Cross-modal search
|
|
312
|
+
// -------------------------------------------------------------------------
|
|
313
|
+
/**
|
|
314
|
+
* Search across all modalities (text + image descriptions + audio transcripts).
|
|
315
|
+
*
|
|
316
|
+
* The query text is embedded, then the vector store is searched with
|
|
317
|
+
* optional modality filtering. Results are returned with their source
|
|
318
|
+
* modality indicated.
|
|
319
|
+
*
|
|
320
|
+
* @param query - Natural language search query.
|
|
321
|
+
* @param opts - Optional search parameters (topK, modalities, collection).
|
|
322
|
+
* @returns Array of search results sorted by relevance score (descending).
|
|
323
|
+
*
|
|
324
|
+
* @throws {Error} If embedding generation fails.
|
|
325
|
+
*
|
|
326
|
+
* @example
|
|
327
|
+
* ```typescript
|
|
328
|
+
* // Search only image descriptions
|
|
329
|
+
* const imageResults = await indexer.search('cats playing', {
|
|
330
|
+
* modalities: ['image'],
|
|
331
|
+
* topK: 10,
|
|
332
|
+
* });
|
|
333
|
+
*
|
|
334
|
+
* // Search across all modalities
|
|
335
|
+
* const allResults = await indexer.search('machine learning tutorial');
|
|
336
|
+
* ```
|
|
337
|
+
*/
|
|
338
|
+
async search(query, opts) {
|
|
339
|
+
const topK = opts?.topK ?? 5;
|
|
340
|
+
const collection = opts?.collection ?? this._config.defaultCollection;
|
|
341
|
+
// Step 1: Embed the query text
|
|
342
|
+
const embeddingRequest = {
|
|
343
|
+
texts: [query],
|
|
344
|
+
};
|
|
345
|
+
const embeddingResponse = await this._embeddingManager.generateEmbeddings(embeddingRequest);
|
|
346
|
+
if (!embeddingResponse.embeddings ||
|
|
347
|
+
embeddingResponse.embeddings.length === 0 ||
|
|
348
|
+
embeddingResponse.embeddings[0].length === 0) {
|
|
349
|
+
throw new Error('MultimodalIndexer: embedding generation returned empty result for search query.');
|
|
350
|
+
}
|
|
351
|
+
const queryEmbedding = embeddingResponse.embeddings[0];
|
|
352
|
+
// Step 2: Build metadata filter for modality filtering.
|
|
353
|
+
// When specific modalities are requested, we filter on the modality
|
|
354
|
+
// metadata field using $in for multi-modality or $eq for single.
|
|
355
|
+
const filter = opts?.modalities && opts.modalities.length > 0
|
|
356
|
+
? opts.modalities.length === 1
|
|
357
|
+
? { modality: opts.modalities[0] }
|
|
358
|
+
: { modality: { $in: opts.modalities } }
|
|
359
|
+
: undefined;
|
|
360
|
+
// Step 3: Query the vector store
|
|
361
|
+
const queryResult = await this._vectorStore.query(collection, queryEmbedding, {
|
|
362
|
+
topK,
|
|
363
|
+
filter: filter,
|
|
364
|
+
includeMetadata: true,
|
|
365
|
+
includeTextContent: true,
|
|
366
|
+
});
|
|
367
|
+
// Step 4: Map vector store results to multimodal search results
|
|
368
|
+
return queryResult.documents.map((doc) => ({
|
|
369
|
+
id: doc.id,
|
|
370
|
+
content: doc.textContent ?? '',
|
|
371
|
+
score: doc.similarityScore,
|
|
372
|
+
modality: doc.metadata?.modality ?? 'text',
|
|
373
|
+
metadata: doc.metadata,
|
|
374
|
+
}));
|
|
375
|
+
}
|
|
376
|
+
// -------------------------------------------------------------------------
|
|
377
|
+
// Memory bridge factory
|
|
378
|
+
// -------------------------------------------------------------------------
|
|
379
|
+
/**
|
|
380
|
+
* Create a `MultimodalMemoryBridge` using this indexer's providers.
|
|
381
|
+
*
|
|
382
|
+
* The bridge extends this indexer's RAG capabilities with cognitive memory
|
|
383
|
+
* integration, enabling multimodal content to be stored in both the vector
|
|
384
|
+
* store (for search) and long-term memory (for recall during conversation).
|
|
385
|
+
*
|
|
386
|
+
* @param memoryManager - Optional cognitive memory manager for memory trace creation.
|
|
387
|
+
* When omitted, the bridge still indexes into RAG but creates no memory traces.
|
|
388
|
+
* @param options - Bridge configuration overrides (mood, chunk sizes, etc.)
|
|
389
|
+
* @returns A configured multimodal memory bridge instance.
|
|
390
|
+
*
|
|
391
|
+
* @example
|
|
392
|
+
* ```typescript
|
|
393
|
+
* const bridge = indexer.createMemoryBridge(memoryManager, {
|
|
394
|
+
* enableMemory: true,
|
|
395
|
+
* defaultChunkSize: 800,
|
|
396
|
+
* });
|
|
397
|
+
*
|
|
398
|
+
* await bridge.ingestImage(imageBuffer, { source: 'user-upload' });
|
|
399
|
+
* ```
|
|
400
|
+
*
|
|
401
|
+
* See `MultimodalMemoryBridge` for full documentation.
|
|
402
|
+
*/
|
|
403
|
+
createMemoryBridge(memoryManager, options) {
|
|
404
|
+
// Lazy import to avoid circular dependency at module load time.
|
|
405
|
+
// The bridge depends on the indexer, and this factory lives on the indexer,
|
|
406
|
+
// so we use a dynamic require pattern with the already-resolved class.
|
|
407
|
+
const { MultimodalMemoryBridge } = require('./MultimodalMemoryBridge.js');
|
|
408
|
+
return new MultimodalMemoryBridge(this, memoryManager, options);
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
//# sourceMappingURL=MultimodalIndexer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultimodalIndexer.js","sourceRoot":"","sources":["../../../src/rag/multimodal/MultimodalIndexer.ts"],"names":[],"mappings":"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"}
|