quantum-cli-core
Version:
Quantum CLI Core - Multi-LLM Collaboration System
190 lines • 9.55 kB
JavaScript
/**
* @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