264 lines
7.0 KiB
Plaintext
264 lines
7.0 KiB
Plaintext
|
|
"""
|
||
|
|
VAPORA Agent Pools Configuration
|
||
|
|
Defines scaling policies and configurations for each of the 12 agent roles
|
||
|
|
"""
|
||
|
|
|
||
|
|
import k.api.all as k
|
||
|
|
|
||
|
|
# ===== AGENT POOL DEFINITIONS =====
|
||
|
|
|
||
|
|
agent_pools = {
|
||
|
|
"architect": {
|
||
|
|
role = "Architect"
|
||
|
|
description = "System design and architecture decisions"
|
||
|
|
llm = "Claude Opus"
|
||
|
|
parallelizable = false # Initiator role, must run sequentially
|
||
|
|
min_replicas = 2
|
||
|
|
max_replicas = 5
|
||
|
|
target_cpu = 70
|
||
|
|
cpu_request = "2000m"
|
||
|
|
memory_request = "4Gi"
|
||
|
|
cpu_limit = "4000m"
|
||
|
|
memory_limit = "8Gi"
|
||
|
|
}
|
||
|
|
"developer": {
|
||
|
|
role = "Developer"
|
||
|
|
description = "Code implementation"
|
||
|
|
llm = "Claude Sonnet"
|
||
|
|
parallelizable = true
|
||
|
|
min_replicas = 5
|
||
|
|
max_replicas = 20
|
||
|
|
target_cpu = 60
|
||
|
|
cpu_request = "2000m"
|
||
|
|
memory_request = "3Gi"
|
||
|
|
cpu_limit = "4000m"
|
||
|
|
memory_limit = "6Gi"
|
||
|
|
}
|
||
|
|
"code_reviewer": {
|
||
|
|
role = "CodeReviewer"
|
||
|
|
description = "Code quality and review"
|
||
|
|
llm = "Claude Sonnet"
|
||
|
|
parallelizable = true
|
||
|
|
min_replicas = 3
|
||
|
|
max_replicas = 10
|
||
|
|
target_cpu = 65
|
||
|
|
cpu_request = "1500m"
|
||
|
|
memory_request = "2Gi"
|
||
|
|
cpu_limit = "3000m"
|
||
|
|
memory_limit = "4Gi"
|
||
|
|
}
|
||
|
|
"tester": {
|
||
|
|
role = "Tester"
|
||
|
|
description = "Test writing and validation"
|
||
|
|
llm = "Claude Sonnet"
|
||
|
|
parallelizable = true
|
||
|
|
min_replicas = 3
|
||
|
|
max_replicas = 10
|
||
|
|
target_cpu = 70
|
||
|
|
cpu_request = "2000m"
|
||
|
|
memory_request = "3Gi"
|
||
|
|
cpu_limit = "4000m"
|
||
|
|
memory_limit = "6Gi"
|
||
|
|
}
|
||
|
|
"documenter": {
|
||
|
|
role = "Documenter"
|
||
|
|
description = "Documentation and guides"
|
||
|
|
llm = "GPT-4"
|
||
|
|
parallelizable = true
|
||
|
|
min_replicas = 2
|
||
|
|
max_replicas = 8
|
||
|
|
target_cpu = 50
|
||
|
|
cpu_request = "1000m"
|
||
|
|
memory_request = "2Gi"
|
||
|
|
cpu_limit = "2000m"
|
||
|
|
memory_limit = "4Gi"
|
||
|
|
}
|
||
|
|
"marketer": {
|
||
|
|
role = "Marketer"
|
||
|
|
description = "Marketing content and campaigns"
|
||
|
|
llm = "Claude Sonnet"
|
||
|
|
parallelizable = true
|
||
|
|
min_replicas = 1
|
||
|
|
max_replicas = 5
|
||
|
|
target_cpu = 40
|
||
|
|
cpu_request = "1000m"
|
||
|
|
memory_request = "2Gi"
|
||
|
|
cpu_limit = "2000m"
|
||
|
|
memory_limit = "4Gi"
|
||
|
|
}
|
||
|
|
"presenter": {
|
||
|
|
role = "Presenter"
|
||
|
|
description = "Presentations and slides"
|
||
|
|
llm = "Claude Sonnet"
|
||
|
|
parallelizable = true
|
||
|
|
min_replicas = 1
|
||
|
|
max_replicas = 3
|
||
|
|
target_cpu = 50
|
||
|
|
cpu_request = "1000m"
|
||
|
|
memory_request = "2Gi"
|
||
|
|
cpu_limit = "2000m"
|
||
|
|
memory_limit = "4Gi"
|
||
|
|
}
|
||
|
|
"devops": {
|
||
|
|
role = "DevOps"
|
||
|
|
description = "CI/CD and deployment"
|
||
|
|
llm = "Claude Sonnet"
|
||
|
|
parallelizable = true
|
||
|
|
min_replicas = 2
|
||
|
|
max_replicas = 8
|
||
|
|
target_cpu = 60
|
||
|
|
cpu_request = "1500m"
|
||
|
|
memory_request = "2Gi"
|
||
|
|
cpu_limit = "3000m"
|
||
|
|
memory_limit = "4Gi"
|
||
|
|
}
|
||
|
|
"monitor": {
|
||
|
|
role = "Monitor"
|
||
|
|
description = "Health checking and alerting"
|
||
|
|
llm = "Gemini Flash"
|
||
|
|
parallelizable = true # Real-time monitoring
|
||
|
|
min_replicas = 2
|
||
|
|
max_replicas = 5
|
||
|
|
target_cpu = 30
|
||
|
|
cpu_request = "1000m"
|
||
|
|
memory_request = "1Gi"
|
||
|
|
cpu_limit = "2000m"
|
||
|
|
memory_limit = "2Gi"
|
||
|
|
}
|
||
|
|
"security": {
|
||
|
|
role = "Security"
|
||
|
|
description = "Security audit and verification"
|
||
|
|
llm = "Claude Opus"
|
||
|
|
parallelizable = false # Can block pipeline
|
||
|
|
min_replicas = 2
|
||
|
|
max_replicas = 5
|
||
|
|
target_cpu = 70
|
||
|
|
cpu_request = "2000m"
|
||
|
|
memory_request = "4Gi"
|
||
|
|
cpu_limit = "4000m"
|
||
|
|
memory_limit = "8Gi"
|
||
|
|
}
|
||
|
|
"project_manager": {
|
||
|
|
role = "ProjectManager"
|
||
|
|
description = "Project tracking and roadmap"
|
||
|
|
llm = "Claude Sonnet"
|
||
|
|
parallelizable = true
|
||
|
|
min_replicas = 1
|
||
|
|
max_replicas = 3
|
||
|
|
target_cpu = 40
|
||
|
|
cpu_request = "1000m"
|
||
|
|
memory_request = "2Gi"
|
||
|
|
cpu_limit = "2000m"
|
||
|
|
memory_limit = "4Gi"
|
||
|
|
}
|
||
|
|
"decision_maker": {
|
||
|
|
role = "DecisionMaker"
|
||
|
|
description = "Conflict resolution and decisions"
|
||
|
|
llm = "Claude Opus"
|
||
|
|
parallelizable = false # On-demand decision making
|
||
|
|
min_replicas = 1
|
||
|
|
max_replicas = 3
|
||
|
|
target_cpu = 70
|
||
|
|
cpu_request = "2000m"
|
||
|
|
memory_request = "4Gi"
|
||
|
|
cpu_limit = "4000m"
|
||
|
|
memory_limit = "8Gi"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
# ===== HORIZONTAL POD AUTOSCALERS =====
|
||
|
|
|
||
|
|
hpas = [
|
||
|
|
{
|
||
|
|
name = "vapora-agents-developer-hpa"
|
||
|
|
target_deployment = "vapora-agents"
|
||
|
|
agent_role = "developer"
|
||
|
|
min_replicas = 5
|
||
|
|
max_replicas = 20
|
||
|
|
target_cpu_utilization = 60
|
||
|
|
metrics = [
|
||
|
|
{
|
||
|
|
type = "Resource"
|
||
|
|
resource = {
|
||
|
|
name = "cpu"
|
||
|
|
target = {type = "Utilization", averageUtilization = 60}
|
||
|
|
}
|
||
|
|
},
|
||
|
|
{
|
||
|
|
type = "Pods"
|
||
|
|
pods = {
|
||
|
|
metric = {name = "agent_queue_depth"}
|
||
|
|
target = {type = "AverageValue", averageValue = "50"}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
]
|
||
|
|
}
|
||
|
|
{
|
||
|
|
name = "vapora-agents-reviewer-hpa"
|
||
|
|
target_deployment = "vapora-agents"
|
||
|
|
agent_role = "code_reviewer"
|
||
|
|
min_replicas = 3
|
||
|
|
max_replicas = 10
|
||
|
|
target_cpu_utilization = 65
|
||
|
|
}
|
||
|
|
{
|
||
|
|
name = "vapora-agents-monitor-hpa"
|
||
|
|
target_deployment = "vapora-agents"
|
||
|
|
agent_role = "monitor"
|
||
|
|
min_replicas = 2
|
||
|
|
max_replicas = 5
|
||
|
|
target_cpu_utilization = 30
|
||
|
|
}
|
||
|
|
]
|
||
|
|
|
||
|
|
# ===== POD DISRUPTION BUDGETS =====
|
||
|
|
|
||
|
|
pod_disruption_budgets = [
|
||
|
|
{
|
||
|
|
name = "vapora-agents-pdb"
|
||
|
|
selector = {matchLabels = {"app": "vapora-agents"}}
|
||
|
|
minAvailable = 2 # Always keep at least 2 agents running
|
||
|
|
}
|
||
|
|
{
|
||
|
|
name = "surrealdb-pdb"
|
||
|
|
selector = {matchLabels = {"app": "surrealdb"}}
|
||
|
|
minAvailable = 2 # Database must always have 2+ replicas
|
||
|
|
}
|
||
|
|
]
|
||
|
|
|
||
|
|
# ===== NETWORK POLICIES FOR AGENTS =====
|
||
|
|
|
||
|
|
network_policies = [
|
||
|
|
{
|
||
|
|
name = "allow-agent-to-nats"
|
||
|
|
ingress = [{
|
||
|
|
from = [{podSelector = {matchLabels = {"app": "vapora-agents"}}}]
|
||
|
|
ports = [{protocol = "TCP", port = 4222}]
|
||
|
|
}]
|
||
|
|
egress = [{
|
||
|
|
to = [{podSelector = {matchLabels = {"app": "nats"}}}]
|
||
|
|
ports = [{protocol = "TCP", port = 4222}]
|
||
|
|
}]
|
||
|
|
}
|
||
|
|
{
|
||
|
|
name = "allow-agent-to-database"
|
||
|
|
ingress = [{
|
||
|
|
from = [{podSelector = {matchLabels = {"app": "vapora-agents"}}}]
|
||
|
|
ports = [{protocol = "TCP", port = 8000}]
|
||
|
|
}]
|
||
|
|
egress = [{
|
||
|
|
to = [{podSelector = {matchLabels = {"app": "surrealdb"}}}]
|
||
|
|
ports = [{protocol = "TCP", port = 8000}]
|
||
|
|
}]
|
||
|
|
}
|
||
|
|
]
|
||
|
|
|
||
|
|
# ===== OUTPUT =====
|
||
|
|
|
||
|
|
output = {
|
||
|
|
agent_pools = agent_pools
|
||
|
|
hpas = hpas
|
||
|
|
pdbs = pod_disruption_budgets
|
||
|
|
network_policies = network_policies
|
||
|
|
}
|