agentic-qe 2.3.5 → 2.5.0
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/.claude/agents/qe-a11y-ally.md +751 -0
- package/.claude/agents/qx-partner.md +120 -4
- package/.claude/skills/testability-scoring/SKILL.md +107 -6
- package/CHANGELOG.md +133 -0
- package/README.md +7 -6
- package/dist/agents/AccessibilityAllyAgent.d.ts +168 -0
- package/dist/agents/AccessibilityAllyAgent.d.ts.map +1 -0
- package/dist/agents/AccessibilityAllyAgent.js +462 -0
- package/dist/agents/AccessibilityAllyAgent.js.map +1 -0
- package/dist/agents/BaseAgent.d.ts +56 -49
- package/dist/agents/BaseAgent.d.ts.map +1 -1
- package/dist/agents/BaseAgent.js +208 -604
- package/dist/agents/BaseAgent.js.map +1 -1
- package/dist/agents/FlakyTestHunterAgent.d.ts +2 -2
- package/dist/agents/FlakyTestHunterAgent.d.ts.map +1 -1
- package/dist/agents/FlakyTestHunterAgent.js +8 -104
- package/dist/agents/FlakyTestHunterAgent.js.map +1 -1
- package/dist/agents/SONAIntegration.d.ts +109 -0
- package/dist/agents/SONAIntegration.d.ts.map +1 -0
- package/dist/agents/SONAIntegration.js +167 -0
- package/dist/agents/SONAIntegration.js.map +1 -0
- package/dist/agents/TestExecutorAgent.d.ts +1 -1
- package/dist/agents/TestExecutorAgent.d.ts.map +1 -1
- package/dist/agents/TestExecutorAgent.js +4 -46
- package/dist/agents/TestExecutorAgent.js.map +1 -1
- package/dist/agents/TestGeneratorAgent.d.ts.map +1 -1
- package/dist/agents/TestGeneratorAgent.js +15 -35
- package/dist/agents/TestGeneratorAgent.js.map +1 -1
- package/dist/agents/adapters/CoordinatorAdapter.d.ts +47 -0
- package/dist/agents/adapters/CoordinatorAdapter.d.ts.map +1 -0
- package/dist/agents/adapters/CoordinatorAdapter.js +266 -0
- package/dist/agents/adapters/CoordinatorAdapter.js.map +1 -0
- package/dist/agents/adapters/LearningEngineAdapter.d.ts +45 -0
- package/dist/agents/adapters/LearningEngineAdapter.d.ts.map +1 -0
- package/dist/agents/adapters/LearningEngineAdapter.js +279 -0
- package/dist/agents/adapters/LearningEngineAdapter.js.map +1 -0
- package/dist/agents/adapters/LifecycleManagerAdapter.d.ts +45 -0
- package/dist/agents/adapters/LifecycleManagerAdapter.d.ts.map +1 -0
- package/dist/agents/adapters/LifecycleManagerAdapter.js +128 -0
- package/dist/agents/adapters/LifecycleManagerAdapter.js.map +1 -0
- package/dist/agents/adapters/MemoryServiceAdapter.d.ts +96 -0
- package/dist/agents/adapters/MemoryServiceAdapter.d.ts.map +1 -0
- package/dist/agents/adapters/MemoryServiceAdapter.js +266 -0
- package/dist/agents/adapters/MemoryServiceAdapter.js.map +1 -0
- package/dist/agents/adapters/index.d.ts +14 -0
- package/dist/agents/adapters/index.d.ts.map +1 -0
- package/dist/agents/adapters/index.js +25 -0
- package/dist/agents/adapters/index.js.map +1 -0
- package/dist/agents/index.d.ts +3 -0
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +93 -2
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/lifecycle/AgentLifecycleManager.d.ts.map +1 -1
- package/dist/agents/lifecycle/AgentLifecycleManager.js +12 -6
- package/dist/agents/lifecycle/AgentLifecycleManager.js.map +1 -1
- package/dist/cli/init/agents.js +1 -1
- package/dist/cli/init/claude-config.js +2 -2
- package/dist/cli/init/database-init.js +1 -1
- package/dist/core/cache/BinaryCacheBuilder.d.ts +84 -0
- package/dist/core/cache/BinaryCacheBuilder.d.ts.map +1 -0
- package/dist/core/cache/BinaryCacheBuilder.js +225 -0
- package/dist/core/cache/BinaryCacheBuilder.js.map +1 -0
- package/dist/core/cache/BinaryCacheImpl.d.ts +161 -0
- package/dist/core/cache/BinaryCacheImpl.d.ts.map +1 -0
- package/dist/core/cache/BinaryCacheImpl.js +685 -0
- package/dist/core/cache/BinaryCacheImpl.js.map +1 -0
- package/dist/core/cache/BinaryCacheManager.d.ts +142 -0
- package/dist/core/cache/BinaryCacheManager.d.ts.map +1 -0
- package/dist/core/cache/BinaryCacheManager.js +354 -0
- package/dist/core/cache/BinaryCacheManager.js.map +1 -0
- package/dist/core/cache/BinaryCacheReader.d.ts +129 -0
- package/dist/core/cache/BinaryCacheReader.d.ts.map +1 -0
- package/dist/core/cache/BinaryCacheReader.js +243 -0
- package/dist/core/cache/BinaryCacheReader.js.map +1 -0
- package/dist/core/cache/BinaryMetadataCache.d.ts +777 -0
- package/dist/core/cache/BinaryMetadataCache.d.ts.map +1 -0
- package/dist/core/cache/BinaryMetadataCache.js +204 -0
- package/dist/core/cache/BinaryMetadataCache.js.map +1 -0
- package/dist/core/cache/CacheInvalidator.d.ts +103 -0
- package/dist/core/cache/CacheInvalidator.d.ts.map +1 -0
- package/dist/core/cache/CacheInvalidator.js +152 -0
- package/dist/core/cache/CacheInvalidator.js.map +1 -0
- package/dist/core/cache/CacheValidator.d.ts +69 -0
- package/dist/core/cache/CacheValidator.d.ts.map +1 -0
- package/dist/core/cache/CacheValidator.js +189 -0
- package/dist/core/cache/CacheValidator.js.map +1 -0
- package/dist/core/cache/MessagePackSerializer.d.ts +163 -0
- package/dist/core/cache/MessagePackSerializer.d.ts.map +1 -0
- package/dist/core/cache/MessagePackSerializer.js +274 -0
- package/dist/core/cache/MessagePackSerializer.js.map +1 -0
- package/dist/core/cache/index.d.ts +59 -0
- package/dist/core/cache/index.d.ts.map +1 -0
- package/dist/core/cache/index.js +111 -0
- package/dist/core/cache/index.js.map +1 -0
- package/dist/core/index.d.ts +2 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +18 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/memory/AgentDBService.d.ts +30 -4
- package/dist/core/memory/AgentDBService.d.ts.map +1 -1
- package/dist/core/memory/AgentDBService.js +122 -12
- package/dist/core/memory/AgentDBService.js.map +1 -1
- package/dist/core/memory/CachedHNSWVectorMemory.d.ts +153 -0
- package/dist/core/memory/CachedHNSWVectorMemory.d.ts.map +1 -0
- package/dist/core/memory/CachedHNSWVectorMemory.js +329 -0
- package/dist/core/memory/CachedHNSWVectorMemory.js.map +1 -0
- package/dist/core/memory/HNSWVectorMemory.js +1 -1
- package/dist/core/memory/PatternStoreFactory.d.ts +28 -0
- package/dist/core/memory/PatternStoreFactory.d.ts.map +1 -1
- package/dist/core/memory/PatternStoreFactory.js +68 -3
- package/dist/core/memory/PatternStoreFactory.js.map +1 -1
- package/dist/core/memory/RuVectorPatternStore.d.ts.map +1 -1
- package/dist/core/memory/RuVectorPatternStore.js +8 -2
- package/dist/core/memory/RuVectorPatternStore.js.map +1 -1
- package/dist/core/memory/UnifiedMemoryCoordinator.d.ts +50 -0
- package/dist/core/memory/UnifiedMemoryCoordinator.d.ts.map +1 -1
- package/dist/core/memory/UnifiedMemoryCoordinator.js +206 -0
- package/dist/core/memory/UnifiedMemoryCoordinator.js.map +1 -1
- package/dist/core/memory/index.d.ts +2 -0
- package/dist/core/memory/index.d.ts.map +1 -1
- package/dist/core/memory/index.js +8 -1
- package/dist/core/memory/index.js.map +1 -1
- package/dist/core/optimization/RecursiveOptimizer.d.ts +233 -0
- package/dist/core/optimization/RecursiveOptimizer.d.ts.map +1 -0
- package/dist/core/optimization/RecursiveOptimizer.js +509 -0
- package/dist/core/optimization/RecursiveOptimizer.js.map +1 -0
- package/dist/core/platform/FileOperations.d.ts +124 -0
- package/dist/core/platform/FileOperations.d.ts.map +1 -0
- package/dist/core/platform/FileOperations.js +371 -0
- package/dist/core/platform/FileOperations.js.map +1 -0
- package/dist/core/platform/PlatformDetector.d.ts +53 -0
- package/dist/core/platform/PlatformDetector.d.ts.map +1 -0
- package/dist/core/platform/PlatformDetector.js +251 -0
- package/dist/core/platform/PlatformDetector.js.map +1 -0
- package/dist/core/platform/index.d.ts +12 -0
- package/dist/core/platform/index.d.ts.map +1 -0
- package/dist/core/platform/index.js +28 -0
- package/dist/core/platform/index.js.map +1 -0
- package/dist/core/strategies/AcceleratedLearningStrategy.d.ts +74 -0
- package/dist/core/strategies/AcceleratedLearningStrategy.d.ts.map +1 -0
- package/dist/core/strategies/AcceleratedLearningStrategy.js +200 -0
- package/dist/core/strategies/AcceleratedLearningStrategy.js.map +1 -0
- package/dist/core/strategies/AgentCoordinationStrategy.d.ts +157 -0
- package/dist/core/strategies/AgentCoordinationStrategy.d.ts.map +1 -0
- package/dist/core/strategies/AgentCoordinationStrategy.js +12 -0
- package/dist/core/strategies/AgentCoordinationStrategy.js.map +1 -0
- package/dist/core/strategies/AgentLearningStrategy.d.ts +200 -0
- package/dist/core/strategies/AgentLearningStrategy.d.ts.map +1 -0
- package/dist/core/strategies/AgentLearningStrategy.js +13 -0
- package/dist/core/strategies/AgentLearningStrategy.js.map +1 -0
- package/dist/core/strategies/AgentLifecycleStrategy.d.ts +116 -0
- package/dist/core/strategies/AgentLifecycleStrategy.d.ts.map +1 -0
- package/dist/core/strategies/AgentLifecycleStrategy.js +12 -0
- package/dist/core/strategies/AgentLifecycleStrategy.js.map +1 -0
- package/dist/core/strategies/AgentMemoryStrategy.d.ts +154 -0
- package/dist/core/strategies/AgentMemoryStrategy.d.ts.map +1 -0
- package/dist/core/strategies/AgentMemoryStrategy.js +13 -0
- package/dist/core/strategies/AgentMemoryStrategy.js.map +1 -0
- package/dist/core/strategies/DefaultCoordinationStrategy.d.ts +105 -0
- package/dist/core/strategies/DefaultCoordinationStrategy.d.ts.map +1 -0
- package/dist/core/strategies/DefaultCoordinationStrategy.js +332 -0
- package/dist/core/strategies/DefaultCoordinationStrategy.js.map +1 -0
- package/dist/core/strategies/DefaultLearningStrategy.d.ts +120 -0
- package/dist/core/strategies/DefaultLearningStrategy.d.ts.map +1 -0
- package/dist/core/strategies/DefaultLearningStrategy.js +365 -0
- package/dist/core/strategies/DefaultLearningStrategy.js.map +1 -0
- package/dist/core/strategies/DefaultLifecycleStrategy.d.ts +129 -0
- package/dist/core/strategies/DefaultLifecycleStrategy.d.ts.map +1 -0
- package/dist/core/strategies/DefaultLifecycleStrategy.js +297 -0
- package/dist/core/strategies/DefaultLifecycleStrategy.js.map +1 -0
- package/dist/core/strategies/DefaultMemoryStrategy.d.ts +91 -0
- package/dist/core/strategies/DefaultMemoryStrategy.d.ts.map +1 -0
- package/dist/core/strategies/DefaultMemoryStrategy.js +257 -0
- package/dist/core/strategies/DefaultMemoryStrategy.js.map +1 -0
- package/dist/core/strategies/DistributedMemoryStrategy.d.ts +85 -0
- package/dist/core/strategies/DistributedMemoryStrategy.d.ts.map +1 -0
- package/dist/core/strategies/DistributedMemoryStrategy.js +126 -0
- package/dist/core/strategies/DistributedMemoryStrategy.js.map +1 -0
- package/dist/core/strategies/SONALearningStrategy.d.ts +115 -0
- package/dist/core/strategies/SONALearningStrategy.d.ts.map +1 -0
- package/dist/core/strategies/SONALearningStrategy.js +656 -0
- package/dist/core/strategies/SONALearningStrategy.js.map +1 -0
- package/dist/core/strategies/TRMLearningStrategy.d.ts +162 -0
- package/dist/core/strategies/TRMLearningStrategy.d.ts.map +1 -0
- package/dist/core/strategies/TRMLearningStrategy.js +670 -0
- package/dist/core/strategies/TRMLearningStrategy.js.map +1 -0
- package/dist/core/strategies/index.d.ts +104 -0
- package/dist/core/strategies/index.d.ts.map +1 -0
- package/dist/core/strategies/index.js +68 -0
- package/dist/core/strategies/index.js.map +1 -0
- package/dist/learning/PerformanceOptimizer.js +2 -2
- package/dist/learning/PerformanceOptimizer.js.map +1 -1
- package/dist/learning/SONAFeedbackLoop.d.ts +168 -0
- package/dist/learning/SONAFeedbackLoop.d.ts.map +1 -0
- package/dist/learning/SONAFeedbackLoop.js +344 -0
- package/dist/learning/SONAFeedbackLoop.js.map +1 -0
- package/dist/learning/baselines/BaselineCollector.d.ts +1 -1
- package/dist/learning/baselines/BaselineCollector.js +1 -1
- package/dist/learning/baselines/StandardTaskSuite.d.ts +1 -1
- package/dist/learning/baselines/StandardTaskSuite.js +1 -1
- package/dist/learning/index.d.ts +2 -0
- package/dist/learning/index.d.ts.map +1 -1
- package/dist/learning/index.js +6 -1
- package/dist/learning/index.js.map +1 -1
- package/dist/mcp/handlers/base-handler.d.ts +28 -1
- package/dist/mcp/handlers/base-handler.d.ts.map +1 -1
- package/dist/mcp/handlers/base-handler.js +41 -0
- package/dist/mcp/handlers/base-handler.js.map +1 -1
- package/dist/mcp/server-instructions.d.ts +1 -1
- package/dist/mcp/server-instructions.js +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +23 -16
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/services/AgentRegistry.d.ts.map +1 -1
- package/dist/mcp/services/AgentRegistry.js +6 -1
- package/dist/mcp/services/AgentRegistry.js.map +1 -1
- package/dist/mcp/tools/qe/accessibility/accname-computation.d.ts +114 -0
- package/dist/mcp/tools/qe/accessibility/accname-computation.d.ts.map +1 -0
- package/dist/mcp/tools/qe/accessibility/accname-computation.js +566 -0
- package/dist/mcp/tools/qe/accessibility/accname-computation.js.map +1 -0
- package/dist/mcp/tools/qe/accessibility/apg-patterns.d.ts +103 -0
- package/dist/mcp/tools/qe/accessibility/apg-patterns.d.ts.map +1 -0
- package/dist/mcp/tools/qe/accessibility/apg-patterns.js +1028 -0
- package/dist/mcp/tools/qe/accessibility/apg-patterns.js.map +1 -0
- package/dist/mcp/tools/qe/accessibility/en-301-549-mapping.d.ts +48 -0
- package/dist/mcp/tools/qe/accessibility/en-301-549-mapping.d.ts.map +1 -0
- package/dist/mcp/tools/qe/accessibility/en-301-549-mapping.js +565 -0
- package/dist/mcp/tools/qe/accessibility/en-301-549-mapping.js.map +1 -0
- package/dist/mcp/tools/qe/accessibility/eu-accessibility-act.d.ts +117 -0
- package/dist/mcp/tools/qe/accessibility/eu-accessibility-act.d.ts.map +1 -0
- package/dist/mcp/tools/qe/accessibility/eu-accessibility-act.js +571 -0
- package/dist/mcp/tools/qe/accessibility/eu-accessibility-act.js.map +1 -0
- package/dist/mcp/tools/qe/accessibility/html-report-generator.d.ts +23 -0
- package/dist/mcp/tools/qe/accessibility/html-report-generator.d.ts.map +1 -0
- package/dist/mcp/tools/qe/accessibility/html-report-generator.js +1152 -0
- package/dist/mcp/tools/qe/accessibility/html-report-generator.js.map +1 -0
- package/dist/mcp/tools/qe/accessibility/index.d.ts +22 -0
- package/dist/mcp/tools/qe/accessibility/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/accessibility/index.js +38 -0
- package/dist/mcp/tools/qe/accessibility/index.js.map +1 -0
- package/dist/mcp/tools/qe/accessibility/markdown-report-generator.d.ts +18 -0
- package/dist/mcp/tools/qe/accessibility/markdown-report-generator.d.ts.map +1 -0
- package/dist/mcp/tools/qe/accessibility/markdown-report-generator.js +549 -0
- package/dist/mcp/tools/qe/accessibility/markdown-report-generator.js.map +1 -0
- package/dist/mcp/tools/qe/accessibility/remediation-code-generator.d.ts +139 -0
- package/dist/mcp/tools/qe/accessibility/remediation-code-generator.d.ts.map +1 -0
- package/dist/mcp/tools/qe/accessibility/remediation-code-generator.js +1300 -0
- package/dist/mcp/tools/qe/accessibility/remediation-code-generator.js.map +1 -0
- package/dist/mcp/tools/qe/accessibility/scan-comprehensive.d.ts +138 -0
- package/dist/mcp/tools/qe/accessibility/scan-comprehensive.d.ts.map +1 -0
- package/dist/mcp/tools/qe/accessibility/scan-comprehensive.js +1326 -0
- package/dist/mcp/tools/qe/accessibility/scan-comprehensive.js.map +1 -0
- package/dist/mcp/tools/qe/accessibility/video-vision-analyzer.d.ts +50 -0
- package/dist/mcp/tools/qe/accessibility/video-vision-analyzer.d.ts.map +1 -0
- package/dist/mcp/tools/qe/accessibility/video-vision-analyzer.js +469 -0
- package/dist/mcp/tools/qe/accessibility/video-vision-analyzer.js.map +1 -0
- package/dist/mcp/tools/qe/accessibility/webvtt-generator.d.ts +193 -0
- package/dist/mcp/tools/qe/accessibility/webvtt-generator.d.ts.map +1 -0
- package/dist/mcp/tools/qe/accessibility/webvtt-generator.js +511 -0
- package/dist/mcp/tools/qe/accessibility/webvtt-generator.js.map +1 -0
- package/dist/mcp/tools.d.ts +1 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +61 -0
- package/dist/mcp/tools.js.map +1 -1
- package/dist/output/AIActionSuggester.d.ts +98 -0
- package/dist/output/AIActionSuggester.d.ts.map +1 -0
- package/dist/output/AIActionSuggester.js +499 -0
- package/dist/output/AIActionSuggester.js.map +1 -0
- package/dist/output/CLIOutputHelper.d.ts +169 -0
- package/dist/output/CLIOutputHelper.d.ts.map +1 -0
- package/dist/output/CLIOutputHelper.js +320 -0
- package/dist/output/CLIOutputHelper.js.map +1 -0
- package/dist/output/OutputFormatter.d.ts +764 -0
- package/dist/output/OutputFormatter.d.ts.map +1 -0
- package/dist/output/OutputFormatter.js +125 -0
- package/dist/output/OutputFormatter.js.map +1 -0
- package/dist/output/OutputFormatterImpl.d.ts +131 -0
- package/dist/output/OutputFormatterImpl.d.ts.map +1 -0
- package/dist/output/OutputFormatterImpl.js +556 -0
- package/dist/output/OutputFormatterImpl.js.map +1 -0
- package/dist/output/examples.d.ts +38 -0
- package/dist/output/examples.d.ts.map +1 -0
- package/dist/output/examples.js +503 -0
- package/dist/output/examples.js.map +1 -0
- package/dist/output/index.d.ts +16 -0
- package/dist/output/index.d.ts.map +1 -0
- package/dist/output/index.js +58 -0
- package/dist/output/index.js.map +1 -0
- package/dist/providers/HybridRouter.d.ts +34 -3
- package/dist/providers/HybridRouter.d.ts.map +1 -1
- package/dist/providers/HybridRouter.js +69 -4
- package/dist/providers/HybridRouter.js.map +1 -1
- package/dist/providers/LLMProviderFactory.d.ts +68 -1
- package/dist/providers/LLMProviderFactory.d.ts.map +1 -1
- package/dist/providers/LLMProviderFactory.js +173 -6
- package/dist/providers/LLMProviderFactory.js.map +1 -1
- package/dist/providers/OpenRouterProvider.d.ts +150 -0
- package/dist/providers/OpenRouterProvider.d.ts.map +1 -0
- package/dist/providers/OpenRouterProvider.js +545 -0
- package/dist/providers/OpenRouterProvider.js.map +1 -0
- package/dist/providers/RuvllmProvider.d.ts +130 -16
- package/dist/providers/RuvllmProvider.d.ts.map +1 -1
- package/dist/providers/RuvllmProvider.js +399 -83
- package/dist/providers/RuvllmProvider.js.map +1 -1
- package/dist/providers/index.d.ts +33 -4
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +72 -21
- package/dist/providers/index.js.map +1 -1
- package/dist/telemetry/instrumentation/agent.d.ts +1 -1
- package/dist/telemetry/instrumentation/agent.js +1 -1
- package/dist/telemetry/instrumentation/index.d.ts +1 -1
- package/dist/telemetry/instrumentation/index.js +1 -1
- package/dist/types/index.d.ts +2 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/ruvllm.d.ts +97 -0
- package/dist/types/ruvllm.d.ts.map +1 -0
- package/dist/types/ruvllm.js +46 -0
- package/dist/types/ruvllm.js.map +1 -0
- package/dist/utils/ruvllm-loader.d.ts +94 -0
- package/dist/utils/ruvllm-loader.d.ts.map +1 -0
- package/dist/utils/ruvllm-loader.js +87 -0
- package/dist/utils/ruvllm-loader.js.map +1 -0
- package/docs/reference/agents.md +36 -1
- package/package.json +7 -2
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* RuvllmProvider - Local LLM Inference via ruvllm
|
|
3
|
+
* RuvllmProvider - Local LLM Inference via @ruvector/ruvllm
|
|
4
4
|
*
|
|
5
|
-
* Provides local LLM inference
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* Features:
|
|
5
|
+
* Provides local LLM inference with advanced features:
|
|
6
|
+
* - TRM (Test-time Reasoning & Metacognition) for iterative refinement
|
|
7
|
+
* - SONA (Self-Organizing Neural Architecture) for continuous learning
|
|
9
8
|
* - Zero cloud costs for local inference
|
|
10
9
|
* - Low latency for local operations
|
|
11
10
|
* - Privacy-preserving (no data leaves the machine)
|
|
@@ -13,18 +12,26 @@
|
|
|
13
12
|
* - Model hot-swapping
|
|
14
13
|
*
|
|
15
14
|
* @module providers/RuvllmProvider
|
|
16
|
-
* @version
|
|
15
|
+
* @version 2.0.0
|
|
17
16
|
*/
|
|
18
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
18
|
exports.RuvllmProvider = void 0;
|
|
20
19
|
const child_process_1 = require("child_process");
|
|
21
20
|
const ILLMProvider_1 = require("./ILLMProvider");
|
|
22
21
|
const Logger_1 = require("../utils/Logger");
|
|
22
|
+
const ruvllm_loader_1 = require("../utils/ruvllm-loader");
|
|
23
23
|
/**
|
|
24
|
-
* RuvllmProvider - Local LLM inference implementation
|
|
24
|
+
* RuvllmProvider - Local LLM inference implementation with TRM and SONA
|
|
25
25
|
*
|
|
26
|
-
* This provider enables local LLM inference using ruvllm, providing
|
|
27
|
-
* cost-free, low-latency inference
|
|
26
|
+
* This provider enables local LLM inference using @ruvector/ruvllm, providing
|
|
27
|
+
* cost-free, low-latency inference with advanced learning capabilities.
|
|
28
|
+
*
|
|
29
|
+
* Features:
|
|
30
|
+
* - TRM for iterative quality improvement
|
|
31
|
+
* - SONA for continuous learning from trajectories
|
|
32
|
+
* - ReasoningBank for pattern reuse
|
|
33
|
+
* - Memory search for context-aware responses
|
|
34
|
+
* - LoRA adapters for task-specific optimization
|
|
28
35
|
*/
|
|
29
36
|
class RuvllmProvider {
|
|
30
37
|
constructor(config = {}) {
|
|
@@ -41,14 +48,23 @@ class RuvllmProvider {
|
|
|
41
48
|
contextSize: config.contextSize ?? 4096,
|
|
42
49
|
threads: config.threads ?? 4,
|
|
43
50
|
defaultTemperature: config.defaultTemperature ?? 0.7,
|
|
44
|
-
enableEmbeddings: config.enableEmbeddings ?? false
|
|
51
|
+
enableEmbeddings: config.enableEmbeddings ?? false,
|
|
52
|
+
enableTRM: config.enableTRM ?? true,
|
|
53
|
+
enableSONA: config.enableSONA ?? true,
|
|
54
|
+
maxTRMIterations: config.maxTRMIterations ?? 7,
|
|
55
|
+
convergenceThreshold: config.convergenceThreshold ?? 0.95,
|
|
56
|
+
sonaConfig: {
|
|
57
|
+
loraRank: config.sonaConfig?.loraRank ?? 8,
|
|
58
|
+
loraAlpha: config.sonaConfig?.loraAlpha ?? 16,
|
|
59
|
+
ewcLambda: config.sonaConfig?.ewcLambda ?? 2000
|
|
60
|
+
}
|
|
45
61
|
};
|
|
46
62
|
this.isInitialized = false;
|
|
47
63
|
this.baseUrl = `http://localhost:${this.config.port}`;
|
|
48
64
|
this.requestCount = 0;
|
|
49
65
|
}
|
|
50
66
|
/**
|
|
51
|
-
* Initialize the ruvllm provider
|
|
67
|
+
* Initialize the ruvllm provider with TRM and SONA support
|
|
52
68
|
*/
|
|
53
69
|
async initialize() {
|
|
54
70
|
if (this.isInitialized) {
|
|
@@ -56,20 +72,53 @@ class RuvllmProvider {
|
|
|
56
72
|
return;
|
|
57
73
|
}
|
|
58
74
|
try {
|
|
59
|
-
//
|
|
75
|
+
// Load ruvLLM via CJS (ESM build is broken)
|
|
76
|
+
const ruvllmModule = (0, ruvllm_loader_1.loadRuvLLM)();
|
|
77
|
+
if (!ruvllmModule) {
|
|
78
|
+
// Check if server is already running (fallback mode)
|
|
79
|
+
const isRunning = await this.checkServerHealth();
|
|
80
|
+
if (isRunning) {
|
|
81
|
+
this.isInitialized = true;
|
|
82
|
+
this.logger.info('Connected to existing ruvllm server (fallback mode, ruvLLM lib unavailable)');
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
throw new Error('RuvLLM library not available and no server running');
|
|
86
|
+
}
|
|
87
|
+
// Initialize RuvLLM core
|
|
88
|
+
this.ruvllm = new ruvllmModule.RuvLLM({
|
|
89
|
+
learningEnabled: this.config.enableSONA ?? true,
|
|
90
|
+
embeddingDim: 768,
|
|
91
|
+
ewcLambda: this.config.sonaConfig?.ewcLambda ?? 2000
|
|
92
|
+
});
|
|
93
|
+
// Initialize SONA components if enabled
|
|
94
|
+
if (this.config.enableSONA) {
|
|
95
|
+
this.sonaCoordinator = new ruvllmModule.SonaCoordinator();
|
|
96
|
+
this.reasoningBank = new ruvllmModule.ReasoningBank(0.85); // 85% similarity threshold
|
|
97
|
+
// Initialize LoRA manager
|
|
98
|
+
this.loraManager = new ruvllmModule.LoraManager();
|
|
99
|
+
this.logger.info('SONA components initialized', {
|
|
100
|
+
loraRank: this.config.sonaConfig?.loraRank,
|
|
101
|
+
loraAlpha: this.config.sonaConfig?.loraAlpha,
|
|
102
|
+
ewcLambda: this.config.sonaConfig?.ewcLambda
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
// Check if server is already running (fallback mode)
|
|
60
106
|
const isRunning = await this.checkServerHealth();
|
|
61
107
|
if (isRunning) {
|
|
62
108
|
this.isInitialized = true;
|
|
63
|
-
this.logger.info('Connected to existing ruvllm server');
|
|
109
|
+
this.logger.info('Connected to existing ruvllm server (fallback mode)');
|
|
64
110
|
return;
|
|
65
111
|
}
|
|
66
|
-
// Start ruvllm server
|
|
112
|
+
// Start ruvllm server as fallback
|
|
67
113
|
await this.startServer();
|
|
68
114
|
this.isInitialized = true;
|
|
69
115
|
this.logger.info('RuvllmProvider initialized', {
|
|
70
116
|
model: this.config.defaultModel,
|
|
71
117
|
port: this.config.port,
|
|
72
|
-
gpuLayers: this.config.gpuLayers
|
|
118
|
+
gpuLayers: this.config.gpuLayers,
|
|
119
|
+
enableTRM: this.config.enableTRM,
|
|
120
|
+
enableSONA: this.config.enableSONA,
|
|
121
|
+
maxTRMIterations: this.config.maxTRMIterations
|
|
73
122
|
});
|
|
74
123
|
}
|
|
75
124
|
catch (error) {
|
|
@@ -77,72 +126,307 @@ class RuvllmProvider {
|
|
|
77
126
|
}
|
|
78
127
|
}
|
|
79
128
|
/**
|
|
80
|
-
* Complete a prompt using
|
|
129
|
+
* Complete a prompt using ruvLLM with optional TRM refinement
|
|
81
130
|
*/
|
|
82
131
|
async complete(options) {
|
|
83
132
|
this.ensureInitialized();
|
|
133
|
+
// Use TRM if enabled and configured
|
|
134
|
+
if (this.config.enableTRM && options.trmConfig) {
|
|
135
|
+
const trmResponse = await this.completeTRM(options);
|
|
136
|
+
return trmResponse;
|
|
137
|
+
}
|
|
138
|
+
return this.completeBasic(options);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Complete with TRM (Test-time Reasoning & Metacognition)
|
|
142
|
+
*/
|
|
143
|
+
async completeTRM(options) {
|
|
144
|
+
const maxIterations = options.trmConfig?.maxIterations ?? this.config.maxTRMIterations ?? 7;
|
|
145
|
+
const convergenceThreshold = options.trmConfig?.convergenceThreshold ?? this.config.convergenceThreshold ?? 0.95;
|
|
146
|
+
const qualityMetric = options.trmConfig?.qualityMetric ?? 'coherence';
|
|
84
147
|
const startTime = Date.now();
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
headers: { 'Content-Type': 'application/json' },
|
|
108
|
-
body: JSON.stringify(requestBody),
|
|
109
|
-
signal: AbortSignal.timeout(this.config.timeout)
|
|
148
|
+
const history = [];
|
|
149
|
+
// Initial completion
|
|
150
|
+
let current = await this.completeBasic(options);
|
|
151
|
+
let quality = this.measureQuality(current, qualityMetric);
|
|
152
|
+
history.push({
|
|
153
|
+
iteration: 0,
|
|
154
|
+
quality,
|
|
155
|
+
improvement: 0,
|
|
156
|
+
reasoning: 'Initial completion'
|
|
157
|
+
});
|
|
158
|
+
this.logger.debug('TRM iteration 0', { quality, metric: qualityMetric });
|
|
159
|
+
// Iterative refinement
|
|
160
|
+
for (let i = 1; i < maxIterations; i++) {
|
|
161
|
+
// Refine using previous output
|
|
162
|
+
const refined = await this.refineTRM(current, options, qualityMetric);
|
|
163
|
+
const newQuality = this.measureQuality(refined, qualityMetric);
|
|
164
|
+
const improvement = newQuality - quality;
|
|
165
|
+
history.push({
|
|
166
|
+
iteration: i,
|
|
167
|
+
quality: newQuality,
|
|
168
|
+
improvement,
|
|
169
|
+
reasoning: `Refinement iteration ${i}`
|
|
110
170
|
});
|
|
111
|
-
|
|
112
|
-
|
|
171
|
+
this.logger.debug(`TRM iteration ${i}`, { quality: newQuality, improvement });
|
|
172
|
+
// Check convergence
|
|
173
|
+
if (improvement < (1 - convergenceThreshold)) {
|
|
174
|
+
this.logger.info('TRM converged', { iterations: i + 1, finalQuality: newQuality });
|
|
175
|
+
break;
|
|
113
176
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
177
|
+
current = refined;
|
|
178
|
+
quality = newQuality;
|
|
179
|
+
}
|
|
180
|
+
// Track trajectory if SONA enabled
|
|
181
|
+
if (this.config.enableSONA && this.sonaCoordinator) {
|
|
182
|
+
await this.trackTrajectory(this.extractInput(options), this.extractOutput(current), quality);
|
|
183
|
+
}
|
|
184
|
+
return {
|
|
185
|
+
...current,
|
|
186
|
+
trmIterations: history.length,
|
|
187
|
+
finalQuality: quality,
|
|
188
|
+
convergenceHistory: history,
|
|
189
|
+
metadata: {
|
|
190
|
+
...current.metadata,
|
|
191
|
+
trmLatency: Date.now() - startTime,
|
|
192
|
+
qualityMetric
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Basic completion without TRM
|
|
198
|
+
*/
|
|
199
|
+
async completeBasic(options) {
|
|
200
|
+
const startTime = Date.now();
|
|
201
|
+
try {
|
|
202
|
+
// Check if ruvLLM instance is available
|
|
203
|
+
if (this.ruvllm) {
|
|
204
|
+
// Use ruvLLM query API
|
|
205
|
+
const input = this.extractInput(options);
|
|
206
|
+
// Search memory for relevant context
|
|
207
|
+
const memoryResults = this.ruvllm.searchMemory(input, 5);
|
|
208
|
+
// Query with routing
|
|
209
|
+
const response = this.ruvllm.query(input, {
|
|
210
|
+
maxTokens: options.maxTokens || 2048,
|
|
211
|
+
temperature: options.temperature ?? this.config.defaultTemperature
|
|
212
|
+
});
|
|
213
|
+
// Build response
|
|
214
|
+
const result = {
|
|
215
|
+
content: [{
|
|
216
|
+
type: 'text',
|
|
217
|
+
text: response.text || ''
|
|
218
|
+
}],
|
|
219
|
+
usage: {
|
|
220
|
+
input_tokens: response.contextSize || 0,
|
|
221
|
+
output_tokens: this.estimateTokens(response.text || '')
|
|
222
|
+
},
|
|
223
|
+
model: response.model || this.config.defaultModel,
|
|
224
|
+
stop_reason: 'end_turn',
|
|
225
|
+
id: response.requestId || `ruvllm-${Date.now()}`,
|
|
226
|
+
metadata: {
|
|
227
|
+
latency: response.latencyMs || (Date.now() - startTime),
|
|
228
|
+
confidence: response.confidence,
|
|
229
|
+
memoryHits: memoryResults.length,
|
|
230
|
+
cost: 0
|
|
231
|
+
}
|
|
232
|
+
};
|
|
233
|
+
// Add to memory
|
|
234
|
+
this.ruvllm.addMemory(response.text, {
|
|
235
|
+
input,
|
|
236
|
+
timestamp: Date.now(),
|
|
237
|
+
model: response.model
|
|
238
|
+
});
|
|
239
|
+
this.requestCount++;
|
|
240
|
+
return result;
|
|
241
|
+
}
|
|
242
|
+
// Fallback to OpenAI-compatible API
|
|
243
|
+
return this.completeViaServer(options, startTime);
|
|
141
244
|
}
|
|
142
245
|
catch (error) {
|
|
143
246
|
throw new ILLMProvider_1.LLMProviderError(`Ruvllm completion failed: ${error.message}`, 'ruvllm', 'INFERENCE_ERROR', true, error);
|
|
144
247
|
}
|
|
145
248
|
}
|
|
249
|
+
/**
|
|
250
|
+
* Complete via OpenAI-compatible server (fallback)
|
|
251
|
+
*/
|
|
252
|
+
async completeViaServer(options, startTime) {
|
|
253
|
+
const requestBody = {
|
|
254
|
+
model: options.model || this.config.defaultModel,
|
|
255
|
+
messages: options.messages.map(m => ({
|
|
256
|
+
role: m.role,
|
|
257
|
+
content: typeof m.content === 'string' ? m.content : m.content.map(c => c.text || '').join('')
|
|
258
|
+
})),
|
|
259
|
+
max_tokens: options.maxTokens || 2048,
|
|
260
|
+
temperature: options.temperature ?? this.config.defaultTemperature,
|
|
261
|
+
stream: false
|
|
262
|
+
};
|
|
263
|
+
// Add system message if provided
|
|
264
|
+
if (options.system && options.system.length > 0) {
|
|
265
|
+
const systemContent = options.system.map(s => s.text).join('\n');
|
|
266
|
+
requestBody.messages = [
|
|
267
|
+
{ role: 'system', content: systemContent },
|
|
268
|
+
...requestBody.messages
|
|
269
|
+
];
|
|
270
|
+
}
|
|
271
|
+
const response = await fetch(`${this.baseUrl}/v1/chat/completions`, {
|
|
272
|
+
method: 'POST',
|
|
273
|
+
headers: { 'Content-Type': 'application/json' },
|
|
274
|
+
body: JSON.stringify(requestBody),
|
|
275
|
+
signal: AbortSignal.timeout(this.config.timeout)
|
|
276
|
+
});
|
|
277
|
+
if (!response.ok) {
|
|
278
|
+
throw new Error(`Server returned ${response.status}: ${await response.text()}`);
|
|
279
|
+
}
|
|
280
|
+
const data = await response.json();
|
|
281
|
+
this.requestCount++;
|
|
282
|
+
return {
|
|
283
|
+
content: [{
|
|
284
|
+
type: 'text',
|
|
285
|
+
text: data.choices?.[0]?.message?.content || ''
|
|
286
|
+
}],
|
|
287
|
+
usage: {
|
|
288
|
+
input_tokens: data.usage?.prompt_tokens || 0,
|
|
289
|
+
output_tokens: data.usage?.completion_tokens || 0
|
|
290
|
+
},
|
|
291
|
+
model: data.model || this.config.defaultModel,
|
|
292
|
+
stop_reason: this.mapStopReason(data.choices?.[0]?.finish_reason),
|
|
293
|
+
id: data.id || `ruvllm-${Date.now()}`,
|
|
294
|
+
metadata: {
|
|
295
|
+
latency: Date.now() - startTime,
|
|
296
|
+
cost: 0
|
|
297
|
+
}
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Refine output using TRM
|
|
302
|
+
*/
|
|
303
|
+
async refineTRM(previous, options, metric) {
|
|
304
|
+
const previousText = previous.content[0].text;
|
|
305
|
+
// Create refinement prompt
|
|
306
|
+
const refinementMessages = [
|
|
307
|
+
...options.messages,
|
|
308
|
+
{
|
|
309
|
+
role: 'assistant',
|
|
310
|
+
content: previousText
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
role: 'user',
|
|
314
|
+
content: `Review and improve the above response to maximize ${metric}. Provide a refined version that addresses any weaknesses.`
|
|
315
|
+
}
|
|
316
|
+
];
|
|
317
|
+
return this.completeBasic({
|
|
318
|
+
...options,
|
|
319
|
+
messages: refinementMessages
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Measure quality of a completion
|
|
324
|
+
*/
|
|
325
|
+
measureQuality(response, metric) {
|
|
326
|
+
const text = response.content[0].text;
|
|
327
|
+
switch (metric) {
|
|
328
|
+
case 'coherence':
|
|
329
|
+
return this.measureCoherence(text);
|
|
330
|
+
case 'coverage':
|
|
331
|
+
return this.measureCoverage(text);
|
|
332
|
+
case 'diversity':
|
|
333
|
+
return this.measureDiversity(text);
|
|
334
|
+
default:
|
|
335
|
+
return this.measureCoherence(text);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Measure coherence (sentence flow, structure)
|
|
340
|
+
*/
|
|
341
|
+
measureCoherence(text) {
|
|
342
|
+
const sentences = text.split(/[.!?]+/).filter(s => s.trim().length > 0);
|
|
343
|
+
if (sentences.length === 0)
|
|
344
|
+
return 0;
|
|
345
|
+
// Simple heuristics:
|
|
346
|
+
// - Longer responses are more coherent
|
|
347
|
+
// - More sentences indicate better structure
|
|
348
|
+
// - Normalized by length to avoid bias
|
|
349
|
+
const avgSentenceLength = text.length / sentences.length;
|
|
350
|
+
const normalizedLength = Math.min(avgSentenceLength / 100, 1.0);
|
|
351
|
+
const sentenceCount = Math.min(sentences.length / 10, 1.0);
|
|
352
|
+
return (normalizedLength + sentenceCount) / 2;
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Measure coverage (breadth of content)
|
|
356
|
+
*/
|
|
357
|
+
measureCoverage(text) {
|
|
358
|
+
// Measure unique words as proxy for coverage
|
|
359
|
+
const words = text.toLowerCase().split(/\s+/);
|
|
360
|
+
const uniqueWords = new Set(words);
|
|
361
|
+
if (words.length === 0)
|
|
362
|
+
return 0;
|
|
363
|
+
return Math.min(uniqueWords.size / words.length, 1.0);
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Measure diversity (variety in expression)
|
|
367
|
+
*/
|
|
368
|
+
measureDiversity(text) {
|
|
369
|
+
// Measure vocabulary richness
|
|
370
|
+
const words = text.toLowerCase().split(/\s+/).filter(w => w.length > 3);
|
|
371
|
+
const uniqueWords = new Set(words);
|
|
372
|
+
if (words.length === 0)
|
|
373
|
+
return 0;
|
|
374
|
+
// Type-token ratio
|
|
375
|
+
return Math.min(uniqueWords.size / words.length * 2, 1.0);
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Track trajectory in SONA
|
|
379
|
+
*/
|
|
380
|
+
async trackTrajectory(input, output, confidence) {
|
|
381
|
+
if (!this.sonaCoordinator)
|
|
382
|
+
return;
|
|
383
|
+
try {
|
|
384
|
+
const ruvllmModule = (0, ruvllm_loader_1.loadRuvLLM)();
|
|
385
|
+
if (!ruvllmModule)
|
|
386
|
+
return;
|
|
387
|
+
const trajectory = new ruvllmModule.TrajectoryBuilder()
|
|
388
|
+
.startStep('query', input)
|
|
389
|
+
.endStep(output, confidence)
|
|
390
|
+
.complete('success');
|
|
391
|
+
this.sonaCoordinator.recordTrajectory(trajectory);
|
|
392
|
+
// Store in reasoning bank if high confidence
|
|
393
|
+
// ReasoningBank.store(type, embedding, metadata)
|
|
394
|
+
if (this.reasoningBank && confidence > 0.85 && this.ruvllm) {
|
|
395
|
+
const rawEmbedding = this.ruvllm.embed(input);
|
|
396
|
+
// Convert Float32Array to number[] for ReasoningBank
|
|
397
|
+
const embedding = Array.from(rawEmbedding);
|
|
398
|
+
this.reasoningBank.store('query_response', embedding, {
|
|
399
|
+
input,
|
|
400
|
+
output,
|
|
401
|
+
confidence,
|
|
402
|
+
timestamp: Date.now()
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
this.logger.debug('Trajectory tracked', { confidence, hasReasoningBank: !!this.reasoningBank });
|
|
406
|
+
}
|
|
407
|
+
catch (error) {
|
|
408
|
+
this.logger.warn('Failed to track trajectory', { error: error.message });
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Extract input text from options
|
|
413
|
+
*/
|
|
414
|
+
extractInput(options) {
|
|
415
|
+
const messages = options.messages.map(m => typeof m.content === 'string' ? m.content : m.content.map(c => c.text || '').join(''));
|
|
416
|
+
return messages.join(' ');
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* Extract output text from response
|
|
420
|
+
*/
|
|
421
|
+
extractOutput(response) {
|
|
422
|
+
return response.content.map(c => c.text).join('');
|
|
423
|
+
}
|
|
424
|
+
/**
|
|
425
|
+
* Estimate token count
|
|
426
|
+
*/
|
|
427
|
+
estimateTokens(text) {
|
|
428
|
+
return Math.ceil(text.length / 4);
|
|
429
|
+
}
|
|
146
430
|
/**
|
|
147
431
|
* Stream a completion
|
|
148
432
|
*/
|
|
@@ -219,14 +503,26 @@ class RuvllmProvider {
|
|
|
219
503
|
}
|
|
220
504
|
}
|
|
221
505
|
/**
|
|
222
|
-
* Generate embeddings
|
|
506
|
+
* Generate embeddings using ruvLLM
|
|
223
507
|
*/
|
|
224
508
|
async embed(options) {
|
|
225
509
|
this.ensureInitialized();
|
|
226
|
-
if (!this.config.enableEmbeddings) {
|
|
227
|
-
throw new ILLMProvider_1.LLMProviderError('Embeddings not enabled. Set enableEmbeddings: true in config.', 'ruvllm', 'UNSUPPORTED', false);
|
|
228
|
-
}
|
|
229
510
|
try {
|
|
511
|
+
// Use ruvLLM embedding if available
|
|
512
|
+
if (this.ruvllm) {
|
|
513
|
+
const rawEmbedding = this.ruvllm.embed(options.text);
|
|
514
|
+
// Convert Float32Array to number[] for consistent return type
|
|
515
|
+
const embedding = Array.from(rawEmbedding);
|
|
516
|
+
return {
|
|
517
|
+
embedding,
|
|
518
|
+
model: options.model || 'ruvllm-embedding',
|
|
519
|
+
tokens: this.estimateTokens(options.text)
|
|
520
|
+
};
|
|
521
|
+
}
|
|
522
|
+
// Fallback to server API
|
|
523
|
+
if (!this.config.enableEmbeddings) {
|
|
524
|
+
throw new ILLMProvider_1.LLMProviderError('Embeddings not enabled. Set enableEmbeddings: true in config.', 'ruvllm', 'UNSUPPORTED', false);
|
|
525
|
+
}
|
|
230
526
|
const response = await fetch(`${this.baseUrl}/v1/embeddings`, {
|
|
231
527
|
method: 'POST',
|
|
232
528
|
headers: { 'Content-Type': 'application/json' },
|
|
@@ -253,9 +549,7 @@ class RuvllmProvider {
|
|
|
253
549
|
* Count tokens in text
|
|
254
550
|
*/
|
|
255
551
|
async countTokens(options) {
|
|
256
|
-
|
|
257
|
-
// Most models use ~4 characters per token
|
|
258
|
-
return Math.ceil(options.text.length / 4);
|
|
552
|
+
return this.estimateTokens(options.text);
|
|
259
553
|
}
|
|
260
554
|
/**
|
|
261
555
|
* Health check
|
|
@@ -263,6 +557,22 @@ class RuvllmProvider {
|
|
|
263
557
|
async healthCheck() {
|
|
264
558
|
const startTime = Date.now();
|
|
265
559
|
try {
|
|
560
|
+
// Check ruvLLM instance
|
|
561
|
+
if (this.ruvllm) {
|
|
562
|
+
return {
|
|
563
|
+
healthy: true,
|
|
564
|
+
latency: Date.now() - startTime,
|
|
565
|
+
timestamp: new Date(),
|
|
566
|
+
metadata: {
|
|
567
|
+
model: this.config.defaultModel,
|
|
568
|
+
requestCount: this.requestCount,
|
|
569
|
+
sonaEnabled: !!this.sonaCoordinator,
|
|
570
|
+
trmEnabled: this.config.enableTRM,
|
|
571
|
+
mode: 'native'
|
|
572
|
+
}
|
|
573
|
+
};
|
|
574
|
+
}
|
|
575
|
+
// Fallback to server health check
|
|
266
576
|
const isHealthy = await this.checkServerHealth();
|
|
267
577
|
return {
|
|
268
578
|
healthy: isHealthy,
|
|
@@ -271,7 +581,8 @@ class RuvllmProvider {
|
|
|
271
581
|
metadata: {
|
|
272
582
|
model: this.config.defaultModel,
|
|
273
583
|
port: this.config.port,
|
|
274
|
-
requestCount: this.requestCount
|
|
584
|
+
requestCount: this.requestCount,
|
|
585
|
+
mode: 'server'
|
|
275
586
|
}
|
|
276
587
|
};
|
|
277
588
|
}
|
|
@@ -289,7 +600,7 @@ class RuvllmProvider {
|
|
|
289
600
|
getMetadata() {
|
|
290
601
|
return {
|
|
291
602
|
name: 'ruvllm',
|
|
292
|
-
version: '
|
|
603
|
+
version: '2.0.0',
|
|
293
604
|
models: [
|
|
294
605
|
'llama-3.2-3b-instruct',
|
|
295
606
|
'llama-3.2-1b-instruct',
|
|
@@ -305,7 +616,7 @@ class RuvllmProvider {
|
|
|
305
616
|
vision: false
|
|
306
617
|
},
|
|
307
618
|
costs: {
|
|
308
|
-
inputPerMillion: 0,
|
|
619
|
+
inputPerMillion: 0,
|
|
309
620
|
outputPerMillion: 0
|
|
310
621
|
},
|
|
311
622
|
location: 'local'
|
|
@@ -319,6 +630,11 @@ class RuvllmProvider {
|
|
|
319
630
|
this.serverProcess.kill();
|
|
320
631
|
this.serverProcess = undefined;
|
|
321
632
|
}
|
|
633
|
+
// Clean up ruvLLM resources
|
|
634
|
+
this.ruvllm = undefined;
|
|
635
|
+
this.sonaCoordinator = undefined;
|
|
636
|
+
this.reasoningBank = undefined;
|
|
637
|
+
this.loraManager = undefined;
|
|
322
638
|
this.isInitialized = false;
|
|
323
639
|
this.logger.info('RuvllmProvider shutdown', {
|
|
324
640
|
requestCount: this.requestCount
|
|
@@ -328,10 +644,10 @@ class RuvllmProvider {
|
|
|
328
644
|
* Track cost (always 0 for local inference)
|
|
329
645
|
*/
|
|
330
646
|
trackCost(usage) {
|
|
331
|
-
return 0;
|
|
647
|
+
return 0;
|
|
332
648
|
}
|
|
333
649
|
/**
|
|
334
|
-
* Start the ruvllm server
|
|
650
|
+
* Start the ruvllm server (fallback mode)
|
|
335
651
|
*/
|
|
336
652
|
async startServer() {
|
|
337
653
|
return new Promise((resolve, reject) => {
|
|
@@ -378,7 +694,7 @@ class RuvllmProvider {
|
|
|
378
694
|
});
|
|
379
695
|
}
|
|
380
696
|
/**
|
|
381
|
-
* Check if server is healthy
|
|
697
|
+
* Check if server is healthy (fallback mode)
|
|
382
698
|
*/
|
|
383
699
|
async checkServerHealth() {
|
|
384
700
|
try {
|