@framers/agentos 0.1.120 → 0.1.122
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 +21 -0
- package/dist/api/agency.d.ts.map +1 -1
- package/dist/api/agency.js +227 -84
- package/dist/api/agency.js.map +1 -1
- package/dist/api/analyzeVideo.d.ts +127 -0
- package/dist/api/analyzeVideo.d.ts.map +1 -0
- package/dist/api/analyzeVideo.js +136 -0
- package/dist/api/analyzeVideo.js.map +1 -0
- package/dist/api/detectScenes.d.ts +82 -0
- package/dist/api/detectScenes.d.ts.map +1 -0
- package/dist/api/detectScenes.js +67 -0
- package/dist/api/detectScenes.js.map +1 -0
- package/dist/api/generateImage.d.ts +7 -0
- package/dist/api/generateImage.d.ts.map +1 -1
- package/dist/api/generateImage.js +133 -9
- package/dist/api/generateImage.js.map +1 -1
- package/dist/api/generateMusic.d.ts +98 -0
- package/dist/api/generateMusic.d.ts.map +1 -0
- package/dist/api/generateMusic.js +319 -0
- package/dist/api/generateMusic.js.map +1 -0
- package/dist/api/generateSFX.d.ts +96 -0
- package/dist/api/generateSFX.d.ts.map +1 -0
- package/dist/api/generateSFX.js +317 -0
- package/dist/api/generateSFX.js.map +1 -0
- package/dist/api/generateVideo.d.ts +113 -0
- package/dist/api/generateVideo.d.ts.map +1 -0
- package/dist/api/generateVideo.js +342 -0
- package/dist/api/generateVideo.js.map +1 -0
- package/dist/api/model.d.ts.map +1 -1
- package/dist/api/model.js +8 -4
- package/dist/api/model.js.map +1 -1
- package/dist/api/performOCR.d.ts +169 -0
- package/dist/api/performOCR.d.ts.map +1 -0
- package/dist/api/performOCR.js +198 -0
- package/dist/api/performOCR.js.map +1 -0
- package/dist/api/provider-defaults.d.ts +7 -5
- package/dist/api/provider-defaults.d.ts.map +1 -1
- package/dist/api/provider-defaults.js +32 -10
- package/dist/api/provider-defaults.js.map +1 -1
- package/dist/api/strategies/debate.d.ts.map +1 -1
- package/dist/api/strategies/debate.js +1 -0
- package/dist/api/strategies/debate.js.map +1 -1
- package/dist/api/strategies/graph.d.ts.map +1 -1
- package/dist/api/strategies/graph.js +69 -13
- package/dist/api/strategies/graph.js.map +1 -1
- package/dist/api/strategies/hierarchical.d.ts.map +1 -1
- package/dist/api/strategies/hierarchical.js +1 -0
- package/dist/api/strategies/hierarchical.js.map +1 -1
- package/dist/api/strategies/parallel.d.ts.map +1 -1
- package/dist/api/strategies/parallel.js +1 -0
- package/dist/api/strategies/parallel.js.map +1 -1
- package/dist/api/strategies/review-loop.d.ts.map +1 -1
- package/dist/api/strategies/review-loop.js +1 -0
- package/dist/api/strategies/review-loop.js.map +1 -1
- package/dist/api/strategies/sequential.d.ts.map +1 -1
- package/dist/api/strategies/sequential.js +54 -48
- package/dist/api/strategies/sequential.js.map +1 -1
- package/dist/api/streamBuffer.d.ts +20 -0
- package/dist/api/streamBuffer.d.ts.map +1 -0
- package/dist/api/streamBuffer.js +81 -0
- package/dist/api/streamBuffer.js.map +1 -0
- package/dist/api/types.d.ts +145 -5
- package/dist/api/types.d.ts.map +1 -1
- package/dist/api/types.js.map +1 -1
- package/dist/channels/adapters/RedditChannelAdapter.js.map +1 -1
- package/dist/core/audio/AudioProcessor.d.ts.map +1 -1
- package/dist/core/audio/AudioProcessor.js +1 -0
- package/dist/core/audio/AudioProcessor.js.map +1 -1
- package/dist/core/audio/EnvironmentalCalibrator.d.ts.map +1 -1
- package/dist/core/audio/EnvironmentalCalibrator.js +1 -0
- package/dist/core/audio/EnvironmentalCalibrator.js.map +1 -1
- package/dist/core/audio/FallbackAudioProxy.d.ts +169 -0
- package/dist/core/audio/FallbackAudioProxy.d.ts.map +1 -0
- package/dist/core/audio/FallbackAudioProxy.js +236 -0
- package/dist/core/audio/FallbackAudioProxy.js.map +1 -0
- package/dist/core/audio/IAudioGenerator.d.ts +103 -0
- package/dist/core/audio/IAudioGenerator.d.ts.map +1 -0
- package/dist/core/audio/IAudioGenerator.js +24 -0
- package/dist/core/audio/IAudioGenerator.js.map +1 -0
- package/dist/core/audio/index.d.ts +54 -0
- package/dist/core/audio/index.d.ts.map +1 -1
- package/dist/core/audio/index.js +93 -0
- package/dist/core/audio/index.js.map +1 -1
- package/dist/core/audio/providers/AudioGenLocalProvider.d.ts +136 -0
- package/dist/core/audio/providers/AudioGenLocalProvider.d.ts.map +1 -0
- package/dist/core/audio/providers/AudioGenLocalProvider.js +235 -0
- package/dist/core/audio/providers/AudioGenLocalProvider.js.map +1 -0
- package/dist/core/audio/providers/ElevenLabsSFXProvider.d.ts +107 -0
- package/dist/core/audio/providers/ElevenLabsSFXProvider.d.ts.map +1 -0
- package/dist/core/audio/providers/ElevenLabsSFXProvider.js +154 -0
- package/dist/core/audio/providers/ElevenLabsSFXProvider.js.map +1 -0
- package/dist/core/audio/providers/FalAudioProvider.d.ts +207 -0
- package/dist/core/audio/providers/FalAudioProvider.d.ts.map +1 -0
- package/dist/core/audio/providers/FalAudioProvider.js +315 -0
- package/dist/core/audio/providers/FalAudioProvider.js.map +1 -0
- package/dist/core/audio/providers/MusicGenLocalProvider.d.ts +136 -0
- package/dist/core/audio/providers/MusicGenLocalProvider.d.ts.map +1 -0
- package/dist/core/audio/providers/MusicGenLocalProvider.js +235 -0
- package/dist/core/audio/providers/MusicGenLocalProvider.js.map +1 -0
- package/dist/core/audio/providers/ReplicateAudioProvider.d.ts +200 -0
- package/dist/core/audio/providers/ReplicateAudioProvider.d.ts.map +1 -0
- package/dist/core/audio/providers/ReplicateAudioProvider.js +346 -0
- package/dist/core/audio/providers/ReplicateAudioProvider.js.map +1 -0
- package/dist/core/audio/providers/StableAudioProvider.d.ts +138 -0
- package/dist/core/audio/providers/StableAudioProvider.d.ts.map +1 -0
- package/dist/core/audio/providers/StableAudioProvider.js +192 -0
- package/dist/core/audio/providers/StableAudioProvider.js.map +1 -0
- package/dist/core/audio/providers/SunoProvider.d.ts +182 -0
- package/dist/core/audio/providers/SunoProvider.d.ts.map +1 -0
- package/dist/core/audio/providers/SunoProvider.js +312 -0
- package/dist/core/audio/providers/SunoProvider.js.map +1 -0
- package/dist/core/audio/providers/UdioProvider.d.ts +177 -0
- package/dist/core/audio/providers/UdioProvider.d.ts.map +1 -0
- package/dist/core/audio/providers/UdioProvider.js +305 -0
- package/dist/core/audio/providers/UdioProvider.js.map +1 -0
- package/dist/core/audio/types.d.ts +257 -0
- package/dist/core/audio/types.d.ts.map +1 -0
- package/dist/core/audio/types.js +21 -0
- package/dist/core/audio/types.js.map +1 -0
- package/dist/core/images/FallbackImageProxy.d.ts +183 -0
- package/dist/core/images/FallbackImageProxy.d.ts.map +1 -0
- package/dist/core/images/FallbackImageProxy.js +283 -0
- package/dist/core/images/FallbackImageProxy.js.map +1 -0
- package/dist/core/images/IImageProvider.d.ts +1 -1
- package/dist/core/images/IImageProvider.d.ts.map +1 -1
- package/dist/core/images/index.d.ts +1 -0
- package/dist/core/images/index.d.ts.map +1 -1
- package/dist/core/images/index.js +1 -0
- package/dist/core/images/index.js.map +1 -1
- package/dist/core/llm/providers/AIModelProviderManager.d.ts +3 -1
- package/dist/core/llm/providers/AIModelProviderManager.d.ts.map +1 -1
- package/dist/core/llm/providers/AIModelProviderManager.js +8 -0
- package/dist/core/llm/providers/AIModelProviderManager.js.map +1 -1
- package/dist/core/llm/providers/errors/ClaudeCodeProviderError.d.ts +52 -0
- package/dist/core/llm/providers/errors/ClaudeCodeProviderError.d.ts.map +1 -0
- package/dist/core/llm/providers/errors/ClaudeCodeProviderError.js +36 -0
- package/dist/core/llm/providers/errors/ClaudeCodeProviderError.js.map +1 -0
- package/dist/core/llm/providers/errors/GeminiCLIProviderError.d.ts +32 -0
- package/dist/core/llm/providers/errors/GeminiCLIProviderError.d.ts.map +1 -0
- package/dist/core/llm/providers/errors/GeminiCLIProviderError.js +27 -0
- package/dist/core/llm/providers/errors/GeminiCLIProviderError.js.map +1 -0
- package/dist/core/llm/providers/implementations/ClaudeCodeCLIBridge.d.ts +38 -0
- package/dist/core/llm/providers/implementations/ClaudeCodeCLIBridge.d.ts.map +1 -0
- package/dist/core/llm/providers/implementations/ClaudeCodeCLIBridge.js +128 -0
- package/dist/core/llm/providers/implementations/ClaudeCodeCLIBridge.js.map +1 -0
- package/dist/core/llm/providers/implementations/ClaudeCodeProvider.d.ts +107 -0
- package/dist/core/llm/providers/implementations/ClaudeCodeProvider.d.ts.map +1 -0
- package/dist/core/llm/providers/implementations/ClaudeCodeProvider.js +504 -0
- package/dist/core/llm/providers/implementations/ClaudeCodeProvider.js.map +1 -0
- package/dist/core/llm/providers/implementations/GeminiCLIBridge.d.ts +60 -0
- package/dist/core/llm/providers/implementations/GeminiCLIBridge.d.ts.map +1 -0
- package/dist/core/llm/providers/implementations/GeminiCLIBridge.js +177 -0
- package/dist/core/llm/providers/implementations/GeminiCLIBridge.js.map +1 -0
- package/dist/core/llm/providers/implementations/GeminiCLIProvider.d.ts +55 -0
- package/dist/core/llm/providers/implementations/GeminiCLIProvider.d.ts.map +1 -0
- package/dist/core/llm/providers/implementations/GeminiCLIProvider.js +447 -0
- package/dist/core/llm/providers/implementations/GeminiCLIProvider.js.map +1 -0
- package/dist/core/media/ProviderPreferences.d.ts +158 -0
- package/dist/core/media/ProviderPreferences.d.ts.map +1 -0
- package/dist/core/media/ProviderPreferences.js +183 -0
- package/dist/core/media/ProviderPreferences.js.map +1 -0
- package/dist/core/subprocess/CLIRegistry.d.ts +71 -0
- package/dist/core/subprocess/CLIRegistry.d.ts.map +1 -0
- package/dist/core/subprocess/CLIRegistry.js +210 -0
- package/dist/core/subprocess/CLIRegistry.js.map +1 -0
- package/dist/core/subprocess/CLISubprocessBridge.d.ts +117 -0
- package/dist/core/subprocess/CLISubprocessBridge.d.ts.map +1 -0
- package/dist/core/subprocess/CLISubprocessBridge.js +199 -0
- package/dist/core/subprocess/CLISubprocessBridge.js.map +1 -0
- package/dist/core/subprocess/errors.d.ts +76 -0
- package/dist/core/subprocess/errors.d.ts.map +1 -0
- package/dist/core/subprocess/errors.js +75 -0
- package/dist/core/subprocess/errors.js.map +1 -0
- package/dist/core/subprocess/index.d.ts +11 -0
- package/dist/core/subprocess/index.d.ts.map +1 -0
- package/dist/core/subprocess/index.js +10 -0
- package/dist/core/subprocess/index.js.map +1 -0
- package/dist/core/subprocess/types.d.ts +100 -0
- package/dist/core/subprocess/types.d.ts.map +1 -0
- package/dist/core/subprocess/types.js +9 -0
- package/dist/core/subprocess/types.js.map +1 -0
- package/dist/core/video/FallbackVideoProxy.d.ts +166 -0
- package/dist/core/video/FallbackVideoProxy.d.ts.map +1 -0
- package/dist/core/video/FallbackVideoProxy.js +228 -0
- package/dist/core/video/FallbackVideoProxy.js.map +1 -0
- package/dist/core/video/IVideoAnalyzer.d.ts +29 -0
- package/dist/core/video/IVideoAnalyzer.d.ts.map +1 -0
- package/dist/core/video/IVideoAnalyzer.js +12 -0
- package/dist/core/video/IVideoAnalyzer.js.map +1 -0
- package/dist/core/video/IVideoGenerator.d.ts +76 -0
- package/dist/core/video/IVideoGenerator.d.ts.map +1 -0
- package/dist/core/video/IVideoGenerator.js +13 -0
- package/dist/core/video/IVideoGenerator.js.map +1 -0
- package/dist/core/video/VideoAnalyzer.d.ts +278 -0
- package/dist/core/video/VideoAnalyzer.d.ts.map +1 -0
- package/dist/core/video/VideoAnalyzer.js +648 -0
- package/dist/core/video/VideoAnalyzer.js.map +1 -0
- package/dist/core/video/index.d.ts +55 -0
- package/dist/core/video/index.d.ts.map +1 -0
- package/dist/core/video/index.js +78 -0
- package/dist/core/video/index.js.map +1 -0
- package/dist/core/video/providers/FalVideoProvider.d.ts +195 -0
- package/dist/core/video/providers/FalVideoProvider.d.ts.map +1 -0
- package/dist/core/video/providers/FalVideoProvider.js +322 -0
- package/dist/core/video/providers/FalVideoProvider.js.map +1 -0
- package/dist/core/video/providers/ReplicateVideoProvider.d.ts +194 -0
- package/dist/core/video/providers/ReplicateVideoProvider.d.ts.map +1 -0
- package/dist/core/video/providers/ReplicateVideoProvider.js +356 -0
- package/dist/core/video/providers/ReplicateVideoProvider.js.map +1 -0
- package/dist/core/video/providers/RunwayVideoProvider.d.ts +175 -0
- package/dist/core/video/providers/RunwayVideoProvider.d.ts.map +1 -0
- package/dist/core/video/providers/RunwayVideoProvider.js +293 -0
- package/dist/core/video/providers/RunwayVideoProvider.js.map +1 -0
- package/dist/core/video/types.d.ts +441 -0
- package/dist/core/video/types.d.ts.map +1 -0
- package/dist/core/video/types.js +10 -0
- package/dist/core/video/types.js.map +1 -0
- package/dist/core/vision/SceneDetector.d.ts +180 -0
- package/dist/core/vision/SceneDetector.d.ts.map +1 -0
- package/dist/core/vision/SceneDetector.js +366 -0
- package/dist/core/vision/SceneDetector.js.map +1 -0
- package/dist/core/vision/index.d.ts +2 -1
- package/dist/core/vision/index.d.ts.map +1 -1
- package/dist/core/vision/index.js +1 -0
- package/dist/core/vision/index.js.map +1 -1
- package/dist/core/vision/types.d.ts +125 -0
- package/dist/core/vision/types.d.ts.map +1 -1
- package/dist/discovery/CapabilityDiscoveryEngine.d.ts +32 -0
- package/dist/discovery/CapabilityDiscoveryEngine.d.ts.map +1 -1
- package/dist/discovery/CapabilityDiscoveryEngine.js +46 -0
- package/dist/discovery/CapabilityDiscoveryEngine.js.map +1 -1
- package/dist/emergent/AdaptPersonalityTool.d.ts +158 -0
- package/dist/emergent/AdaptPersonalityTool.d.ts.map +1 -0
- package/dist/emergent/AdaptPersonalityTool.js +190 -0
- package/dist/emergent/AdaptPersonalityTool.js.map +1 -0
- package/dist/emergent/CreateWorkflowTool.d.ts +181 -0
- package/dist/emergent/CreateWorkflowTool.d.ts.map +1 -0
- package/dist/emergent/CreateWorkflowTool.js +307 -0
- package/dist/emergent/CreateWorkflowTool.js.map +1 -0
- package/dist/emergent/ManageSkillsTool.d.ts +154 -0
- package/dist/emergent/ManageSkillsTool.d.ts.map +1 -0
- package/dist/emergent/ManageSkillsTool.js +241 -0
- package/dist/emergent/ManageSkillsTool.js.map +1 -0
- package/dist/emergent/PersonalityMutationStore.d.ts +183 -0
- package/dist/emergent/PersonalityMutationStore.d.ts.map +1 -0
- package/dist/emergent/PersonalityMutationStore.js +222 -0
- package/dist/emergent/PersonalityMutationStore.js.map +1 -0
- package/dist/emergent/SelfEvaluateTool.d.ts +189 -0
- package/dist/emergent/SelfEvaluateTool.d.ts.map +1 -0
- package/dist/emergent/SelfEvaluateTool.js +353 -0
- package/dist/emergent/SelfEvaluateTool.js.map +1 -0
- package/dist/emergent/SelfImprovementConfig.d.ts +166 -0
- package/dist/emergent/SelfImprovementConfig.d.ts.map +1 -0
- package/dist/emergent/SelfImprovementConfig.js +43 -0
- package/dist/emergent/SelfImprovementConfig.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 +9 -0
- package/dist/emergent/types.d.ts.map +1 -1
- package/dist/emergent/types.js.map +1 -1
- package/dist/extensions/MultiRegistryLoader.js.map +1 -1
- package/dist/index.d.ts +17 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -1
- package/dist/memory/CognitiveMemoryManager.d.ts +40 -0
- package/dist/memory/CognitiveMemoryManager.d.ts.map +1 -1
- package/dist/memory/CognitiveMemoryManager.js +54 -1
- package/dist/memory/CognitiveMemoryManager.js.map +1 -1
- package/dist/memory/facade/Memory.d.ts +4 -0
- package/dist/memory/facade/Memory.d.ts.map +1 -1
- package/dist/memory/facade/Memory.js +140 -4
- package/dist/memory/facade/Memory.js.map +1 -1
- package/dist/memory/facade/types.d.ts +30 -2
- package/dist/memory/facade/types.d.ts.map +1 -1
- package/dist/memory/index.d.ts +1 -0
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/index.js +1 -0
- package/dist/memory/index.js.map +1 -1
- package/dist/memory/types.d.ts +15 -0
- package/dist/memory/types.d.ts.map +1 -1
- package/dist/query-router/QueryClassifier.d.ts +192 -21
- package/dist/query-router/QueryClassifier.d.ts.map +1 -1
- package/dist/query-router/QueryClassifier.js +604 -23
- package/dist/query-router/QueryClassifier.js.map +1 -1
- package/dist/query-router/QueryDispatcher.d.ts +106 -8
- package/dist/query-router/QueryDispatcher.d.ts.map +1 -1
- package/dist/query-router/QueryDispatcher.js +387 -8
- package/dist/query-router/QueryDispatcher.js.map +1 -1
- package/dist/query-router/QueryRouter.d.ts +198 -14
- package/dist/query-router/QueryRouter.d.ts.map +1 -1
- package/dist/query-router/QueryRouter.js +738 -50
- package/dist/query-router/QueryRouter.js.map +1 -1
- package/dist/query-router/index.d.ts +1 -1
- package/dist/query-router/index.d.ts.map +1 -1
- package/dist/query-router/index.js +1 -1
- package/dist/query-router/index.js.map +1 -1
- package/dist/query-router/types.d.ts +396 -3
- package/dist/query-router/types.d.ts.map +1 -1
- package/dist/query-router/types.js +35 -0
- package/dist/query-router/types.js.map +1 -1
- package/dist/rag/HydeRetriever.d.ts +108 -0
- package/dist/rag/HydeRetriever.d.ts.map +1 -1
- package/dist/rag/HydeRetriever.js +184 -0
- package/dist/rag/HydeRetriever.js.map +1 -1
- package/dist/rag/IRetrievalAugmentor.d.ts +15 -0
- package/dist/rag/IRetrievalAugmentor.d.ts.map +1 -1
- package/dist/rag/RetrievalAugmentor.d.ts +58 -0
- package/dist/rag/RetrievalAugmentor.d.ts.map +1 -1
- package/dist/rag/RetrievalAugmentor.js +200 -32
- package/dist/rag/RetrievalAugmentor.js.map +1 -1
- package/dist/rag/VectorStoreManager.js +1 -1
- package/dist/rag/audit/RAGAuditCollector.d.ts +7 -0
- package/dist/rag/audit/RAGAuditCollector.d.ts.map +1 -1
- package/dist/rag/audit/RAGAuditCollector.js +10 -0
- package/dist/rag/audit/RAGAuditCollector.js.map +1 -1
- package/dist/rag/audit/RAGAuditTypes.d.ts +10 -1
- package/dist/rag/audit/RAGAuditTypes.d.ts.map +1 -1
- package/dist/rag/chunking/SemanticChunker.d.ts +210 -0
- package/dist/rag/chunking/SemanticChunker.d.ts.map +1 -0
- package/dist/rag/chunking/SemanticChunker.js +460 -0
- package/dist/rag/chunking/SemanticChunker.js.map +1 -0
- package/dist/rag/chunking/index.d.ts +10 -0
- package/dist/rag/chunking/index.d.ts.map +1 -0
- package/dist/rag/chunking/index.js +10 -0
- package/dist/rag/chunking/index.js.map +1 -0
- package/dist/rag/implementations/vector_stores/PineconeVectorStore.d.ts +103 -0
- package/dist/rag/implementations/vector_stores/PineconeVectorStore.d.ts.map +1 -0
- package/dist/rag/implementations/vector_stores/PineconeVectorStore.js +315 -0
- package/dist/rag/implementations/vector_stores/PineconeVectorStore.js.map +1 -0
- package/dist/rag/implementations/vector_stores/PostgresVectorStore.d.ts +107 -0
- package/dist/rag/implementations/vector_stores/PostgresVectorStore.d.ts.map +1 -0
- package/dist/rag/implementations/vector_stores/PostgresVectorStore.js +438 -0
- package/dist/rag/implementations/vector_stores/PostgresVectorStore.js.map +1 -0
- package/dist/rag/index.d.ts +15 -1
- package/dist/rag/index.d.ts.map +1 -1
- package/dist/rag/index.js +32 -0
- package/dist/rag/index.js.map +1 -1
- package/dist/rag/migration/MigrationEngine.d.ts +47 -0
- package/dist/rag/migration/MigrationEngine.d.ts.map +1 -0
- package/dist/rag/migration/MigrationEngine.js +168 -0
- package/dist/rag/migration/MigrationEngine.js.map +1 -0
- package/dist/rag/migration/adapters/PineconeSourceAdapter.d.ts +23 -0
- package/dist/rag/migration/adapters/PineconeSourceAdapter.d.ts.map +1 -0
- package/dist/rag/migration/adapters/PineconeSourceAdapter.js +63 -0
- package/dist/rag/migration/adapters/PineconeSourceAdapter.js.map +1 -0
- package/dist/rag/migration/adapters/PostgresSourceAdapter.d.ts +30 -0
- package/dist/rag/migration/adapters/PostgresSourceAdapter.d.ts.map +1 -0
- package/dist/rag/migration/adapters/PostgresSourceAdapter.js +71 -0
- package/dist/rag/migration/adapters/PostgresSourceAdapter.js.map +1 -0
- package/dist/rag/migration/adapters/PostgresTargetAdapter.d.ts +38 -0
- package/dist/rag/migration/adapters/PostgresTargetAdapter.d.ts.map +1 -0
- package/dist/rag/migration/adapters/PostgresTargetAdapter.js +114 -0
- package/dist/rag/migration/adapters/PostgresTargetAdapter.js.map +1 -0
- package/dist/rag/migration/adapters/QdrantSourceAdapter.d.ts +36 -0
- package/dist/rag/migration/adapters/QdrantSourceAdapter.d.ts.map +1 -0
- package/dist/rag/migration/adapters/QdrantSourceAdapter.js +109 -0
- package/dist/rag/migration/adapters/QdrantSourceAdapter.js.map +1 -0
- package/dist/rag/migration/adapters/QdrantTargetAdapter.d.ts +35 -0
- package/dist/rag/migration/adapters/QdrantTargetAdapter.d.ts.map +1 -0
- package/dist/rag/migration/adapters/QdrantTargetAdapter.js +110 -0
- package/dist/rag/migration/adapters/QdrantTargetAdapter.js.map +1 -0
- package/dist/rag/migration/adapters/SqliteSourceAdapter.d.ts +37 -0
- package/dist/rag/migration/adapters/SqliteSourceAdapter.d.ts.map +1 -0
- package/dist/rag/migration/adapters/SqliteSourceAdapter.js +72 -0
- package/dist/rag/migration/adapters/SqliteSourceAdapter.js.map +1 -0
- package/dist/rag/migration/adapters/SqliteTargetAdapter.d.ts +47 -0
- package/dist/rag/migration/adapters/SqliteTargetAdapter.d.ts.map +1 -0
- package/dist/rag/migration/adapters/SqliteTargetAdapter.js +93 -0
- package/dist/rag/migration/adapters/SqliteTargetAdapter.js.map +1 -0
- package/dist/rag/migration/types.d.ts +108 -0
- package/dist/rag/migration/types.d.ts.map +1 -0
- package/dist/rag/migration/types.js +11 -0
- package/dist/rag/migration/types.js.map +1 -0
- package/dist/rag/multimodal/MultimodalIndexer.d.ts +35 -0
- package/dist/rag/multimodal/MultimodalIndexer.d.ts.map +1 -1
- package/dist/rag/multimodal/MultimodalIndexer.js +66 -1
- package/dist/rag/multimodal/MultimodalIndexer.js.map +1 -1
- package/dist/rag/multimodal/types.d.ts +24 -0
- package/dist/rag/multimodal/types.d.ts.map +1 -1
- package/dist/rag/raptor/RaptorTree.d.ts +268 -0
- package/dist/rag/raptor/RaptorTree.d.ts.map +1 -0
- package/dist/rag/raptor/RaptorTree.js +443 -0
- package/dist/rag/raptor/RaptorTree.js.map +1 -0
- package/dist/rag/raptor/index.d.ts +11 -0
- package/dist/rag/raptor/index.d.ts.map +1 -0
- package/dist/rag/raptor/index.js +11 -0
- package/dist/rag/raptor/index.js.map +1 -0
- package/dist/rag/reranking/providers/CohereReranker.js.map +1 -1
- package/dist/rag/search/BM25Index.d.ts +282 -0
- package/dist/rag/search/BM25Index.d.ts.map +1 -0
- package/dist/rag/search/BM25Index.js +344 -0
- package/dist/rag/search/BM25Index.js.map +1 -0
- package/dist/rag/search/HybridSearcher.d.ts +198 -0
- package/dist/rag/search/HybridSearcher.d.ts.map +1 -0
- package/dist/rag/search/HybridSearcher.js +316 -0
- package/dist/rag/search/HybridSearcher.js.map +1 -0
- package/dist/rag/search/index.d.ts +12 -0
- package/dist/rag/search/index.d.ts.map +1 -0
- package/dist/rag/search/index.js +12 -0
- package/dist/rag/search/index.js.map +1 -0
- package/dist/rag/setup/DockerDetector.d.ts +67 -0
- package/dist/rag/setup/DockerDetector.d.ts.map +1 -0
- package/dist/rag/setup/DockerDetector.js +125 -0
- package/dist/rag/setup/DockerDetector.js.map +1 -0
- package/dist/rag/setup/PostgresSetup.d.ts +20 -0
- package/dist/rag/setup/PostgresSetup.d.ts.map +1 -0
- package/dist/rag/setup/PostgresSetup.js +133 -0
- package/dist/rag/setup/PostgresSetup.js.map +1 -0
- package/dist/rag/setup/QdrantSetup.d.ts +26 -0
- package/dist/rag/setup/QdrantSetup.d.ts.map +1 -0
- package/dist/rag/setup/QdrantSetup.js +96 -0
- package/dist/rag/setup/QdrantSetup.js.map +1 -0
- package/dist/rag/setup/types.d.ts +55 -0
- package/dist/rag/setup/types.d.ts.map +1 -0
- package/dist/rag/setup/types.js +6 -0
- package/dist/rag/setup/types.js.map +1 -0
- package/dist/rag/unified/UnifiedRetriever.d.ts +472 -0
- package/dist/rag/unified/UnifiedRetriever.d.ts.map +1 -0
- package/dist/rag/unified/UnifiedRetriever.js +887 -0
- package/dist/rag/unified/UnifiedRetriever.js.map +1 -0
- package/dist/rag/unified/index.d.ts +24 -0
- package/dist/rag/unified/index.d.ts.map +1 -0
- package/dist/rag/unified/index.js +23 -0
- package/dist/rag/unified/index.js.map +1 -0
- package/dist/rag/unified/types.d.ts +546 -0
- package/dist/rag/unified/types.d.ts.map +1 -0
- package/dist/rag/unified/types.js +177 -0
- package/dist/rag/unified/types.js.map +1 -0
- package/dist/speech/providers/AssemblyAISTTProvider.js.map +1 -1
- package/dist/speech/providers/AzureSpeechSTTProvider.js.map +1 -1
- package/dist/speech/providers/BuiltInAdaptiveVadProvider.d.ts +1 -1
- package/dist/speech/providers/DeepgramBatchSTTProvider.js.map +1 -1
- package/package.json +5 -2
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Hybrid dense+sparse searcher combining vector embeddings with BM25.
|
|
3
|
+
*
|
|
4
|
+
* Uses Reciprocal Rank Fusion (RRF) to merge results from both systems:
|
|
5
|
+
* - Dense: semantic understanding, handles paraphrasing and conceptual similarity
|
|
6
|
+
* - Sparse: keyword matching, handles exact terms, error codes, function names
|
|
7
|
+
*
|
|
8
|
+
* RRF formula (Cormack et al. 2009):
|
|
9
|
+
* ```
|
|
10
|
+
* score(d) = sum_{i} weight_i / (k + rank_i(d))
|
|
11
|
+
* ```
|
|
12
|
+
* where `k=60` (standard constant) and `rank_i(d)` is the rank of document `d`
|
|
13
|
+
* in result set `i`. Documents not present in a result set are assigned rank infinity.
|
|
14
|
+
*
|
|
15
|
+
* Alternative fusion methods:
|
|
16
|
+
* - **weighted-sum**: `score(d) = w_dense * norm_score_dense(d) + w_sparse * norm_score_sparse(d)`
|
|
17
|
+
* - **interleave**: Round-robin from each result set, deduplicating
|
|
18
|
+
*
|
|
19
|
+
* @module agentos/rag/search/HybridSearcher
|
|
20
|
+
* @see BM25Index for the sparse keyword index
|
|
21
|
+
* @see IVectorStore for the dense vector store interface
|
|
22
|
+
*/
|
|
23
|
+
import type { IVectorStore, QueryOptions } from '../IVectorStore.js';
|
|
24
|
+
import type { IEmbeddingManager } from '../IEmbeddingManager.js';
|
|
25
|
+
import { BM25Index } from './BM25Index.js';
|
|
26
|
+
/**
|
|
27
|
+
* Configuration for the hybrid searcher.
|
|
28
|
+
*
|
|
29
|
+
* @interface HybridSearcherConfig
|
|
30
|
+
*/
|
|
31
|
+
export interface HybridSearcherConfig {
|
|
32
|
+
/** Weight for dense (vector) results. Range: 0-1. Default: 0.7. */
|
|
33
|
+
denseWeight?: number;
|
|
34
|
+
/** Weight for sparse (BM25) results. Range: 0-1. Default: 0.3. */
|
|
35
|
+
sparseWeight?: number;
|
|
36
|
+
/** RRF constant k. Higher values flatten score differences. Default: 60. */
|
|
37
|
+
rrfK?: number;
|
|
38
|
+
/** Fusion method for merging ranked lists. Default: 'rrf'. */
|
|
39
|
+
fusionMethod?: 'rrf' | 'weighted-sum' | 'interleave';
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* A hybrid search result combining dense and sparse signals.
|
|
43
|
+
*
|
|
44
|
+
* @interface HybridResult
|
|
45
|
+
* @property {string} id - Document identifier.
|
|
46
|
+
* @property {number} score - Fused relevance score.
|
|
47
|
+
* @property {number} [denseScore] - Score from vector search (if present).
|
|
48
|
+
* @property {number} [sparseScore] - Score from BM25 search (if present).
|
|
49
|
+
* @property {number} [denseRank] - Rank in vector search results (1-based).
|
|
50
|
+
* @property {number} [sparseRank] - Rank in BM25 search results (1-based).
|
|
51
|
+
* @property {string} [textContent] - Document text content if available.
|
|
52
|
+
* @property {Record<string, unknown>} [metadata] - Document metadata.
|
|
53
|
+
*/
|
|
54
|
+
export interface HybridResult {
|
|
55
|
+
/** Document identifier. */
|
|
56
|
+
id: string;
|
|
57
|
+
/** Fused relevance score (higher = more relevant). */
|
|
58
|
+
score: number;
|
|
59
|
+
/** Score from the dense (vector) search, if this document appeared in dense results. */
|
|
60
|
+
denseScore?: number;
|
|
61
|
+
/** Score from the sparse (BM25) search, if this document appeared in sparse results. */
|
|
62
|
+
sparseScore?: number;
|
|
63
|
+
/** 1-based rank in the dense search results. */
|
|
64
|
+
denseRank?: number;
|
|
65
|
+
/** 1-based rank in the sparse search results. */
|
|
66
|
+
sparseRank?: number;
|
|
67
|
+
/** Document text content if available from the vector store. */
|
|
68
|
+
textContent?: string;
|
|
69
|
+
/** Document metadata merged from both sources. */
|
|
70
|
+
metadata?: Record<string, unknown>;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Hybrid dense+sparse searcher combining vector embeddings with BM25.
|
|
74
|
+
*
|
|
75
|
+
* Uses Reciprocal Rank Fusion (RRF) to merge results from both retrieval
|
|
76
|
+
* systems, capturing both semantic similarity and exact keyword matches.
|
|
77
|
+
*
|
|
78
|
+
* @example Basic usage
|
|
79
|
+
* ```typescript
|
|
80
|
+
* const bm25 = new BM25Index();
|
|
81
|
+
* bm25.addDocuments(documents);
|
|
82
|
+
*
|
|
83
|
+
* const hybrid = new HybridSearcher(vectorStore, embeddingManager, bm25, {
|
|
84
|
+
* denseWeight: 0.7,
|
|
85
|
+
* sparseWeight: 0.3,
|
|
86
|
+
* fusionMethod: 'rrf',
|
|
87
|
+
* });
|
|
88
|
+
*
|
|
89
|
+
* const results = await hybrid.search(
|
|
90
|
+
* 'error TS2304 type declarations',
|
|
91
|
+
* 'my-collection',
|
|
92
|
+
* 10,
|
|
93
|
+
* );
|
|
94
|
+
* ```
|
|
95
|
+
*
|
|
96
|
+
* @example Weighted sum fusion (when you have calibrated scores)
|
|
97
|
+
* ```typescript
|
|
98
|
+
* const hybrid = new HybridSearcher(vectorStore, embeddingManager, bm25, {
|
|
99
|
+
* fusionMethod: 'weighted-sum',
|
|
100
|
+
* denseWeight: 0.6,
|
|
101
|
+
* sparseWeight: 0.4,
|
|
102
|
+
* });
|
|
103
|
+
* ```
|
|
104
|
+
*/
|
|
105
|
+
export declare class HybridSearcher {
|
|
106
|
+
/** Dense vector store for semantic retrieval. */
|
|
107
|
+
private vectorStore;
|
|
108
|
+
/** Embedding manager for generating query embeddings. */
|
|
109
|
+
private embeddingManager;
|
|
110
|
+
/** Sparse BM25 index for keyword retrieval. */
|
|
111
|
+
private bm25Index;
|
|
112
|
+
/** Resolved configuration with defaults applied. */
|
|
113
|
+
private config;
|
|
114
|
+
/**
|
|
115
|
+
* Creates a new HybridSearcher.
|
|
116
|
+
*
|
|
117
|
+
* @param {IVectorStore} vectorStore - Dense vector store for semantic search.
|
|
118
|
+
* @param {IEmbeddingManager} embeddingManager - Manager for generating query embeddings.
|
|
119
|
+
* @param {BM25Index} bm25Index - BM25 sparse keyword index.
|
|
120
|
+
* @param {HybridSearcherConfig} [config] - Optional configuration overrides.
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* ```typescript
|
|
124
|
+
* const searcher = new HybridSearcher(store, embeddings, bm25, {
|
|
125
|
+
* denseWeight: 0.7,
|
|
126
|
+
* sparseWeight: 0.3,
|
|
127
|
+
* });
|
|
128
|
+
* ```
|
|
129
|
+
*/
|
|
130
|
+
constructor(vectorStore: IVectorStore, embeddingManager: IEmbeddingManager, bm25Index: BM25Index, config?: HybridSearcherConfig);
|
|
131
|
+
/**
|
|
132
|
+
* Searches both dense and sparse indexes, then fuses results.
|
|
133
|
+
*
|
|
134
|
+
* Pipeline:
|
|
135
|
+
* 1. Generate query embedding via the embedding manager
|
|
136
|
+
* 2. Query the dense vector store for semantically similar documents
|
|
137
|
+
* 3. Query the BM25 sparse index for keyword-matching documents
|
|
138
|
+
* 4. Fuse both result sets using the configured fusion method (RRF by default)
|
|
139
|
+
* 5. Return the top K results sorted by fused score
|
|
140
|
+
*
|
|
141
|
+
* @param {string} query - The search query text.
|
|
142
|
+
* @param {string} collectionName - Vector store collection to search.
|
|
143
|
+
* @param {number} [topK=10] - Maximum number of results to return.
|
|
144
|
+
* @param {Partial<QueryOptions>} [queryOptions] - Additional options for the vector store query.
|
|
145
|
+
* @returns {Promise<HybridResult[]>} Fused results sorted by relevance.
|
|
146
|
+
* @throws {Error} If embedding generation fails.
|
|
147
|
+
*
|
|
148
|
+
* @example
|
|
149
|
+
* ```typescript
|
|
150
|
+
* const results = await hybrid.search('error TS2304', 'knowledge-base', 5);
|
|
151
|
+
* for (const r of results) {
|
|
152
|
+
* console.log(`${r.id}: fused=${r.score.toFixed(4)} dense=${r.denseRank} sparse=${r.sparseRank}`);
|
|
153
|
+
* }
|
|
154
|
+
* ```
|
|
155
|
+
*/
|
|
156
|
+
search(query: string, collectionName: string, topK?: number, queryOptions?: Partial<QueryOptions>): Promise<HybridResult[]>;
|
|
157
|
+
/**
|
|
158
|
+
* Fuses results using Reciprocal Rank Fusion (RRF).
|
|
159
|
+
*
|
|
160
|
+
* Formula: `score(d) = sum_i weight_i / (k + rank_i(d))`
|
|
161
|
+
*
|
|
162
|
+
* Documents appearing in both result sets get contributions from both,
|
|
163
|
+
* naturally boosting documents ranked highly by both systems.
|
|
164
|
+
*
|
|
165
|
+
* @param {RetrievedVectorDocument[]} denseResults - Dense vector search results.
|
|
166
|
+
* @param {BM25Result[]} sparseResults - BM25 sparse search results.
|
|
167
|
+
* @param {number} topK - Maximum results to return.
|
|
168
|
+
* @returns {HybridResult[]} Fused results sorted by RRF score.
|
|
169
|
+
*/
|
|
170
|
+
private fuseRRF;
|
|
171
|
+
/**
|
|
172
|
+
* Fuses results using weighted score summation with min-max normalization.
|
|
173
|
+
*
|
|
174
|
+
* Both score distributions are normalized to [0, 1] before weighting
|
|
175
|
+
* to account for the different scoring scales of dense (cosine similarity)
|
|
176
|
+
* and sparse (BM25 score) systems.
|
|
177
|
+
*
|
|
178
|
+
* @param {RetrievedVectorDocument[]} denseResults - Dense vector search results.
|
|
179
|
+
* @param {BM25Result[]} sparseResults - BM25 sparse search results.
|
|
180
|
+
* @param {number} topK - Maximum results to return.
|
|
181
|
+
* @returns {HybridResult[]} Fused results sorted by weighted score.
|
|
182
|
+
*/
|
|
183
|
+
private fuseWeightedSum;
|
|
184
|
+
/**
|
|
185
|
+
* Fuses results using round-robin interleaving with deduplication.
|
|
186
|
+
*
|
|
187
|
+
* Alternates between picking the next-best dense result and the
|
|
188
|
+
* next-best sparse result, skipping documents already included.
|
|
189
|
+
* This provides a simple diversity-preserving fusion.
|
|
190
|
+
*
|
|
191
|
+
* @param {RetrievedVectorDocument[]} denseResults - Dense vector search results.
|
|
192
|
+
* @param {BM25Result[]} sparseResults - BM25 sparse search results.
|
|
193
|
+
* @param {number} topK - Maximum results to return.
|
|
194
|
+
* @returns {HybridResult[]} Interleaved results.
|
|
195
|
+
*/
|
|
196
|
+
private fuseInterleave;
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=HybridSearcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HybridSearcher.d.ts","sourceRoot":"","sources":["../../../src/rag/search/HybridSearcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAwC,MAAM,oBAAoB,CAAC;AAC3G,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAmB,MAAM,gBAAgB,CAAC;AAI5D;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,mEAAmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,YAAY,CAAC,EAAE,KAAK,GAAG,cAAc,GAAG,YAAY,CAAC;CACtD;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,YAAY;IAC3B,2BAA2B;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,wFAAwF;IACxF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wFAAwF;IACxF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,qBAAa,cAAc;IACzB,iDAAiD;IACjD,OAAO,CAAC,WAAW,CAAe;IAElC,yDAAyD;IACzD,OAAO,CAAC,gBAAgB,CAAoB;IAE5C,+CAA+C;IAC/C,OAAO,CAAC,SAAS,CAAY;IAE7B,oDAAoD;IACpD,OAAO,CAAC,MAAM,CAAiC;IAE/C;;;;;;;;;;;;;;;OAeG;gBAED,WAAW,EAAE,YAAY,EACzB,gBAAgB,EAAE,iBAAiB,EACnC,SAAS,EAAE,SAAS,EACpB,MAAM,CAAC,EAAE,oBAAoB;IAa/B;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACG,MAAM,CACV,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,MAAM,EACtB,IAAI,GAAE,MAAW,EACjB,YAAY,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GACnC,OAAO,CAAC,YAAY,EAAE,CAAC;IA0C1B;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,OAAO;IAyDf;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,eAAe;IAoDvB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,cAAc;CA+CvB"}
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Hybrid dense+sparse searcher combining vector embeddings with BM25.
|
|
3
|
+
*
|
|
4
|
+
* Uses Reciprocal Rank Fusion (RRF) to merge results from both systems:
|
|
5
|
+
* - Dense: semantic understanding, handles paraphrasing and conceptual similarity
|
|
6
|
+
* - Sparse: keyword matching, handles exact terms, error codes, function names
|
|
7
|
+
*
|
|
8
|
+
* RRF formula (Cormack et al. 2009):
|
|
9
|
+
* ```
|
|
10
|
+
* score(d) = sum_{i} weight_i / (k + rank_i(d))
|
|
11
|
+
* ```
|
|
12
|
+
* where `k=60` (standard constant) and `rank_i(d)` is the rank of document `d`
|
|
13
|
+
* in result set `i`. Documents not present in a result set are assigned rank infinity.
|
|
14
|
+
*
|
|
15
|
+
* Alternative fusion methods:
|
|
16
|
+
* - **weighted-sum**: `score(d) = w_dense * norm_score_dense(d) + w_sparse * norm_score_sparse(d)`
|
|
17
|
+
* - **interleave**: Round-robin from each result set, deduplicating
|
|
18
|
+
*
|
|
19
|
+
* @module agentos/rag/search/HybridSearcher
|
|
20
|
+
* @see BM25Index for the sparse keyword index
|
|
21
|
+
* @see IVectorStore for the dense vector store interface
|
|
22
|
+
*/
|
|
23
|
+
// ── Hybrid Searcher ───────────────────────────────────────────────────────
|
|
24
|
+
/**
|
|
25
|
+
* Hybrid dense+sparse searcher combining vector embeddings with BM25.
|
|
26
|
+
*
|
|
27
|
+
* Uses Reciprocal Rank Fusion (RRF) to merge results from both retrieval
|
|
28
|
+
* systems, capturing both semantic similarity and exact keyword matches.
|
|
29
|
+
*
|
|
30
|
+
* @example Basic usage
|
|
31
|
+
* ```typescript
|
|
32
|
+
* const bm25 = new BM25Index();
|
|
33
|
+
* bm25.addDocuments(documents);
|
|
34
|
+
*
|
|
35
|
+
* const hybrid = new HybridSearcher(vectorStore, embeddingManager, bm25, {
|
|
36
|
+
* denseWeight: 0.7,
|
|
37
|
+
* sparseWeight: 0.3,
|
|
38
|
+
* fusionMethod: 'rrf',
|
|
39
|
+
* });
|
|
40
|
+
*
|
|
41
|
+
* const results = await hybrid.search(
|
|
42
|
+
* 'error TS2304 type declarations',
|
|
43
|
+
* 'my-collection',
|
|
44
|
+
* 10,
|
|
45
|
+
* );
|
|
46
|
+
* ```
|
|
47
|
+
*
|
|
48
|
+
* @example Weighted sum fusion (when you have calibrated scores)
|
|
49
|
+
* ```typescript
|
|
50
|
+
* const hybrid = new HybridSearcher(vectorStore, embeddingManager, bm25, {
|
|
51
|
+
* fusionMethod: 'weighted-sum',
|
|
52
|
+
* denseWeight: 0.6,
|
|
53
|
+
* sparseWeight: 0.4,
|
|
54
|
+
* });
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export class HybridSearcher {
|
|
58
|
+
/**
|
|
59
|
+
* Creates a new HybridSearcher.
|
|
60
|
+
*
|
|
61
|
+
* @param {IVectorStore} vectorStore - Dense vector store for semantic search.
|
|
62
|
+
* @param {IEmbeddingManager} embeddingManager - Manager for generating query embeddings.
|
|
63
|
+
* @param {BM25Index} bm25Index - BM25 sparse keyword index.
|
|
64
|
+
* @param {HybridSearcherConfig} [config] - Optional configuration overrides.
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```typescript
|
|
68
|
+
* const searcher = new HybridSearcher(store, embeddings, bm25, {
|
|
69
|
+
* denseWeight: 0.7,
|
|
70
|
+
* sparseWeight: 0.3,
|
|
71
|
+
* });
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
constructor(vectorStore, embeddingManager, bm25Index, config) {
|
|
75
|
+
this.vectorStore = vectorStore;
|
|
76
|
+
this.embeddingManager = embeddingManager;
|
|
77
|
+
this.bm25Index = bm25Index;
|
|
78
|
+
this.config = {
|
|
79
|
+
denseWeight: config?.denseWeight ?? 0.7,
|
|
80
|
+
sparseWeight: config?.sparseWeight ?? 0.3,
|
|
81
|
+
rrfK: config?.rrfK ?? 60,
|
|
82
|
+
fusionMethod: config?.fusionMethod ?? 'rrf',
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Searches both dense and sparse indexes, then fuses results.
|
|
87
|
+
*
|
|
88
|
+
* Pipeline:
|
|
89
|
+
* 1. Generate query embedding via the embedding manager
|
|
90
|
+
* 2. Query the dense vector store for semantically similar documents
|
|
91
|
+
* 3. Query the BM25 sparse index for keyword-matching documents
|
|
92
|
+
* 4. Fuse both result sets using the configured fusion method (RRF by default)
|
|
93
|
+
* 5. Return the top K results sorted by fused score
|
|
94
|
+
*
|
|
95
|
+
* @param {string} query - The search query text.
|
|
96
|
+
* @param {string} collectionName - Vector store collection to search.
|
|
97
|
+
* @param {number} [topK=10] - Maximum number of results to return.
|
|
98
|
+
* @param {Partial<QueryOptions>} [queryOptions] - Additional options for the vector store query.
|
|
99
|
+
* @returns {Promise<HybridResult[]>} Fused results sorted by relevance.
|
|
100
|
+
* @throws {Error} If embedding generation fails.
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* ```typescript
|
|
104
|
+
* const results = await hybrid.search('error TS2304', 'knowledge-base', 5);
|
|
105
|
+
* for (const r of results) {
|
|
106
|
+
* console.log(`${r.id}: fused=${r.score.toFixed(4)} dense=${r.denseRank} sparse=${r.sparseRank}`);
|
|
107
|
+
* }
|
|
108
|
+
* ```
|
|
109
|
+
*/
|
|
110
|
+
async search(query, collectionName, topK = 10, queryOptions) {
|
|
111
|
+
// Fetch more candidates from each system to improve fusion quality
|
|
112
|
+
const candidateMultiplier = 3;
|
|
113
|
+
const candidateK = topK * candidateMultiplier;
|
|
114
|
+
// 1. Generate query embedding
|
|
115
|
+
const embeddingResponse = await this.embeddingManager.generateEmbeddings({
|
|
116
|
+
texts: [query],
|
|
117
|
+
});
|
|
118
|
+
if (!embeddingResponse.embeddings?.[0] ||
|
|
119
|
+
embeddingResponse.embeddings[0].length === 0) {
|
|
120
|
+
throw new Error('HybridSearcher: Failed to generate query embedding.');
|
|
121
|
+
}
|
|
122
|
+
const queryEmbedding = embeddingResponse.embeddings[0];
|
|
123
|
+
// 2. Execute both searches in parallel
|
|
124
|
+
const [denseResult, sparseResults] = await Promise.all([
|
|
125
|
+
this.vectorStore.query(collectionName, queryEmbedding, {
|
|
126
|
+
topK: candidateK,
|
|
127
|
+
includeTextContent: true,
|
|
128
|
+
includeMetadata: true,
|
|
129
|
+
...queryOptions,
|
|
130
|
+
}),
|
|
131
|
+
Promise.resolve(this.bm25Index.search(query, candidateK)),
|
|
132
|
+
]);
|
|
133
|
+
// 3. Fuse results
|
|
134
|
+
switch (this.config.fusionMethod) {
|
|
135
|
+
case 'weighted-sum':
|
|
136
|
+
return this.fuseWeightedSum(denseResult.documents, sparseResults, topK);
|
|
137
|
+
case 'interleave':
|
|
138
|
+
return this.fuseInterleave(denseResult.documents, sparseResults, topK);
|
|
139
|
+
case 'rrf':
|
|
140
|
+
default:
|
|
141
|
+
return this.fuseRRF(denseResult.documents, sparseResults, topK);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Fuses results using Reciprocal Rank Fusion (RRF).
|
|
146
|
+
*
|
|
147
|
+
* Formula: `score(d) = sum_i weight_i / (k + rank_i(d))`
|
|
148
|
+
*
|
|
149
|
+
* Documents appearing in both result sets get contributions from both,
|
|
150
|
+
* naturally boosting documents ranked highly by both systems.
|
|
151
|
+
*
|
|
152
|
+
* @param {RetrievedVectorDocument[]} denseResults - Dense vector search results.
|
|
153
|
+
* @param {BM25Result[]} sparseResults - BM25 sparse search results.
|
|
154
|
+
* @param {number} topK - Maximum results to return.
|
|
155
|
+
* @returns {HybridResult[]} Fused results sorted by RRF score.
|
|
156
|
+
*/
|
|
157
|
+
fuseRRF(denseResults, sparseResults, topK) {
|
|
158
|
+
const resultMap = new Map();
|
|
159
|
+
const k = this.config.rrfK;
|
|
160
|
+
// Score from dense results
|
|
161
|
+
for (let rank = 0; rank < denseResults.length; rank++) {
|
|
162
|
+
const doc = denseResults[rank];
|
|
163
|
+
const rrfScore = this.config.denseWeight / (k + rank + 1); // rank is 1-based in formula
|
|
164
|
+
const existing = resultMap.get(doc.id);
|
|
165
|
+
if (existing) {
|
|
166
|
+
existing.score += rrfScore;
|
|
167
|
+
existing.denseScore = doc.similarityScore;
|
|
168
|
+
existing.denseRank = rank + 1;
|
|
169
|
+
existing.textContent = existing.textContent ?? doc.textContent;
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
resultMap.set(doc.id, {
|
|
173
|
+
id: doc.id,
|
|
174
|
+
score: rrfScore,
|
|
175
|
+
denseScore: doc.similarityScore,
|
|
176
|
+
denseRank: rank + 1,
|
|
177
|
+
textContent: doc.textContent,
|
|
178
|
+
metadata: doc.metadata,
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// Score from sparse results
|
|
183
|
+
for (let rank = 0; rank < sparseResults.length; rank++) {
|
|
184
|
+
const result = sparseResults[rank];
|
|
185
|
+
const rrfScore = this.config.sparseWeight / (k + rank + 1);
|
|
186
|
+
const existing = resultMap.get(result.id);
|
|
187
|
+
if (existing) {
|
|
188
|
+
existing.score += rrfScore;
|
|
189
|
+
existing.sparseScore = result.score;
|
|
190
|
+
existing.sparseRank = rank + 1;
|
|
191
|
+
existing.metadata = existing.metadata ?? result.metadata;
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
resultMap.set(result.id, {
|
|
195
|
+
id: result.id,
|
|
196
|
+
score: rrfScore,
|
|
197
|
+
sparseScore: result.score,
|
|
198
|
+
sparseRank: rank + 1,
|
|
199
|
+
metadata: result.metadata,
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
// Sort by fused score descending and return top K
|
|
204
|
+
return Array.from(resultMap.values())
|
|
205
|
+
.sort((a, b) => b.score - a.score)
|
|
206
|
+
.slice(0, topK);
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Fuses results using weighted score summation with min-max normalization.
|
|
210
|
+
*
|
|
211
|
+
* Both score distributions are normalized to [0, 1] before weighting
|
|
212
|
+
* to account for the different scoring scales of dense (cosine similarity)
|
|
213
|
+
* and sparse (BM25 score) systems.
|
|
214
|
+
*
|
|
215
|
+
* @param {RetrievedVectorDocument[]} denseResults - Dense vector search results.
|
|
216
|
+
* @param {BM25Result[]} sparseResults - BM25 sparse search results.
|
|
217
|
+
* @param {number} topK - Maximum results to return.
|
|
218
|
+
* @returns {HybridResult[]} Fused results sorted by weighted score.
|
|
219
|
+
*/
|
|
220
|
+
fuseWeightedSum(denseResults, sparseResults, topK) {
|
|
221
|
+
// Normalize dense scores to [0, 1]
|
|
222
|
+
const denseScores = denseResults.map((d) => d.similarityScore);
|
|
223
|
+
const denseMin = Math.min(...denseScores, 0);
|
|
224
|
+
const denseMax = Math.max(...denseScores, 1);
|
|
225
|
+
const denseRange = denseMax - denseMin || 1;
|
|
226
|
+
// Normalize sparse scores to [0, 1]
|
|
227
|
+
const sparseScores = sparseResults.map((r) => r.score);
|
|
228
|
+
const sparseMin = Math.min(...sparseScores, 0);
|
|
229
|
+
const sparseMax = Math.max(...sparseScores, 1);
|
|
230
|
+
const sparseRange = sparseMax - sparseMin || 1;
|
|
231
|
+
const resultMap = new Map();
|
|
232
|
+
for (const doc of denseResults) {
|
|
233
|
+
const normalizedScore = (doc.similarityScore - denseMin) / denseRange;
|
|
234
|
+
resultMap.set(doc.id, {
|
|
235
|
+
id: doc.id,
|
|
236
|
+
score: this.config.denseWeight * normalizedScore,
|
|
237
|
+
denseScore: doc.similarityScore,
|
|
238
|
+
textContent: doc.textContent,
|
|
239
|
+
metadata: doc.metadata,
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
for (const result of sparseResults) {
|
|
243
|
+
const normalizedScore = (result.score - sparseMin) / sparseRange;
|
|
244
|
+
const existing = resultMap.get(result.id);
|
|
245
|
+
if (existing) {
|
|
246
|
+
existing.score += this.config.sparseWeight * normalizedScore;
|
|
247
|
+
existing.sparseScore = result.score;
|
|
248
|
+
existing.metadata = existing.metadata ?? result.metadata;
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
resultMap.set(result.id, {
|
|
252
|
+
id: result.id,
|
|
253
|
+
score: this.config.sparseWeight * normalizedScore,
|
|
254
|
+
sparseScore: result.score,
|
|
255
|
+
metadata: result.metadata,
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return Array.from(resultMap.values())
|
|
260
|
+
.sort((a, b) => b.score - a.score)
|
|
261
|
+
.slice(0, topK);
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Fuses results using round-robin interleaving with deduplication.
|
|
265
|
+
*
|
|
266
|
+
* Alternates between picking the next-best dense result and the
|
|
267
|
+
* next-best sparse result, skipping documents already included.
|
|
268
|
+
* This provides a simple diversity-preserving fusion.
|
|
269
|
+
*
|
|
270
|
+
* @param {RetrievedVectorDocument[]} denseResults - Dense vector search results.
|
|
271
|
+
* @param {BM25Result[]} sparseResults - BM25 sparse search results.
|
|
272
|
+
* @param {number} topK - Maximum results to return.
|
|
273
|
+
* @returns {HybridResult[]} Interleaved results.
|
|
274
|
+
*/
|
|
275
|
+
fuseInterleave(denseResults, sparseResults, topK) {
|
|
276
|
+
const results = [];
|
|
277
|
+
const seen = new Set();
|
|
278
|
+
let di = 0;
|
|
279
|
+
let si = 0;
|
|
280
|
+
while (results.length < topK && (di < denseResults.length || si < sparseResults.length)) {
|
|
281
|
+
// Pick from dense
|
|
282
|
+
while (di < denseResults.length && results.length < topK) {
|
|
283
|
+
const doc = denseResults[di++];
|
|
284
|
+
if (!seen.has(doc.id)) {
|
|
285
|
+
seen.add(doc.id);
|
|
286
|
+
results.push({
|
|
287
|
+
id: doc.id,
|
|
288
|
+
score: doc.similarityScore,
|
|
289
|
+
denseScore: doc.similarityScore,
|
|
290
|
+
denseRank: di,
|
|
291
|
+
textContent: doc.textContent,
|
|
292
|
+
metadata: doc.metadata,
|
|
293
|
+
});
|
|
294
|
+
break;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
// Pick from sparse
|
|
298
|
+
while (si < sparseResults.length && results.length < topK) {
|
|
299
|
+
const result = sparseResults[si++];
|
|
300
|
+
if (!seen.has(result.id)) {
|
|
301
|
+
seen.add(result.id);
|
|
302
|
+
results.push({
|
|
303
|
+
id: result.id,
|
|
304
|
+
score: result.score,
|
|
305
|
+
sparseScore: result.score,
|
|
306
|
+
sparseRank: si,
|
|
307
|
+
metadata: result.metadata,
|
|
308
|
+
});
|
|
309
|
+
break;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
return results;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
//# sourceMappingURL=HybridSearcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HybridSearcher.js","sourceRoot":"","sources":["../../../src/rag/search/HybridSearcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Hybrid search module combining dense vector search with BM25 sparse retrieval.
|
|
3
|
+
*
|
|
4
|
+
* Exports:
|
|
5
|
+
* - {@link BM25Index} — Sparse keyword index using BM25 ranking
|
|
6
|
+
* - {@link HybridSearcher} — Fuses dense + sparse results via RRF or other strategies
|
|
7
|
+
*
|
|
8
|
+
* @module agentos/rag/search
|
|
9
|
+
*/
|
|
10
|
+
export { BM25Index, type BM25Config, type BM25Document, type BM25Result, type BM25Stats } from './BM25Index.js';
|
|
11
|
+
export { HybridSearcher, type HybridSearcherConfig, type HybridResult } from './HybridSearcher.js';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/rag/search/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,SAAS,EAAE,KAAK,UAAU,EAAE,KAAK,YAAY,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChH,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Hybrid search module combining dense vector search with BM25 sparse retrieval.
|
|
3
|
+
*
|
|
4
|
+
* Exports:
|
|
5
|
+
* - {@link BM25Index} — Sparse keyword index using BM25 ranking
|
|
6
|
+
* - {@link HybridSearcher} — Fuses dense + sparse results via RRF or other strategies
|
|
7
|
+
*
|
|
8
|
+
* @module agentos/rag/search
|
|
9
|
+
*/
|
|
10
|
+
export { BM25Index } from './BM25Index.js';
|
|
11
|
+
export { HybridSearcher } from './HybridSearcher.js';
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/rag/search/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,SAAS,EAAuE,MAAM,gBAAgB,CAAC;AAChH,OAAO,EAAE,cAAc,EAAgD,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Docker environment detection and container management.
|
|
3
|
+
* @module rag/setup/DockerDetector
|
|
4
|
+
*
|
|
5
|
+
* Utility class for detecting whether Docker is available, checking
|
|
6
|
+
* container state, starting/stopping containers, and pulling images.
|
|
7
|
+
* Used by QdrantSetup and PostgresSetup for auto-provisioning.
|
|
8
|
+
*/
|
|
9
|
+
export declare class DockerDetector {
|
|
10
|
+
/**
|
|
11
|
+
* Check if Docker is installed and the daemon is running.
|
|
12
|
+
* Runs `docker info` with a 5-second timeout.
|
|
13
|
+
*
|
|
14
|
+
* @returns True if Docker is available and responsive.
|
|
15
|
+
*/
|
|
16
|
+
static isDockerAvailable(): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Check the state of a named Docker container.
|
|
19
|
+
*
|
|
20
|
+
* @param name - Container name to inspect.
|
|
21
|
+
* @returns 'running' if active, 'stopped' if exists but not running,
|
|
22
|
+
* 'not_found' if the container doesn't exist.
|
|
23
|
+
*/
|
|
24
|
+
static getContainerState(name: string): 'running' | 'stopped' | 'not_found';
|
|
25
|
+
/**
|
|
26
|
+
* Start a stopped container by name.
|
|
27
|
+
*
|
|
28
|
+
* @param name - Container name to start.
|
|
29
|
+
* @throws If the container cannot be started.
|
|
30
|
+
*/
|
|
31
|
+
static startContainer(name: string): void;
|
|
32
|
+
/**
|
|
33
|
+
* Pull a Docker image and run a new container.
|
|
34
|
+
*
|
|
35
|
+
* @param opts.name - Container name.
|
|
36
|
+
* @param opts.image - Docker image (e.g. 'qdrant/qdrant:latest').
|
|
37
|
+
* @param opts.ports - Port mappings (e.g. ['6333:6333', '6334:6334']).
|
|
38
|
+
* @param opts.volumes - Volume mounts (e.g. ['data-vol:/data']).
|
|
39
|
+
* @param opts.env - Environment variables (e.g. { POSTGRES_PASSWORD: 'pw' }).
|
|
40
|
+
*/
|
|
41
|
+
static pullAndRun(opts: {
|
|
42
|
+
name: string;
|
|
43
|
+
image: string;
|
|
44
|
+
ports: string[];
|
|
45
|
+
volumes: string[];
|
|
46
|
+
env?: Record<string, string>;
|
|
47
|
+
}): void;
|
|
48
|
+
/**
|
|
49
|
+
* Poll a health check URL until it returns 200 or timeout is reached.
|
|
50
|
+
* Checks every 500ms.
|
|
51
|
+
*
|
|
52
|
+
* @param url - Health check endpoint (e.g. 'http://localhost:6333/healthz').
|
|
53
|
+
* @param timeoutMs - Maximum time to wait in milliseconds. @default 15000
|
|
54
|
+
* @returns True if the endpoint became healthy within the timeout.
|
|
55
|
+
*/
|
|
56
|
+
static waitForHealthy(url: string, timeoutMs?: number): Promise<boolean>;
|
|
57
|
+
/**
|
|
58
|
+
* Get the mapped host port for a container's internal port.
|
|
59
|
+
* Useful when the host port was dynamically assigned.
|
|
60
|
+
*
|
|
61
|
+
* @param name - Container name.
|
|
62
|
+
* @param internalPort - The container-internal port to look up.
|
|
63
|
+
* @returns The host port number, or null if not found.
|
|
64
|
+
*/
|
|
65
|
+
static getHostPort(name: string, internalPort: number): number | null;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=DockerDetector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DockerDetector.d.ts","sourceRoot":"","sources":["../../../src/rag/setup/DockerDetector.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,qBAAa,cAAc;IACzB;;;;;OAKG;IACH,MAAM,CAAC,iBAAiB,IAAI,OAAO;IASnC;;;;;;OAMG;IACH,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW;IAc3E;;;;;OAKG;IACH,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIzC;;;;;;;;OAQG;IACH,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE;QACtB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC9B,GAAG,IAAI;IAuBR;;;;;;;OAOG;WACU,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,SAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAc7E;;;;;;;OAOG;IACH,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CActE"}
|