terradev-cli 5.2.1__tar.gz → 5.3.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/Deployment Package/BNF_GRAMMAR.md +49 -1
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/Deployment Package/architecture.md +196 -7
- {terradev_cli-5.2.1/terradev_cli.egg-info → terradev_cli-5.3.1}/PKG-INFO +16 -2
- {terradev_cli-5.2.1/terradev_cli → terradev_cli-5.3.1}/README.md +15 -1
- terradev_cli-5.3.1/clusters/agentic-template/helm/values-agentic.yaml +222 -0
- terradev_cli-5.3.1/clusters/agentic-template/k8s/fleet-manifests.yaml +668 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/pyproject.toml +1 -1
- {terradev_cli-5.2.1 → terradev_cli-5.3.1/terradev_cli}/README.md +15 -1
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/cli.py +562 -0
- terradev_cli-5.3.1/terradev_cli/core/agentic_provisioner.py +624 -0
- terradev_cli-5.3.1/terradev_cli/core/agentic_topology.py +796 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/auth.py +17 -5
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/checkpoint_manager.py +1 -1
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/dag_executor.py +0 -10
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/data_governance.py +62 -31
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/distributed_lock.py +27 -22
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/event_system.py +45 -30
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/gitops_manager.py +17 -1
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/gpu_topology.py +4 -3
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/kv_cache_checkpoint_manager.py +38 -8
- terradev_cli-5.3.1/terradev_cli/core/kv_sharing.py +589 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/oidc_provider.py +102 -38
- terradev_cli-5.3.1/terradev_cli/core/pd_transport.py +713 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/preflight_validator.py +1 -1
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/price_intelligence.py +3 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/rate_limiter.py +40 -23
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/semantic_router.py +4 -3
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/session_manager.py +5 -1
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/training_monitor.py +1 -1
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/training_orchestrator.py +41 -26
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/user_manager.py +2 -2
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/mcp/server.py +73 -7
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/ml_services/agentic_serving.py +1 -1
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/ml_services/kubernetes_enhanced.py +12 -5
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/ml_services/vllm_service.py +1 -1
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/providers/base_provider.py +19 -2
- {terradev_cli-5.2.1 → terradev_cli-5.3.1/terradev_cli.egg-info}/PKG-INFO +16 -2
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli.egg-info/SOURCES.txt +6 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/.env.example +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/.github/workflows/action.yml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/.github/workflows/ci.yml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/.github/workflows/release.yml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/.github/workflows/static.yml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/Deployment Package/LIFECYCLES.md +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/Deployment Package/overview.md +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/Deployment Package/security.md +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/Deployment Package/troubleshooting.md +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/Dockerfile +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/Dockerfile.test +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/LICENSE +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/MANIFEST.in +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/clusters/glm-5/README.md +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/clusters/glm-5/helm/values-glm5.yaml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/clusters/glm-5/k8s/hpa.yaml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/clusters/glm-5/k8s/model-cache-pvc.yaml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/clusters/glm-5/k8s/namespace.yaml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/clusters/glm-5/k8s/pdb.yaml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/clusters/glm-5/k8s/service.yaml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/clusters/glm-5/k8s/sglang-deployment.yaml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/clusters/glm-5/k8s/vllm-deployment.yaml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/clusters/glm-5/task.yaml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/clusters/glm-5/terraform/main.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/clusters/glm-5/terraform/outputs.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/clusters/glm-5/terraform/variables.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/clusters/llmd-template/README.md +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/clusters/llmd-template/helm/values-llmd.yaml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/clusters/llmd-template/k8s/gateway.yaml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/clusters/llmd-template/k8s/leaderworkerset.yaml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/clusters/llmd-template/k8s/llminferenceservice.yaml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/clusters/llmd-template/task.yaml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/clusters/moe-template/README.md +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/clusters/moe-template/helm/values-moe.yaml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/clusters/moe-template/k8s/deployment.yaml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/clusters/moe-template/k8s/hpa.yaml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/clusters/moe-template/k8s/model-cache-pvc.yaml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/clusters/moe-template/k8s/namespace.yaml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/clusters/moe-template/k8s/pdb.yaml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/clusters/moe-template/k8s/service.yaml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/clusters/moe-template/task.yaml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/clusters/moe-template/terraform/main.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/clusters/moe-template/terraform/outputs.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/clusters/moe-template/terraform/variables.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/clusters/rag-template/README.md +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/clusters/rag-template/helm/values-rag.yaml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/clusters/rag-template/k8s/deployment.yaml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/clusters/rag-template/terraform/main.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/demo/RECORDING_GUIDE.md +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/demo/generate_gif.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/demo/terradev-demo.gif +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/docs/ADVANCED_FINANCIAL_INNOVATIONS.md +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/docs/API_DOCUMENTATION.md +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/docs/BingSiteAuth.xml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/docs/FINOPS_ATTRIBUTION_SYSTEM.md +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/docs/USER_GUIDE.md +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/docs/VLLM_AUTO_OPTIMIZATION_GUIDE.md +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/docs/VLLM_OPTIMIZATION_GUIDE.md +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/docs/architecture.md +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/docs/index.html +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/docs/overview.md +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/docs/robots.txt +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/docs/sitemap.xml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/docs/test_spot_provision.md +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/examples/aws_ssm_starter.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/examples/config.example.json +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/examples/demo_k8s_config.yaml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/examples/direct_aws_starter.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/examples/ec2_user_data_starter.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/examples/example-pipeline.yaml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/examples/kubernetes_training_deployment.yaml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/examples/simple_ssm_starter.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/examples/ssh_server_starter.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/examples/start_aws_servers.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/helm/terradev/Chart.yaml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/helm/terradev/templates/_helpers.tpl +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/helm/terradev/templates/deployment.yaml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/helm/terradev/values.yaml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/infrastructure/bucket-policy.json +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/infrastructure/grafana_training_dashboard.json +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/infrastructure/kubernetes/microservices.yaml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/infrastructure/terraform/main.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/infrastructure/terraform/parallelism.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/integrations/cli-tool.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/integrations/cloud-management-widgets.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/integrations/cloud-provider-apis.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/integrations/critical-widgets.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/integrations/devops-cicd-widgets.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/integrations/devops-essential-tools.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/integrations/docker-integration.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/integrations/kubernetes-operator.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/integrations/mlflow-integration.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/modules/datadog/README.md +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/modules/datadog/dashboard.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/modules/datadog/monitors.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/modules/datadog/outputs.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/modules/datadog/provider.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/modules/datadog/variables.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/modules/datadog/versions.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/modules/prometheus_training_config.yml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/requirements.txt +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/Cargo.toml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/INTEGRATION_GUIDE.md +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/PERFORMANCE_OPTIMIZATIONS.md +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/README.md +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-artifact-verification/Cargo.toml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-artifact-verification/src/lib.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-artifact-verification/src/types.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-artifact-verification/src/verifier.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-authentication/Cargo.toml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-authentication/src/encoding.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-authentication/src/hmac.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-authentication/src/lib.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-authentication/src/types.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-cache-eviction/Cargo.toml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-cache-eviction/src/cache.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-cache-eviction/src/lib.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-cache-eviction/src/types.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-command-executor/Cargo.toml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-command-executor/src/lib.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-config-validator/Cargo.toml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-config-validator/src/lib.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-config-validator/src/types.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-config-validator/src/validator.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-connection-pool/Cargo.toml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-connection-pool/src/lib.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-connection-pool/src/pool.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-connection-pool/src/types.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-cost-calculator/Cargo.toml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-cost-calculator/src/calculator.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-cost-calculator/src/lib.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-cost-calculator/src/types.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-cost-scaler/Cargo.toml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-cost-scaler/src/lib.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-credential-vault/Cargo.toml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-credential-vault/src/lib.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-credential-vault/src/types.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-credential-vault/src/vault.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-dag-executor/Cargo.toml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-dag-executor/src/lib.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-distributed-lock/Cargo.toml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-distributed-lock/src/lib.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-distributed-lock/src/lock.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-distributed-lock/src/types.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-egress-optimizer/Cargo.toml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-egress-optimizer/src/graph.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-egress-optimizer/src/lib.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-egress-optimizer/src/types.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-event-bus/Cargo.toml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-event-bus/src/bus.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-event-bus/src/lib.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-event-bus/src/types.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-governance/Cargo.toml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-governance/src/lib.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-gpu-discovery/Cargo.toml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-gpu-discovery/src/lib.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-gpu-topology/Cargo.toml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-gpu-topology/src/lib.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-gpu-topology/src/topology.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-gpu-topology/src/types.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-helm-generator/Cargo.toml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-helm-generator/src/lib.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-mcp-codec/Cargo.toml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-mcp-codec/src/lib.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-mcp-optimizer/Cargo.toml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-mcp-optimizer/src/lib.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-price-intelligence/Cargo.toml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-price-intelligence/src/lib.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-quota-manager/Cargo.toml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-quota-manager/src/lib.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-quota-manager/src/manager.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-quota-manager/src/types.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-resource-pool/Cargo.toml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-resource-pool/src/lib.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-resource-pool/src/pool.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-resource-pool/src/types.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-result-compressor/Cargo.toml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-result-compressor/src/lib.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-semantic-router/Cargo.toml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-semantic-router/src/lib.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-snapshot-manager/Cargo.toml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-snapshot-manager/src/lib.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-snapshot-manager/src/snapshot.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-snapshot-manager/src/types.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-state-machine/Cargo.toml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-state-machine/src/lib.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-state-machine/src/state.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-state-machine/src/types.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-telemetry/Cargo.toml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-telemetry/src/lib.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-telemetry/src/pipeline.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-telemetry/src/types.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-tool-registry/Cargo.toml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-tool-registry/src/lib.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-vram-estimator/Cargo.toml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-vram-estimator/src/estimator.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-vram-estimator/src/lib.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-vram-estimator/src/types.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-warm-pool/Cargo.toml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/rust/terradev-warm-pool/src/lib.rs +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/scripts/action.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/scripts/gpu-check.sh +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/setup/Lambda Cloud API spec 1.8.3.json +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/setup/docker-compose.yml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/setup/nginx.conf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/setup/setup.sh +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/setup.cfg +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/CHANGELOG.md +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/COMPLETE_COMMAND_REFERENCE.md +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/COMPLETE_INTEGRATION_GUIDE.md +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/IMPLEMENTATION_SUMMARY.md +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/MAKING_SPOT_WORK_FOR_STATEFUL_WORKLOADS.md +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/SGLANG_COMMAND_GUIDE.md +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/TERRADEV_STACK_CHART.md +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/__init__.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/__main__.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/cli_hf_spaces.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/cli_karpenter.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/__init__.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/async_config.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/auto_lineage.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/cache_manager.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/command_executor.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/config.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/config_validator.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/cost_scaler.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/cost_tracker.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/credential_vault.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/cuda_graph_integrator.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/dataset_stager.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/deployment_router.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/drift_detector.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/egress_cost_monitor.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/egress_optimizer.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/evaluation_orchestrator.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/gpu_discovery.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/helm_generator.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/hf_cli_integration.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/hf_smart_templates.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/hf_spaces.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/inference_router.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/inference_spot_manager.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/job_state_manager.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/kv_cache_checkpoint_tests.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/manifest_cache.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/manifest_example.json +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/mig_manager.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/migration_orchestrator.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/mla_vram_estimator.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/mla_vram_tests.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/model_orchestrator.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/optimization_config.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/parallel_provisioner.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/pipeline_schema.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/price_discovery.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/public_ip_billing_tracker.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/quick_start.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/quota_manager.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/rust_telemetry.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/semantic_signals/__init__.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/semantic_signals/base_signal.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/semantic_signals/complexity_signal.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/semantic_signals/domain_signal.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/semantic_signals/keyword_signal.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/semantic_signals/language_signal.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/semantic_signals/modality_signal.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/semantic_signals/orchestrator.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/semantic_signals/routing_policy.yaml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/semantic_signals/safety_signal.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/ssh_key_manager.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/telemetry.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/terradev_engine.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/trace_viewer.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/warm_pool_manager.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/weight_streaming_benchmarks.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/core/weight_streaming_manager.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/cost_optimizer.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/credential_prompt.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/demo.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/entry_point.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/integrations/Terradev LOGO BLACK.png +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/integrations/Terradev LOGO WHITEW.png +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/integrations/__init__.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/integrations/databricks_integration.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/integrations/datadog_integration.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/integrations/helicone_integration.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/integrations/prometheus_integration.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/integrations/wandb_integration.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/k8s/terraform_wrapper.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/kubernetes/inferx-cost-optimized.yaml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/kubernetes/inferx-infrastructure.yaml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/kubernetes/inferx-models.yaml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/kubernetes/inferx-platform.yaml +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/kubernetes/inferx_setup.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/mcp/__init__.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/ml_services/__init__.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/ml_services/drift_retrain_service.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/ml_services/dvc_service.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/ml_services/guardrails_service.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/ml_services/huggingface_service.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/ml_services/kserve_service.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/ml_services/kubernetes_service.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/ml_services/langchain_service.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/ml_services/langfuse_service.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/ml_services/langgraph_service.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/ml_services/lmcache_service.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/ml_services/mlflow_service.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/ml_services/model_router.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/ml_services/ollama_service.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/ml_services/phoenix_service.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/ml_services/qdrant_service.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/ml_services/ray_enhanced.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/ml_services/ray_service.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/ml_services/sglang_service.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/ml_services/wandb_enhanced.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/optimization/__init__.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/optimization/auto_optimizer.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/optimization/cuco_optimizer.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/providers/LATITUDE_PROVIDER.md +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/providers/__init__.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/providers/alibaba_provider.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/providers/aws_provider.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/providers/azure_provider.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/providers/baseten_provider.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/providers/coreweave_provider.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/providers/crusoe_provider.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/providers/demo_mode.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/providers/digitalocean_provider.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/providers/e2e_networks_provider.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/providers/fluidstack_provider.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/providers/gcp_provider.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/providers/hetzner_provider.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/providers/huggingface_provider.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/providers/hyperstack_provider.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/providers/inferx_provider.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/providers/lambda_labs_provider.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/providers/latitude_provider.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/providers/oracle_provider.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/providers/ovhcloud_provider.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/providers/provider_factory.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/providers/real_pricing.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/providers/runpod_provider.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/providers/siliconflow_provider.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/providers/tensordock_provider.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/providers/vastai_provider.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/providers/yottalabs_provider.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/requirements.txt +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/requirements_minimal.txt +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/terraform/main.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/terraform/modules/__init__.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/terraform/modules/gpu-node-aws/bootstrap.sh +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/terraform/modules/gpu-node-aws/main.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/terraform/modules/gpu-node-aws/outputs.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/terraform/modules/gpu-node-aws/variables.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/terraform/modules/gpu-node-aws/versions.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/terraform/modules/gpu-node-hyperstack/bootstrap.sh +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/terraform/modules/gpu-node-hyperstack/main.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/terraform/modules/gpu-node-hyperstack/outputs.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/terraform/modules/gpu-node-hyperstack/variables.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/terraform/modules/gpu-node-hyperstack/versions.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/terraform/modules/gpu-node-lambda/bootstrap.sh +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/terraform/modules/gpu-node-lambda/main.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/terraform/modules/gpu-node-lambda/outputs.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/terraform/modules/gpu-node-lambda/variables.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/terraform/modules/gpu-node-lambda/versions.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/terraform/modules/gpu-node-vastai/bootstrap.sh +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/terraform/modules/gpu-node-vastai/main.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/terraform/modules/gpu-node-vastai/outputs.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/terraform/modules/gpu-node-vastai/variables.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/terraform/modules/gpu-node-vastai/versions.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/terraform/modules/k8s-control-plane/join-script.tpl +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/terraform/modules/k8s-control-plane/kubeconfig.tpl +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/terraform/modules/k8s-control-plane/main.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/terraform/modules/k8s-control-plane/outputs.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/terraform/modules/k8s-control-plane/variables.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/terraform/modules/k8s-control-plane/versions.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/terraform/modules/networking/main.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/terraform/modules/networking/outputs.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/terraform/modules/networking/variables.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/terraform/modules/networking/versions.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/terraform/outputs.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/terraform/price-optimizer/optimal-allocation.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/terraform/providers.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/terraform/variables.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/test_summary.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/utils/__init__.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli/utils/formatters.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli.egg-info/dependency_links.txt +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli.egg-info/entry_points.txt +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli.egg-info/requires.txt +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terradev_cli.egg-info/top_level.txt +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terraform.tfvars.example +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terraform_optimization/backend.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terraform_optimization/error_handling.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terraform_optimization/parallel_provisioning.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terraform_optimization/storage_choice_matrix.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terraform_optimization/test_error_handler.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terraform_optimization/versions.tf +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terraform_transparency/audit_demo/trail_3caed73ad5bf.json +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terraform_transparency/audit_trail.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terraform_transparency/audit_trails.json +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terraform_transparency/decision_engine.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terraform_transparency/decision_logs.json +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terraform_transparency/operations.json +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terraform_transparency/terraform_manager.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terraform_transparency/terraform_plans.json +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terraform_transparency/transparency_demo.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/terraform_transparency/transparency_report.json +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/tests/CREDENTIAL_STRATEGY.md +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/tests/INTEGRATION_STRATEGY.md +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/tests/Makefile +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/tests/ci_pipeline.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/tests/conftest.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/tests/root_tests/test_cli_ux_battle.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/tests/root_tests/test_cli_ux_battle_fixed.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/tests/root_tests/test_cli_ux_final.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/tests/root_tests/test_final_integration.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/tests/root_tests/test_integrated_optimization.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/tests/root_tests/test_p10_production_failover.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/tests/root_tests/test_sso_phase1.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/tests/root_tests/test_vllm_optimization.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/tests/simple_test.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/tests/test_ai_integrations.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/tests/test_checkpoint_manager.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/tests/test_cli_smoke.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/tests/test_dag_executor.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/tests/test_flashoptim.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/tests/test_integration.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/tests/test_job_state_manager.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/tests/test_k8s_regression.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/tests/test_latitude_provider.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/tests/test_major_providers.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/tests/test_mcp_handlers.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/tests/test_new_providers.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/tests/test_provider_conformance.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/tests/test_providers.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/tests/test_semantic_router.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/tests/test_sglang_optimization.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/tests/test_ssh_key_manager.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/tests/test_training_monitor.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/tests/test_training_orchestrator.py +0 -0
- {terradev_cli-5.2.1 → terradev_cli-5.3.1}/tests/test_vllm_features.py +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# Terradev CLI BNF Grammar
|
|
2
|
-
# Complete syntax specification for all commands and options —
|
|
2
|
+
# Complete syntax specification for all commands and options — v5.3.0
|
|
3
3
|
|
|
4
4
|
<terradev-cli> ::= <global-options> <command>
|
|
5
5
|
|
|
@@ -90,6 +90,7 @@
|
|
|
90
90
|
| <triggers-commands>
|
|
91
91
|
| <environments-commands>
|
|
92
92
|
| <lineage-commands>
|
|
93
|
+
| <agent-commands>
|
|
93
94
|
|
|
94
95
|
|
|
95
96
|
# ════════════════════════════════════════════════════════════════════
|
|
@@ -1053,6 +1054,53 @@
|
|
|
1053
1054
|
<lineage-direction> ::= up | down | both
|
|
1054
1055
|
|
|
1055
1056
|
|
|
1057
|
+
# ════════════════════════════════════════════════════════════════════
|
|
1058
|
+
# AGENT FLEET COMMAND GROUP (v6.0.0)
|
|
1059
|
+
# ════════════════════════════════════════════════════════════════════
|
|
1060
|
+
|
|
1061
|
+
<agent-commands> ::= agent <agent-subcommand>
|
|
1062
|
+
|
|
1063
|
+
<agent-subcommand> ::=
|
|
1064
|
+
| plan <agent-plan-options>
|
|
1065
|
+
| deploy <agent-deploy-options>
|
|
1066
|
+
| status --fleet-id <string>
|
|
1067
|
+
| scale <agent-scale-options>
|
|
1068
|
+
| cost --fleet-id <string>
|
|
1069
|
+
| list
|
|
1070
|
+
| teardown --fleet-id <string> [--force]
|
|
1071
|
+
|
|
1072
|
+
<agent-plan-options> ::=
|
|
1073
|
+
--agents <integer>
|
|
1074
|
+
[--model <string>]
|
|
1075
|
+
[--reasoning <agent-reasoning-mode>]
|
|
1076
|
+
[--planner-gpu <gpu-type>]
|
|
1077
|
+
[--worker-gpu <gpu-type>]
|
|
1078
|
+
[--planner-count <integer>]
|
|
1079
|
+
[--worker-count <integer>]
|
|
1080
|
+
[--output <path>]
|
|
1081
|
+
|
|
1082
|
+
<agent-deploy-options> ::=
|
|
1083
|
+
--agents <integer>
|
|
1084
|
+
[--model <string>]
|
|
1085
|
+
[--reasoning <agent-reasoning-mode>]
|
|
1086
|
+
[--planner-gpu <gpu-type>]
|
|
1087
|
+
[--worker-gpu <gpu-type>]
|
|
1088
|
+
[--planner-count <integer>]
|
|
1089
|
+
[--worker-count <integer>]
|
|
1090
|
+
[--providers <provider>]...
|
|
1091
|
+
[--max-price <float>]
|
|
1092
|
+
[--dry-run]
|
|
1093
|
+
|
|
1094
|
+
<agent-scale-options> ::=
|
|
1095
|
+
--fleet-id <string>
|
|
1096
|
+
--tier <agent-tier>
|
|
1097
|
+
--count <integer>
|
|
1098
|
+
[--providers <provider>]...
|
|
1099
|
+
|
|
1100
|
+
<agent-reasoning-mode> ::= instant | deep | mixed
|
|
1101
|
+
<agent-tier> ::= reasoning | decode | cpu_tools
|
|
1102
|
+
|
|
1103
|
+
|
|
1056
1104
|
# ════════════════════════════════════════════════════════════════════
|
|
1057
1105
|
# LOCAL GPU POOL COMMAND GROUP
|
|
1058
1106
|
# ════════════════════════════════════════════════════════════════════
|
|
@@ -162,9 +162,11 @@ terradev infer-deploy --model ./llama-2-7b
|
|
|
162
162
|
└── vLLM Router (P/D disaggregation)
|
|
163
163
|
```
|
|
164
164
|
|
|
165
|
-
**Disaggregated Prefill/Decode
|
|
165
|
+
**Disaggregated Prefill/Decode — Transport-Agnostic Layer:**
|
|
166
166
|
|
|
167
167
|
```
|
|
168
|
+
core/pd_transport.py — KVTransport abstraction
|
|
169
|
+
|
|
168
170
|
Client request
|
|
169
171
|
│
|
|
170
172
|
▼
|
|
@@ -172,14 +174,124 @@ vLLM Router (sticky routing by prefix hash)
|
|
|
172
174
|
│
|
|
173
175
|
├──▶ Prefill pool (H100, compute-bound)
|
|
174
176
|
│ Processes input prompt
|
|
175
|
-
│ KV cache
|
|
176
|
-
│
|
|
177
|
+
│ KV cache block ──► TransportSelector.select(config)
|
|
178
|
+
│ │
|
|
179
|
+
│ ┌──────────────┼──────────────┐
|
|
180
|
+
│ ▼ ▼ ▼
|
|
181
|
+
│ NIXLNVLink NIXL/IB TCP fallback
|
|
182
|
+
│ 600 GB/s 200 GB/s 10 GB/s
|
|
183
|
+
│ (NVLink 4.0) (HDR IB) (always avail)
|
|
184
|
+
│ │ │ │
|
|
185
|
+
│ └──────────────┴──────────────┘
|
|
186
|
+
│ │
|
|
177
187
|
└──▶ Decode pool (H100, memory-bound)
|
|
178
|
-
|
|
188
|
+
Receives KV block, generates tokens
|
|
179
189
|
Subsequent requests with same prefix
|
|
180
190
|
route here to reuse KV cache
|
|
181
191
|
```
|
|
182
192
|
|
|
193
|
+
**Transport selection priority** (probed at provision time, ~2s):
|
|
194
|
+
|
|
195
|
+
| Priority | Transport | Bandwidth | Latency | Requirement |
|
|
196
|
+
|----------|-----------|-----------|---------|-------------|
|
|
197
|
+
| 1 | NIXL/NVLink | 600 GB/s | 0.05ms | NVLink 4.0 fabric |
|
|
198
|
+
| 2 | NIXL/InfiniBand | 200–400 GB/s | 0.2ms | HDR/NDR IB |
|
|
199
|
+
| 3 | CXL 3.0 | 200 GB/s | 0.0001ms | **PLANNED** |
|
|
200
|
+
| 4 | RoCE RDMA | 25 GB/s | 1ms | 200GbE NIC |
|
|
201
|
+
| 5 | TCP fallback | 10 GB/s | 0.5ms | Always available |
|
|
202
|
+
|
|
203
|
+
**NIXL → CXL Migration Path (planned):**
|
|
204
|
+
|
|
205
|
+
```
|
|
206
|
+
CURRENT (2025): NIXL protocol — zero-copy RDMA via NVLink or InfiniBand.
|
|
207
|
+
Prefill GPU serializes KV → RDMA transfer → Decode GPU.
|
|
208
|
+
Production-ready in vLLM ≥0.6.x, SGLang ≥0.4.x.
|
|
209
|
+
|
|
210
|
+
PHASE 1 (2026): NIXL + CXL co-existence.
|
|
211
|
+
When CXL 3.0 fabric detected (Intel Clearwater Forest /
|
|
212
|
+
AMD Venice), route KV through CXL pool. Fall back to NIXL.
|
|
213
|
+
Expected bandwidth: ~200 GB/s. Latency: ~100ns.
|
|
214
|
+
|
|
215
|
+
PHASE 2 (2026–2027): CXL-primary.
|
|
216
|
+
KV cache allocated in CXL shared DRAM pool, not GPU HBM.
|
|
217
|
+
Prefill writes directly to CXL; decode reads in-place.
|
|
218
|
+
No serialization, no transfer — pointer handoff only.
|
|
219
|
+
GPU HBM used only for model weights + active compute.
|
|
220
|
+
VRAM sizing changes: replace GPU_VRAM_GB with CXL_POOL_GB
|
|
221
|
+
in AgentTopologyPlanner._compute_kv_budget().
|
|
222
|
+
|
|
223
|
+
PHASE 3 (2027+): CXL fabric switch (Astera Labs Atlas, Microchip Igloo).
|
|
224
|
+
N prefill + M decode nodes share one CXL memory pool.
|
|
225
|
+
Multi-agent KV sharing becomes a memory management problem:
|
|
226
|
+
shared prefix maps to one physical address, accessed by all.
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
### Multi-Agent KV Cache Sharing (v5.3.0)
|
|
232
|
+
|
|
233
|
+
**The problem:** Each agent independently stores its KV cache. For N agents
|
|
234
|
+
with 70% shared context (system prompt + task), the shared portion is stored
|
|
235
|
+
N times — pure waste that scales linearly with fleet size.
|
|
236
|
+
|
|
237
|
+
**The math** (from `core/kv_sharing.py`):
|
|
238
|
+
|
|
239
|
+
```
|
|
240
|
+
20 agents × Llama-70B × 32K context (fp16):
|
|
241
|
+
KV per agent: 32K × 80 layers × 512 bytes/tok/layer ÷ 2 = 0.655 GB
|
|
242
|
+
Naive (N copies): 20 × 0.655 = 13.1 GB per GPU slot
|
|
243
|
+
|
|
244
|
+
With broadcast sharing (70% shared = 22.4K shared, 9.6K unique):
|
|
245
|
+
Shared KV (stored once): 22.4K × 0.0205 GB/K = 0.46 GB
|
|
246
|
+
Per-agent unique KV: 9.6K × 0.0205 GB/K = 0.197 GB each
|
|
247
|
+
Total fleet KV: 0.46 + 20 × 0.197 = 4.4 GB
|
|
248
|
+
Saving: 13.1 - 4.4 = 8.7 GB (66% reduction)
|
|
249
|
+
→ 3× more agents per GPU
|
|
250
|
+
→ 3× fewer GPUs needed
|
|
251
|
+
→ ~$14/hr savings on a 20-agent H100 fleet
|
|
252
|
+
|
|
253
|
+
Eviction cost without sharing (H100 SXM, 32K context):
|
|
254
|
+
Re-prefill time: 32,768 / 30,000 tokens/sec ≈ 1.1s per eviction
|
|
255
|
+
With 20 agents on 6 GPUs (6 fit per GPU = 36 slots): no evictions
|
|
256
|
+
With 20 agents on 2 GPUs (6 fit per GPU = 12 slots): ~8 overflow agents
|
|
257
|
+
→ 8 × 3,600 / 30s turns × 1.1s = 1,056s/hr wasted ≈ 29% throughput lost
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
**CLI:**
|
|
261
|
+
```
|
|
262
|
+
terradev provision -g H100 --agents 20 --context 32k --model-name llama-70b
|
|
263
|
+
terradev provision -g H100 --agents 20 --context 32k --sharing-topology broadcast --dry-run
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
**Output** (what no other CLI computes today):
|
|
267
|
+
```
|
|
268
|
+
KV Sharing Plan — 20 agents × llama-70b @ 32K ctx
|
|
269
|
+
Topology: broadcast | Shared prefix: 22K tokens
|
|
270
|
+
|
|
271
|
+
VRAM without sharing: 13.1 GB (6 agents/GPU → 4 GPUs needed)
|
|
272
|
+
VRAM with sharing: 4.4 GB (18 agents/GPU → 2 GPUs needed)
|
|
273
|
+
Saving: 8.7 GB (66% reduction)
|
|
274
|
+
|
|
275
|
+
Cost/hr without sharing: $9.96
|
|
276
|
+
Cost/hr with sharing: $4.98 (saves $4.98/hr = $119/day)
|
|
277
|
+
✓ With sharing: re-prefill overhead negligible (<1%)
|
|
278
|
+
|
|
279
|
+
TIER INSTANCES GPU TP CONC CONTEXT $/HR
|
|
280
|
+
────────────────────────────────────────────────────────────────────
|
|
281
|
+
reasoning 2 H100_SXM 1 4 32K $ 4.98
|
|
282
|
+
decode 2 A100_SXM_80 2 2 32K $ 5.96
|
|
283
|
+
cpu_tools 3 CPU 1 10 n/a $ 1.80
|
|
284
|
+
────────────────────────────────────────────────────────────────────
|
|
285
|
+
TOTAL $12.74/hr
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
**New files:**
|
|
289
|
+
- `core/pd_transport.py` — `KVTransport` ABC, `NIXLNVLinkTransport`, `NIXLIBTransport`,
|
|
290
|
+
`CXLTransport` (stub, Phase 1), `RDMARoCETransport`, `TCPFallbackTransport`,
|
|
291
|
+
`TransportSelector`, `transfer_time_ms()`
|
|
292
|
+
- `core/kv_sharing.py` — `MultiAgentVRAMPlanner`, `KVSharingPlan`, `AgentKVBudget`,
|
|
293
|
+
`EvictionCostModel`, `SharingTopology` enum
|
|
294
|
+
|
|
183
295
|
### Kubernetes Layer
|
|
184
296
|
|
|
185
297
|
```
|
|
@@ -335,14 +447,84 @@ environment_manager
|
|
|
335
447
|
|
|
336
448
|
---
|
|
337
449
|
|
|
450
|
+
## Agentic Fleet Provisioning (v5.3.0)
|
|
451
|
+
|
|
452
|
+
Purpose-built heterogeneous GPU fleet management for multi-agent LLM workloads.
|
|
453
|
+
Research basis: arXiv:2605.26297 "Agentic AI Workload Characteristics" (2026).
|
|
454
|
+
|
|
455
|
+
**Key empirical findings driving the design:**
|
|
456
|
+
- Decode dominates: 91–98% of LLM execution time is decode, not prefill
|
|
457
|
+
- KV cache hit rates: 84.6–99.5% when context stays resident — eviction = recompute
|
|
458
|
+
- Context footprint: avg 37K–80K tokens, P95 tail up to 166K tokens
|
|
459
|
+
- Tool execution: 2–29% of total runtime (retrieval workloads: 25–29%)
|
|
460
|
+
|
|
461
|
+
```
|
|
462
|
+
terradev agent deploy --agents 16 --model meta-llama/Llama-3.1-70B-Instruct
|
|
463
|
+
│
|
|
464
|
+
├── AgentTopologyPlanner.infer_from_agent_count(n=16, model)
|
|
465
|
+
│ ├── Parse model size (70B)
|
|
466
|
+
│ ├── Select reasoning GPU: H100 SXM (KV cache preservation)
|
|
467
|
+
│ ├── Select decode GPU: A100 SXM 80GB × 2 (TP=2, bandwidth-optimised)
|
|
468
|
+
│ ├── CPU tools: 48-vCPU instances (Bash/WebFetch/file ops)
|
|
469
|
+
│ └── AgentFleetSpec [fleet_id, tiers, networking, autoscaling, cost]
|
|
470
|
+
│
|
|
471
|
+
├── AgenticProvisioner.provision_fleet(spec)
|
|
472
|
+
│ ├── Wave 0: quote_reasoning ‖ quote_decode ‖ quote_cpu
|
|
473
|
+
│ ├── Wave 1: provision_reasoning ‖ provision_decode ‖ provision_cpu
|
|
474
|
+
│ │ (via ParallelProvisioner across configured clouds)
|
|
475
|
+
│ ├── Wave 2: configure_networking (placement group, VPC peering)
|
|
476
|
+
│ ├── Wave 3: deploy_reasoning_inference ‖ deploy_decode_inference
|
|
477
|
+
│ │ (vLLM: --enable-prefix-caching, --kv-connector=offloading)
|
|
478
|
+
│ └── Wave 4: register_fleet → ~/.terradev/fleets/<fleet_id>.json
|
|
479
|
+
│
|
|
480
|
+
└── InferenceRouter (KV prefix-aware routing)
|
|
481
|
+
├── PrefixCacheIndex: route by prompt prefix hash
|
|
482
|
+
├── Sticky routing: X-Agent-Id header → same pod
|
|
483
|
+
└── Preserves KV residency across agent turns
|
|
484
|
+
```
|
|
485
|
+
|
|
486
|
+
**Three-tier hardware model:**
|
|
487
|
+
|
|
488
|
+
| Tier | Hardware | Optimised For | Autoscale Signal |
|
|
489
|
+
|------|----------|---------------|------------------|
|
|
490
|
+
| reasoning | H100 SXM 80GB | KV cache preservation, long context | TTFT p95 > 2000ms |
|
|
491
|
+
| decode | A100 SXM 80GB × 2 (TP=2) | Memory bandwidth, token throughput | Decode queue depth > 6 |
|
|
492
|
+
| cpu_tools | 48-vCPU (no GPU) | Bash, WebFetch, Read/Edit/Grep | Tool latency p95 > 400ms |
|
|
493
|
+
|
|
494
|
+
**Why NOT GPU utilization for autoscaling:**
|
|
495
|
+
Agentic workloads are inherently bursty — GPU utilization oscillates between 0% (tool
|
|
496
|
+
execution) and 100% (decode burst) within a single agent turn. TTFT and queue depth
|
|
497
|
+
are stable signals that reflect actual user-visible latency.
|
|
498
|
+
|
|
499
|
+
**CLI commands:**
|
|
500
|
+
```
|
|
501
|
+
terradev agent plan --agents 16 --model ... # size fleet, show cost
|
|
502
|
+
terradev agent deploy --agents 16 --model ... # provision all tiers
|
|
503
|
+
terradev agent status --fleet-id ag_xxx # KV hit rate, TTFT, queue
|
|
504
|
+
terradev agent scale --fleet-id ag_xxx --tier decode --count 8
|
|
505
|
+
terradev agent cost --fleet-id ag_xxx # per-tier spend breakdown
|
|
506
|
+
terradev agent list # all known fleets
|
|
507
|
+
terradev agent teardown --fleet-id ag_xxx # destroy + remove state
|
|
508
|
+
```
|
|
509
|
+
|
|
510
|
+
**MCP tools (6 new in v6.0.0):**
|
|
511
|
+
`agent_topology_plan`, `agent_fleet_provision`, `agent_fleet_status`,
|
|
512
|
+
`agent_fleet_scale`, `agent_fleet_cost`, `agent_fleet_teardown`
|
|
513
|
+
|
|
514
|
+
---
|
|
515
|
+
|
|
338
516
|
## File Map
|
|
339
517
|
|
|
340
518
|
```
|
|
341
519
|
terradev_cli/
|
|
342
|
-
cli.py Main CLI (~
|
|
520
|
+
cli.py Main CLI (~14,400 lines, Click)
|
|
343
521
|
cli_karpenter.py Karpenter subcommand group
|
|
344
522
|
cli_hf_spaces.py HuggingFace Spaces subcommand group
|
|
345
523
|
core/
|
|
524
|
+
agentic_topology.py AgentFleetSpec, AgentTopologyPlanner (v5.3.0)
|
|
525
|
+
agentic_provisioner.py AgenticProvisioner, fleet state mgmt (v5.3.0)
|
|
526
|
+
pd_transport.py Transport-agnostic P/D KV layer (v5.3.0)
|
|
527
|
+
kv_sharing.py Multi-agent KV sharing VRAM planner (v5.3.0)
|
|
346
528
|
training_orchestrator.py DeepSpeed/torchrun/FlashOptim
|
|
347
529
|
provision_orchestrator.py Parallel provision + NUMA
|
|
348
530
|
evaluation_orchestrator.py Model/endpoint evaluation
|
|
@@ -350,6 +532,10 @@ terradev_cli/
|
|
|
350
532
|
cost_tracker.py Spend tracking
|
|
351
533
|
price_intelligence.py Spot market analytics + ML
|
|
352
534
|
trace_viewer.py Phoenix span tree renderer
|
|
535
|
+
dag_executor.py Wave-parallel DAG execution (Rust-backed)
|
|
536
|
+
parallel_provisioner.py Multi-cloud parallel provisioning
|
|
537
|
+
warm_pool_manager.py Pre-warming strategies for bursty workloads
|
|
538
|
+
inference_router.py KV prefix-aware routing + auto-failover
|
|
353
539
|
ml_services/
|
|
354
540
|
__init__.py
|
|
355
541
|
vllm_service.py vLLM config + LoRA + sleep
|
|
@@ -364,10 +550,13 @@ terradev_cli/
|
|
|
364
550
|
kubernetes_service.py
|
|
365
551
|
kubernetes_enhanced.py GPU operator, MIG, monitoring
|
|
366
552
|
clusters/
|
|
553
|
+
agentic-template/ Heterogeneous agent fleet (v6.0.0)
|
|
554
|
+
helm/values-agentic.yaml Three-tier Helm values
|
|
555
|
+
k8s/fleet-manifests.yaml Deployments, HPAs, NetworkPolicies, Karpenter
|
|
367
556
|
moe-template/ MoE K8s + Helm (all opts auto-applied)
|
|
368
557
|
rag-template/ Qdrant + Phoenix + Guardrails
|
|
369
558
|
glm-5/ GLM-5 production templates
|
|
370
|
-
rust/ NVML bindings, DAG orchestrator
|
|
559
|
+
rust/ NVML bindings, DAG orchestrator, MCP codec
|
|
371
560
|
terradev-mcp/
|
|
372
|
-
terradev_mcp.py
|
|
561
|
+
terradev_mcp.py 304-tool MCP server (~8,700 lines)
|
|
373
562
|
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: terradev-cli
|
|
3
|
-
Version: 5.
|
|
3
|
+
Version: 5.3.1
|
|
4
4
|
Summary: An imperative command-line-interface for AI workload orchestration.
|
|
5
5
|
Author-email: Terradev Team <team@terradev.com>
|
|
6
6
|
Maintainer-email: Terradev Team <team@terradev.com>
|
|
@@ -93,7 +93,7 @@ Requires-Dist: redis>=5.0.0; extra == "enterprise"
|
|
|
93
93
|
Requires-Dist: PyJWT>=2.8.0; extra == "enterprise"
|
|
94
94
|
Dynamic: license-file
|
|
95
95
|
|
|
96
|
-
# Terradev CLI v5.
|
|
96
|
+
# Terradev CLI v5.3.1
|
|
97
97
|
|
|
98
98
|
**An imperative command-line-interface for AI workload orchestration.**
|
|
99
99
|
|
|
@@ -105,6 +105,20 @@ pypi.org/project/terradev-cli/
|
|
|
105
105
|
|
|
106
106
|
Terradev is a cross-cloud compute-provisioning CLI that compresses + stages datasets, provisions optimal instances + nodes, and deploys **3-5x faster** than sequential provisioning.
|
|
107
107
|
|
|
108
|
+
**NOTES ON 5.3.0**
|
|
109
|
+
|
|
110
|
+
Added **transport-agnostic Prefill/Decode (P/D) disaggregation layer** and **multi-agent KV cache sharing planner**:
|
|
111
|
+
|
|
112
|
+
- **Transport-agnostic P/D layer** (`core/pd_transport.py`): KV cache transfer is abstracted across NIXL/NVLink (600 GB/s), NIXL/InfiniBand (200–400 GB/s), CXL 3.0 (planned migration), RoCE RDMA, and TCP fallback. The `TransportSelector` probes at provision time and selects the best available transport. Documented NIXL→CXL migration path (Phase 1 co-existence → Phase 2 CXL-primary → Phase 3 fabric switch).
|
|
113
|
+
|
|
114
|
+
- **Multi-agent KV sharing planner** (`core/kv_sharing.py`): Computes fleet VRAM requirements with KV cache sharing topologies (broadcast/star/chain/none). For 20 agents with 70% shared context (broadcast), VRAM reduces by 66% → 3× more agents per GPU, 3× fewer GPUs needed, ~$14/hr savings on H100 fleet. Includes `EvictionCostModel` to quantify re-prefill penalty when VRAM is under-provisioned.
|
|
115
|
+
|
|
116
|
+
- **CLI integration**: `terradev provision` now supports `--agents`, `--context`, `--sharing-topology`, `--dtype` flags. When `--agents` is passed, the KV planner outputs the heterogeneous fleet spec with cost savings:
|
|
117
|
+
```bash
|
|
118
|
+
terradev provision -g H100 --agents 20 --context 32k --model-name llama-70b
|
|
119
|
+
terradev provision -g H100 --agents 20 --context 32k --sharing-topology broadcast --dry-run
|
|
120
|
+
```
|
|
121
|
+
|
|
108
122
|
**NOTES ON 5.2.1**
|
|
109
123
|
|
|
110
124
|
Added two new BYOAPI providers: **Yotta Labs (Shakti Cloud)** and **E2E Networks** — India's leading GPU clouds. Yotta Labs uses a pod-based compute model (similar to RunPod), and E2E Networks is a traditional VM-style hyperscaler that is NSE-listed and MeitY empanelled. Both are BYOAPI: your key, stored locally, never touches a Terradev server.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Terradev CLI v5.
|
|
1
|
+
# Terradev CLI v5.3.1
|
|
2
2
|
|
|
3
3
|
**An imperative command-line-interface for AI workload orchestration.**
|
|
4
4
|
|
|
@@ -10,6 +10,20 @@ pypi.org/project/terradev-cli/
|
|
|
10
10
|
|
|
11
11
|
Terradev is a cross-cloud compute-provisioning CLI that compresses + stages datasets, provisions optimal instances + nodes, and deploys **3-5x faster** than sequential provisioning.
|
|
12
12
|
|
|
13
|
+
**NOTES ON 5.3.0**
|
|
14
|
+
|
|
15
|
+
Added **transport-agnostic Prefill/Decode (P/D) disaggregation layer** and **multi-agent KV cache sharing planner**:
|
|
16
|
+
|
|
17
|
+
- **Transport-agnostic P/D layer** (`core/pd_transport.py`): KV cache transfer is abstracted across NIXL/NVLink (600 GB/s), NIXL/InfiniBand (200–400 GB/s), CXL 3.0 (planned migration), RoCE RDMA, and TCP fallback. The `TransportSelector` probes at provision time and selects the best available transport. Documented NIXL→CXL migration path (Phase 1 co-existence → Phase 2 CXL-primary → Phase 3 fabric switch).
|
|
18
|
+
|
|
19
|
+
- **Multi-agent KV sharing planner** (`core/kv_sharing.py`): Computes fleet VRAM requirements with KV cache sharing topologies (broadcast/star/chain/none). For 20 agents with 70% shared context (broadcast), VRAM reduces by 66% → 3× more agents per GPU, 3× fewer GPUs needed, ~$14/hr savings on H100 fleet. Includes `EvictionCostModel` to quantify re-prefill penalty when VRAM is under-provisioned.
|
|
20
|
+
|
|
21
|
+
- **CLI integration**: `terradev provision` now supports `--agents`, `--context`, `--sharing-topology`, `--dtype` flags. When `--agents` is passed, the KV planner outputs the heterogeneous fleet spec with cost savings:
|
|
22
|
+
```bash
|
|
23
|
+
terradev provision -g H100 --agents 20 --context 32k --model-name llama-70b
|
|
24
|
+
terradev provision -g H100 --agents 20 --context 32k --sharing-topology broadcast --dry-run
|
|
25
|
+
```
|
|
26
|
+
|
|
13
27
|
**NOTES ON 5.2.1**
|
|
14
28
|
|
|
15
29
|
Added two new BYOAPI providers: **Yotta Labs (Shakti Cloud)** and **E2E Networks** — India's leading GPU clouds. Yotta Labs uses a pod-based compute model (similar to RunPod), and E2E Networks is a traditional VM-style hyperscaler that is NSE-listed and MeitY empanelled. Both are BYOAPI: your key, stored locally, never touches a Terradev server.
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
# Agentic Fleet Helm Values
|
|
2
|
+
#
|
|
3
|
+
# Three-tier heterogeneous GPU fleet for multi-agent LLM workloads.
|
|
4
|
+
# Grounded in arXiv:2605.26297 — decode dominates (91-98%), KV cache hit
|
|
5
|
+
# rates 84-99%, context footprint 37K-166K tokens.
|
|
6
|
+
#
|
|
7
|
+
# Usage:
|
|
8
|
+
# helm install agent-fleet ./charts/agentic-fleet -f values-agentic.yaml
|
|
9
|
+
#
|
|
10
|
+
# Tiers:
|
|
11
|
+
# reasoning — H100 SXM, KV cache preservation, long context
|
|
12
|
+
# decode — A100 80GB, memory-bandwidth-optimised token streaming
|
|
13
|
+
# cpu_tools — High-vCPU, Bash/WebFetch/file-op tool execution
|
|
14
|
+
|
|
15
|
+
global:
|
|
16
|
+
model: "meta-llama/Llama-3.1-70B-Instruct"
|
|
17
|
+
fleet_id: "" # set by terradev agent deploy
|
|
18
|
+
n_agents: 16
|
|
19
|
+
image:
|
|
20
|
+
repository: vllm/vllm-openai
|
|
21
|
+
tag: latest
|
|
22
|
+
pullPolicy: IfNotPresent
|
|
23
|
+
|
|
24
|
+
# ── Reasoning tier ────────────────────────────────────────────────────────────
|
|
25
|
+
# KV preservation is the primary objective.
|
|
26
|
+
# Research: context averages 37K-80K tokens; we provision for 120K (P95 tail).
|
|
27
|
+
# Failed agents accumulate MORE context — provision for the tail, not the mean.
|
|
28
|
+
reasoning:
|
|
29
|
+
enabled: true
|
|
30
|
+
replicaCount: 2
|
|
31
|
+
gpu:
|
|
32
|
+
type: "H100_SXM"
|
|
33
|
+
countPerPod: 1
|
|
34
|
+
resources:
|
|
35
|
+
limits:
|
|
36
|
+
nvidia.com/gpu: "1"
|
|
37
|
+
memory: "200Gi"
|
|
38
|
+
cpu: "16"
|
|
39
|
+
requests:
|
|
40
|
+
nvidia.com/gpu: "1"
|
|
41
|
+
memory: "180Gi"
|
|
42
|
+
cpu: "12"
|
|
43
|
+
vllm:
|
|
44
|
+
tensorParallelSize: 1
|
|
45
|
+
maxModelLen: 120000 # 120K context budget (arXiv P95 tail)
|
|
46
|
+
gpuMemoryUtilization: 0.90
|
|
47
|
+
enablePrefixCaching: true # CRITICAL: 84-99% KV hit rate requires this
|
|
48
|
+
kvConnector: "offloading" # CPU offload when under pressure (avoid eviction)
|
|
49
|
+
speculativeConfig:
|
|
50
|
+
method: "mtp"
|
|
51
|
+
enableSleepMode: true
|
|
52
|
+
maxNumSeqs: 8 # concurrency per instance
|
|
53
|
+
serveOnPort: 8000
|
|
54
|
+
autoscaling:
|
|
55
|
+
enabled: true
|
|
56
|
+
minReplicas: 1
|
|
57
|
+
maxReplicas: 8
|
|
58
|
+
metrics:
|
|
59
|
+
# Scale on TTFT degradation, NOT GPU utilization (bursty workload)
|
|
60
|
+
- type: External
|
|
61
|
+
external:
|
|
62
|
+
metric:
|
|
63
|
+
name: vllm_request_ttft_seconds_p95
|
|
64
|
+
target:
|
|
65
|
+
type: Value
|
|
66
|
+
value: "2" # 2 seconds TTFT threshold
|
|
67
|
+
scaleInCooldown: 300 # 5 min — protect KV cache from eviction during scale-in
|
|
68
|
+
scaleOutCooldown: 30
|
|
69
|
+
nodeSelector:
|
|
70
|
+
terradev.ai/tier: reasoning
|
|
71
|
+
cloud.google.com/gke-accelerator: nvidia-h100-sxm
|
|
72
|
+
|
|
73
|
+
# ── Decode tier ───────────────────────────────────────────────────────────────
|
|
74
|
+
# Memory-bandwidth-optimised for token streaming.
|
|
75
|
+
# A100 SXM 80GB: 2 TB/s HBM2e — sweet spot for 70B decode at batch=8.
|
|
76
|
+
# Research: decode = 91-98% of LLM time → optimise for throughput here.
|
|
77
|
+
decode:
|
|
78
|
+
enabled: true
|
|
79
|
+
replicaCount: 4 # default for 16 agents; adjusted by agentic_provisioner.py
|
|
80
|
+
gpu:
|
|
81
|
+
type: "A100_SXM_80"
|
|
82
|
+
countPerPod: 2 # TP=2 for 70B model (140GB weights need 2 × 80GB)
|
|
83
|
+
resources:
|
|
84
|
+
limits:
|
|
85
|
+
nvidia.com/gpu: "2"
|
|
86
|
+
memory: "400Gi"
|
|
87
|
+
cpu: "16"
|
|
88
|
+
requests:
|
|
89
|
+
nvidia.com/gpu: "2"
|
|
90
|
+
memory: "350Gi"
|
|
91
|
+
cpu: "12"
|
|
92
|
+
vllm:
|
|
93
|
+
tensorParallelSize: 2
|
|
94
|
+
maxModelLen: 120000
|
|
95
|
+
gpuMemoryUtilization: 0.90
|
|
96
|
+
enablePrefixCaching: true
|
|
97
|
+
kvConnector: "offloading"
|
|
98
|
+
speculativeConfig:
|
|
99
|
+
method: "mtp"
|
|
100
|
+
enableSleepMode: true
|
|
101
|
+
maxNumSeqs: 16 # higher concurrency — decode tier handles bulk of traffic
|
|
102
|
+
serveOnPort: 8001
|
|
103
|
+
autoscaling:
|
|
104
|
+
enabled: true
|
|
105
|
+
minReplicas: 1
|
|
106
|
+
maxReplicas: 32
|
|
107
|
+
metrics:
|
|
108
|
+
# Scale on decode queue depth (backlog of pending tool-call continuations)
|
|
109
|
+
- type: External
|
|
110
|
+
external:
|
|
111
|
+
metric:
|
|
112
|
+
name: vllm_num_requests_waiting
|
|
113
|
+
target:
|
|
114
|
+
type: Value
|
|
115
|
+
value: "6" # >6 waiting requests → scale out
|
|
116
|
+
scaleInCooldown: 90
|
|
117
|
+
scaleOutCooldown: 15
|
|
118
|
+
nodeSelector:
|
|
119
|
+
terradev.ai/tier: decode
|
|
120
|
+
cloud.google.com/gke-accelerator: nvidia-a100-80gb
|
|
121
|
+
|
|
122
|
+
# ── CPU tools tier ────────────────────────────────────────────────────────────
|
|
123
|
+
# For Bash, Read/Edit/Grep, WebFetch/WebSearch tool execution.
|
|
124
|
+
# Research: tools = 2-29% of runtime. GAIA (retrieval) hits 25-29%.
|
|
125
|
+
# High vCPU count (48) enables parallel tool call fan-out across agent steps.
|
|
126
|
+
cpuTools:
|
|
127
|
+
enabled: true
|
|
128
|
+
replicaCount: 2
|
|
129
|
+
resources:
|
|
130
|
+
limits:
|
|
131
|
+
memory: "96Gi"
|
|
132
|
+
cpu: "48"
|
|
133
|
+
requests:
|
|
134
|
+
memory: "64Gi"
|
|
135
|
+
cpu: "32"
|
|
136
|
+
image:
|
|
137
|
+
repository: terradev/agent-tool-runner
|
|
138
|
+
tag: latest
|
|
139
|
+
env:
|
|
140
|
+
MAX_CONCURRENT_TOOLS: "64"
|
|
141
|
+
BASH_TIMEOUT_S: "30"
|
|
142
|
+
WEBFETCH_TIMEOUT_S: "15"
|
|
143
|
+
TOOL_QUEUE_DEPTH_WARN: "8"
|
|
144
|
+
autoscaling:
|
|
145
|
+
enabled: true
|
|
146
|
+
minReplicas: 1
|
|
147
|
+
maxReplicas: 16
|
|
148
|
+
metrics:
|
|
149
|
+
- type: Resource
|
|
150
|
+
resource:
|
|
151
|
+
name: cpu
|
|
152
|
+
target:
|
|
153
|
+
type: Utilization
|
|
154
|
+
averageUtilization: 70
|
|
155
|
+
# Also scale on p95 tool latency
|
|
156
|
+
- type: External
|
|
157
|
+
external:
|
|
158
|
+
metric:
|
|
159
|
+
name: agent_tool_execution_latency_p95_ms
|
|
160
|
+
target:
|
|
161
|
+
type: Value
|
|
162
|
+
value: "400" # 400ms p95 threshold
|
|
163
|
+
scaleInCooldown: 30
|
|
164
|
+
scaleOutCooldown: 10
|
|
165
|
+
nodeSelector:
|
|
166
|
+
terradev.ai/tier: cpu-tools
|
|
167
|
+
|
|
168
|
+
# ── Inference router (optional) ───────────────────────────────────────────────
|
|
169
|
+
# Routes agent requests: KV prefix-aware routing to the instance most likely
|
|
170
|
+
# to have the context cached (avoids redundant prefill recompute).
|
|
171
|
+
# Uses existing InferenceRouter.PrefixCacheIndex from inference_router.py.
|
|
172
|
+
router:
|
|
173
|
+
enabled: true
|
|
174
|
+
replicaCount: 1
|
|
175
|
+
image:
|
|
176
|
+
repository: terradev/inference-router
|
|
177
|
+
tag: latest
|
|
178
|
+
config:
|
|
179
|
+
# Route reasoning requests to reasoning tier
|
|
180
|
+
reasoningEndpoint: "http://reasoning-svc:8000"
|
|
181
|
+
# Route decode requests to decode tier
|
|
182
|
+
decodeEndpoint: "http://decode-svc:8001"
|
|
183
|
+
# KV prefix cache index: route by prompt prefix hash
|
|
184
|
+
prefixCacheEnabled: true
|
|
185
|
+
prefixCacheMaxEntries: 10000
|
|
186
|
+
prefixTokens: 64
|
|
187
|
+
# Sticky routing: same agent_id → same pod (preserves KV residency)
|
|
188
|
+
stickyRouting: true
|
|
189
|
+
stickyHeader: "X-Agent-Id"
|
|
190
|
+
|
|
191
|
+
# ── Monitoring ────────────────────────────────────────────────────────────────
|
|
192
|
+
# Prometheus metrics for autoscaling signal derivation.
|
|
193
|
+
# Key metrics: vllm_kv_cache_usage_perc, vllm_num_requests_waiting,
|
|
194
|
+
# vllm_request_ttft_seconds (histogram), agent_tool_execution_latency_ms
|
|
195
|
+
monitoring:
|
|
196
|
+
enabled: true
|
|
197
|
+
prometheus:
|
|
198
|
+
enabled: true
|
|
199
|
+
serviceMonitor: true
|
|
200
|
+
scrapeInterval: 10s
|
|
201
|
+
grafana:
|
|
202
|
+
enabled: true
|
|
203
|
+
dashboards:
|
|
204
|
+
agentFleet: true # KV hit rate, TTFT, queue depth, tier cost
|
|
205
|
+
dcgm:
|
|
206
|
+
enabled: true # GPU memory utilization, bandwidth saturation
|
|
207
|
+
alerts:
|
|
208
|
+
kvHitRateBelow: 0.80 # arXiv threshold for healthy caching
|
|
209
|
+
ttftP95AboveMs: 2000 # reasoning tier TTFT threshold
|
|
210
|
+
decodeQueueDepthAbove: 8 # decode backlog alert
|
|
211
|
+
toolLatencyP95AboveMs: 500
|
|
212
|
+
|
|
213
|
+
# ── Networking ────────────────────────────────────────────────────────────────
|
|
214
|
+
networking:
|
|
215
|
+
placementGroup: cluster # co-locate all tiers in same AZ for low latency
|
|
216
|
+
interTierLatencyTargetMs: 2
|
|
217
|
+
bandwidthGbps: 25
|
|
218
|
+
rdmaEnabled: false # enable for 70B+ models requiring KV RDMA transfer
|
|
219
|
+
networkPolicies:
|
|
220
|
+
enabled: true
|
|
221
|
+
# Only reasoning and decode tiers can talk to each other
|
|
222
|
+
# CPU tools tier can only reach external APIs and result consumers
|