Phase 1.1 - OllamaProvider: - Add OllamaProvider with all 13 ILLMProvider methods - Add unit and integration tests for OllamaProvider - Integrate with LLMProviderFactory auto-detection Phase 1.2 - Agent Abstraction: - Add IAgentLLM interface for provider-independent LLM access - Add AgentLLMAdapter bridging ILLMProvider to IAgentLLM - Update BaseAgent with getAgentLLM() method - Migrate 4 LLM-active agents: TestGenerator, CoverageAnalyzer, CodeIntelligence, N8nBase - 15 n8n agents inherit capability via N8nBaseAgent - 17 algorithmic agents work without LLM by design Phase 1.3 - Configuration: - Add ProviderConfig types and ConfigLoader - Add CLI providers commands (list, status, switch, test) - Add example provider configurations Documentation: - Update implementation plan with accurate agent categorization - Add usage examples for IAgentLLM patterns - Add provider guides and research documents 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
11 KiB
Stream 3: Configuration System Implementation
Overview
Implemented a comprehensive multi-provider configuration management system that enables LLM provider independence through YAML-based configuration files.
Implementation Date
2024-12-23
Components Delivered
1. Core Configuration Types (src/config/ProviderConfig.ts)
Key Features:
- Support for 8 LLM providers: Ollama, Groq, OpenRouter, Claude, ruvLLM, Google, Together, GitHub
- 4 deployment modes:
local_first,hosted,free_only,hybrid - 9 task types for intelligent model routing
- Rate limiting configuration
- Cost tracking and budgeting
- Fallback chain configuration
- Provider capabilities detection
Types Exported:
ProviderConfig- Individual provider configurationMultiProviderConfig- Multi-provider system configurationTaskType- Task-specific routing typesDeploymentMode- Deployment strategy enumerationRateLimitConfig- Rate limiting configurationCostConfig- Cost tracking configurationDEFAULT_PROVIDER_CONFIGS- Default configurations for all 8 providersDEFAULT_MODE_CONFIGS- Default configurations for all 4 modes
2. Configuration Loader (src/config/ConfigLoader.ts)
Key Features:
- YAML file loading from multiple locations
- Environment variable loading and interpolation
- Configuration validation with detailed error reporting
- Deep merging with defaults
- Configuration saving
Supported Locations:
.aqe/providers.yaml.aqe/providers.ymlaqe.config.yamlaqe.config.yml- Custom path via
configPathoption
Environment Variable Support:
${VAR_NAME}syntax interpolation$VAR_NAMEsyntax interpolation- Automatic provider detection based on API keys
- Standard variable mapping:
ANTHROPIC_API_KEY→claude.apiKeyOPENROUTER_API_KEY→openrouter.apiKeyGROQ_API_KEY→groq.apiKeyGOOGLE_API_KEY→google.apiKeyTOGETHER_API_KEY→together.apiKeyGITHUB_TOKEN→github.apiKeyOLLAMA_HOST→ollama.baseUrlRUVLLM_HOST→ruvllm.baseUrlLLM_PROVIDER→defaultProviderLLM_MODE→mode
Validation Features:
- Mode validation
- Provider type validation
- Required field validation
- Rate limit validation
- Cost configuration validation
- Fallback chain validation
- Warnings for potential issues
3. Module Exports (src/config/index.ts)
Central export point for all configuration functionality.
4. Example Configurations (examples/configs/)
Four production-ready configuration templates:
local-first.yaml
- Use Case: Development, cost-sensitive, privacy-focused
- Primary: Ollama (local, free)
- Fallback: OpenRouter (cost-effective cloud)
- Cost: $0-5/day
- Model Routing:
- Test generation → Qwen 2.5 Coder 7B
- Code review → DeepSeek Coder 6.7B
- Documentation → Llama 3.2 3B
hosted-only.yaml
- Use Case: Production, CI/CD, enterprise
- Primary: Groq (fast, generous free tier)
- Secondary: OpenRouter (multi-model routing)
- Tertiary: Claude API (premium quality)
- Cost: $10-50/day
- Model Routing:
- Test generation → Llama 3.3 70B
- Code review → Claude 3.5 Sonnet
- Security → Claude 3.5 Sonnet
free-tier.yaml
- Use Case: Open-source, learning, personal projects
- Providers: Groq → Google Gemini → GitHub Models → Ollama
- Cost: $0/day (100% free)
- Model Routing:
- Test generation → Llama 3.3 70B (Groq)
- Code review → Gemini 2.0 Flash
- Documentation → Gemini 1.5 Flash
hybrid.yaml
- Use Case: Adaptive workloads, cost optimization
- Strategy: Intelligent routing based on task complexity
- Providers: Ollama (simple) → Groq (complex) → OpenRouter (critical)
- Cost: $5-20/day (adaptive)
- Model Routing:
- Documentation → Llama 3.2 3B (local)
- Test generation → Llama 3.3 70B (Groq)
- Security → Claude 3.5 Sonnet (OpenRouter)
5. Documentation
Configuration Guide (docs/guides/configuration-guide.md)
Comprehensive 400+ line guide covering:
- Quick start instructions
- Deployment mode deep-dives
- Configuration syntax reference
- Task-specific routing examples
- Environment variable setup
- Cost management strategies
- Health monitoring
- Fallback chains
- Troubleshooting
- Best practices
Examples README (examples/configs/README.md)
Detailed README with:
- Configuration file descriptions
- Deployment mode comparison table
- Quick start instructions
- Configuration syntax examples
- Troubleshooting tips
- Next steps
6. Test Suite (tests/config/ConfigLoader.test.ts)
Comprehensive test coverage for:
- YAML file loading
- Environment variable loading
- Variable interpolation (
${VAR}and$VAR) - Configuration validation
- Default merging
- Configuration saving
- Integration scenarios
Test Scenarios (10+ tests):
- Valid YAML loading
- Non-existent file handling
- Default location detection
- Environment variable detection
- Auto-provider initialization
- Variable interpolation (both syntaxes)
- Mode-specific defaults
- Provider-specific defaults
- Validation (valid/invalid configs)
- Error reporting
Architecture Decisions
1. YAML as Primary Format
Rationale: Human-readable, widely supported, excellent for configuration
2. Environment Variable Interpolation
Rationale: Enables secrets management, CI/CD integration, 12-factor app compliance
3. Multi-Source Configuration Loading
Rationale: Flexibility for different deployment scenarios
4. Deep Merge Strategy
Rationale: Allows partial configuration with sensible defaults
5. Validation with Warnings
Rationale: Catch errors early while allowing flexibility
Integration Points
Current Integration Required
The configuration system is ready to integrate with:
-
LLMProviderFactory (
src/providers/LLMProviderFactory.ts)- Update factory to accept
MultiProviderConfig - Add configuration-based initialization
- Respect priority ordering
- Implement rate limiting
- Implement cost budgets
- Update factory to accept
-
CLI (future work)
aqe config show- Display current configaqe config validate- Validate config fileaqe config init- Initialize from templateaqe providers test <provider>- Test specific provider
-
Agent System (future work)
- Use task-specific model routing
- Respect fallback chains
- Track costs per agent
Usage Examples
Loading Configuration
import { loadConfig } from './src/config';
// Auto-load from default locations
const config = await loadConfig();
// Load from specific file
const config = await loadConfig({
configPath: './my-config.yaml',
loadFromEnv: true,
mergeDefaults: true,
validate: true,
});
Validation
import { validateConfig } from './src/config';
const result = validateConfig(config);
if (!result.valid) {
console.error('Validation errors:', result.errors);
} else if (result.warnings.length > 0) {
console.warn('Warnings:', result.warnings);
}
Environment Variables
# Set API keys
export GROQ_API_KEY="gsk_..."
export OPENROUTER_API_KEY="sk-or-v1-..."
# Override mode
export LLM_MODE="local_first"
# Initialize
aqe init
Cost Management
Budget Configuration
costBudget:
daily: 10.0 # $10/day limit
monthly: 250.0 # $250/month limit
warnThreshold: 80 # Warn at 80%
enforceLimit: true # Block when exceeded
Cost Tracking
All providers include cost configuration:
providers:
- type: groq
costPer1MTokens:
input: 0.59
output: 0.79
Premium providers with caching:
providers:
- type: claude
costPer1MTokens:
input: 3.0
output: 15.0
cacheReadMultiplier: 0.1 # 90% discount
cacheWriteMultiplier: 1.25 # 25% premium
Task-Specific Routing
Route different task types to specialized models:
providers:
- type: openrouter
defaultModel: anthropic/claude-3.5-haiku
modelOverrides:
test-generation: qwen/qwen-2.5-coder-32b-instruct
code-review: anthropic/claude-3.5-sonnet
security-scanning: anthropic/claude-3.5-sonnet
documentation: google/gemini-flash-1.5-8b
Next Steps
Stream 4: Factory Integration (Coder Agent D)
Update LLMProviderFactory to:
- Accept
MultiProviderConfigin constructor - Initialize providers based on configuration
- Respect priority ordering
- Implement rate limiting
- Implement cost tracking and budgets
- Support hot-swapping configurations
Stream 5: CLI Commands (Future)
Implement CLI commands:
aqe config showaqe config validateaqe config init --template local-firstaqe providers listaqe providers test groqaqe costs summary
Files Created
Source Code
/workspaces/agentic-qe-cf/src/config/ProviderConfig.ts- Core types (530 lines)/workspaces/agentic-qe-cf/src/config/ConfigLoader.ts- Loader implementation (450 lines)/workspaces/agentic-qe-cf/src/config/index.ts- Module exports (30 lines)
Example Configurations
/workspaces/agentic-qe-cf/examples/configs/local-first.yaml- Local-first template/workspaces/agentic-qe-cf/examples/configs/hosted-only.yaml- Hosted-only template/workspaces/agentic-qe-cf/examples/configs/free-tier.yaml- Free-tier template/workspaces/agentic-qe-cf/examples/configs/hybrid.yaml- Hybrid template/workspaces/agentic-qe-cf/examples/configs/README.md- Examples documentation
Documentation
/workspaces/agentic-qe-cf/docs/guides/configuration-guide.md- Comprehensive guide/workspaces/agentic-qe-cf/docs/implementation/stream3-config-system.md- This file
Tests
/workspaces/agentic-qe-cf/tests/config/ConfigLoader.test.ts- Test suite
Success Criteria
- ✅ TypeScript types for all config options
- ✅ YAML config loader with validation
- ✅ Environment variable interpolation works
- ✅ Example configs for all 4 deployment modes (local_first, hosted, free_only, hybrid)
- ✅ Config schema documented
- ✅ Comprehensive test suite
- ✅ Production-ready examples
- ✅ Integration documentation
Dependencies
yaml@2.8.2- Already installed ✅@jest/globals- Already installed ✅- No additional dependencies required
Summary
Successfully implemented a production-ready multi-provider configuration system with:
- 11 files created
- 8 providers supported
- 4 deployment modes
- 9 task types for routing
- Environment variable interpolation
- Comprehensive validation
- Extensive documentation
- Full test coverage
The system is ready for integration with the LLMProviderFactory (Stream 4) and future CLI commands (Stream 5).