@framers/agentos 0.1.112 → 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/debate.d.ts +12 -1
- package/dist/api/strategies/debate.d.ts.map +1 -1
- package/dist/api/strategies/debate.js +41 -5
- package/dist/api/strategies/debate.js.map +1 -1
- 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 +15 -1
- package/dist/api/strategies/hierarchical.d.ts.map +1 -1
- package/dist/api/strategies/hierarchical.js +53 -8
- package/dist/api/strategies/hierarchical.js.map +1 -1
- package/dist/api/strategies/index.d.ts +29 -4
- package/dist/api/strategies/index.d.ts.map +1 -1
- package/dist/api/strategies/index.js +28 -4
- package/dist/api/strategies/index.js.map +1 -1
- package/dist/api/strategies/parallel.d.ts +15 -4
- package/dist/api/strategies/parallel.d.ts.map +1 -1
- package/dist/api/strategies/parallel.js +53 -16
- package/dist/api/strategies/parallel.js.map +1 -1
- package/dist/api/strategies/review-loop.d.ts +15 -1
- package/dist/api/strategies/review-loop.d.ts.map +1 -1
- package/dist/api/strategies/review-loop.js +36 -10
- package/dist/api/strategies/review-loop.js.map +1 -1
- package/dist/api/strategies/sequential.d.ts +11 -1
- package/dist/api/strategies/sequential.d.ts.map +1 -1
- package/dist/api/strategies/sequential.js +39 -8
- package/dist/api/strategies/sequential.js.map +1 -1
- package/dist/api/strategies/shared.d.ts +72 -8
- package/dist/api/strategies/shared.d.ts.map +1 -1
- package/dist/api/strategies/shared.js +92 -12
- 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 +81 -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/facade/Memory.d.ts.map +1 -1
- package/dist/memory/facade/Memory.js +8 -0
- package/dist/memory/facade/Memory.js.map +1 -1
- package/dist/memory/facade/types.d.ts +10 -0
- package/dist/memory/facade/types.d.ts.map +1 -1
- package/dist/memory/index.d.ts +15 -7
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/index.js +7 -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/observation/MemoryObserver.d.ts +63 -1
- package/dist/memory/observation/MemoryObserver.d.ts.map +1 -1
- package/dist/memory/observation/MemoryObserver.js +115 -4
- package/dist/memory/observation/MemoryObserver.js.map +1 -1
- package/dist/memory/observation/ObservationCompressor.d.ts +88 -0
- package/dist/memory/observation/ObservationCompressor.d.ts.map +1 -0
- package/dist/memory/observation/ObservationCompressor.js +207 -0
- package/dist/memory/observation/ObservationCompressor.js.map +1 -0
- package/dist/memory/observation/ObservationReflector.d.ts +82 -0
- package/dist/memory/observation/ObservationReflector.d.ts.map +1 -0
- package/dist/memory/observation/ObservationReflector.js +212 -0
- package/dist/memory/observation/ObservationReflector.js.map +1 -0
- package/dist/memory/observation/temporal.d.ts +54 -0
- package/dist/memory/observation/temporal.d.ts.map +1 -0
- package/dist/memory/observation/temporal.js +115 -0
- package/dist/memory/observation/temporal.js.map +1 -0
- 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 +82 -25
- package/dist/orchestration/builders/VoiceNodeBuilder.d.ts.map +1 -1
- package/dist/orchestration/builders/VoiceNodeBuilder.js +86 -26
- 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 +67 -5
- 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 +103 -26
- package/dist/orchestration/runtime/VoiceNodeExecutor.d.ts.map +1 -1
- package/dist/orchestration/runtime/VoiceNodeExecutor.js +155 -43
- package/dist/orchestration/runtime/VoiceNodeExecutor.js.map +1 -1
- package/dist/orchestration/runtime/VoiceTransportAdapter.d.ts +95 -33
- package/dist/orchestration/runtime/VoiceTransportAdapter.d.ts.map +1 -1
- package/dist/orchestration/runtime/VoiceTransportAdapter.js +83 -29
- package/dist/orchestration/runtime/VoiceTransportAdapter.js.map +1 -1
- package/dist/orchestration/runtime/VoiceTurnCollector.d.ts +73 -20
- package/dist/orchestration/runtime/VoiceTurnCollector.d.ts.map +1 -1
- package/dist/orchestration/runtime/VoiceTurnCollector.js +84 -23
- package/dist/orchestration/runtime/VoiceTurnCollector.js.map +1 -1
- 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,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview QueryDispatcher — routes classified queries to the
|
|
3
|
+
* tier-appropriate retrieval pipeline with graceful fallbacks.
|
|
4
|
+
* @module @framers/agentos/query-router/QueryDispatcher
|
|
5
|
+
*
|
|
6
|
+
* The dispatcher is the second stage of the QueryRouter pipeline, invoked
|
|
7
|
+
* after the QueryClassifier has assigned a complexity tier. It orchestrates
|
|
8
|
+
* vector search, knowledge-graph expansion, reranking, and deep research
|
|
9
|
+
* by delegating to injected callback functions — it has no direct coupling
|
|
10
|
+
* to EmbeddingManager, VectorStoreManager, or any concrete service.
|
|
11
|
+
*
|
|
12
|
+
* **Tier behaviour:**
|
|
13
|
+
* - T0: Trivial — no retrieval, returns empty immediately
|
|
14
|
+
* - T1: Simple lookup — vector search only (topK=5)
|
|
15
|
+
* - T2: Multi-source — vector(15) + graph expand + merge/dedup + rerank(5)
|
|
16
|
+
* - T3: Research — everything in T2 + deep research with synthesis
|
|
17
|
+
*
|
|
18
|
+
* **Fallback guarantees:**
|
|
19
|
+
* Every external call is wrapped in a try/catch so partial failures degrade
|
|
20
|
+
* gracefully rather than crashing the pipeline. A `retrieve:fallback` event
|
|
21
|
+
* is emitted for each degradation so consumers have full observability.
|
|
22
|
+
*/
|
|
23
|
+
import type { QueryTier, RetrievedChunk, RetrievalResult, QueryRouterEventUnion } from './types.js';
|
|
24
|
+
/**
|
|
25
|
+
* Callback dependencies injected into the QueryDispatcher.
|
|
26
|
+
*
|
|
27
|
+
* Each retrieval capability is represented as a plain async function so the
|
|
28
|
+
* dispatcher remains decoupled from concrete implementations and is trivially
|
|
29
|
+
* testable with vi.fn() mocks.
|
|
30
|
+
*/
|
|
31
|
+
export interface QueryDispatcherDeps {
|
|
32
|
+
/**
|
|
33
|
+
* Dense vector similarity search.
|
|
34
|
+
* @param query - The user query string.
|
|
35
|
+
* @param topK - Maximum number of chunks to return.
|
|
36
|
+
*/
|
|
37
|
+
vectorSearch: (query: string, topK: number) => Promise<RetrievedChunk[]>;
|
|
38
|
+
/**
|
|
39
|
+
* Knowledge-graph expansion starting from seed chunks.
|
|
40
|
+
* Returns additional related chunks discovered via graph traversal.
|
|
41
|
+
* @param seedChunks - Initial chunks from vector search.
|
|
42
|
+
*/
|
|
43
|
+
graphExpand: (seedChunks: RetrievedChunk[]) => Promise<RetrievedChunk[]>;
|
|
44
|
+
/**
|
|
45
|
+
* Cross-encoder or LLM-based reranker that scores and prunes chunks.
|
|
46
|
+
* @param query - The user query string for relevance scoring.
|
|
47
|
+
* @param chunks - Candidate chunks to rerank.
|
|
48
|
+
* @param topN - Maximum number of chunks to keep after reranking.
|
|
49
|
+
*/
|
|
50
|
+
rerank: (query: string, chunks: RetrievedChunk[], topN: number) => Promise<RetrievedChunk[]>;
|
|
51
|
+
/**
|
|
52
|
+
* Multi-pass deep research synthesis.
|
|
53
|
+
* @param query - The user query string.
|
|
54
|
+
* @param sources - Source identifiers to consult (e.g., ['web', 'docs']).
|
|
55
|
+
*/
|
|
56
|
+
deepResearch: (query: string, sources: string[]) => Promise<{
|
|
57
|
+
synthesis: string;
|
|
58
|
+
sources: RetrievedChunk[];
|
|
59
|
+
}>;
|
|
60
|
+
/**
|
|
61
|
+
* Event emitter callback for lifecycle observability events.
|
|
62
|
+
* @param event - A typed QueryRouter event.
|
|
63
|
+
*/
|
|
64
|
+
emit: (event: QueryRouterEventUnion) => void;
|
|
65
|
+
/** Whether graph-based retrieval is available / enabled. */
|
|
66
|
+
graphEnabled: boolean;
|
|
67
|
+
/** Whether deep research is available / enabled. */
|
|
68
|
+
deepResearchEnabled: boolean;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Routes classified queries to the tier-appropriate retrieval pipeline.
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```typescript
|
|
75
|
+
* const dispatcher = new QueryDispatcher({
|
|
76
|
+
* vectorSearch: async (q, k) => vectorStore.search(q, k),
|
|
77
|
+
* graphExpand: async (seeds) => graphRag.expand(seeds),
|
|
78
|
+
* rerank: async (q, chunks, n) => reranker.rerank(q, chunks, n),
|
|
79
|
+
* deepResearch: async (q, srcs) => researcher.research(q, srcs),
|
|
80
|
+
* emit: (e) => eventBus.emit(e),
|
|
81
|
+
* graphEnabled: true,
|
|
82
|
+
* deepResearchEnabled: true,
|
|
83
|
+
* });
|
|
84
|
+
*
|
|
85
|
+
* const result = await dispatcher.dispatch('How does auth work?', 2);
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
export declare class QueryDispatcher {
|
|
89
|
+
/** Injected retrieval dependencies. */
|
|
90
|
+
private readonly deps;
|
|
91
|
+
constructor(deps: QueryDispatcherDeps);
|
|
92
|
+
/**
|
|
93
|
+
* Dispatch a classified query to the tier-appropriate retrieval pipeline.
|
|
94
|
+
*
|
|
95
|
+
* @param query - The user's natural-language query.
|
|
96
|
+
* @param tier - Complexity tier assigned by the QueryClassifier.
|
|
97
|
+
* @param suggestedSources - Optional source hints for deep research (T3).
|
|
98
|
+
* Defaults to `['web']` when not provided.
|
|
99
|
+
* @returns Aggregated retrieval result with chunks, optional synthesis,
|
|
100
|
+
* and timing metadata.
|
|
101
|
+
*/
|
|
102
|
+
dispatch(query: string, tier: QueryTier, suggestedSources?: string[]): Promise<RetrievalResult>;
|
|
103
|
+
/**
|
|
104
|
+
* Tier 1 pipeline: vector search only, topK=5.
|
|
105
|
+
* No graph traversal, no reranking, no research.
|
|
106
|
+
*/
|
|
107
|
+
private dispatchTier1;
|
|
108
|
+
/**
|
|
109
|
+
* Tier 2 pipeline: vector(15) + graph expand + merge/dedup + rerank(5).
|
|
110
|
+
*
|
|
111
|
+
* Fallbacks:
|
|
112
|
+
* - If graph expand fails, continues with vector-only chunks.
|
|
113
|
+
* - If rerank fails, falls back to sorting by score and taking top 5.
|
|
114
|
+
*/
|
|
115
|
+
private dispatchTier2;
|
|
116
|
+
/**
|
|
117
|
+
* Internal Tier 2 pipeline used by both direct T2 routing and the T3
|
|
118
|
+
* pre-research retrieval stage. T3 suppresses the early retrieve:complete
|
|
119
|
+
* event so the final completion event reflects the post-research result.
|
|
120
|
+
*/
|
|
121
|
+
private dispatchTier2Internal;
|
|
122
|
+
/**
|
|
123
|
+
* Tier 3 pipeline: everything in T2 + deep research synthesis.
|
|
124
|
+
*
|
|
125
|
+
* Fallback: if deep research fails, the result is identical to T2
|
|
126
|
+
* (no synthesis, no research chunks), and a fallback event is emitted.
|
|
127
|
+
*/
|
|
128
|
+
private dispatchTier3;
|
|
129
|
+
/**
|
|
130
|
+
* Merge two arrays of chunks and deduplicate by chunk ID.
|
|
131
|
+
* When duplicates exist, the chunk with the higher relevanceScore is kept.
|
|
132
|
+
*
|
|
133
|
+
* @param primary - Primary chunk array (typically vector results).
|
|
134
|
+
* @param secondary - Secondary chunk array (typically graph or research results).
|
|
135
|
+
* @returns Merged, deduplicated array preserving insertion order of first occurrence.
|
|
136
|
+
*/
|
|
137
|
+
private mergeAndDedup;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=QueryDispatcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryDispatcher.d.ts","sourceRoot":"","sources":["../../src/query-router/QueryDispatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EACd,eAAe,EACf,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAMpB;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAEzE;;;;OAIG;IACH,WAAW,EAAE,CAAC,UAAU,EAAE,cAAc,EAAE,KAAK,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAEzE;;;;;OAKG;IACH,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAE7F;;;;OAIG;IACH,YAAY,EAAE,CACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EAAE,KACd,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,cAAc,EAAE,CAAA;KAAE,CAAC,CAAC;IAE/D;;;OAGG;IACH,IAAI,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAE7C,4DAA4D;IAC5D,YAAY,EAAE,OAAO,CAAC;IAEtB,oDAAoD;IACpD,mBAAmB,EAAE,OAAO,CAAC;CAC9B;AAMD;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,eAAe;IAC1B,uCAAuC;IACvC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAsB;gBAE/B,IAAI,EAAE,mBAAmB;IAQrC;;;;;;;;;OASG;IACG,QAAQ,CACZ,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,SAAS,EACf,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAC1B,OAAO,CAAC,eAAe,CAAC;IAgC3B;;;OAGG;YACW,aAAa;IA0B3B;;;;;;OAMG;YACW,aAAa;IAI3B;;;;OAIG;YACW,qBAAqB;IA0FnC;;;;;OAKG;YACW,aAAa;IAiF3B;;;;;;;OAOG;IACH,OAAO,CAAC,aAAa;CAsBtB"}
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview QueryDispatcher — routes classified queries to the
|
|
3
|
+
* tier-appropriate retrieval pipeline with graceful fallbacks.
|
|
4
|
+
* @module @framers/agentos/query-router/QueryDispatcher
|
|
5
|
+
*
|
|
6
|
+
* The dispatcher is the second stage of the QueryRouter pipeline, invoked
|
|
7
|
+
* after the QueryClassifier has assigned a complexity tier. It orchestrates
|
|
8
|
+
* vector search, knowledge-graph expansion, reranking, and deep research
|
|
9
|
+
* by delegating to injected callback functions — it has no direct coupling
|
|
10
|
+
* to EmbeddingManager, VectorStoreManager, or any concrete service.
|
|
11
|
+
*
|
|
12
|
+
* **Tier behaviour:**
|
|
13
|
+
* - T0: Trivial — no retrieval, returns empty immediately
|
|
14
|
+
* - T1: Simple lookup — vector search only (topK=5)
|
|
15
|
+
* - T2: Multi-source — vector(15) + graph expand + merge/dedup + rerank(5)
|
|
16
|
+
* - T3: Research — everything in T2 + deep research with synthesis
|
|
17
|
+
*
|
|
18
|
+
* **Fallback guarantees:**
|
|
19
|
+
* Every external call is wrapped in a try/catch so partial failures degrade
|
|
20
|
+
* gracefully rather than crashing the pipeline. A `retrieve:fallback` event
|
|
21
|
+
* is emitted for each degradation so consumers have full observability.
|
|
22
|
+
*/
|
|
23
|
+
// ============================================================================
|
|
24
|
+
// QUERY DISPATCHER
|
|
25
|
+
// ============================================================================
|
|
26
|
+
/**
|
|
27
|
+
* Routes classified queries to the tier-appropriate retrieval pipeline.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const dispatcher = new QueryDispatcher({
|
|
32
|
+
* vectorSearch: async (q, k) => vectorStore.search(q, k),
|
|
33
|
+
* graphExpand: async (seeds) => graphRag.expand(seeds),
|
|
34
|
+
* rerank: async (q, chunks, n) => reranker.rerank(q, chunks, n),
|
|
35
|
+
* deepResearch: async (q, srcs) => researcher.research(q, srcs),
|
|
36
|
+
* emit: (e) => eventBus.emit(e),
|
|
37
|
+
* graphEnabled: true,
|
|
38
|
+
* deepResearchEnabled: true,
|
|
39
|
+
* });
|
|
40
|
+
*
|
|
41
|
+
* const result = await dispatcher.dispatch('How does auth work?', 2);
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export class QueryDispatcher {
|
|
45
|
+
constructor(deps) {
|
|
46
|
+
this.deps = deps;
|
|
47
|
+
}
|
|
48
|
+
// --------------------------------------------------------------------------
|
|
49
|
+
// PUBLIC API
|
|
50
|
+
// --------------------------------------------------------------------------
|
|
51
|
+
/**
|
|
52
|
+
* Dispatch a classified query to the tier-appropriate retrieval pipeline.
|
|
53
|
+
*
|
|
54
|
+
* @param query - The user's natural-language query.
|
|
55
|
+
* @param tier - Complexity tier assigned by the QueryClassifier.
|
|
56
|
+
* @param suggestedSources - Optional source hints for deep research (T3).
|
|
57
|
+
* Defaults to `['web']` when not provided.
|
|
58
|
+
* @returns Aggregated retrieval result with chunks, optional synthesis,
|
|
59
|
+
* and timing metadata.
|
|
60
|
+
*/
|
|
61
|
+
async dispatch(query, tier, suggestedSources) {
|
|
62
|
+
// T0 — trivial queries need no retrieval at all
|
|
63
|
+
if (tier === 0) {
|
|
64
|
+
return { chunks: [], durationMs: 0 };
|
|
65
|
+
}
|
|
66
|
+
const start = Date.now();
|
|
67
|
+
this.deps.emit({
|
|
68
|
+
type: 'retrieve:start',
|
|
69
|
+
tier,
|
|
70
|
+
timestamp: Date.now(),
|
|
71
|
+
});
|
|
72
|
+
// T1 — simple vector-only retrieval
|
|
73
|
+
if (tier === 1) {
|
|
74
|
+
return this.dispatchTier1(query, start);
|
|
75
|
+
}
|
|
76
|
+
// T2 — hybrid: vector + graph + rerank
|
|
77
|
+
if (tier === 2) {
|
|
78
|
+
return this.dispatchTier2(query, start);
|
|
79
|
+
}
|
|
80
|
+
// T3 — hybrid + deep research
|
|
81
|
+
return this.dispatchTier3(query, suggestedSources ?? ['web'], start);
|
|
82
|
+
}
|
|
83
|
+
// --------------------------------------------------------------------------
|
|
84
|
+
// TIER PIPELINES
|
|
85
|
+
// --------------------------------------------------------------------------
|
|
86
|
+
/**
|
|
87
|
+
* Tier 1 pipeline: vector search only, topK=5.
|
|
88
|
+
* No graph traversal, no reranking, no research.
|
|
89
|
+
*/
|
|
90
|
+
async dispatchTier1(query, start) {
|
|
91
|
+
const vectorStart = Date.now();
|
|
92
|
+
const chunks = await this.deps.vectorSearch(query, 5);
|
|
93
|
+
const vectorDuration = Date.now() - vectorStart;
|
|
94
|
+
this.deps.emit({
|
|
95
|
+
type: 'retrieve:vector',
|
|
96
|
+
chunkCount: chunks.length,
|
|
97
|
+
durationMs: vectorDuration,
|
|
98
|
+
timestamp: Date.now(),
|
|
99
|
+
});
|
|
100
|
+
const result = {
|
|
101
|
+
chunks,
|
|
102
|
+
durationMs: Date.now() - start,
|
|
103
|
+
};
|
|
104
|
+
this.deps.emit({
|
|
105
|
+
type: 'retrieve:complete',
|
|
106
|
+
result,
|
|
107
|
+
timestamp: Date.now(),
|
|
108
|
+
});
|
|
109
|
+
return result;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Tier 2 pipeline: vector(15) + graph expand + merge/dedup + rerank(5).
|
|
113
|
+
*
|
|
114
|
+
* Fallbacks:
|
|
115
|
+
* - If graph expand fails, continues with vector-only chunks.
|
|
116
|
+
* - If rerank fails, falls back to sorting by score and taking top 5.
|
|
117
|
+
*/
|
|
118
|
+
async dispatchTier2(query, start) {
|
|
119
|
+
return this.dispatchTier2Internal(query, start, true);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Internal Tier 2 pipeline used by both direct T2 routing and the T3
|
|
123
|
+
* pre-research retrieval stage. T3 suppresses the early retrieve:complete
|
|
124
|
+
* event so the final completion event reflects the post-research result.
|
|
125
|
+
*/
|
|
126
|
+
async dispatchTier2Internal(query, start, emitComplete) {
|
|
127
|
+
// --- Vector search (topK=15) ---
|
|
128
|
+
const vectorStart = Date.now();
|
|
129
|
+
const vectorChunks = await this.deps.vectorSearch(query, 15);
|
|
130
|
+
const vectorDuration = Date.now() - vectorStart;
|
|
131
|
+
this.deps.emit({
|
|
132
|
+
type: 'retrieve:vector',
|
|
133
|
+
chunkCount: vectorChunks.length,
|
|
134
|
+
durationMs: vectorDuration,
|
|
135
|
+
timestamp: Date.now(),
|
|
136
|
+
});
|
|
137
|
+
// --- Graph expansion (fallback-safe) ---
|
|
138
|
+
let graphChunks = [];
|
|
139
|
+
if (this.deps.graphEnabled) {
|
|
140
|
+
const graphStart = Date.now();
|
|
141
|
+
try {
|
|
142
|
+
graphChunks = await this.deps.graphExpand(vectorChunks);
|
|
143
|
+
const graphDuration = Date.now() - graphStart;
|
|
144
|
+
this.deps.emit({
|
|
145
|
+
type: 'retrieve:graph',
|
|
146
|
+
entityCount: graphChunks.length,
|
|
147
|
+
durationMs: graphDuration,
|
|
148
|
+
timestamp: Date.now(),
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
this.deps.emit({
|
|
153
|
+
type: 'retrieve:fallback',
|
|
154
|
+
strategy: 'graph-skip',
|
|
155
|
+
reason: `Graph expansion failed: ${err.message}`,
|
|
156
|
+
timestamp: Date.now(),
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// --- Merge + deduplicate by id ---
|
|
161
|
+
const merged = this.mergeAndDedup(vectorChunks, graphChunks);
|
|
162
|
+
// --- Rerank (fallback-safe) ---
|
|
163
|
+
let finalChunks;
|
|
164
|
+
const rerankStart = Date.now();
|
|
165
|
+
try {
|
|
166
|
+
finalChunks = await this.deps.rerank(query, merged, 5);
|
|
167
|
+
const rerankDuration = Date.now() - rerankStart;
|
|
168
|
+
this.deps.emit({
|
|
169
|
+
type: 'retrieve:rerank',
|
|
170
|
+
inputCount: merged.length,
|
|
171
|
+
outputCount: finalChunks.length,
|
|
172
|
+
durationMs: rerankDuration,
|
|
173
|
+
timestamp: Date.now(),
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
catch (err) {
|
|
177
|
+
// Fallback: sort by score descending, take top 5
|
|
178
|
+
finalChunks = [...merged]
|
|
179
|
+
.sort((a, b) => b.relevanceScore - a.relevanceScore)
|
|
180
|
+
.slice(0, 5);
|
|
181
|
+
this.deps.emit({
|
|
182
|
+
type: 'retrieve:fallback',
|
|
183
|
+
strategy: 'rerank-skip',
|
|
184
|
+
reason: `Rerank failed: ${err.message}`,
|
|
185
|
+
timestamp: Date.now(),
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
const result = {
|
|
189
|
+
chunks: finalChunks,
|
|
190
|
+
durationMs: Date.now() - start,
|
|
191
|
+
};
|
|
192
|
+
if (emitComplete) {
|
|
193
|
+
this.deps.emit({
|
|
194
|
+
type: 'retrieve:complete',
|
|
195
|
+
result,
|
|
196
|
+
timestamp: Date.now(),
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
return result;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Tier 3 pipeline: everything in T2 + deep research synthesis.
|
|
203
|
+
*
|
|
204
|
+
* Fallback: if deep research fails, the result is identical to T2
|
|
205
|
+
* (no synthesis, no research chunks), and a fallback event is emitted.
|
|
206
|
+
*/
|
|
207
|
+
async dispatchTier3(query, suggestedSources, start) {
|
|
208
|
+
// Run the T2 pipeline first to get hybrid chunks
|
|
209
|
+
const t2Result = await this.dispatchTier2Internal(query, start, false);
|
|
210
|
+
// --- Deep research (fallback-safe) ---
|
|
211
|
+
if (this.deps.deepResearchEnabled) {
|
|
212
|
+
this.deps.emit({
|
|
213
|
+
type: 'research:start',
|
|
214
|
+
query,
|
|
215
|
+
maxIterations: 3,
|
|
216
|
+
timestamp: Date.now(),
|
|
217
|
+
});
|
|
218
|
+
try {
|
|
219
|
+
const researchResult = await this.deps.deepResearch(query, suggestedSources);
|
|
220
|
+
this.deps.emit({
|
|
221
|
+
type: 'research:phase',
|
|
222
|
+
iteration: 1,
|
|
223
|
+
totalIterations: 1,
|
|
224
|
+
newChunksFound: researchResult.sources.length,
|
|
225
|
+
timestamp: Date.now(),
|
|
226
|
+
});
|
|
227
|
+
this.deps.emit({
|
|
228
|
+
type: 'research:complete',
|
|
229
|
+
iterationsUsed: 1,
|
|
230
|
+
totalChunks: researchResult.sources.length,
|
|
231
|
+
durationMs: Date.now() - start,
|
|
232
|
+
timestamp: Date.now(),
|
|
233
|
+
});
|
|
234
|
+
// Merge research chunks with T2 chunks, dedup
|
|
235
|
+
const allChunks = this.mergeAndDedup(t2Result.chunks, researchResult.sources);
|
|
236
|
+
const result = {
|
|
237
|
+
chunks: allChunks,
|
|
238
|
+
researchSynthesis: researchResult.synthesis,
|
|
239
|
+
durationMs: Date.now() - start,
|
|
240
|
+
};
|
|
241
|
+
this.deps.emit({
|
|
242
|
+
type: 'retrieve:complete',
|
|
243
|
+
result,
|
|
244
|
+
timestamp: Date.now(),
|
|
245
|
+
});
|
|
246
|
+
return result;
|
|
247
|
+
}
|
|
248
|
+
catch (err) {
|
|
249
|
+
this.deps.emit({
|
|
250
|
+
type: 'retrieve:fallback',
|
|
251
|
+
strategy: 'research-skip',
|
|
252
|
+
reason: `Deep research failed: ${err.message}`,
|
|
253
|
+
timestamp: Date.now(),
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
// If research was disabled or failed, return T2 result with updated duration
|
|
258
|
+
const result = {
|
|
259
|
+
...t2Result,
|
|
260
|
+
durationMs: Date.now() - start,
|
|
261
|
+
};
|
|
262
|
+
this.deps.emit({
|
|
263
|
+
type: 'retrieve:complete',
|
|
264
|
+
result,
|
|
265
|
+
timestamp: Date.now(),
|
|
266
|
+
});
|
|
267
|
+
return result;
|
|
268
|
+
}
|
|
269
|
+
// --------------------------------------------------------------------------
|
|
270
|
+
// UTILITIES
|
|
271
|
+
// --------------------------------------------------------------------------
|
|
272
|
+
/**
|
|
273
|
+
* Merge two arrays of chunks and deduplicate by chunk ID.
|
|
274
|
+
* When duplicates exist, the chunk with the higher relevanceScore is kept.
|
|
275
|
+
*
|
|
276
|
+
* @param primary - Primary chunk array (typically vector results).
|
|
277
|
+
* @param secondary - Secondary chunk array (typically graph or research results).
|
|
278
|
+
* @returns Merged, deduplicated array preserving insertion order of first occurrence.
|
|
279
|
+
*/
|
|
280
|
+
mergeAndDedup(primary, secondary) {
|
|
281
|
+
const seen = new Map();
|
|
282
|
+
for (const chunk of primary) {
|
|
283
|
+
const existing = seen.get(chunk.id);
|
|
284
|
+
if (!existing || chunk.relevanceScore > existing.relevanceScore) {
|
|
285
|
+
seen.set(chunk.id, chunk);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
for (const chunk of secondary) {
|
|
289
|
+
const existing = seen.get(chunk.id);
|
|
290
|
+
if (!existing || chunk.relevanceScore > existing.relevanceScore) {
|
|
291
|
+
seen.set(chunk.id, chunk);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
return Array.from(seen.values());
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
//# sourceMappingURL=QueryDispatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryDispatcher.js","sourceRoot":"","sources":["../../src/query-router/QueryDispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview QueryGenerator — tier-appropriate prompt construction and LLM
|
|
3
|
+
* answer generation for the QueryRouter pipeline.
|
|
4
|
+
*
|
|
5
|
+
* The generator is the final stage of the routing pipeline: it takes the
|
|
6
|
+
* classified {@link QueryTier}, a set of {@link RetrievedChunk}s from the
|
|
7
|
+
* retrieval phase, and an optional research synthesis narrative, then builds
|
|
8
|
+
* a tier-specific system prompt and invokes the LLM via {@link generateText}.
|
|
9
|
+
*
|
|
10
|
+
* **Tier-specific behaviour:**
|
|
11
|
+
*
|
|
12
|
+
* | Tier | Model | Context | Temperature | Max Tokens | Instruction |
|
|
13
|
+
* |------|---------|---------|-------------|------------|----------------------------------------------------|
|
|
14
|
+
* | T0 | standard| none | 0.7 | 512 | (base prompt only) |
|
|
15
|
+
* | T1 | standard| chunks | 0.3 | 512 | "Answer based on the documentation context provided."|
|
|
16
|
+
* | T2 | deep | chunks | 0.3 | 1024 | "cross-reference" sources |
|
|
17
|
+
* | T3 | deep | chunks + research | 0.3 | 1024 | "Synthesize information from both internal documentation and external research." |
|
|
18
|
+
*
|
|
19
|
+
* **Context injection:**
|
|
20
|
+
* Each chunk is formatted as `## heading (sourcePath)\ncontent` and appended
|
|
21
|
+
* until the estimated token budget (`maxContextTokens`) is exhausted. Token
|
|
22
|
+
* estimation uses the common heuristic of `Math.ceil(text.length / 4)`.
|
|
23
|
+
*
|
|
24
|
+
* @module @framers/agentos/query-router/QueryGenerator
|
|
25
|
+
*/
|
|
26
|
+
import type { QueryTier, RetrievedChunk } from './types.js';
|
|
27
|
+
/**
|
|
28
|
+
* Configuration for the {@link QueryGenerator}.
|
|
29
|
+
*/
|
|
30
|
+
export interface QueryGeneratorConfig {
|
|
31
|
+
/**
|
|
32
|
+
* Model identifier for T0 and T1 queries (standard complexity).
|
|
33
|
+
* @example 'openai:gpt-4.1-mini'
|
|
34
|
+
*/
|
|
35
|
+
model: string;
|
|
36
|
+
/**
|
|
37
|
+
* Model identifier for T2 and T3 queries (deep reasoning).
|
|
38
|
+
* @example 'openai:gpt-4.1'
|
|
39
|
+
*/
|
|
40
|
+
modelDeep: string;
|
|
41
|
+
/**
|
|
42
|
+
* LLM provider name (e.g. 'openai', 'anthropic').
|
|
43
|
+
*/
|
|
44
|
+
provider: string;
|
|
45
|
+
/**
|
|
46
|
+
* Optional API key override. When omitted, the provider resolves
|
|
47
|
+
* credentials from environment variables.
|
|
48
|
+
*/
|
|
49
|
+
apiKey?: string;
|
|
50
|
+
/**
|
|
51
|
+
* Optional base URL override for local proxies or alternative endpoints.
|
|
52
|
+
*/
|
|
53
|
+
baseUrl?: string;
|
|
54
|
+
/**
|
|
55
|
+
* Maximum number of estimated tokens to allocate for documentation
|
|
56
|
+
* context in the system prompt. Chunks are added in order until
|
|
57
|
+
* this budget is exhausted.
|
|
58
|
+
* @default 4000
|
|
59
|
+
*/
|
|
60
|
+
maxContextTokens?: number;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Structured result returned by {@link QueryGenerator.generate}.
|
|
64
|
+
*/
|
|
65
|
+
export interface GenerateResult {
|
|
66
|
+
/** The generated answer text. */
|
|
67
|
+
answer: string;
|
|
68
|
+
/** The model identifier that was actually used for generation. */
|
|
69
|
+
model: string;
|
|
70
|
+
/** Token usage figures reported by the provider. */
|
|
71
|
+
usage: {
|
|
72
|
+
promptTokens: number;
|
|
73
|
+
completionTokens: number;
|
|
74
|
+
totalTokens: number;
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Builds tier-appropriate prompts and generates LLM answers.
|
|
79
|
+
*
|
|
80
|
+
* The generator selects a model (standard vs. deep) based on the query tier,
|
|
81
|
+
* constructs a system prompt with optional documentation context and research
|
|
82
|
+
* synthesis, then delegates to {@link generateText} for the actual LLM call.
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```typescript
|
|
86
|
+
* const gen = new QueryGenerator({
|
|
87
|
+
* model: 'openai:gpt-4.1-mini',
|
|
88
|
+
* modelDeep: 'openai:gpt-4.1',
|
|
89
|
+
* provider: 'openai',
|
|
90
|
+
* });
|
|
91
|
+
*
|
|
92
|
+
* const result = await gen.generate('How does auth work?', 1, chunks);
|
|
93
|
+
* console.log(result.answer);
|
|
94
|
+
* ```
|
|
95
|
+
*/
|
|
96
|
+
export declare class QueryGenerator {
|
|
97
|
+
/** Resolved configuration with defaults applied. */
|
|
98
|
+
private readonly config;
|
|
99
|
+
/**
|
|
100
|
+
* Create a new QueryGenerator instance.
|
|
101
|
+
*
|
|
102
|
+
* @param config - Generator configuration specifying models, provider,
|
|
103
|
+
* and optional credential overrides.
|
|
104
|
+
*/
|
|
105
|
+
constructor(config: QueryGeneratorConfig);
|
|
106
|
+
/**
|
|
107
|
+
* Generate an answer for the given query at the specified complexity tier.
|
|
108
|
+
*
|
|
109
|
+
* @param query - The user's original question.
|
|
110
|
+
* @param tier - The classified complexity tier (0–3).
|
|
111
|
+
* @param chunks - Retrieved documentation chunks, sorted by relevance.
|
|
112
|
+
* @param researchSynthesis - Optional research narrative (T3 only).
|
|
113
|
+
* @returns A promise resolving to the generated answer, model used, and token usage.
|
|
114
|
+
*/
|
|
115
|
+
generate(query: string, tier: QueryTier, chunks: RetrievedChunk[], researchSynthesis?: string): Promise<GenerateResult>;
|
|
116
|
+
/**
|
|
117
|
+
* Select the appropriate model based on query tier.
|
|
118
|
+
* T0–T1 use the standard model; T2–T3 use the deep model.
|
|
119
|
+
*
|
|
120
|
+
* @param tier - The classified query tier.
|
|
121
|
+
* @returns The model identifier string.
|
|
122
|
+
*/
|
|
123
|
+
private selectModel;
|
|
124
|
+
/**
|
|
125
|
+
* Select the sampling temperature for the given tier.
|
|
126
|
+
* T0 uses a higher temperature (0.7) for more creative general answers;
|
|
127
|
+
* all other tiers use 0.3 for focused, grounded responses.
|
|
128
|
+
*
|
|
129
|
+
* @param tier - The classified query tier.
|
|
130
|
+
* @returns The temperature value.
|
|
131
|
+
*/
|
|
132
|
+
private selectTemperature;
|
|
133
|
+
/**
|
|
134
|
+
* Select the maximum output tokens for the given tier.
|
|
135
|
+
* T0–T1 cap at 512 tokens; T2–T3 allow 1024 for more detailed answers.
|
|
136
|
+
*
|
|
137
|
+
* @param tier - The classified query tier.
|
|
138
|
+
* @returns The maxTokens value.
|
|
139
|
+
*/
|
|
140
|
+
private selectMaxTokens;
|
|
141
|
+
/**
|
|
142
|
+
* Build the full system prompt by composing the base prompt with optional
|
|
143
|
+
* tier-specific context blocks and instructions.
|
|
144
|
+
*
|
|
145
|
+
* @param tier - The classified query tier.
|
|
146
|
+
* @param chunks - Retrieved documentation chunks.
|
|
147
|
+
* @param researchSynthesis - Optional research narrative for T3.
|
|
148
|
+
* @returns The assembled system prompt string.
|
|
149
|
+
*/
|
|
150
|
+
private buildSystemPrompt;
|
|
151
|
+
/**
|
|
152
|
+
* Format retrieved chunks into a documentation context block, respecting
|
|
153
|
+
* the configured token budget.
|
|
154
|
+
*
|
|
155
|
+
* Each chunk is formatted as:
|
|
156
|
+
* ```
|
|
157
|
+
* ## heading (sourcePath)
|
|
158
|
+
* content
|
|
159
|
+
* ```
|
|
160
|
+
*
|
|
161
|
+
* Chunks are added in the order provided (typically by relevance) until the
|
|
162
|
+
* estimated token count would exceed `maxContextTokens`.
|
|
163
|
+
*
|
|
164
|
+
* @param chunks - The retrieved chunks to format.
|
|
165
|
+
* @returns The formatted context string, or an empty string if no chunks fit.
|
|
166
|
+
*/
|
|
167
|
+
private formatChunksAsContext;
|
|
168
|
+
/**
|
|
169
|
+
* Return the tier-specific instruction appended to the system prompt.
|
|
170
|
+
*
|
|
171
|
+
* @param tier - The classified query tier.
|
|
172
|
+
* @returns The instruction string, or `undefined` for T0 (no extra instruction).
|
|
173
|
+
*/
|
|
174
|
+
private getTierInstruction;
|
|
175
|
+
/**
|
|
176
|
+
* Estimate the token count for a string using the common heuristic of
|
|
177
|
+
* approximately 4 characters per token.
|
|
178
|
+
*
|
|
179
|
+
* @param text - The text to estimate.
|
|
180
|
+
* @returns Estimated token count (ceiling).
|
|
181
|
+
*/
|
|
182
|
+
private estimateTokens;
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=QueryGenerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryGenerator.d.ts","sourceRoot":"","sources":["../../src/query-router/QueryGenerator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAM5D;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAMD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC;IAEf,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;IAEd,oDAAoD;IACpD,KAAK,EAAE;QACL,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAsBD;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,cAAc;IACzB,oDAAoD;IACpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAC4B;IAEnD;;;;;OAKG;gBACS,MAAM,EAAE,oBAAoB;IAWxC;;;;;;;;OAQG;IACG,QAAQ,CACZ,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,cAAc,EAAE,EACxB,iBAAiB,CAAC,EAAE,MAAM,GACzB,OAAO,CAAC,cAAc,CAAC;IAgC1B;;;;;;OAMG;IACH,OAAO,CAAC,WAAW;IAInB;;;;;;;OAOG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IAQvB;;;;;;;;OAQG;IACH,OAAO,CAAC,iBAAiB;IA6BzB;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,qBAAqB;IAmB7B;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAiB1B;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;CAGvB"}
|