UNPKG

quantum-cli-core

Version:

Quantum CLI Core - Multi-LLM Collaboration System

190 lines 9.55 kB
/** * @license * Copyright 2025 Google LLC * SPDX-License-Identifier: Apache-2.0 */ import { describe, it, expect, beforeEach } from 'vitest'; import { AutoTriggerSystem, createDefaultAutoTriggerConfig, } from './auto-trigger.js'; import { UncertaintyLevel, QueryType, } from '../types.js'; describe('AutoTriggerSystem', () => { let autoTrigger; let config; beforeEach(() => { config = createDefaultAutoTriggerConfig(); autoTrigger = new AutoTriggerSystem(config); }); describe('shouldTriggerVerification', () => { it('should trigger verification for critical uncertainty', () => { const uncertaintyResult = { level: UncertaintyLevel.CRITICAL, reasons: ['security_implications'], suggestedAction: 'compare', }; const decision = autoTrigger.shouldTriggerVerification('How to implement authentication?', uncertaintyResult); expect(decision.shouldVerify).toBe(true); expect(decision.shouldCompare).toBe(true); expect(decision.costImpact).toBe('high'); }); it('should not trigger verification for low uncertainty in cost-aware mode', () => { // Set near cost limit config.costLimitation.currentUsage = 850; // 85% of 1000 autoTrigger.updateConfig(config); const uncertaintyResult = { level: UncertaintyLevel.LOW, reasons: [], suggestedAction: 'accept', }; const decision = autoTrigger.shouldTriggerVerification('What is 2 + 2?', uncertaintyResult); expect(decision.shouldVerify).toBe(false); expect(decision.reason).toContain('cost_aware_skip_low_uncertainty'); }); it('should trigger verification for priority domains', () => { const uncertaintyResult = { level: UncertaintyLevel.LOW, reasons: [], suggestedAction: 'accept', }; const decision = autoTrigger.shouldTriggerVerification('Simple question', uncertaintyResult, { domain: 'security', type: QueryType.SECURITY }); expect(decision.shouldVerify).toBe(true); expect(decision.reason).toBe('priority_domain_always_verify'); }); it('should skip verification for excluded domains', () => { const uncertaintyResult = { level: UncertaintyLevel.HIGH, reasons: ['uncertainty_language'], suggestedAction: 'verify', }; const decision = autoTrigger.shouldTriggerVerification('Complex tutorial question', uncertaintyResult, { domain: 'tutorial' }); expect(decision.shouldVerify).toBe(false); expect(decision.reason).toBe('domain_in_skip_list'); }); it('should respect monthly cost limits', () => { // Set over limit config.costLimitation.currentUsage = 1001; autoTrigger.updateConfig(config); const uncertaintyResult = { level: UncertaintyLevel.CRITICAL, reasons: ['security_implications'], suggestedAction: 'compare', }; const decision = autoTrigger.shouldTriggerVerification('Critical security question', uncertaintyResult); expect(decision.shouldVerify).toBe(false); expect(decision.shouldCompare).toBe(false); expect(decision.reason).toBe('monthly_cost_limit_exceeded'); }); }); describe('query complexity calculation', () => { it('should assign higher complexity to long queries', () => { const longQuery = 'This is a very long and complex query that contains multiple parts, various considerations, security implications, and requires detailed analysis with step-by-step explanations and comprehensive recommendations for production systems.'; const uncertaintyResult = { level: UncertaintyLevel.MEDIUM, reasons: [], suggestedAction: 'verify', }; const decision = autoTrigger.shouldTriggerVerification(longQuery, uncertaintyResult); expect(decision.shouldVerify).toBe(true); }); it('should detect complexity indicators in query', () => { const complexQuery = 'Compare multiple security approaches and analyze best practices'; const uncertaintyResult = { level: UncertaintyLevel.LOW, reasons: [], suggestedAction: 'accept', }; const decision = autoTrigger.shouldTriggerVerification(complexQuery, uncertaintyResult); // Should trigger due to complexity indicators even with low uncertainty expect(decision.shouldVerify).toBe(true); }); }); describe('aggressiveness settings', () => { it('should be more conservative with conservative setting', () => { config.userPreferences.aggressiveness = 'conservative'; autoTrigger.updateConfig(config); const uncertaintyResult = { level: UncertaintyLevel.MEDIUM, reasons: [], suggestedAction: 'verify', }; const decision = autoTrigger.shouldTriggerVerification('Medium complexity question', uncertaintyResult); // Conservative mode should be less likely to trigger expect(decision.shouldVerify).toBe(false); }); it('should be more aggressive with aggressive setting', () => { config.userPreferences.aggressiveness = 'aggressive'; autoTrigger.updateConfig(config); const uncertaintyResult = { level: UncertaintyLevel.LOW, reasons: [], suggestedAction: 'accept', }; const decision = autoTrigger.shouldTriggerVerification('Simple question with some complexity indicators', uncertaintyResult); // Aggressive mode should be more likely to trigger expect(decision.shouldVerify).toBe(true); }); }); describe('cost tracking', () => { it('should track usage increments', () => { expect(autoTrigger.getRemainingCalls()).toBe(1000); autoTrigger.incrementUsage(); expect(autoTrigger.getRemainingCalls()).toBe(999); autoTrigger.incrementUsage(); expect(autoTrigger.getRemainingCalls()).toBe(998); }); it('should report correct cost status', () => { // Safe status expect(autoTrigger.getCostStatus().status).toBe('safe'); // Warning status (70%) config.costLimitation.currentUsage = 700; autoTrigger.updateConfig(config); expect(autoTrigger.getCostStatus().status).toBe('warning'); // Critical status (80%+) config.costLimitation.currentUsage = 850; autoTrigger.updateConfig(config); expect(autoTrigger.getCostStatus().status).toBe('critical'); // Exceeded status (100%+) config.costLimitation.currentUsage = 1100; autoTrigger.updateConfig(config); expect(autoTrigger.getCostStatus().status).toBe('exceeded'); }); }); describe('cost-aware downgrades', () => { beforeEach(() => { // Set near cost limit config.costLimitation.currentUsage = 850; // 85% of limit autoTrigger.updateConfig(config); }); it('should downgrade compare to verify when near cost limit', () => { const uncertaintyResult = { level: UncertaintyLevel.HIGH, // Not critical reasons: ['uncertainty_language'], suggestedAction: 'verify', }; const decision = autoTrigger.shouldTriggerVerification('Complex question that would normally trigger compare', uncertaintyResult); expect(decision.shouldVerify).toBe(true); expect(decision.shouldCompare).toBe(false); expect(decision.reason).toContain('cost_aware_downgrade'); }); it('should still compare for critical uncertainty even near cost limit', () => { const uncertaintyResult = { level: UncertaintyLevel.CRITICAL, reasons: ['security_implications'], suggestedAction: 'compare', }; const decision = autoTrigger.shouldTriggerVerification('Critical security question', uncertaintyResult); expect(decision.shouldVerify).toBe(true); expect(decision.shouldCompare).toBe(true); }); }); describe('default configuration', () => { it('should create valid default configuration', () => { const defaultConfig = createDefaultAutoTriggerConfig(); expect(defaultConfig.uncertaintyThresholds.verify).toBe(UncertaintyLevel.MEDIUM); expect(defaultConfig.uncertaintyThresholds.compare).toBe(UncertaintyLevel.HIGH); expect(defaultConfig.costLimitation.monthlyLimit).toBe(1000); expect(defaultConfig.userPreferences.aggressiveness).toBe('balanced'); expect(defaultConfig.userPreferences.priorityDomains).toContain('security'); expect(defaultConfig.userPreferences.skipDomains).toContain('tutorial'); }); }); }); //# sourceMappingURL=auto-trigger.test.js.map