Vapora/docs/setup/deployment-quickstart.md
Jesús Pérez d14150da75 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

4.1 KiB

VAPORA v1.0 - Quick Start Deployment

5-Minute Production Deployment Guide


Prerequisites Check

# Verify you have these tools
kubectl version --client  # Kubernetes CLI
docker --version          # Docker for building images
nu --version              # Nushell for scripts

Step 1: Build Docker Images (5 minutes)

# From project root

# Build all images and push to Docker Hub
nu scripts/build-docker.nu --registry docker.io --tag v0.1.0 --push

# Or build locally (no push)
nu scripts/build-docker.nu

Output: 4 Docker images built (~175MB total)


Step 2: Configure Secrets (2 minutes)

# Edit secrets file
nano kubernetes/03-secrets.yaml

# Replace these values:
# - jwt-secret: $(openssl rand -base64 32)
# - anthropic-api-key: sk-ant-xxxxx
# - openai-api-key: sk-xxxxx
# - surrealdb-pass: $(openssl rand -base64 32)

NEVER commit this file with real secrets!


Step 3: Configure Ingress (1 minute)

# Edit ingress file
nano kubernetes/08-ingress.yaml

# Update this line:
# - host: vapora.yourdomain.com  # Change to your domain

Step 4: Deploy to Kubernetes (3 minutes)

# Dry run to validate
nu scripts/deploy-k8s.nu --dry-run

# Deploy for real
nu scripts/deploy-k8s.nu

# Wait for all pods to be ready
kubectl wait --for=condition=ready pod -l app -n vapora --timeout=300s

Output: 11 pods running (2 backend, 2 frontend, 3 agents, 1 mcp, 1 db, 1 nats)


Step 5: Verify Deployment (2 minutes)

# Check all pods are running
kubectl get pods -n vapora

# Check services
kubectl get svc -n vapora

# Get ingress IP/hostname
kubectl get ingress -n vapora

# Test health endpoints
kubectl exec -n vapora deploy/vapora-backend -- curl -s http://localhost:8080/health

Step 6: Access VAPORA

  1. Configure DNS: Point your domain to ingress IP
  2. Access UI: https://vapora.yourdomain.com
  3. Check health: https://vapora.yourdomain.com/api/v1/health

Troubleshooting

Pods not starting?

kubectl describe pod -n vapora <pod-name>
kubectl logs -n vapora <pod-name>

Can't connect to database?

kubectl logs -n vapora surrealdb-0
kubectl exec -n vapora deploy/vapora-backend -- curl http://surrealdb:8000/health

Image pull errors?

# Check if images exist
docker images | grep vapora

# Create registry secret
kubectl create secret docker-registry regcred \
  -n vapora \
  --docker-server=docker.io \
  --docker-username=<user> \
  --docker-password=<pass>

Alternative: Provisioning Deployment

For advanced deployment with service mesh and auto-scaling:

cd provisioning/vapora-wrksp

# Validate configuration
nu scripts/validate-provisioning.nu

# Deploy full stack
provisioning workflow run workflows/deploy-full-stack.yaml

See: provisioning-integration/README.md


Next Steps

  • Set up monitoring (Prometheus + Grafana)
  • Configure TLS certificates (cert-manager)
  • Set up backups for SurrealDB
  • Configure HPA (Horizontal Pod Autoscaler)
  • Enable log aggregation
  • Test agent workflows

Full Documentation


Quick Commands Reference

# Build images
nu scripts/build-docker.nu --push

# Deploy
nu scripts/deploy-k8s.nu

# Validate
nu scripts/validate-deployment.nu

# Validate Provisioning
nu scripts/validate-provisioning.nu

# Check status
kubectl get all -n vapora

# View logs
kubectl logs -n vapora -l app=vapora-backend -f

# Scale agents
kubectl scale deployment vapora-agents -n vapora --replicas=5

# Rollback
kubectl rollout undo deployment/vapora-backend -n vapora

# Uninstall
kubectl delete namespace vapora

VAPORA v1.0 - Production Ready Total Deployment Time: ~15 minutes Status: All 5 phases completed