feat: Phase 5.3 - Multi-Agent Learning Infrastructure
Implement intelligent agent learning from Knowledge Graph execution history
with per-task-type expertise tracking, recency bias, and learning curves.
## Phase 5.3 Implementation
### Learning Infrastructure (✅ Complete)
- LearningProfileService with per-task-type expertise metrics
- TaskTypeExpertise model tracking success_rate, confidence, learning curves
- Recency bias weighting: recent 7 days weighted 3x higher (exponential decay)
- Confidence scoring prevents overfitting: min(1.0, executions / 20)
- Learning curves computed from daily execution windows
### Agent Scoring Service (✅ Complete)
- Unified AgentScore combining SwarmCoordinator + learning profiles
- Scoring formula: 0.3*base + 0.5*expertise + 0.2*confidence
- Rank agents by combined score for intelligent assignment
- Support for recency-biased scoring (recent_success_rate)
- Methods: rank_agents, select_best, rank_agents_with_recency
### KG Integration (✅ Complete)
- KGPersistence::get_executions_for_task_type() - query by agent + task type
- KGPersistence::get_agent_executions() - all executions for agent
- Coordinator::load_learning_profile_from_kg() - core KG→Learning integration
- Coordinator::load_all_learning_profiles() - batch load for multiple agents
- Convert PersistedExecution → ExecutionData for learning calculations
### Agent Assignment Integration (✅ Complete)
- AgentCoordinator uses learning profiles for task assignment
- extract_task_type() infers task type from title/description
- assign_task() scores candidates using AgentScoringService
- Fallback to load-based selection if no learning data available
- Learning profiles stored in coordinator.learning_profiles RwLock
### Profile Adapter Enhancements (✅ Complete)
- create_learning_profile() - initialize empty profiles
- add_task_type_expertise() - set task-type expertise
- update_profile_with_learning() - update swarm profiles from learning
## Files Modified
### vapora-knowledge-graph/src/persistence.rs (+30 lines)
- get_executions_for_task_type(agent_id, task_type, limit)
- get_agent_executions(agent_id, limit)
### vapora-agents/src/coordinator.rs (+100 lines)
- load_learning_profile_from_kg() - core KG integration method
- load_all_learning_profiles() - batch loading for agents
- assign_task() already uses learning-based scoring via AgentScoringService
### Existing Complete Implementation
- vapora-knowledge-graph/src/learning.rs - calculation functions
- vapora-agents/src/learning_profile.rs - data structures and expertise
- vapora-agents/src/scoring.rs - unified scoring service
- vapora-agents/src/profile_adapter.rs - adapter methods
## Tests Passing
- learning_profile: 7 tests ✅
- scoring: 5 tests ✅
- profile_adapter: 6 tests ✅
- coordinator: learning-specific tests ✅
## Data Flow
1. Task arrives → AgentCoordinator::assign_task()
2. Extract task_type from description
3. Query KG for task-type executions (load_learning_profile_from_kg)
4. Calculate expertise with recency bias
5. Score candidates (SwarmCoordinator + learning)
6. Assign to top-scored agent
7. Execution result → KG → Update learning profiles
## Key Design Decisions
✅ Recency bias: 7-day half-life with 3x weight for recent performance
✅ Confidence scoring: min(1.0, total_executions / 20) prevents overfitting
✅ Hierarchical scoring: 30% base load, 50% expertise, 20% confidence
✅ KG query limit: 100 recent executions per task-type for performance
✅ Async loading: load_learning_profile_from_kg supports concurrent loads
## Next: Phase 5.4 - Cost Optimization
Ready to implement budget enforcement and cost-aware provider selection.
2026-01-11 13:03:53 +00:00
|
|
|
# Changelog
|
|
|
|
|
|
|
|
|
|
All notable changes to VAPORA will be documented in this file.
|
|
|
|
|
|
|
|
|
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
|
|
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
|
|
|
|
|
|
|
## [Unreleased]
|
|
|
|
|
|
|
|
|
|
### Added
|
|
|
|
|
|
2026-01-11 20:12:56 +00:00
|
|
|
- **Web Assets Optimization**: Restructured landing page with minification pipeline
|
|
|
|
|
- Separated source (`assets/web/src/index.html`) from minified production version
|
|
|
|
|
- Automated minification script (`assets/web/minify.sh`) for version synchronization
|
|
|
|
|
- 32% compression achieved (26KB → 18KB)
|
|
|
|
|
- Bilingual content (English/Spanish) preserved with localStorage persistence
|
|
|
|
|
- Complete documentation in `assets/web/README.md`
|
|
|
|
|
|
|
|
|
|
- **Infrastructure & Build System**
|
|
|
|
|
- Just recipes for CI/CD automation (50+ recipes organized by category)
|
|
|
|
|
- Parametrized help system for command discovery
|
|
|
|
|
- Integration with development workflows
|
|
|
|
|
|
|
|
|
|
### Changed
|
|
|
|
|
|
|
|
|
|
- **Code Quality Improvements**
|
|
|
|
|
- Removed unused imports from API and workflow modules (5+ files)
|
|
|
|
|
- Fixed 6 unnecessary `mut` keyword warnings in provider analytics
|
|
|
|
|
- Improved code patterns: converted verbose match to `matches!` macro (workflow/state.rs)
|
|
|
|
|
- Applied automatic clippy fixes for idiomatic Rust
|
|
|
|
|
|
|
|
|
|
- **Documentation & Linting**
|
|
|
|
|
- Fixed markdown linting compliance in `assets/web/README.md`
|
|
|
|
|
- Proper code fence language specifications (MD040)
|
|
|
|
|
- Blank lines around code blocks (MD031)
|
|
|
|
|
- Table formatting with compact style (MD060)
|
|
|
|
|
|
|
|
|
|
### Fixed
|
|
|
|
|
|
|
|
|
|
- **Compilation & Testing**
|
|
|
|
|
- Eliminated all unused import warnings in vapora-backend
|
|
|
|
|
- Suppressed architectural dead code with appropriate attributes
|
|
|
|
|
- All 55 tests passing in vapora-backend
|
|
|
|
|
- 0 compilation errors, clean build output
|
|
|
|
|
|
|
|
|
|
### Technical Details
|
|
|
|
|
|
|
|
|
|
- **Architecture**: Refactored unused imports from workflow and API modules
|
|
|
|
|
- Tests moved to test-only scope for AgentConfig/RegistryConfig types
|
|
|
|
|
- Intentional suppression for components not yet integrated
|
|
|
|
|
- Future-proof markers for architectural patterns
|
|
|
|
|
|
|
|
|
|
- **Build Status**: Clean compilation pipeline
|
|
|
|
|
- `cargo build -p vapora-backend` ✅
|
|
|
|
|
- `cargo clippy -p vapora-backend` ✅ (5 nesting suggestions only)
|
|
|
|
|
- `cargo test -p vapora-backend` ✅ (55/55 passing)
|
feat: Phase 5.3 - Multi-Agent Learning Infrastructure
Implement intelligent agent learning from Knowledge Graph execution history
with per-task-type expertise tracking, recency bias, and learning curves.
## Phase 5.3 Implementation
### Learning Infrastructure (✅ Complete)
- LearningProfileService with per-task-type expertise metrics
- TaskTypeExpertise model tracking success_rate, confidence, learning curves
- Recency bias weighting: recent 7 days weighted 3x higher (exponential decay)
- Confidence scoring prevents overfitting: min(1.0, executions / 20)
- Learning curves computed from daily execution windows
### Agent Scoring Service (✅ Complete)
- Unified AgentScore combining SwarmCoordinator + learning profiles
- Scoring formula: 0.3*base + 0.5*expertise + 0.2*confidence
- Rank agents by combined score for intelligent assignment
- Support for recency-biased scoring (recent_success_rate)
- Methods: rank_agents, select_best, rank_agents_with_recency
### KG Integration (✅ Complete)
- KGPersistence::get_executions_for_task_type() - query by agent + task type
- KGPersistence::get_agent_executions() - all executions for agent
- Coordinator::load_learning_profile_from_kg() - core KG→Learning integration
- Coordinator::load_all_learning_profiles() - batch load for multiple agents
- Convert PersistedExecution → ExecutionData for learning calculations
### Agent Assignment Integration (✅ Complete)
- AgentCoordinator uses learning profiles for task assignment
- extract_task_type() infers task type from title/description
- assign_task() scores candidates using AgentScoringService
- Fallback to load-based selection if no learning data available
- Learning profiles stored in coordinator.learning_profiles RwLock
### Profile Adapter Enhancements (✅ Complete)
- create_learning_profile() - initialize empty profiles
- add_task_type_expertise() - set task-type expertise
- update_profile_with_learning() - update swarm profiles from learning
## Files Modified
### vapora-knowledge-graph/src/persistence.rs (+30 lines)
- get_executions_for_task_type(agent_id, task_type, limit)
- get_agent_executions(agent_id, limit)
### vapora-agents/src/coordinator.rs (+100 lines)
- load_learning_profile_from_kg() - core KG integration method
- load_all_learning_profiles() - batch loading for agents
- assign_task() already uses learning-based scoring via AgentScoringService
### Existing Complete Implementation
- vapora-knowledge-graph/src/learning.rs - calculation functions
- vapora-agents/src/learning_profile.rs - data structures and expertise
- vapora-agents/src/scoring.rs - unified scoring service
- vapora-agents/src/profile_adapter.rs - adapter methods
## Tests Passing
- learning_profile: 7 tests ✅
- scoring: 5 tests ✅
- profile_adapter: 6 tests ✅
- coordinator: learning-specific tests ✅
## Data Flow
1. Task arrives → AgentCoordinator::assign_task()
2. Extract task_type from description
3. Query KG for task-type executions (load_learning_profile_from_kg)
4. Calculate expertise with recency bias
5. Score candidates (SwarmCoordinator + learning)
6. Assign to top-scored agent
7. Execution result → KG → Update learning profiles
## Key Design Decisions
✅ Recency bias: 7-day half-life with 3x weight for recent performance
✅ Confidence scoring: min(1.0, total_executions / 20) prevents overfitting
✅ Hierarchical scoring: 30% base load, 50% expertise, 20% confidence
✅ KG query limit: 100 recent executions per task-type for performance
✅ Async loading: load_learning_profile_from_kg supports concurrent loads
## Next: Phase 5.4 - Cost Optimization
Ready to implement budget enforcement and cost-aware provider selection.
2026-01-11 13:03:53 +00:00
|
|
|
|
|
|
|
|
## [1.2.0] - 2026-01-11
|
|
|
|
|
|
|
|
|
|
### Added - Phase 5.3: Multi-Agent Learning
|
|
|
|
|
|
|
|
|
|
- **Learning Profiles**: Per-task-type expertise tracking for each agent
|
|
|
|
|
- `LearningProfile` struct with task-type expertise mapping
|
|
|
|
|
- Success rate calculation with recency bias (7-day window weighted 3x)
|
|
|
|
|
- Confidence scoring based on execution count (prevents small-sample overfitting)
|
|
|
|
|
- Learning curve computation with exponential decay
|
|
|
|
|
|
|
|
|
|
- **Agent Scoring Service**: Unified agent selection combining swarm metrics + learning
|
|
|
|
|
- Formula: `final_score = 0.3*base + 0.5*expertise + 0.2*confidence`
|
|
|
|
|
- Base score from SwarmCoordinator (load balancing)
|
|
|
|
|
- Expertise score from learning profiles (historical success)
|
|
|
|
|
- Confidence weighting dampens low-execution-count agents
|
|
|
|
|
|
|
|
|
|
- **Knowledge Graph Integration**: Learning curve calculator
|
|
|
|
|
- `calculate_learning_curve()` with time-series expertise evolution
|
|
|
|
|
- `apply_recency_bias()` with exponential weighting formula
|
|
|
|
|
- Aggregate by time windows (daily/weekly) for trend analysis
|
|
|
|
|
|
|
|
|
|
- **Coordinator Enhancement**: Learning-based agent selection
|
|
|
|
|
- Extract task type from description/role
|
|
|
|
|
- Query learning profiles for task-specific expertise
|
|
|
|
|
- Replace simple load balancing with learning-aware scoring
|
|
|
|
|
- Background profile synchronization (30s interval)
|
|
|
|
|
|
|
|
|
|
### Added - Phase 5.4: Cost Optimization
|
|
|
|
|
|
|
|
|
|
- **Budget Manager**: Per-role cost enforcement
|
|
|
|
|
- `BudgetConfig` with TOML serialization/deserialization
|
|
|
|
|
- Role-specific monthly and weekly limits (in cents)
|
|
|
|
|
- Automatic fallback provider when budget exceeded
|
|
|
|
|
- Alert thresholds (default 80% utilization)
|
|
|
|
|
- Weekly/monthly automatic resets
|
|
|
|
|
|
|
|
|
|
- **Configuration Loading**: Graceful budget initialization
|
|
|
|
|
- `BudgetConfig::load()` with strict validation
|
|
|
|
|
- `BudgetConfig::load_or_default()` with fallback to empty config
|
|
|
|
|
- Environment variable override: `BUDGET_CONFIG_PATH`
|
|
|
|
|
- Validation: limits > 0, thresholds in [0.0, 1.0]
|
|
|
|
|
|
|
|
|
|
- **Cost-Aware Routing**: Provider selection with budget constraints
|
|
|
|
|
- Three-tier enforcement:
|
|
|
|
|
1. Budget exceeded → force fallback provider
|
|
|
|
|
2. Near threshold (>80%) → prefer cost-efficient providers
|
|
|
|
|
3. Normal → rule-based routing with cost as tiebreaker
|
|
|
|
|
- Cost efficiency ranking: `(quality * 100) / (cost + 1)`
|
|
|
|
|
- Fallback chain ordering by cost (Ollama → Gemini → OpenAI → Claude)
|
|
|
|
|
|
|
|
|
|
- **Prometheus Metrics**: Real-time cost and budget monitoring
|
|
|
|
|
- `vapora_llm_budget_remaining_cents{role}` - Monthly budget remaining
|
|
|
|
|
- `vapora_llm_budget_utilization{role}` - Budget usage fraction (0.0-1.0)
|
|
|
|
|
- `vapora_llm_fallback_triggered_total{role,reason}` - Fallback event counter
|
|
|
|
|
- `vapora_llm_cost_per_provider_cents{provider}` - Cumulative cost per provider
|
|
|
|
|
- `vapora_llm_tokens_per_provider{provider,type}` - Token usage tracking
|
|
|
|
|
|
|
|
|
|
- **Grafana Dashboards**: Visual monitoring
|
|
|
|
|
- Budget utilization gauge (color thresholds: 70%, 90%, 100%)
|
|
|
|
|
- Cost distribution pie chart (percentage per provider)
|
|
|
|
|
- Fallback trigger time series (rate of fallback activations)
|
|
|
|
|
- Agent assignment latency histogram (P50, P95, P99)
|
|
|
|
|
|
|
|
|
|
- **Alert Rules**: Prometheus alerting
|
|
|
|
|
- `BudgetThresholdExceeded`: Utilization > 80% for 5 minutes
|
|
|
|
|
- `HighFallbackRate`: Rate > 0.1 for 10 minutes
|
|
|
|
|
- `CostAnomaly`: Cost spike > 2x historical average
|
|
|
|
|
- `LearningProfilesInactive`: No updates for 5 minutes
|
|
|
|
|
|
|
|
|
|
### Added - Integration & Testing
|
|
|
|
|
|
|
|
|
|
- **End-to-End Integration Tests**: Validate learning + budget interaction
|
|
|
|
|
- `test_end_to_end_learning_with_budget_enforcement()` - Full system test
|
|
|
|
|
- `test_learning_selection_with_budget_constraints()` - Budget pressure scenarios
|
|
|
|
|
- `test_learning_profile_improvement_with_budget_tracking()` - Learning evolution
|
|
|
|
|
|
|
|
|
|
- **Agent Server Integration**: Budget initialization at startup
|
|
|
|
|
- Load budget configuration from `config/agent-budgets.toml`
|
|
|
|
|
- Initialize BudgetManager with Arc for thread-safe sharing
|
|
|
|
|
- Attach to coordinator via `with_budget_manager()` builder pattern
|
|
|
|
|
- Graceful fallback if no configuration exists
|
|
|
|
|
|
|
|
|
|
- **Coordinator Builder Pattern**: Budget manager attachment
|
|
|
|
|
- Added `budget_manager: Option<Arc<BudgetManager>>` field
|
|
|
|
|
- `with_budget_manager()` method for fluent API
|
|
|
|
|
- Updated all constructors (`new()`, `with_registry()`)
|
|
|
|
|
- Backward compatible (works without budget configuration)
|
|
|
|
|
|
|
|
|
|
### Added - Documentation
|
|
|
|
|
|
|
|
|
|
- **Implementation Summary**: `.coder/2026-01-11-phase-5-completion.done.md`
|
|
|
|
|
- Complete architecture overview (3-layer integration)
|
|
|
|
|
- All files created/modified with line counts
|
|
|
|
|
- Prometheus metrics reference
|
|
|
|
|
- Quality metrics (120 tests passing)
|
|
|
|
|
- Educational insights
|
|
|
|
|
|
|
|
|
|
- **Gradual Deployment Guide**: `guides/gradual-deployment-guide.md`
|
|
|
|
|
- Week 1: Staging validation (24 hours)
|
|
|
|
|
- Week 2-3: Canary deployment (incremental traffic shift)
|
|
|
|
|
- Week 4+: Production rollout (100% traffic)
|
|
|
|
|
- Automated rollback procedures (< 5 minutes)
|
|
|
|
|
- Success criteria per phase
|
|
|
|
|
- Emergency procedures and checklists
|
|
|
|
|
|
|
|
|
|
### Changed
|
|
|
|
|
|
|
|
|
|
- **LLMRouter**: Enhanced with budget awareness
|
|
|
|
|
- `select_provider_with_budget()` method for budget-aware routing
|
|
|
|
|
- Fixed incomplete fallback implementation (lines 227-246)
|
|
|
|
|
- Cost-ordered fallback chain (cheapest first)
|
|
|
|
|
|
|
|
|
|
- **ProfileAdapter**: Learning integration
|
|
|
|
|
- `update_from_kg_learning()` method for learning profile sync
|
|
|
|
|
- Query KG for task-specific executions with recency filter
|
|
|
|
|
- Calculate success rate with 7-day exponential decay
|
|
|
|
|
|
|
|
|
|
- **AgentCoordinator**: Learning-based assignment
|
|
|
|
|
- Replaced min-load selection with `AgentScoringService`
|
|
|
|
|
- Extract task type from task description
|
|
|
|
|
- Combine swarm metrics + learning profiles for final score
|
|
|
|
|
|
|
|
|
|
### Fixed
|
|
|
|
|
|
|
|
|
|
- **Clippy Warnings**: All resolved (0 warnings)
|
|
|
|
|
- `redundant_guards` in BudgetConfig
|
|
|
|
|
- `needless_borrow` in registry defaults
|
|
|
|
|
- `or_insert_with` → `or_default()` conversions
|
|
|
|
|
- `map_clone` → `cloned()` conversions
|
|
|
|
|
- `manual_div_ceil` → `div_ceil()` method
|
|
|
|
|
|
|
|
|
|
- **Test Warnings**: Unused variables marked with underscore prefix
|
|
|
|
|
|
|
|
|
|
### Technical Details
|
|
|
|
|
|
|
|
|
|
**New Files Created (13)**:
|
|
|
|
|
|
|
|
|
|
- `vapora-agents/src/learning_profile.rs` (250 lines)
|
|
|
|
|
- `vapora-agents/src/scoring.rs` (200 lines)
|
|
|
|
|
- `vapora-knowledge-graph/src/learning.rs` (150 lines)
|
|
|
|
|
- `vapora-llm-router/src/budget.rs` (300 lines)
|
|
|
|
|
- `vapora-llm-router/src/cost_ranker.rs` (180 lines)
|
|
|
|
|
- `vapora-llm-router/src/cost_metrics.rs` (120 lines)
|
|
|
|
|
- `config/agent-budgets.toml` (50 lines)
|
|
|
|
|
- `vapora-agents/tests/end_to_end_learning_budget_test.rs` (NEW)
|
|
|
|
|
- 4+ integration test files (700+ lines total)
|
|
|
|
|
|
|
|
|
|
**Modified Files (10)**:
|
|
|
|
|
|
|
|
|
|
- `vapora-agents/src/coordinator.rs` - Learning integration
|
|
|
|
|
- `vapora-agents/src/profile_adapter.rs` - KG sync
|
|
|
|
|
- `vapora-agents/src/bin/server.rs` - Budget initialization
|
|
|
|
|
- `vapora-llm-router/src/router.rs` - Cost-aware routing
|
|
|
|
|
- `vapora-llm-router/src/lib.rs` - Budget exports
|
|
|
|
|
- Plus 5 more lib.rs and config updates
|
|
|
|
|
|
|
|
|
|
**Test Suite**:
|
|
|
|
|
|
|
|
|
|
- Total: 120 tests passing
|
|
|
|
|
- Unit tests: 71 (vapora-agents: 41, vapora-llm-router: 30)
|
|
|
|
|
- Integration tests: 42 (learning: 7, coordinator: 9, budget: 11, cost: 12, end-to-end: 3)
|
|
|
|
|
- Quality checks: Zero warnings, clippy -D warnings passing
|
|
|
|
|
|
|
|
|
|
**Deployment Readiness**:
|
|
|
|
|
|
|
|
|
|
- Staging validation checklist complete
|
|
|
|
|
- Canary deployment Istio VirtualService configured
|
|
|
|
|
- Grafana dashboards deployed
|
|
|
|
|
- Alert rules created
|
|
|
|
|
- Rollback automation ready (< 5 minutes)
|
|
|
|
|
|
|
|
|
|
## [0.1.0] - 2026-01-10
|
|
|
|
|
|
|
|
|
|
### Added
|
|
|
|
|
|
|
|
|
|
- Initial release with core platform features
|
|
|
|
|
- Multi-agent orchestration with 12 specialized roles
|
|
|
|
|
- Multi-IA router (Claude, OpenAI, Gemini, Ollama)
|
|
|
|
|
- Kanban board UI with glassmorphism design
|
|
|
|
|
- SurrealDB multi-tenant data layer
|
|
|
|
|
- NATS JetStream agent coordination
|
|
|
|
|
- Kubernetes-native deployment
|
|
|
|
|
- Istio service mesh integration
|
|
|
|
|
- MCP plugin system
|
|
|
|
|
- RAG integration for semantic search
|
|
|
|
|
- Cedar policy engine RBAC
|
|
|
|
|
- Full-stack Rust implementation (Axum + Leptos)
|
|
|
|
|
|
|
|
|
|
[unreleased]: https://github.com/vapora-platform/vapora/compare/v1.2.0...HEAD
|
|
|
|
|
[1.2.0]: https://github.com/vapora-platform/vapora/compare/v0.1.0...v1.2.0
|
|
|
|
|
[0.1.0]: https://github.com/vapora-platform/vapora/releases/tag/v0.1.0
|