terradev-cli 5.3.3__tar.gz → 5.3.4__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.3.3 → terradev_cli-5.3.4}/Dockerfile +1 -1
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/PKG-INFO +4 -18
- {terradev_cli-5.3.3/terradev_cli → terradev_cli-5.3.4}/README.md +3 -17
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/pyproject.toml +1 -1
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/__init__.py +1 -1
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/cli.py +6 -6
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/checkpoint_manager.py +2 -1
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/preflight_validator.py +2 -1
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/training_monitor.py +2 -1
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/training_orchestrator.py +2 -1
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/mcp/server.py +18 -6
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/providers/__init__.py +1 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/providers/base_provider.py +6 -2
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/providers/e2e_networks_provider.py +4 -4
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/providers/fluidstack_provider.py +2 -2
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/providers/registry.py +48 -32
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/providers/yottalabs_provider.py +5 -5
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli.egg-info/PKG-INFO +4 -18
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli.egg-info/SOURCES.txt +0 -1
- terradev_cli-5.3.3/requirements.txt +0 -56
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/.env.example +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/.github/workflows/action.yml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/.github/workflows/ci.yml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/.github/workflows/release.yml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/.github/workflows/static.yml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/.terradev/custom_providers.example.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/Deployment Package/BNF_GRAMMAR.md +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/Deployment Package/LIFECYCLES.md +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/Deployment Package/architecture.md +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/Deployment Package/overview.md +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/Deployment Package/security.md +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/Deployment Package/troubleshooting.md +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/Dockerfile.test +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/LICENSE +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/MANIFEST.in +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/agentic-template/helm/values-agentic.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/agentic-template/k8s/fleet-manifests.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/glm-5/README.md +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/glm-5/helm/values-glm5.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/glm-5/k8s/hpa.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/glm-5/k8s/model-cache-pvc.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/glm-5/k8s/namespace.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/glm-5/k8s/pdb.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/glm-5/k8s/service.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/glm-5/k8s/sglang-deployment.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/glm-5/k8s/vllm-deployment.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/glm-5/task.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/glm-5/terraform/main.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/glm-5/terraform/outputs.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/glm-5/terraform/variables.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/llmd-template/README.md +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/llmd-template/helm/values-llmd.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/llmd-template/k8s/gateway.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/llmd-template/k8s/leaderworkerset.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/llmd-template/k8s/llminferenceservice.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/llmd-template/task.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/moe-template/README.md +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/moe-template/helm/values-moe.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/moe-template/k8s/deployment.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/moe-template/k8s/hpa.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/moe-template/k8s/model-cache-pvc.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/moe-template/k8s/namespace.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/moe-template/k8s/pdb.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/moe-template/k8s/service.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/moe-template/task.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/moe-template/terraform/main.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/moe-template/terraform/outputs.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/moe-template/terraform/variables.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/rag-template/README.md +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/rag-template/helm/values-rag.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/rag-template/k8s/deployment.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/clusters/rag-template/terraform/main.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/demo/RECORDING_GUIDE.md +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/demo/generate_gif.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/demo/terradev-demo.gif +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/docs/ADVANCED_FINANCIAL_INNOVATIONS.md +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/docs/API_DOCUMENTATION.md +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/docs/BingSiteAuth.xml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/docs/FINOPS_ATTRIBUTION_SYSTEM.md +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/docs/USER_GUIDE.md +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/docs/VLLM_AUTO_OPTIMIZATION_GUIDE.md +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/docs/VLLM_OPTIMIZATION_GUIDE.md +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/docs/architecture.md +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/docs/index.html +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/docs/overview.md +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/docs/robots.txt +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/docs/sitemap.xml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/docs/test_spot_provision.md +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/examples/aws_ssm_starter.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/examples/config.example.json +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/examples/demo_k8s_config.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/examples/direct_aws_starter.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/examples/ec2_user_data_starter.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/examples/example-pipeline.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/examples/kubernetes_training_deployment.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/examples/simple_ssm_starter.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/examples/ssh_server_starter.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/examples/start_aws_servers.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/helm/terradev/Chart.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/helm/terradev/templates/_helpers.tpl +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/helm/terradev/templates/deployment.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/helm/terradev/values.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/infrastructure/bucket-policy.json +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/infrastructure/grafana_training_dashboard.json +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/infrastructure/kubernetes/microservices.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/infrastructure/terraform/main.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/infrastructure/terraform/parallelism.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/integrations/cli-tool.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/integrations/cloud-management-widgets.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/integrations/cloud-provider-apis.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/integrations/critical-widgets.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/integrations/devops-cicd-widgets.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/integrations/devops-essential-tools.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/integrations/docker-integration.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/integrations/kubernetes-operator.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/integrations/mlflow-integration.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/modules/datadog/README.md +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/modules/datadog/dashboard.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/modules/datadog/monitors.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/modules/datadog/outputs.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/modules/datadog/provider.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/modules/datadog/variables.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/modules/datadog/versions.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/modules/prometheus_training_config.yml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/Cargo.toml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/INTEGRATION_GUIDE.md +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/PERFORMANCE_OPTIMIZATIONS.md +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/README.md +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-artifact-verification/Cargo.toml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-artifact-verification/src/lib.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-artifact-verification/src/types.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-artifact-verification/src/verifier.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-authentication/Cargo.toml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-authentication/src/encoding.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-authentication/src/hmac.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-authentication/src/lib.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-authentication/src/types.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-cache-eviction/Cargo.toml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-cache-eviction/src/cache.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-cache-eviction/src/lib.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-cache-eviction/src/types.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-command-executor/Cargo.toml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-command-executor/src/lib.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-config-validator/Cargo.toml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-config-validator/src/lib.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-config-validator/src/types.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-config-validator/src/validator.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-connection-pool/Cargo.toml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-connection-pool/src/lib.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-connection-pool/src/pool.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-connection-pool/src/types.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-cost-calculator/Cargo.toml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-cost-calculator/src/calculator.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-cost-calculator/src/lib.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-cost-calculator/src/types.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-cost-scaler/Cargo.toml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-cost-scaler/src/lib.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-credential-vault/Cargo.toml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-credential-vault/src/lib.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-credential-vault/src/types.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-credential-vault/src/vault.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-dag-executor/Cargo.toml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-dag-executor/src/lib.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-distributed-lock/Cargo.toml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-distributed-lock/src/lib.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-distributed-lock/src/lock.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-distributed-lock/src/types.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-egress-optimizer/Cargo.toml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-egress-optimizer/src/graph.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-egress-optimizer/src/lib.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-egress-optimizer/src/types.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-event-bus/Cargo.toml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-event-bus/src/bus.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-event-bus/src/lib.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-event-bus/src/types.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-governance/Cargo.toml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-governance/src/lib.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-gpu-discovery/Cargo.toml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-gpu-discovery/src/lib.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-gpu-topology/Cargo.toml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-gpu-topology/src/lib.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-gpu-topology/src/topology.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-gpu-topology/src/types.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-helm-generator/Cargo.toml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-helm-generator/src/lib.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-mcp-codec/Cargo.toml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-mcp-codec/src/lib.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-mcp-optimizer/Cargo.toml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-mcp-optimizer/src/lib.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-price-intelligence/Cargo.toml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-price-intelligence/src/lib.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-quota-manager/Cargo.toml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-quota-manager/src/lib.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-quota-manager/src/manager.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-quota-manager/src/types.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-resource-pool/Cargo.toml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-resource-pool/src/lib.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-resource-pool/src/pool.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-resource-pool/src/types.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-result-compressor/Cargo.toml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-result-compressor/src/lib.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-semantic-router/Cargo.toml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-semantic-router/src/lib.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-snapshot-manager/Cargo.toml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-snapshot-manager/src/lib.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-snapshot-manager/src/snapshot.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-snapshot-manager/src/types.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-state-machine/Cargo.toml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-state-machine/src/lib.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-state-machine/src/state.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-state-machine/src/types.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-telemetry/Cargo.toml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-telemetry/src/lib.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-telemetry/src/pipeline.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-telemetry/src/types.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-tool-registry/Cargo.toml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-tool-registry/src/lib.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-vram-estimator/Cargo.toml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-vram-estimator/src/estimator.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-vram-estimator/src/lib.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-vram-estimator/src/types.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-warm-pool/Cargo.toml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/rust/terradev-warm-pool/src/lib.rs +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/scripts/action.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/scripts/gpu-check.sh +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/setup/Lambda Cloud API spec 1.8.3.json +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/setup/docker-compose.yml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/setup/nginx.conf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/setup/setup.sh +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/setup.cfg +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/CHANGELOG.md +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/COMPLETE_COMMAND_REFERENCE.md +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/COMPLETE_INTEGRATION_GUIDE.md +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/IMPLEMENTATION_SUMMARY.md +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/MAKING_SPOT_WORK_FOR_STATEFUL_WORKLOADS.md +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4/terradev_cli}/README.md +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/SGLANG_COMMAND_GUIDE.md +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/TERRADEV_STACK_CHART.md +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/__main__.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/cli_hf_spaces.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/cli_karpenter.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/__init__.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/agentic_provisioner.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/agentic_topology.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/async_config.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/auth.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/auto_lineage.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/cache_manager.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/command_executor.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/config.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/config_validator.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/cost_scaler.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/cost_tracker.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/credential_vault.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/cuda_graph_integrator.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/dag_executor.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/data_governance.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/dataset_stager.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/deployment_router.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/distributed_lock.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/drift_detector.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/egress_cost_monitor.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/egress_optimizer.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/evaluation_orchestrator.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/event_system.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/gitops_manager.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/gpu_discovery.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/gpu_topology.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/helm_generator.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/hf_cli_integration.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/hf_smart_templates.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/hf_spaces.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/inference_router.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/inference_spot_manager.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/job_state_manager.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/kv_cache_checkpoint_manager.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/kv_cache_checkpoint_tests.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/kv_sharing.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/manifest_cache.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/manifest_example.json +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/mig_manager.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/migration_orchestrator.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/mla_vram_estimator.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/mla_vram_tests.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/model_orchestrator.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/oidc_provider.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/optimization_config.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/parallel_provisioner.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/pd_transport.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/pipeline_schema.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/price_discovery.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/price_intelligence.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/public_ip_billing_tracker.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/quick_start.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/quota_manager.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/rate_limiter.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/rust_telemetry.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/semantic_router.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/semantic_signals/__init__.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/semantic_signals/base_signal.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/semantic_signals/complexity_signal.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/semantic_signals/domain_signal.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/semantic_signals/keyword_signal.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/semantic_signals/language_signal.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/semantic_signals/modality_signal.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/semantic_signals/orchestrator.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/semantic_signals/routing_policy.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/semantic_signals/safety_signal.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/session_manager.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/ssh_key_manager.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/telemetry.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/terradev_engine.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/trace_viewer.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/user_manager.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/warm_pool_manager.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/weight_streaming_benchmarks.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/core/weight_streaming_manager.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/cost_optimizer.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/credential_prompt.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/demo.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/entry_point.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/integrations/Terradev LOGO BLACK.png +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/integrations/Terradev LOGO WHITEW.png +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/integrations/__init__.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/integrations/databricks_integration.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/integrations/datadog_integration.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/integrations/helicone_integration.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/integrations/prometheus_integration.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/integrations/wandb_integration.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/k8s/terraform_wrapper.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/kubernetes/inferx-cost-optimized.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/kubernetes/inferx-infrastructure.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/kubernetes/inferx-models.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/kubernetes/inferx-platform.yaml +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/kubernetes/inferx_setup.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/mcp/__init__.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/ml_services/__init__.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/ml_services/agentic_serving.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/ml_services/drift_retrain_service.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/ml_services/dvc_service.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/ml_services/guardrails_service.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/ml_services/huggingface_service.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/ml_services/kserve_service.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/ml_services/kubernetes_enhanced.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/ml_services/kubernetes_service.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/ml_services/langchain_service.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/ml_services/langfuse_service.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/ml_services/langgraph_service.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/ml_services/lmcache_service.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/ml_services/mlflow_service.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/ml_services/model_router.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/ml_services/ollama_service.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/ml_services/phoenix_service.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/ml_services/qdrant_service.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/ml_services/ray_enhanced.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/ml_services/ray_service.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/ml_services/sglang_service.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/ml_services/vllm_service.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/ml_services/wandb_enhanced.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/optimization/__init__.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/optimization/auto_optimizer.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/optimization/cuco_optimizer.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/providers/LATITUDE_PROVIDER.md +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/providers/alibaba_provider.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/providers/aws_provider.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/providers/azure_provider.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/providers/baseten_provider.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/providers/coreweave_provider.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/providers/crusoe_provider.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/providers/demo_mode.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/providers/digitalocean_provider.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/providers/gcp_provider.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/providers/gpu_catalog.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/providers/hetzner_provider.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/providers/huggingface_provider.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/providers/hyperstack_provider.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/providers/inferx_provider.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/providers/lambda_labs_provider.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/providers/latitude_provider.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/providers/oracle_provider.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/providers/ovhcloud_provider.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/providers/provider_factory.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/providers/provider_profiles.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/providers/real_pricing.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/providers/runpod_provider.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/providers/siliconflow_provider.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/providers/tensordock_provider.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/providers/types.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/providers/vastai_provider.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/requirements.txt +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/requirements_minimal.txt +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/terraform/main.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/terraform/modules/__init__.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/terraform/modules/gpu-node-aws/bootstrap.sh +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/terraform/modules/gpu-node-aws/main.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/terraform/modules/gpu-node-aws/outputs.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/terraform/modules/gpu-node-aws/variables.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/terraform/modules/gpu-node-aws/versions.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/terraform/modules/gpu-node-hyperstack/bootstrap.sh +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/terraform/modules/gpu-node-hyperstack/main.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/terraform/modules/gpu-node-hyperstack/outputs.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/terraform/modules/gpu-node-hyperstack/variables.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/terraform/modules/gpu-node-hyperstack/versions.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/terraform/modules/gpu-node-lambda/bootstrap.sh +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/terraform/modules/gpu-node-lambda/main.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/terraform/modules/gpu-node-lambda/outputs.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/terraform/modules/gpu-node-lambda/variables.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/terraform/modules/gpu-node-lambda/versions.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/terraform/modules/gpu-node-vastai/bootstrap.sh +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/terraform/modules/gpu-node-vastai/main.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/terraform/modules/gpu-node-vastai/outputs.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/terraform/modules/gpu-node-vastai/variables.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/terraform/modules/gpu-node-vastai/versions.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/terraform/modules/k8s-control-plane/join-script.tpl +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/terraform/modules/k8s-control-plane/kubeconfig.tpl +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/terraform/modules/k8s-control-plane/main.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/terraform/modules/k8s-control-plane/outputs.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/terraform/modules/k8s-control-plane/variables.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/terraform/modules/k8s-control-plane/versions.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/terraform/modules/networking/main.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/terraform/modules/networking/outputs.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/terraform/modules/networking/variables.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/terraform/modules/networking/versions.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/terraform/outputs.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/terraform/price-optimizer/optimal-allocation.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/terraform/providers.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/terraform/variables.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/test_summary.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/utils/__init__.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli/utils/formatters.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli.egg-info/dependency_links.txt +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli.egg-info/entry_points.txt +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli.egg-info/requires.txt +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terradev_cli.egg-info/top_level.txt +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terraform.tfvars.example +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terraform_optimization/backend.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terraform_optimization/error_handling.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terraform_optimization/parallel_provisioning.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terraform_optimization/storage_choice_matrix.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terraform_optimization/test_error_handler.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terraform_optimization/versions.tf +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terraform_transparency/audit_demo/trail_3caed73ad5bf.json +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terraform_transparency/audit_trail.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terraform_transparency/audit_trails.json +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terraform_transparency/decision_engine.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terraform_transparency/decision_logs.json +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terraform_transparency/operations.json +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terraform_transparency/terraform_manager.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terraform_transparency/terraform_plans.json +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terraform_transparency/transparency_demo.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/terraform_transparency/transparency_report.json +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/tests/CREDENTIAL_STRATEGY.md +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/tests/INTEGRATION_STRATEGY.md +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/tests/Makefile +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/tests/ci_pipeline.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/tests/conftest.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/tests/root_tests/test_cli_ux_battle.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/tests/root_tests/test_cli_ux_battle_fixed.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/tests/root_tests/test_cli_ux_final.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/tests/root_tests/test_final_integration.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/tests/root_tests/test_integrated_optimization.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/tests/root_tests/test_p10_production_failover.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/tests/root_tests/test_sso_phase1.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/tests/root_tests/test_vllm_optimization.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/tests/simple_test.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/tests/test_ai_integrations.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/tests/test_checkpoint_manager.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/tests/test_cli_smoke.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/tests/test_dag_executor.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/tests/test_flashoptim.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/tests/test_integration.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/tests/test_job_state_manager.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/tests/test_k8s_regression.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/tests/test_latitude_provider.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/tests/test_major_providers.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/tests/test_mcp_handlers.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/tests/test_new_providers.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/tests/test_provider_conformance.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/tests/test_providers.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/tests/test_semantic_router.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/tests/test_sglang_optimization.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/tests/test_ssh_key_manager.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/tests/test_training_monitor.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/tests/test_training_orchestrator.py +0 -0
- {terradev_cli-5.3.3 → terradev_cli-5.3.4}/tests/test_vllm_features.py +0 -0
|
@@ -18,7 +18,7 @@ RUN apt-get update && apt-get install -y \
|
|
|
18
18
|
&& rm -rf /var/lib/apt/lists/*
|
|
19
19
|
|
|
20
20
|
# Copy requirements and install Python dependencies
|
|
21
|
-
COPY requirements.txt .
|
|
21
|
+
COPY terradev_cli/requirements.txt .
|
|
22
22
|
RUN pip install --no-cache-dir -r requirements.txt
|
|
23
23
|
|
|
24
24
|
# Install Terradev CLI
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: terradev-cli
|
|
3
|
-
Version: 5.3.
|
|
3
|
+
Version: 5.3.4
|
|
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.3.
|
|
96
|
+
# Terradev CLI v5.3.4
|
|
97
97
|
|
|
98
98
|
**An imperative command-line-interface for AI workload orchestration.**
|
|
99
99
|
|
|
@@ -105,9 +105,10 @@ 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
|
+
|
|
108
109
|
**NOTES ON 5.3.3**
|
|
109
110
|
|
|
110
|
-
Added **provider
|
|
111
|
+
Added **provider registration and profiling system** for intelligent quirk-aware routing across 23 cloud providers, and registration for custom providers from .yaml import:
|
|
111
112
|
|
|
112
113
|
- **ProviderProfile schema** (`providers/types.py`): Encodes provider-specific behaviors including API style (REST/GraphQL/JSON:API), authentication type (Bearer/Basic/HMAC/X-Api-Key), rate limits, spot instance support, egress costs, fallback routing, capacity checks, container image pinning, and spot interruption handling.
|
|
113
114
|
|
|
@@ -126,20 +127,6 @@ Added **provider profile system** for intelligent quirk-aware routing across 23
|
|
|
126
127
|
terradev providers export-example -o ~/.terradev/custom_providers.yaml
|
|
127
128
|
```
|
|
128
129
|
|
|
129
|
-
**NOTES ON 5.3.0**
|
|
130
|
-
|
|
131
|
-
Added **transport-agnostic Prefill/Decode (P/D) disaggregation layer** and **multi-agent KV cache sharing planner**:
|
|
132
|
-
|
|
133
|
-
- **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).
|
|
134
|
-
|
|
135
|
-
- **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.
|
|
136
|
-
|
|
137
|
-
- **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:
|
|
138
|
-
```bash
|
|
139
|
-
terradev provision -g H100 --agents 20 --context 32k --model-name llama-70b
|
|
140
|
-
terradev provision -g H100 --agents 20 --context 32k --sharing-topology broadcast --dry-run
|
|
141
|
-
```
|
|
142
|
-
|
|
143
130
|
**NOTES ON 5.2.1**
|
|
144
131
|
|
|
145
132
|
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.
|
|
@@ -771,6 +758,5 @@ Apache 2.0.
|
|
|
771
758
|
|
|
772
759
|
## Support
|
|
773
760
|
|
|
774
|
-
- **Documentation**: [Full User Guide](USER_GUIDE.md)
|
|
775
761
|
- **Issues**: [GitHub Issues](https://github.com/theoddden/Terradev/issues)
|
|
776
762
|
- **Discussions**: [GitHub Discussions](https://github.com/theoddden/Terradev/discussions)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Terradev CLI v5.3.
|
|
1
|
+
# Terradev CLI v5.3.4
|
|
2
2
|
|
|
3
3
|
**An imperative command-line-interface for AI workload orchestration.**
|
|
4
4
|
|
|
@@ -10,9 +10,10 @@ 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
|
+
|
|
13
14
|
**NOTES ON 5.3.3**
|
|
14
15
|
|
|
15
|
-
Added **provider
|
|
16
|
+
Added **provider registration and profiling system** for intelligent quirk-aware routing across 23 cloud providers, and registration for custom providers from .yaml import:
|
|
16
17
|
|
|
17
18
|
- **ProviderProfile schema** (`providers/types.py`): Encodes provider-specific behaviors including API style (REST/GraphQL/JSON:API), authentication type (Bearer/Basic/HMAC/X-Api-Key), rate limits, spot instance support, egress costs, fallback routing, capacity checks, container image pinning, and spot interruption handling.
|
|
18
19
|
|
|
@@ -31,20 +32,6 @@ Added **provider profile system** for intelligent quirk-aware routing across 23
|
|
|
31
32
|
terradev providers export-example -o ~/.terradev/custom_providers.yaml
|
|
32
33
|
```
|
|
33
34
|
|
|
34
|
-
**NOTES ON 5.3.0**
|
|
35
|
-
|
|
36
|
-
Added **transport-agnostic Prefill/Decode (P/D) disaggregation layer** and **multi-agent KV cache sharing planner**:
|
|
37
|
-
|
|
38
|
-
- **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).
|
|
39
|
-
|
|
40
|
-
- **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.
|
|
41
|
-
|
|
42
|
-
- **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:
|
|
43
|
-
```bash
|
|
44
|
-
terradev provision -g H100 --agents 20 --context 32k --model-name llama-70b
|
|
45
|
-
terradev provision -g H100 --agents 20 --context 32k --sharing-topology broadcast --dry-run
|
|
46
|
-
```
|
|
47
|
-
|
|
48
35
|
**NOTES ON 5.2.1**
|
|
49
36
|
|
|
50
37
|
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.
|
|
@@ -676,6 +663,5 @@ Apache 2.0.
|
|
|
676
663
|
|
|
677
664
|
## Support
|
|
678
665
|
|
|
679
|
-
- **Documentation**: [Full User Guide](USER_GUIDE.md)
|
|
680
666
|
- **Issues**: [GitHub Issues](https://github.com/theoddden/Terradev/issues)
|
|
681
667
|
- **Discussions**: [GitHub Discussions](https://github.com/theoddden/Terradev/discussions)
|
|
@@ -3,6 +3,6 @@ Terradev CLI - Cross-Cloud Compute Optimization Platform
|
|
|
3
3
|
Parallel provisioning and orchestration for optimized compute costs
|
|
4
4
|
"""
|
|
5
5
|
|
|
6
|
-
__version__ = "5.
|
|
6
|
+
__version__ = "5.3.4"
|
|
7
7
|
__author__ = "Terradev Team"
|
|
8
8
|
__description__ = "Open Source BYOAPI Multi-Cloud GPU Infrastructure Platform"
|
|
@@ -14138,11 +14138,11 @@ def local_scan(host, user, key, detailed, register, name):
|
|
|
14138
14138
|
except Exception:
|
|
14139
14139
|
return "", 1
|
|
14140
14140
|
else:
|
|
14141
|
-
# Local execution -
|
|
14142
|
-
cmd =
|
|
14141
|
+
# Local execution - use list-args for injection safety
|
|
14142
|
+
cmd = ["nvidia-smi", f"--query-gpu={query}", "--format=csv,noheader,nounits"]
|
|
14143
14143
|
try:
|
|
14144
14144
|
result = subprocess.run(
|
|
14145
|
-
cmd,
|
|
14145
|
+
cmd, capture_output=True, text=True, timeout=15
|
|
14146
14146
|
)
|
|
14147
14147
|
return result.stdout.strip(), result.returncode
|
|
14148
14148
|
except Exception:
|
|
@@ -14318,11 +14318,11 @@ def local_register(name, host, user, key):
|
|
|
14318
14318
|
click.echo(f"Error scanning {target}: {e}", err=True)
|
|
14319
14319
|
return
|
|
14320
14320
|
else:
|
|
14321
|
-
# Local execution -
|
|
14322
|
-
cmd =
|
|
14321
|
+
# Local execution - use list-args for injection safety
|
|
14322
|
+
cmd = ["nvidia-smi", f"--query-gpu={query}", "--format=csv,noheader,nounits"]
|
|
14323
14323
|
try:
|
|
14324
14324
|
result = subprocess.run(
|
|
14325
|
-
cmd,
|
|
14325
|
+
cmd, capture_output=True, text=True, timeout=15
|
|
14326
14326
|
)
|
|
14327
14327
|
raw = result.stdout.strip()
|
|
14328
14328
|
except Exception as e:
|
|
@@ -221,7 +221,8 @@ def _run_on(
|
|
|
221
221
|
import re
|
|
222
222
|
|
|
223
223
|
# Allow alphanumeric, spaces, and basic shell-safe characters
|
|
224
|
-
|
|
224
|
+
# Explicitly exclude shell metacharacters (|, >, &) to prevent command chaining
|
|
225
|
+
if not re.match(r'^[a-zA-Z0-9_\-./:=@, \n\t]+$', cmd):
|
|
225
226
|
return -1, "", "Unsafe command characters detected"
|
|
226
227
|
|
|
227
228
|
if host and host not in ("localhost", "127.0.0.1"):
|
|
@@ -139,7 +139,8 @@ def _run_on(
|
|
|
139
139
|
import re
|
|
140
140
|
|
|
141
141
|
# Allow alphanumeric, spaces, and basic shell-safe characters
|
|
142
|
-
|
|
142
|
+
# Explicitly exclude shell metacharacters (|, >, &) to prevent command chaining
|
|
143
|
+
if not re.match(r'^[a-zA-Z0-9_\-./:=@, \n\t]+$', cmd):
|
|
143
144
|
return -1, "", "Unsafe command characters detected"
|
|
144
145
|
|
|
145
146
|
if host and host not in ("localhost", "127.0.0.1"):
|
|
@@ -136,7 +136,8 @@ def _run_on(
|
|
|
136
136
|
import re
|
|
137
137
|
|
|
138
138
|
# Allow alphanumeric, spaces, and basic shell-safe characters
|
|
139
|
-
|
|
139
|
+
# Explicitly exclude shell metacharacters (|, >, &) to prevent command chaining
|
|
140
|
+
if not re.match(r'^[a-zA-Z0-9_\-./:=@, \n\t]+$', cmd):
|
|
140
141
|
return -1, "", "Unsafe command characters detected"
|
|
141
142
|
|
|
142
143
|
if host and host not in ("localhost", "127.0.0.1"):
|
|
@@ -439,7 +439,8 @@ def _run_on(
|
|
|
439
439
|
# Allow alphanumeric, spaces, and basic shell-safe characters.
|
|
440
440
|
# SECURITY: quotes ('"') are deliberately excluded — they are shell metacharacters
|
|
441
441
|
# that can be used to escape a quoted context and inject arbitrary commands.
|
|
442
|
-
|
|
442
|
+
# Explicitly exclude shell metacharacters (|, >, &) to prevent command chaining
|
|
443
|
+
if not re.match(r'^[a-zA-Z0-9_\-./:=@, \n\t]+$', cmd):
|
|
443
444
|
return -1, "", "Unsafe command characters detected"
|
|
444
445
|
|
|
445
446
|
if host and host not in ("localhost", "127.0.0.1"):
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"""
|
|
3
3
|
Terradev MCP Server v2.1.0 - Complete Agentic GPU Infrastructure for Claude Code
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
220 MCP tools: GPU provisioning, Kubernetes clusters, Karpenter auto-provisioning,
|
|
6
6
|
GitOps/ArgoCD automation, event-driven triggers, environment promotion, lineage tracking,
|
|
7
7
|
cross-provider migration, vLLM/SGLang/Ollama inference, Arize Phoenix trace observability,
|
|
8
8
|
NeMo Guardrails output safety, Qdrant vector DB, Ray cluster management, W&B/LangSmith/MLflow/DVC,
|
|
@@ -982,15 +982,19 @@ server = Server("terradev-mcp")
|
|
|
982
982
|
_tools_loaded = False
|
|
983
983
|
_tool_registry: Dict[str, callable] = {}
|
|
984
984
|
_tool_schemas: Dict[str, Dict] = {}
|
|
985
|
-
_load_lock
|
|
985
|
+
_load_lock: Optional[asyncio.Lock] = None
|
|
986
986
|
_concurrent_requests = 0
|
|
987
987
|
_max_concurrent = 100
|
|
988
|
-
_request_semaphore
|
|
988
|
+
_request_semaphore: Optional[asyncio.Semaphore] = None
|
|
989
989
|
|
|
990
990
|
|
|
991
991
|
async def _ensure_tools_loaded():
|
|
992
992
|
"""Ensure tools are loaded (lazy loading)"""
|
|
993
|
-
global _tools_loaded, _tool_registry, _tool_schemas
|
|
993
|
+
global _tools_loaded, _tool_registry, _tool_schemas, _load_lock
|
|
994
|
+
|
|
995
|
+
# Lazy-create lock to avoid Python 3.9 event loop binding bug
|
|
996
|
+
if _load_lock is None:
|
|
997
|
+
_load_lock = asyncio.Lock()
|
|
994
998
|
|
|
995
999
|
if _tools_loaded:
|
|
996
1000
|
return
|
|
@@ -5336,7 +5340,11 @@ else:
|
|
|
5336
5340
|
@server.list_tools()
|
|
5337
5341
|
async def handle_list_tools() -> ListToolsResult:
|
|
5338
5342
|
"""List available Terradev tools (lazy loading with compression)"""
|
|
5339
|
-
global _concurrent_requests
|
|
5343
|
+
global _concurrent_requests, _request_semaphore
|
|
5344
|
+
|
|
5345
|
+
# Lazy-create semaphore to avoid Python 3.9 event loop binding bug
|
|
5346
|
+
if _request_semaphore is None:
|
|
5347
|
+
_request_semaphore = asyncio.Semaphore(_max_concurrent)
|
|
5340
5348
|
|
|
5341
5349
|
# Adaptive concurrency control
|
|
5342
5350
|
async with _request_semaphore:
|
|
@@ -5355,11 +5363,15 @@ async def handle_list_tools() -> ListToolsResult:
|
|
|
5355
5363
|
@server.call_tool()
|
|
5356
5364
|
async def handle_call_tool(request: CallToolRequest) -> CallToolResult:
|
|
5357
5365
|
"""Handle tool calls with adaptive concurrency control"""
|
|
5358
|
-
global _concurrent_requests
|
|
5366
|
+
global _concurrent_requests, _request_semaphore
|
|
5359
5367
|
|
|
5360
5368
|
tool_name = request.params.name
|
|
5361
5369
|
arguments = request.params.arguments or {}
|
|
5362
5370
|
|
|
5371
|
+
# Lazy-create semaphore to avoid Python 3.9 event loop binding bug
|
|
5372
|
+
if _request_semaphore is None:
|
|
5373
|
+
_request_semaphore = asyncio.Semaphore(_max_concurrent)
|
|
5374
|
+
|
|
5363
5375
|
# Adaptive concurrency control
|
|
5364
5376
|
async with _request_semaphore:
|
|
5365
5377
|
_concurrent_requests += 1
|
|
@@ -42,11 +42,15 @@ class BaseProvider(ABC):
|
|
|
42
42
|
|
|
43
43
|
# Shared TCP connector for connection pooling across all providers
|
|
44
44
|
_shared_connector: Optional[aiohttp.TCPConnector] = None
|
|
45
|
-
_connector_lock
|
|
45
|
+
_connector_lock: Optional[asyncio.Lock] = None
|
|
46
46
|
|
|
47
47
|
@classmethod
|
|
48
48
|
async def _get_shared_connector(cls) -> aiohttp.TCPConnector:
|
|
49
49
|
"""Get or create shared TCP connector with connection pooling"""
|
|
50
|
+
# Lazy-create lock to avoid Python 3.9 event loop binding bug
|
|
51
|
+
if cls._connector_lock is None:
|
|
52
|
+
cls._connector_lock = asyncio.Lock()
|
|
53
|
+
|
|
50
54
|
if cls._shared_connector is None or cls._shared_connector.closed:
|
|
51
55
|
async with cls._connector_lock:
|
|
52
56
|
if cls._shared_connector is None or cls._shared_connector.closed:
|
|
@@ -370,7 +374,7 @@ class BaseProvider(ABC):
|
|
|
370
374
|
last_states[iid] = info.status
|
|
371
375
|
except Exception as e:
|
|
372
376
|
# Log but don't break the loop
|
|
373
|
-
|
|
377
|
+
logger.debug(f"poll_loop error for {iid}: {e}")
|
|
374
378
|
|
|
375
379
|
await asyncio.sleep(poll_interval_s)
|
|
376
380
|
|
|
@@ -115,7 +115,7 @@ class E2ENetworksProvider(BaseProvider):
|
|
|
115
115
|
"instance_type": self.GPU_PLAN_MAP.get(gpu_type, gpu_type.lower()),
|
|
116
116
|
"gpu_type": gpu_type,
|
|
117
117
|
"price_per_hour": info["price"],
|
|
118
|
-
"region": region or "in-
|
|
118
|
+
"region": region or "in-mumbai-1",
|
|
119
119
|
"available": True,
|
|
120
120
|
"provider": "e2enetworks",
|
|
121
121
|
"vcpus": info["vcpus"],
|
|
@@ -156,7 +156,7 @@ class E2ENetworksProvider(BaseProvider):
|
|
|
156
156
|
# Convert INR to USD if price looks like INR (>10 per hour for GPU)
|
|
157
157
|
price_usd = price_inr / 83.5 if price_inr > 10 else price_inr
|
|
158
158
|
|
|
159
|
-
plan_region = plan.get("region", region or "in-
|
|
159
|
+
plan_region = plan.get("region", region or "in-mumbai-1")
|
|
160
160
|
if region and plan_region != region:
|
|
161
161
|
continue
|
|
162
162
|
|
|
@@ -195,7 +195,7 @@ class E2ENetworksProvider(BaseProvider):
|
|
|
195
195
|
body: Dict[str, Any] = {
|
|
196
196
|
"name": f"terradev-{gpu_type.lower().replace('_', '-')}-{datetime.now().strftime('%H%M%S')}",
|
|
197
197
|
"plan": instance_type,
|
|
198
|
-
"location": region or "in-
|
|
198
|
+
"location": region or "in-mumbai-1",
|
|
199
199
|
"image": image,
|
|
200
200
|
"gpu_count": gpu_count,
|
|
201
201
|
}
|
|
@@ -208,7 +208,7 @@ class E2ENetworksProvider(BaseProvider):
|
|
|
208
208
|
return {
|
|
209
209
|
"instance_id": str(node.get("id", f"e2e-{datetime.now().strftime('%Y%m%d%H%M%S')}")),
|
|
210
210
|
"instance_type": instance_type,
|
|
211
|
-
"region": region or "in-
|
|
211
|
+
"region": region or "in-mumbai-1",
|
|
212
212
|
"gpu_type": gpu_type,
|
|
213
213
|
"status": node.get("status", "provisioning"),
|
|
214
214
|
"provider": "e2enetworks",
|
|
@@ -135,7 +135,7 @@ class FluidStackProvider(BaseProvider):
|
|
|
135
135
|
"instance_type": info["gpu_type"],
|
|
136
136
|
"gpu_type": gpu_type,
|
|
137
137
|
"price_per_hour": info["price"],
|
|
138
|
-
"region": region or "
|
|
138
|
+
"region": region or "uk-london",
|
|
139
139
|
"available": True,
|
|
140
140
|
"provider": "fluidstack",
|
|
141
141
|
"vcpus": info["vcpus"],
|
|
@@ -173,7 +173,7 @@ class FluidStackProvider(BaseProvider):
|
|
|
173
173
|
"instance_type": config_gpu,
|
|
174
174
|
"gpu_type": gpu_type,
|
|
175
175
|
"price_per_hour": price,
|
|
176
|
-
"region": plan.get("region", "
|
|
176
|
+
"region": plan.get("region", "uk-london"),
|
|
177
177
|
"available": plan.get("available", True),
|
|
178
178
|
"provider": "fluidstack",
|
|
179
179
|
"vcpus": config.get("vcpus", plan.get("vcpus", 16)),
|
|
@@ -15,6 +15,7 @@ Benefits:
|
|
|
15
15
|
|
|
16
16
|
import time
|
|
17
17
|
import logging
|
|
18
|
+
import asyncio
|
|
18
19
|
from typing import Dict, List, Optional
|
|
19
20
|
from collections import defaultdict
|
|
20
21
|
|
|
@@ -48,7 +49,7 @@ class ProviderRegistry:
|
|
|
48
49
|
lambda: ProviderHealth(provider="")
|
|
49
50
|
)
|
|
50
51
|
self._spot_preemptions: Dict[str, List[float]] = defaultdict(list) # provider → timestamps
|
|
51
|
-
self._lock = None
|
|
52
|
+
self._lock: Optional[asyncio.Lock] = None
|
|
52
53
|
|
|
53
54
|
def is_healthy(self, provider: str) -> bool:
|
|
54
55
|
"""
|
|
@@ -71,57 +72,72 @@ class ProviderRegistry:
|
|
|
71
72
|
|
|
72
73
|
return True
|
|
73
74
|
|
|
74
|
-
def record_success(self, provider: str, latency_ms: float):
|
|
75
|
+
async def record_success(self, provider: str, latency_ms: float):
|
|
75
76
|
"""
|
|
76
77
|
Record a successful operation for a provider.
|
|
77
78
|
|
|
78
79
|
Resets consecutive failure counter and updates latency metrics.
|
|
79
80
|
"""
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
health.last_success_ts = time.time()
|
|
84
|
-
health.total_provisions += 1
|
|
81
|
+
# Lazy-create lock to avoid Python 3.9 event loop binding bug
|
|
82
|
+
if self._lock is None:
|
|
83
|
+
self._lock = asyncio.Lock()
|
|
85
84
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
health.
|
|
89
|
-
|
|
90
|
-
health.
|
|
85
|
+
async with self._lock:
|
|
86
|
+
health = self._health[provider]
|
|
87
|
+
health.provider = provider
|
|
88
|
+
health.consecutive_failures = 0
|
|
89
|
+
health.last_success_ts = time.time()
|
|
90
|
+
health.total_provisions += 1
|
|
91
91
|
|
|
92
|
-
|
|
92
|
+
# Exponential moving average for latency
|
|
93
|
+
if health.avg_latency_ms == 0:
|
|
94
|
+
health.avg_latency_ms = latency_ms
|
|
95
|
+
else:
|
|
96
|
+
health.avg_latency_ms = 0.9 * health.avg_latency_ms + 0.1 * latency_ms
|
|
97
|
+
|
|
98
|
+
async def record_failure(self, provider: str, error: str = ""):
|
|
93
99
|
"""
|
|
94
100
|
Record a failed operation for a provider.
|
|
95
101
|
|
|
96
102
|
Increments consecutive failure counter. Opens circuit breaker
|
|
97
103
|
after FAILURE_THRESHOLD consecutive failures.
|
|
98
104
|
"""
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
health.last_failure_ts = time.time()
|
|
103
|
-
health.total_failures += 1
|
|
105
|
+
# Lazy-create lock to avoid Python 3.9 event loop binding bug
|
|
106
|
+
if self._lock is None:
|
|
107
|
+
self._lock = asyncio.Lock()
|
|
104
108
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
)
|
|
109
|
+
async with self._lock:
|
|
110
|
+
health = self._health[provider]
|
|
111
|
+
health.provider = provider
|
|
112
|
+
health.consecutive_failures += 1
|
|
113
|
+
health.last_failure_ts = time.time()
|
|
114
|
+
health.total_failures += 1
|
|
110
115
|
|
|
111
|
-
|
|
116
|
+
if health.consecutive_failures >= self.FAILURE_THRESHOLD:
|
|
117
|
+
logger.warning(
|
|
118
|
+
f"Circuit breaker opened for provider: {provider} "
|
|
119
|
+
f"(failures: {health.consecutive_failures}, error: {error})"
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
async def record_preemption(self, provider: str, region: str = ""):
|
|
112
123
|
"""
|
|
113
124
|
Record a spot instance preemption for a provider.
|
|
114
125
|
|
|
115
126
|
Used to calculate spot preemption rate for provider ranking.
|
|
116
127
|
"""
|
|
117
|
-
|
|
118
|
-
self.
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
128
|
+
# Lazy-create lock to avoid Python 3.9 event loop binding bug
|
|
129
|
+
if self._lock is None:
|
|
130
|
+
self._lock = asyncio.Lock()
|
|
131
|
+
|
|
132
|
+
async with self._lock:
|
|
133
|
+
now = time.time()
|
|
134
|
+
self._spot_preemptions[provider].append(now)
|
|
135
|
+
|
|
136
|
+
# Clean old preemptions (older than 24 hours)
|
|
137
|
+
cutoff = now - 86400
|
|
138
|
+
self._spot_preemptions[provider] = [
|
|
139
|
+
ts for ts in self._spot_preemptions[provider] if ts > cutoff
|
|
140
|
+
]
|
|
125
141
|
|
|
126
142
|
def get_spot_score(self, provider: str, region: str = "") -> float:
|
|
127
143
|
"""
|
|
@@ -142,7 +142,7 @@ class YottaLabsProvider(BaseProvider):
|
|
|
142
142
|
"instance_type": yotta_gpu_type,
|
|
143
143
|
"gpu_type": gpu_type,
|
|
144
144
|
"price_per_hour": info["price"],
|
|
145
|
-
"region": region or "
|
|
145
|
+
"region": region or "ap-south-1",
|
|
146
146
|
"available": True,
|
|
147
147
|
"provider": "yottalabs",
|
|
148
148
|
"vcpus": info["vcpus"],
|
|
@@ -170,8 +170,8 @@ class YottaLabsProvider(BaseProvider):
|
|
|
170
170
|
):
|
|
171
171
|
continue
|
|
172
172
|
|
|
173
|
-
for r in entry.get("regions", [region or "
|
|
174
|
-
target_region = r if isinstance(r, str) else r.get("region", "
|
|
173
|
+
for r in entry.get("regions", [region or "ap-south-1"]):
|
|
174
|
+
target_region = r if isinstance(r, str) else r.get("region", "ap-south-1")
|
|
175
175
|
if region and target_region != region:
|
|
176
176
|
continue
|
|
177
177
|
price = entry.get("pricePerHour", entry.get("price_per_hour", 0))
|
|
@@ -213,7 +213,7 @@ class YottaLabsProvider(BaseProvider):
|
|
|
213
213
|
"gpuType": yotta_gpu_type,
|
|
214
214
|
"gpuCount": gpu_count,
|
|
215
215
|
"containerVolumeInGb": volume_gb,
|
|
216
|
-
"regions": [region] if region else ["
|
|
216
|
+
"regions": [region] if region else ["ap-south-1"],
|
|
217
217
|
"minSingleCardVcpu": 8,
|
|
218
218
|
"minSingleCardRamInGb": 32,
|
|
219
219
|
"environmentVars": [
|
|
@@ -229,7 +229,7 @@ class YottaLabsProvider(BaseProvider):
|
|
|
229
229
|
return {
|
|
230
230
|
"instance_id": str(pod.get("id", f"yl-{datetime.now().strftime('%Y%m%d%H%M%S')}")),
|
|
231
231
|
"instance_type": yotta_gpu_type,
|
|
232
|
-
"region": region or "
|
|
232
|
+
"region": region or "ap-south-1",
|
|
233
233
|
"gpu_type": gpu_type,
|
|
234
234
|
"status": pod.get("status", "Initialize"),
|
|
235
235
|
"provider": "yottalabs",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: terradev-cli
|
|
3
|
-
Version: 5.3.
|
|
3
|
+
Version: 5.3.4
|
|
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.3.
|
|
96
|
+
# Terradev CLI v5.3.4
|
|
97
97
|
|
|
98
98
|
**An imperative command-line-interface for AI workload orchestration.**
|
|
99
99
|
|
|
@@ -105,9 +105,10 @@ 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
|
+
|
|
108
109
|
**NOTES ON 5.3.3**
|
|
109
110
|
|
|
110
|
-
Added **provider
|
|
111
|
+
Added **provider registration and profiling system** for intelligent quirk-aware routing across 23 cloud providers, and registration for custom providers from .yaml import:
|
|
111
112
|
|
|
112
113
|
- **ProviderProfile schema** (`providers/types.py`): Encodes provider-specific behaviors including API style (REST/GraphQL/JSON:API), authentication type (Bearer/Basic/HMAC/X-Api-Key), rate limits, spot instance support, egress costs, fallback routing, capacity checks, container image pinning, and spot interruption handling.
|
|
113
114
|
|
|
@@ -126,20 +127,6 @@ Added **provider profile system** for intelligent quirk-aware routing across 23
|
|
|
126
127
|
terradev providers export-example -o ~/.terradev/custom_providers.yaml
|
|
127
128
|
```
|
|
128
129
|
|
|
129
|
-
**NOTES ON 5.3.0**
|
|
130
|
-
|
|
131
|
-
Added **transport-agnostic Prefill/Decode (P/D) disaggregation layer** and **multi-agent KV cache sharing planner**:
|
|
132
|
-
|
|
133
|
-
- **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).
|
|
134
|
-
|
|
135
|
-
- **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.
|
|
136
|
-
|
|
137
|
-
- **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:
|
|
138
|
-
```bash
|
|
139
|
-
terradev provision -g H100 --agents 20 --context 32k --model-name llama-70b
|
|
140
|
-
terradev provision -g H100 --agents 20 --context 32k --sharing-topology broadcast --dry-run
|
|
141
|
-
```
|
|
142
|
-
|
|
143
130
|
**NOTES ON 5.2.1**
|
|
144
131
|
|
|
145
132
|
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.
|
|
@@ -771,6 +758,5 @@ Apache 2.0.
|
|
|
771
758
|
|
|
772
759
|
## Support
|
|
773
760
|
|
|
774
|
-
- **Documentation**: [Full User Guide](USER_GUIDE.md)
|
|
775
761
|
- **Issues**: [GitHub Issues](https://github.com/theoddden/Terradev/issues)
|
|
776
762
|
- **Discussions**: [GitHub Discussions](https://github.com/theoddden/Terradev/discussions)
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
# Terradev Python Dependencies
|
|
2
|
-
|
|
3
|
-
# Cloud SDKs
|
|
4
|
-
boto3==1.28.57
|
|
5
|
-
botocore==1.31.57
|
|
6
|
-
google-cloud-billing==1.10.0
|
|
7
|
-
azure-mgmt-billing==6.0.0
|
|
8
|
-
aiohttp==3.9.1
|
|
9
|
-
|
|
10
|
-
# Data Processing
|
|
11
|
-
pandas==2.0.3
|
|
12
|
-
numpy==1.24.3
|
|
13
|
-
requests==2.31.0
|
|
14
|
-
|
|
15
|
-
# Machine Learning
|
|
16
|
-
tensorflow==2.13.0
|
|
17
|
-
torch==2.0.1
|
|
18
|
-
scikit-learn==1.3.0
|
|
19
|
-
keras==2.13.1
|
|
20
|
-
transformers==4.35.2
|
|
21
|
-
datasets==2.14.6
|
|
22
|
-
tokenizers==0.14.1
|
|
23
|
-
|
|
24
|
-
# Hugging Face Integration
|
|
25
|
-
huggingface-hub==0.17.3
|
|
26
|
-
|
|
27
|
-
# Data Visualization
|
|
28
|
-
matplotlib==3.7.2
|
|
29
|
-
seaborn==0.12.2
|
|
30
|
-
|
|
31
|
-
# Data Feed Processing
|
|
32
|
-
feedparser==6.0.10
|
|
33
|
-
beautifulsoup4==4.12.2
|
|
34
|
-
lxml==4.9.3
|
|
35
|
-
|
|
36
|
-
# Monitoring and Logging
|
|
37
|
-
psutil==5.9.5
|
|
38
|
-
gpustat==1.1.1
|
|
39
|
-
prometheus-client==0.17.1
|
|
40
|
-
|
|
41
|
-
# Utilities
|
|
42
|
-
click==8.1.7
|
|
43
|
-
pyyaml==6.0.1
|
|
44
|
-
jinja2==3.1.2
|
|
45
|
-
python-dotenv==1.0.0
|
|
46
|
-
|
|
47
|
-
# Development and Testing
|
|
48
|
-
pytest==7.4.2
|
|
49
|
-
pytest-cov==4.1.0
|
|
50
|
-
black==23.7.0
|
|
51
|
-
flake8==6.0.0
|
|
52
|
-
mypy==1.5.1
|
|
53
|
-
|
|
54
|
-
# Documentation
|
|
55
|
-
sphinx==7.1.2
|
|
56
|
-
sphinx-rtd-theme==1.3.0
|
|
File without changes
|
|
File without changes
|