terradev-cli 5.0.0__tar.gz → 5.0.2__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.0.0 → terradev_cli-5.0.2}/.github/workflows/ci.yml +16 -19
- terradev_cli-5.0.2/.github/workflows/release.yml +22 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/PKG-INFO +148 -35
- {terradev_cli-5.0.0/terradev_cli → terradev_cli-5.0.2}/README.md +138 -27
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/pyproject.toml +10 -8
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/Cargo.toml +2 -1
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-artifact-verification/Cargo.toml +1 -1
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-artifact-verification/src/lib.rs +18 -5
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-artifact-verification/src/types.rs +4 -2
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-artifact-verification/src/verifier.rs +14 -12
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-authentication/Cargo.toml +2 -1
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-authentication/src/encoding.rs +5 -1
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-authentication/src/hmac.rs +7 -9
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-authentication/src/lib.rs +6 -4
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-cache-eviction/Cargo.toml +2 -1
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-cache-eviction/src/cache.rs +9 -9
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-cache-eviction/src/lib.rs +22 -16
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-cache-eviction/src/types.rs +2 -2
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-command-executor/Cargo.toml +1 -1
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-command-executor/src/lib.rs +8 -6
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-config-validator/Cargo.toml +1 -1
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-config-validator/src/lib.rs +6 -2
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-config-validator/src/types.rs +12 -4
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-config-validator/src/validator.rs +9 -8
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-connection-pool/Cargo.toml +1 -1
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-connection-pool/src/lib.rs +8 -6
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-connection-pool/src/pool.rs +25 -18
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-connection-pool/src/types.rs +4 -2
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-cost-calculator/Cargo.toml +1 -1
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-cost-calculator/src/calculator.rs +23 -23
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-cost-calculator/src/lib.rs +32 -13
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-cost-calculator/src/types.rs +0 -1
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-cost-scaler/Cargo.toml +1 -1
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-cost-scaler/src/lib.rs +119 -43
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-credential-vault/Cargo.toml +2 -1
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-credential-vault/src/lib.rs +9 -6
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-credential-vault/src/vault.rs +8 -9
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-dag-executor/Cargo.toml +1 -1
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-dag-executor/src/lib.rs +131 -95
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-distributed-lock/Cargo.toml +1 -1
- terradev_cli-5.0.2/rust/terradev-distributed-lock/src/lib.rs +124 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-distributed-lock/src/lock.rs +27 -20
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-distributed-lock/src/types.rs +4 -3
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-egress-optimizer/Cargo.toml +1 -1
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-egress-optimizer/src/graph.rs +34 -30
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-egress-optimizer/src/lib.rs +16 -12
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-egress-optimizer/src/types.rs +1 -1
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-event-bus/Cargo.toml +3 -1
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-event-bus/src/bus.rs +20 -17
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-event-bus/src/lib.rs +32 -8
- terradev_cli-5.0.2/rust/terradev-event-bus/src/types.rs +37 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-governance/Cargo.toml +1 -1
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-governance/src/lib.rs +48 -13
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-gpu-discovery/Cargo.toml +4 -4
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-gpu-discovery/src/lib.rs +31 -6
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-gpu-topology/Cargo.toml +1 -1
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-gpu-topology/src/lib.rs +21 -13
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-gpu-topology/src/topology.rs +15 -18
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-gpu-topology/src/types.rs +4 -4
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-helm-generator/Cargo.toml +1 -1
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-helm-generator/src/lib.rs +53 -34
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-mcp-codec/Cargo.toml +1 -1
- terradev_cli-5.0.2/rust/terradev-mcp-codec/src/lib.rs +202 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-mcp-optimizer/Cargo.toml +1 -1
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-mcp-optimizer/src/lib.rs +43 -9
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-price-intelligence/Cargo.toml +1 -1
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-price-intelligence/src/lib.rs +101 -38
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-quota-manager/Cargo.toml +1 -1
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-quota-manager/src/lib.rs +21 -11
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-quota-manager/src/manager.rs +13 -13
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-quota-manager/src/types.rs +6 -2
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-resource-pool/Cargo.toml +1 -1
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-resource-pool/src/lib.rs +24 -15
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-resource-pool/src/pool.rs +25 -21
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-resource-pool/src/types.rs +7 -4
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-result-compressor/Cargo.toml +1 -1
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-result-compressor/src/lib.rs +16 -7
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-semantic-router/Cargo.toml +1 -1
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-semantic-router/src/lib.rs +27 -14
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-snapshot-manager/Cargo.toml +1 -1
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-snapshot-manager/src/lib.rs +23 -13
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-snapshot-manager/src/snapshot.rs +22 -21
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-snapshot-manager/src/types.rs +2 -2
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-state-machine/Cargo.toml +1 -1
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-state-machine/src/lib.rs +62 -26
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-state-machine/src/state.rs +112 -63
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-state-machine/src/types.rs +5 -4
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-telemetry/Cargo.toml +2 -1
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-telemetry/src/lib.rs +14 -8
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-telemetry/src/pipeline.rs +31 -15
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-tool-registry/Cargo.toml +1 -1
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-tool-registry/src/lib.rs +31 -14
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-vram-estimator/Cargo.toml +1 -1
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-vram-estimator/src/estimator.rs +16 -15
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-vram-estimator/src/lib.rs +7 -3
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-warm-pool/Cargo.toml +2 -2
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-warm-pool/src/lib.rs +51 -32
- {terradev_cli-5.0.0 → terradev_cli-5.0.2/terradev_cli}/README.md +138 -27
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/__init__.py +2 -2
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/cli.py +1437 -1039
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/helm_generator.py +1 -1
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/inference_router.py +92 -103
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/price_intelligence.py +1 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/quick_start.py +1 -1
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/training_orchestrator.py +1 -1
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/warm_pool_manager.py +31 -33
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/mcp/server.py +8 -86
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/ml_services/kubernetes_enhanced.py +3 -21
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/ml_services/kubernetes_service.py +13 -4
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/ml_services/ollama_service.py +22 -16
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/ml_services/sglang_service.py +22 -11
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/ml_services/vllm_service.py +25 -25
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/providers/base_provider.py +25 -1
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terradev_cli/cli.py +320 -320
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli.egg-info/PKG-INFO +148 -35
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli.egg-info/SOURCES.txt +0 -4
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli.egg-info/requires.txt +10 -6
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/tests/test_vllm_features.py +2 -2
- terradev_cli-5.0.0/.github/workflows/release.yml +0 -50
- terradev_cli-5.0.0/rust/terradev-distributed-lock/src/lib.rs +0 -129
- terradev_cli-5.0.0/rust/terradev-event-bus/src/types.rs +0 -13
- terradev_cli-5.0.0/rust/terradev-mcp-codec/src/lib.rs +0 -123
- terradev_cli-5.0.0/terradev_cli/bandit-report.json +0 -388
- terradev_cli-5.0.0/terradev_cli/core/stripe_manager.py +0 -440
- terradev_cli-5.0.0/terradev_cli/core/tier_manager.py +0 -308
- terradev_cli-5.0.0/terradev_cli/safety-report.json +0 -18554
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/.ebextensions/python.config +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/.env.example +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/.github/workflows/action.yml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/.github/workflows/static.yml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/BNF_GRAMMAR.md +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/CUCO_INTEGRATION_GUIDE.md +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/Dockerfile +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/LICENSE +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/MANIFEST.in +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/MCP_CI_SETUP.md +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/USER_GUIDE.md +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/activations/973dfe463ec85785f5f95af5ba3906eedb2d931c24e69824a89ea65dba4e813b.json +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/analysis/api-differences-comparison.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/analysis/cost-structure-differences.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/analysis/inference-arbitrage-pivot.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/apis/free-apis-latency-arbitrage.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/clusters/glm-5/README.md +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/clusters/glm-5/helm/values-glm5.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/clusters/glm-5/k8s/hpa.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/clusters/glm-5/k8s/model-cache-pvc.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/clusters/glm-5/k8s/namespace.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/clusters/glm-5/k8s/pdb.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/clusters/glm-5/k8s/service.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/clusters/glm-5/k8s/sglang-deployment.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/clusters/glm-5/k8s/vllm-deployment.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/clusters/glm-5/task.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/clusters/glm-5/terraform/main.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/clusters/glm-5/terraform/outputs.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/clusters/glm-5/terraform/variables.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/clusters/llmd-template/README.md +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/clusters/llmd-template/helm/values-llmd.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/clusters/llmd-template/k8s/gateway.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/clusters/llmd-template/k8s/leaderworkerset.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/clusters/llmd-template/k8s/llminferenceservice.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/clusters/llmd-template/task.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/clusters/moe-template/README.md +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/clusters/moe-template/helm/values-moe.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/clusters/moe-template/k8s/deployment.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/clusters/moe-template/k8s/hpa.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/clusters/moe-template/k8s/model-cache-pvc.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/clusters/moe-template/k8s/namespace.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/clusters/moe-template/k8s/pdb.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/clusters/moe-template/k8s/service.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/clusters/moe-template/task.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/clusters/moe-template/terraform/main.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/clusters/moe-template/terraform/outputs.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/clusters/moe-template/terraform/variables.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/clusters/rag-template/README.md +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/clusters/rag-template/helm/values-rag.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/clusters/rag-template/k8s/deployment.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/clusters/rag-template/terraform/main.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/demo/RECORDING_GUIDE.md +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/demo/generate_gif.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/demo/terradev-demo.gif +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/docs/ADVANCED_FINANCIAL_INNOVATIONS.md +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/docs/API_DOCUMENTATION.md +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/docs/BingSiteAuth.xml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/docs/FINOPS_ATTRIBUTION_SYSTEM.md +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/docs/MIGRATE_EVAL_IMPLEMENTATION.md +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/docs/PHASE1_SSO_IMPLEMENTATION_SUMMARY.md +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/docs/SGLANG_OPTIMIZATION_IMPLEMENTATION_COMPLETE.md +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/docs/USER_GUIDE.md +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/docs/VLLM_AUTO_OPTIMIZATION_GUIDE.md +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/docs/VLLM_OPTIMIZATION_GUIDE.md +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/docs/VLLM_OPTIMIZATION_SUMMARY.md +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/docs/architecture.md +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/docs/index.html +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/docs/robots.txt +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/docs/sitemap.xml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/docs/test_spot_provision.md +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/examples/aws_ssm_starter.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/examples/config.example.json +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/examples/demo_k8s_config.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/examples/direct_aws_starter.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/examples/ec2_user_data_starter.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/examples/example-pipeline.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/examples/kubernetes_training_deployment.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/examples/simple_ssm_starter.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/examples/ssh_server_starter.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/examples/start_aws_servers.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/helm/terradev/Chart.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/helm/terradev/templates/_helpers.tpl +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/helm/terradev/templates/deployment.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/helm/terradev/values.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/infrastructure/bucket-policy.json +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/infrastructure/grafana_training_dashboard.json +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/infrastructure/kubernetes/microservices.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/infrastructure/terraform/main.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/infrastructure/terraform/parallelism.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/integrations/cli-tool.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/integrations/cloud-management-widgets.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/integrations/cloud-provider-apis.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/integrations/critical-widgets.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/integrations/devops-cicd-widgets.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/integrations/devops-essential-tools.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/integrations/docker-integration.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/integrations/kubernetes-operator.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/integrations/mlflow-integration.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/modules/datadog/README.md +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/modules/datadog/dashboard.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/modules/datadog/monitors.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/modules/datadog/outputs.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/modules/datadog/provider.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/modules/datadog/variables.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/modules/datadog/versions.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/modules/prometheus_training_config.yml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/requirements.txt +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/INTEGRATION_GUIDE.md +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/PERFORMANCE_OPTIMIZATIONS.md +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/README.md +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-authentication/src/types.rs +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-credential-vault/src/types.rs +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-telemetry/src/types.rs +1 -1
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/rust/terradev-vram-estimator/src/types.rs +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/scripts/action.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/scripts/check_logs_fix.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/scripts/debug_comparison.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/scripts/debug_mla.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/scripts/debug_streaming.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/scripts/deployment/deploy_correct_pricing.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/scripts/deployment/deploy_enhanced_server.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/scripts/deployment/deploy_exact_servers.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/scripts/deployment/deploy_simple_enhanced.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/scripts/deployment/deploy_telemetry_aws.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/scripts/deployment/deploy_to_aws.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/scripts/figure_calculation_breakdown.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/scripts/fix_server_ports.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/scripts/gpu-check.sh +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/scripts/server_manager.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/setup/Lambda Cloud API spec 1.8.3.json +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/setup/account-setup-guide.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/setup/docker-compose.yml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/setup/nginx.conf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/setup/render.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/setup/setup.sh +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/setup.cfg +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/CHANGELOG.md +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/COMPLETE_COMMAND_REFERENCE.md +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/COMPLETE_INTEGRATION_GUIDE.md +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/FULL_SOLUTION_STACK_MARCH_2025.md +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/IMPLEMENTATION_SUMMARY.md +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/MAKING_SPOT_WORK_FOR_STATEFUL_WORKLOADS.md +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/SGLANG_COMMAND_GUIDE.md +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/TERRADEV_STACK_CHART.md +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/__main__.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/cli_hf_spaces.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/cli_karpenter.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/__init__.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/async_config.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/auth.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/auto_lineage.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/cache_manager.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/checkpoint_manager.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/command_executor.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/config.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/config_validator.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/cost_scaler.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/cost_tracker.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/credential_vault.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/cuda_graph_integrator.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/dag_executor.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/data_governance.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/dataset_stager.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/deployment_router.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/distributed_lock.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/drift_detector.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/egress_cost_monitor.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/egress_optimizer.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/evaluation_orchestrator.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/event_system.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/gitops_manager.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/gpu_discovery.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/gpu_topology.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/hf_cli_integration.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/hf_smart_templates.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/hf_spaces.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/inference_spot_manager.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/job_state_manager.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/kv_cache_checkpoint_manager.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/kv_cache_checkpoint_tests.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/manifest_cache.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/manifest_example.json +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/mig_manager.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/migration_orchestrator.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/mla_vram_estimator.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/mla_vram_tests.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/model_orchestrator.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/oidc_provider.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/optimization_config.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/parallel_provisioner.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/pipeline_schema.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/preflight_validator.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/price_discovery.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/public_ip_billing_tracker.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/quota_manager.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/rate_limiter.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/rust_telemetry.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/semantic_router.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/semantic_signals/__init__.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/semantic_signals/base_signal.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/semantic_signals/complexity_signal.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/semantic_signals/domain_signal.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/semantic_signals/keyword_signal.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/semantic_signals/language_signal.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/semantic_signals/modality_signal.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/semantic_signals/orchestrator.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/semantic_signals/routing_policy.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/semantic_signals/safety_signal.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/session_manager.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/ssh_key_manager.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/telemetry.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/terradev_engine.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/trace_viewer.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/training_monitor.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/user_manager.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/weight_streaming_benchmarks.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/core/weight_streaming_manager.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/cost_optimizer.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/credential_prompt.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/demo.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/entry_point.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/integrations/Terradev LOGO BLACK.png +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/integrations/Terradev LOGO WHITEW.png +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/integrations/__init__.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/integrations/databricks_integration.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/integrations/datadog_integration.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/integrations/helicone_integration.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/integrations/prometheus_integration.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/integrations/wandb_integration.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/k8s/terraform_wrapper.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/kubernetes/inferx-cost-optimized.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/kubernetes/inferx-infrastructure.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/kubernetes/inferx-models.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/kubernetes/inferx-platform.yaml +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/kubernetes/inferx_setup.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/mcp/__init__.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/mcp/server.py.bak3 +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/ml_services/__init__.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/ml_services/agentic_serving.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/ml_services/drift_retrain_service.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/ml_services/dvc_service.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/ml_services/guardrails_service.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/ml_services/huggingface_service.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/ml_services/kserve_service.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/ml_services/langchain_service.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/ml_services/langfuse_service.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/ml_services/langgraph_service.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/ml_services/lmcache_service.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/ml_services/mlflow_service.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/ml_services/model_router.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/ml_services/phoenix_service.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/ml_services/qdrant_service.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/ml_services/ray_enhanced.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/ml_services/ray_service.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/ml_services/wandb_enhanced.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/optimization/__init__.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/optimization/auto_optimizer.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/optimization/cuco_optimizer.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/providers/LATITUDE_PROVIDER.md +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/providers/__init__.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/providers/alibaba_provider.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/providers/aws_provider.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/providers/azure_provider.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/providers/baseten_provider.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/providers/coreweave_provider.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/providers/crusoe_provider.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/providers/demo_mode.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/providers/digitalocean_provider.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/providers/fluidstack_provider.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/providers/gcp_provider.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/providers/hetzner_provider.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/providers/huggingface_provider.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/providers/hyperstack_provider.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/providers/inferx_provider.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/providers/lambda_labs_provider.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/providers/latitude_provider.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/providers/oracle_provider.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/providers/ovhcloud_provider.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/providers/provider_factory.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/providers/real_pricing.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/providers/runpod_provider.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/providers/siliconflow_provider.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/providers/tensordock_provider.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/providers/vastai_provider.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/requirements.txt +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/requirements_minimal.txt +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terradev_cli/__init__.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terradev_cli/credential_prompt.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terraform/main.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/__init__.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-aws/bootstrap.sh +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-aws/main.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-aws/outputs.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-aws/variables.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-aws/versions.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-hyperstack/bootstrap.sh +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-hyperstack/main.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-hyperstack/outputs.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-hyperstack/variables.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-hyperstack/versions.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-lambda/bootstrap.sh +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-lambda/main.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-lambda/outputs.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-lambda/variables.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-lambda/versions.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-vastai/bootstrap.sh +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-vastai/main.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-vastai/outputs.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-vastai/variables.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/gpu-node-vastai/versions.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/k8s-control-plane/join-script.tpl +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/k8s-control-plane/kubeconfig.tpl +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/k8s-control-plane/main.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/k8s-control-plane/outputs.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/k8s-control-plane/variables.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/k8s-control-plane/versions.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/networking/main.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/networking/outputs.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/networking/variables.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terraform/modules/networking/versions.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terraform/outputs.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terraform/price-optimizer/optimal-allocation.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terraform/providers.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/terraform/variables.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/test_summary.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/utils/__init__.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli/utils/formatters.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli.egg-info/dependency_links.txt +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli.egg-info/entry_points.txt +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terradev_cli.egg-info/top_level.txt +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terraform.tfvars.example +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terraform_optimization/backend.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terraform_optimization/error_handling.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terraform_optimization/parallel_provisioning.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terraform_optimization/storage_choice_matrix.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terraform_optimization/test_error_handler.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terraform_optimization/versions.tf +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terraform_transparency/audit_demo/trail_3caed73ad5bf.json +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terraform_transparency/audit_trail.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terraform_transparency/audit_trails.json +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terraform_transparency/decision_engine.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terraform_transparency/decision_logs.json +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terraform_transparency/operations.json +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terraform_transparency/terraform_manager.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terraform_transparency/terraform_plans.json +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terraform_transparency/transparency_demo.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/terraform_transparency/transparency_report.json +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/tests/INTEGRATION_STRATEGY.md +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/tests/Makefile +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/tests/ci_pipeline.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/tests/conftest.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/tests/root_tests/test_cli_ux_battle.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/tests/root_tests/test_cli_ux_battle_fixed.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/tests/root_tests/test_cli_ux_final.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/tests/root_tests/test_final_integration.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/tests/root_tests/test_integrated_optimization.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/tests/root_tests/test_p10_production_failover.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/tests/root_tests/test_sso_phase1.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/tests/root_tests/test_vllm_optimization.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/tests/simple_test.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/tests/test_ai_integrations.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/tests/test_checkpoint_manager.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/tests/test_cli_smoke.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/tests/test_dag_executor.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/tests/test_flashoptim.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/tests/test_integration.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/tests/test_job_state_manager.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/tests/test_k8s_regression.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/tests/test_latitude_provider.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/tests/test_major_providers.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/tests/test_mcp_handlers.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/tests/test_new_providers.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/tests/test_provider_conformance.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/tests/test_providers.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/tests/test_semantic_router.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/tests/test_sglang_optimization.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/tests/test_ssh_key_manager.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/tests/test_training_monitor.py +0 -0
- {terradev_cli-5.0.0 → terradev_cli-5.0.2}/tests/test_training_orchestrator.py +0 -0
|
@@ -41,33 +41,24 @@ jobs:
|
|
|
41
41
|
|
|
42
42
|
- name: Run cargo test
|
|
43
43
|
run: |
|
|
44
|
-
if [ -f "
|
|
45
|
-
cd
|
|
46
|
-
cargo test --verbose
|
|
47
|
-
elif [ -f "dxfeed-rust-api/Cargo.toml" ]; then
|
|
48
|
-
cd dxfeed-rust-api
|
|
49
|
-
cargo test --verbose
|
|
44
|
+
if [ -f "rust/Cargo.toml" ]; then
|
|
45
|
+
cd rust
|
|
46
|
+
cargo test --workspace --verbose
|
|
50
47
|
else
|
|
51
|
-
echo "No
|
|
48
|
+
echo "No rust/ workspace found, skipping Rust tests"
|
|
52
49
|
fi
|
|
53
50
|
|
|
54
51
|
- name: Run cargo clippy
|
|
55
52
|
run: |
|
|
56
|
-
if [ -f "
|
|
57
|
-
cd
|
|
58
|
-
cargo clippy -- -D warnings
|
|
59
|
-
elif [ -f "dxfeed-rust-api/Cargo.toml" ]; then
|
|
60
|
-
cd dxfeed-rust-api
|
|
61
|
-
cargo clippy -- -D warnings
|
|
53
|
+
if [ -f "rust/Cargo.toml" ]; then
|
|
54
|
+
cd rust
|
|
55
|
+
cargo clippy --workspace -- -D warnings
|
|
62
56
|
fi
|
|
63
57
|
|
|
64
58
|
- name: Run cargo fmt
|
|
65
59
|
run: |
|
|
66
|
-
if [ -f "
|
|
67
|
-
cd
|
|
68
|
-
cargo fmt --all -- --check
|
|
69
|
-
elif [ -f "dxfeed-rust-api/Cargo.toml" ]; then
|
|
70
|
-
cd dxfeed-rust-api
|
|
60
|
+
if [ -f "rust/Cargo.toml" ]; then
|
|
61
|
+
cd rust
|
|
71
62
|
cargo fmt --all -- --check
|
|
72
63
|
fi
|
|
73
64
|
|
|
@@ -157,10 +148,16 @@ jobs:
|
|
|
157
148
|
with:
|
|
158
149
|
python-version: '3.11'
|
|
159
150
|
|
|
151
|
+
- name: Install package for scan
|
|
152
|
+
run: pip install -e ".[dev]" 2>/dev/null || pip install -e .
|
|
153
|
+
|
|
160
154
|
- name: Install + scan
|
|
161
155
|
run: |
|
|
162
156
|
pip install bandit safety
|
|
163
|
-
|
|
157
|
+
# Scan the full package tree; -ll = medium+high only; fail on high severity
|
|
158
|
+
bandit -r terradev_cli/ -f json -o bandit-report.json -lll || true
|
|
159
|
+
# Print a summary to the job log for visibility
|
|
160
|
+
bandit -r terradev_cli/ -lll --exit-zero
|
|
164
161
|
safety check --json --output safety-report.json || true
|
|
165
162
|
|
|
166
163
|
- uses: actions/upload-artifact@v4
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
name: Release to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- 'v*'
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: write
|
|
10
|
+
releases: write
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
release:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
|
|
16
|
+
steps:
|
|
17
|
+
- name: Checkout code
|
|
18
|
+
uses: actions/checkout@v4
|
|
19
|
+
|
|
20
|
+
- name: Create GitHub Release
|
|
21
|
+
run: |
|
|
22
|
+
gh release create ${{ github.ref_name }} --generate-notes
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: terradev-cli
|
|
3
|
-
Version: 5.0.
|
|
4
|
-
Summary:
|
|
3
|
+
Version: 5.0.2
|
|
4
|
+
Summary: Open Source BYOAPI Multi-Cloud GPU Infrastructure Platform
|
|
5
5
|
Author-email: Terradev Team <team@terradev.com>
|
|
6
6
|
Maintainer-email: Terradev Team <team@terradev.com>
|
|
7
7
|
License: Apache-2.0
|
|
@@ -34,16 +34,10 @@ Requires-Dist: aiohttp>=3.9.0
|
|
|
34
34
|
Requires-Dist: pyyaml>=6.0
|
|
35
35
|
Requires-Dist: cryptography>=41.0.0
|
|
36
36
|
Requires-Dist: requests>=2.31.0
|
|
37
|
-
Requires-Dist: gradio>=4.0.0
|
|
38
|
-
Requires-Dist: streamlit>=1.28.0
|
|
39
|
-
Requires-Dist: transformers>=4.0.0
|
|
40
|
-
Requires-Dist: torch>=2.0.0
|
|
41
|
-
Requires-Dist: sentence-transformers>=2.0.0
|
|
42
37
|
Requires-Dist: plotly>=5.0.0
|
|
43
38
|
Requires-Dist: pandas>=1.0.0
|
|
44
39
|
Requires-Dist: numpy>=1.0.0
|
|
45
40
|
Requires-Dist: huggingface-hub>=0.19.0
|
|
46
|
-
Requires-Dist: stripe>=7.0.0
|
|
47
41
|
Provides-Extra: aws
|
|
48
42
|
Requires-Dist: boto3>=1.34.0; extra == "aws"
|
|
49
43
|
Provides-Extra: gcp
|
|
@@ -54,6 +48,14 @@ Requires-Dist: azure-identity>=1.12.0; extra == "azure"
|
|
|
54
48
|
Provides-Extra: lmcache
|
|
55
49
|
Requires-Dist: lmcache>=0.1; extra == "lmcache"
|
|
56
50
|
Requires-Dist: redis>=5.0.0; extra == "lmcache"
|
|
51
|
+
Provides-Extra: ml
|
|
52
|
+
Requires-Dist: torch>=2.0.0; extra == "ml"
|
|
53
|
+
Requires-Dist: transformers>=4.0.0; extra == "ml"
|
|
54
|
+
Requires-Dist: sentence-transformers>=2.0.0; extra == "ml"
|
|
55
|
+
Requires-Dist: gradio>=4.0.0; extra == "ml"
|
|
56
|
+
Requires-Dist: streamlit>=1.28.0; extra == "ml"
|
|
57
|
+
Provides-Extra: billing
|
|
58
|
+
Requires-Dist: stripe>=7.0.0; extra == "billing"
|
|
57
59
|
Provides-Extra: all
|
|
58
60
|
Requires-Dist: boto3>=1.34.0; extra == "all"
|
|
59
61
|
Requires-Dist: google-cloud-compute>=1.8.0; extra == "all"
|
|
@@ -90,7 +92,7 @@ Requires-Dist: redis>=5.0.0; extra == "enterprise"
|
|
|
90
92
|
Requires-Dist: PyJWT>=2.8.0; extra == "enterprise"
|
|
91
93
|
Dynamic: license-file
|
|
92
94
|
|
|
93
|
-
# Terradev CLI v5.0.
|
|
95
|
+
# Terradev CLI v5.0.2
|
|
94
96
|
|
|
95
97
|
**Open Source BYOAPI Multi-Cloud GPU Infrastructure Platform**
|
|
96
98
|
|
|
@@ -102,12 +104,34 @@ Terradev is a cross-cloud compute-provisioning CLI that compresses + stages data
|
|
|
102
104
|
|
|
103
105
|
**NOTES ON 5.0.0**
|
|
104
106
|
|
|
105
|
-
We removed the paywall, open-sourced Terradev, and added Rust
|
|
107
|
+
We removed the paywall, open-sourced Terradev, and added Rust accelerators for safe and snappy delivery...
|
|
106
108
|
|
|
107
|
-
With the Rust DAG orchestrator, the execution graph enforces correct sequencing and idempotency at the runtime level.
|
|
109
|
+
With the Rust DAG orchestrator, the execution graph enforces correct sequencing and idempotency at the runtime level. You or the agent can issue commands freely... the orchestrator ensures they're safe to execute.
|
|
108
110
|
|
|
109
|
-
|
|
111
|
+
104 tools and sub-tools require heavy context. The Rust MCP orchestrator processes tool calls with minimal overhead: deserializing, routing, executing, and responding faster than pure-Python-based MCP servers by an order of magnitude. For an agent running a complex provisioning workflow across 21+ cloud providers, that compounds across every tool call in the chain.
|
|
110
112
|
|
|
113
|
+
## BYOAPI Configuration
|
|
114
|
+
|
|
115
|
+
Your API keys are stored locally at ~/.terradev/credentials.json and never sent to Terradev servers.
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
# Configure multiple providers
|
|
119
|
+
terradev configure --provider runpod
|
|
120
|
+
terradev configure --provider vastai
|
|
121
|
+
terradev configure --provider aws
|
|
122
|
+
terradev configure --provider gcp
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## Performance
|
|
126
|
+
|
|
127
|
+
- **2-8x throughput improvements** with vLLM optimization
|
|
128
|
+
- **30-50% bandwidth penalty eliminated** with NUMA topology
|
|
129
|
+
- **2-5x CUDA Graph speedup** with optimal topology
|
|
130
|
+
- **Up to 90% cost savings** with automatic provider switching
|
|
131
|
+
- **<2 minute spot recovery** with KV cache checkpointing
|
|
132
|
+
- **3.6x faster cold starts** with weight streaming
|
|
133
|
+
- **57% cost savings** with MLA-aware VRAM estimation
|
|
134
|
+
|
|
111
135
|
## Complete Tutorial
|
|
112
136
|
|
|
113
137
|
### Step 1: Install Terradev
|
|
@@ -126,7 +150,7 @@ terradev --help
|
|
|
126
150
|
```
|
|
127
151
|
|
|
128
152
|
### Step 2: Configure Your First Cloud Provider
|
|
129
|
-
Terradev supports
|
|
153
|
+
Terradev supports 21+ GPU cloud providers. Start with one, RunPod is the fastest to set up:
|
|
130
154
|
|
|
131
155
|
```bash
|
|
132
156
|
terradev setup runpod --quick
|
|
@@ -561,6 +585,117 @@ echo "3. Test failover: terradev inferx failover --endpoint burst-llm-api --test
|
|
|
561
585
|
echo "4. Update adapters: terradev lora update -n customer-enterprise-a -p ./new-adapters/"
|
|
562
586
|
```
|
|
563
587
|
|
|
588
|
+
## Bare Metal GPU Access with IPMI Management (Latitude.sh)
|
|
589
|
+
|
|
590
|
+
Most GPU clouds give you a virtual machine. You get a slice of hardware, shared kernel paths, and a hypervisor layer between your workload and the GPU. For most ML workloads this is fine. For compliance-sensitive deployments — HIPAA, FedRAMP, financial services, defense contractors — it isn't. Virtualization introduces attestation gaps that auditors reject.
|
|
591
|
+
|
|
592
|
+
Latitude.sh is the only provider in Terradev's fleet that offers both **bare metal** and **virtual machine** GPU instances from the same API. Bare metal gives you the physical server — dedicated hardware, no virtualization overhead, and IPMI out-of-band management.
|
|
593
|
+
|
|
594
|
+
```bash
|
|
595
|
+
# See both bare metal and VM options side by side
|
|
596
|
+
terradev quote -g H100 --provider latitude
|
|
597
|
+
|
|
598
|
+
# Provision dedicated bare metal with IPMI access
|
|
599
|
+
terradev provision --provider latitude --gpu H100 --instance-type bare-metal
|
|
600
|
+
|
|
601
|
+
# Provision a VM (faster spin-up, slightly lower cost)
|
|
602
|
+
terradev provision --provider latitude --gpu H100 --instance-type vm
|
|
603
|
+
```
|
|
604
|
+
|
|
605
|
+
### IPMI: Why It Matters for Enterprise
|
|
606
|
+
|
|
607
|
+
IPMI (Intelligent Platform Management Interface) gives you out-of-band server management independent of the OS and GPU stack. If a training job deadlocks the kernel, you don't wait for a cloud provider ticket — you power-cycle via IPMI directly. Security teams can verify hardware attestation. Compliance frameworks that require dedicated hardware and physical access controls are satisfied.
|
|
608
|
+
|
|
609
|
+
```bash
|
|
610
|
+
# Instance status includes IPMI access endpoint when bare metal
|
|
611
|
+
terradev status --live --provider latitude
|
|
612
|
+
|
|
613
|
+
# Output includes:
|
|
614
|
+
# ipmi_access: true
|
|
615
|
+
# ipmi_endpoint: 10.x.x.x
|
|
616
|
+
# isolation: bare_metal
|
|
617
|
+
```
|
|
618
|
+
---
|
|
619
|
+
|
|
620
|
+
## Local GPU Discovery and Hybrid Compute Pools
|
|
621
|
+
|
|
622
|
+
Every other GPU orchestration platform assumes you're renting compute. Terradev doesn't.
|
|
623
|
+
|
|
624
|
+
If you have a GPU in your local machine — a gaming rig, a workstation, a university compute node you have SSH access to — Terradev can discover it, register it into your compute pool, and incorporate it into provisioning decisions alongside cloud providers.
|
|
625
|
+
|
|
626
|
+
```bash
|
|
627
|
+
# Scan local machine for GPUs
|
|
628
|
+
terradev local scan
|
|
629
|
+
|
|
630
|
+
# Output:
|
|
631
|
+
# Found 1 local GPU:
|
|
632
|
+
# [0] NVIDIA RTX 4090 24GB Driver 545.29 Util: 3% Temp: 42C
|
|
633
|
+
#
|
|
634
|
+
# Register in pool? [y/N]:
|
|
635
|
+
|
|
636
|
+
# Register local GPU into your pool
|
|
637
|
+
terradev local register --name "workstation-4090"
|
|
638
|
+
|
|
639
|
+
# Scan a remote machine you have SSH access to
|
|
640
|
+
terradev local scan --host 192.168.1.50 --user ubuntu --key ~/.ssh/id_rsa
|
|
641
|
+
|
|
642
|
+
# View your full compute pool (local + cloud)
|
|
643
|
+
terradev local pool
|
|
644
|
+
```
|
|
645
|
+
|
|
646
|
+
Pool output:
|
|
647
|
+
```
|
|
648
|
+
COMPUTE POOL (4 resources)
|
|
649
|
+
workstation-4090 RTX 4090 24GB local $0.00/hr Free
|
|
650
|
+
runpod-h100-001 H100 80GB runpod $2.49/hr Running
|
|
651
|
+
vastai-a100-002 A100 40GB vastai $1.82/hr Running
|
|
652
|
+
lambda-a10g-003 A10G 24GB lambda_labs $0.60/hr Idle
|
|
653
|
+
```
|
|
654
|
+
|
|
655
|
+
### Why This Matters
|
|
656
|
+
|
|
657
|
+
The `terradev quote` command normally shows cloud provider pricing. With local GPUs registered, the pool includes your own hardware — priced at $0/hr. For a university researcher with a 3090 workstation running overnight jobs, or a startup with a rack of 4090s before they've moved to cloud: Terradev routes workloads to the cheapest available compute, and $0/hr always wins.
|
|
658
|
+
|
|
659
|
+
```bash
|
|
660
|
+
# Get quotes including local pool
|
|
661
|
+
terradev quote -g RTX4090 --include-local
|
|
662
|
+
|
|
663
|
+
# Output:
|
|
664
|
+
# GPU PROVIDER $/HR AVAILABLE
|
|
665
|
+
# RTX 4090 local (workstation-4090) $0.00 Yes
|
|
666
|
+
# RTX 4090 vastai $0.34 Yes
|
|
667
|
+
# RTX 4090 runpod $0.39 Yes
|
|
668
|
+
|
|
669
|
+
# Provision to cheapest available — prefers local automatically
|
|
670
|
+
terradev provision -g RTX4090 --prefer-local
|
|
671
|
+
|
|
672
|
+
# Launch training on local GPU with cloud overflow
|
|
673
|
+
terradev train --script train.py --pool workstation-4090 --overflow-to-cloud
|
|
674
|
+
```
|
|
675
|
+
|
|
676
|
+
### How Discovery Works
|
|
677
|
+
|
|
678
|
+
The local scanner uses direct NVML bindings (Rust backend, 5–10x faster than `nvidia-smi` parsing) to introspect every GPU on the target machine:
|
|
679
|
+
|
|
680
|
+
- GPU model, memory, PCIe bus ID, NUMA affinity
|
|
681
|
+
- Current utilization, memory usage, temperature, clock speeds
|
|
682
|
+
- Driver version, CUDA version, compute capability
|
|
683
|
+
- Multi-GPU topology (NVLink, PCIe switch topology)
|
|
684
|
+
|
|
685
|
+
Falls back to `nvidia-smi` parsing automatically if the Rust NVML extension isn't available.
|
|
686
|
+
|
|
687
|
+
```bash
|
|
688
|
+
# Detailed hardware report for local GPU
|
|
689
|
+
terradev local scan --detailed
|
|
690
|
+
|
|
691
|
+
# Output includes:
|
|
692
|
+
# GPU 0: RTX 4090 VRAM 24GB PCIe x16 NUMA node 0
|
|
693
|
+
# NVLink: none (single GPU)
|
|
694
|
+
# Compute: 8.9 Driver: 545.29 CUDA: 12.3
|
|
695
|
+
# P-state: P0 Temp: 42C Power: 45W / 450W TDP
|
|
696
|
+
```
|
|
697
|
+
---
|
|
698
|
+
|
|
564
699
|
## Quick Reference
|
|
565
700
|
```bash
|
|
566
701
|
# Set up cloud provider credentials
|
|
@@ -594,28 +729,6 @@ terradev analytics --days 30
|
|
|
594
729
|
terradev optimize
|
|
595
730
|
```
|
|
596
731
|
|
|
597
|
-
## Configuration
|
|
598
|
-
|
|
599
|
-
Your API keys are stored locally at ~/.terradev/credentials.json and never sent to Terradev servers.
|
|
600
|
-
|
|
601
|
-
```bash
|
|
602
|
-
# Configure multiple providers
|
|
603
|
-
terradev configure --provider runpod
|
|
604
|
-
terradev configure --provider vastai
|
|
605
|
-
terradev configure --provider aws
|
|
606
|
-
terradev configure --provider gcp
|
|
607
|
-
```
|
|
608
|
-
|
|
609
|
-
## Performance
|
|
610
|
-
|
|
611
|
-
- **2-8x throughput improvements** with vLLM optimization
|
|
612
|
-
- **30-50% bandwidth penalty eliminated** with NUMA topology
|
|
613
|
-
- **2-5x CUDA Graph speedup** with optimal topology
|
|
614
|
-
- **Up to 90% cost savings** with automatic provider switching
|
|
615
|
-
- **<2 minute spot recovery** with KV cache checkpointing
|
|
616
|
-
- **3.6x faster cold starts** with weight streaming
|
|
617
|
-
- **57.3% cost savings** with MLA-aware VRAM estimation
|
|
618
|
-
|
|
619
732
|
### Troubleshooting Training Workflows
|
|
620
733
|
|
|
621
734
|
**NCCL Connectivity Problems**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Terradev CLI v5.0.
|
|
1
|
+
# Terradev CLI v5.0.2
|
|
2
2
|
|
|
3
3
|
**Open Source BYOAPI Multi-Cloud GPU Infrastructure Platform**
|
|
4
4
|
|
|
@@ -10,12 +10,34 @@ Terradev is a cross-cloud compute-provisioning CLI that compresses + stages data
|
|
|
10
10
|
|
|
11
11
|
**NOTES ON 5.0.0**
|
|
12
12
|
|
|
13
|
-
We removed the paywall, open-sourced Terradev, and added Rust
|
|
13
|
+
We removed the paywall, open-sourced Terradev, and added Rust accelerators for safe and snappy delivery...
|
|
14
14
|
|
|
15
|
-
With the Rust DAG orchestrator, the execution graph enforces correct sequencing and idempotency at the runtime level.
|
|
15
|
+
With the Rust DAG orchestrator, the execution graph enforces correct sequencing and idempotency at the runtime level. You or the agent can issue commands freely... the orchestrator ensures they're safe to execute.
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
104 tools and sub-tools require heavy context. The Rust MCP orchestrator processes tool calls with minimal overhead: deserializing, routing, executing, and responding faster than pure-Python-based MCP servers by an order of magnitude. For an agent running a complex provisioning workflow across 21+ cloud providers, that compounds across every tool call in the chain.
|
|
18
18
|
|
|
19
|
+
## BYOAPI Configuration
|
|
20
|
+
|
|
21
|
+
Your API keys are stored locally at ~/.terradev/credentials.json and never sent to Terradev servers.
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
# Configure multiple providers
|
|
25
|
+
terradev configure --provider runpod
|
|
26
|
+
terradev configure --provider vastai
|
|
27
|
+
terradev configure --provider aws
|
|
28
|
+
terradev configure --provider gcp
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Performance
|
|
32
|
+
|
|
33
|
+
- **2-8x throughput improvements** with vLLM optimization
|
|
34
|
+
- **30-50% bandwidth penalty eliminated** with NUMA topology
|
|
35
|
+
- **2-5x CUDA Graph speedup** with optimal topology
|
|
36
|
+
- **Up to 90% cost savings** with automatic provider switching
|
|
37
|
+
- **<2 minute spot recovery** with KV cache checkpointing
|
|
38
|
+
- **3.6x faster cold starts** with weight streaming
|
|
39
|
+
- **57% cost savings** with MLA-aware VRAM estimation
|
|
40
|
+
|
|
19
41
|
## Complete Tutorial
|
|
20
42
|
|
|
21
43
|
### Step 1: Install Terradev
|
|
@@ -34,7 +56,7 @@ terradev --help
|
|
|
34
56
|
```
|
|
35
57
|
|
|
36
58
|
### Step 2: Configure Your First Cloud Provider
|
|
37
|
-
Terradev supports
|
|
59
|
+
Terradev supports 21+ GPU cloud providers. Start with one, RunPod is the fastest to set up:
|
|
38
60
|
|
|
39
61
|
```bash
|
|
40
62
|
terradev setup runpod --quick
|
|
@@ -469,6 +491,117 @@ echo "3. Test failover: terradev inferx failover --endpoint burst-llm-api --test
|
|
|
469
491
|
echo "4. Update adapters: terradev lora update -n customer-enterprise-a -p ./new-adapters/"
|
|
470
492
|
```
|
|
471
493
|
|
|
494
|
+
## Bare Metal GPU Access with IPMI Management (Latitude.sh)
|
|
495
|
+
|
|
496
|
+
Most GPU clouds give you a virtual machine. You get a slice of hardware, shared kernel paths, and a hypervisor layer between your workload and the GPU. For most ML workloads this is fine. For compliance-sensitive deployments — HIPAA, FedRAMP, financial services, defense contractors — it isn't. Virtualization introduces attestation gaps that auditors reject.
|
|
497
|
+
|
|
498
|
+
Latitude.sh is the only provider in Terradev's fleet that offers both **bare metal** and **virtual machine** GPU instances from the same API. Bare metal gives you the physical server — dedicated hardware, no virtualization overhead, and IPMI out-of-band management.
|
|
499
|
+
|
|
500
|
+
```bash
|
|
501
|
+
# See both bare metal and VM options side by side
|
|
502
|
+
terradev quote -g H100 --provider latitude
|
|
503
|
+
|
|
504
|
+
# Provision dedicated bare metal with IPMI access
|
|
505
|
+
terradev provision --provider latitude --gpu H100 --instance-type bare-metal
|
|
506
|
+
|
|
507
|
+
# Provision a VM (faster spin-up, slightly lower cost)
|
|
508
|
+
terradev provision --provider latitude --gpu H100 --instance-type vm
|
|
509
|
+
```
|
|
510
|
+
|
|
511
|
+
### IPMI: Why It Matters for Enterprise
|
|
512
|
+
|
|
513
|
+
IPMI (Intelligent Platform Management Interface) gives you out-of-band server management independent of the OS and GPU stack. If a training job deadlocks the kernel, you don't wait for a cloud provider ticket — you power-cycle via IPMI directly. Security teams can verify hardware attestation. Compliance frameworks that require dedicated hardware and physical access controls are satisfied.
|
|
514
|
+
|
|
515
|
+
```bash
|
|
516
|
+
# Instance status includes IPMI access endpoint when bare metal
|
|
517
|
+
terradev status --live --provider latitude
|
|
518
|
+
|
|
519
|
+
# Output includes:
|
|
520
|
+
# ipmi_access: true
|
|
521
|
+
# ipmi_endpoint: 10.x.x.x
|
|
522
|
+
# isolation: bare_metal
|
|
523
|
+
```
|
|
524
|
+
---
|
|
525
|
+
|
|
526
|
+
## Local GPU Discovery and Hybrid Compute Pools
|
|
527
|
+
|
|
528
|
+
Every other GPU orchestration platform assumes you're renting compute. Terradev doesn't.
|
|
529
|
+
|
|
530
|
+
If you have a GPU in your local machine — a gaming rig, a workstation, a university compute node you have SSH access to — Terradev can discover it, register it into your compute pool, and incorporate it into provisioning decisions alongside cloud providers.
|
|
531
|
+
|
|
532
|
+
```bash
|
|
533
|
+
# Scan local machine for GPUs
|
|
534
|
+
terradev local scan
|
|
535
|
+
|
|
536
|
+
# Output:
|
|
537
|
+
# Found 1 local GPU:
|
|
538
|
+
# [0] NVIDIA RTX 4090 24GB Driver 545.29 Util: 3% Temp: 42C
|
|
539
|
+
#
|
|
540
|
+
# Register in pool? [y/N]:
|
|
541
|
+
|
|
542
|
+
# Register local GPU into your pool
|
|
543
|
+
terradev local register --name "workstation-4090"
|
|
544
|
+
|
|
545
|
+
# Scan a remote machine you have SSH access to
|
|
546
|
+
terradev local scan --host 192.168.1.50 --user ubuntu --key ~/.ssh/id_rsa
|
|
547
|
+
|
|
548
|
+
# View your full compute pool (local + cloud)
|
|
549
|
+
terradev local pool
|
|
550
|
+
```
|
|
551
|
+
|
|
552
|
+
Pool output:
|
|
553
|
+
```
|
|
554
|
+
COMPUTE POOL (4 resources)
|
|
555
|
+
workstation-4090 RTX 4090 24GB local $0.00/hr Free
|
|
556
|
+
runpod-h100-001 H100 80GB runpod $2.49/hr Running
|
|
557
|
+
vastai-a100-002 A100 40GB vastai $1.82/hr Running
|
|
558
|
+
lambda-a10g-003 A10G 24GB lambda_labs $0.60/hr Idle
|
|
559
|
+
```
|
|
560
|
+
|
|
561
|
+
### Why This Matters
|
|
562
|
+
|
|
563
|
+
The `terradev quote` command normally shows cloud provider pricing. With local GPUs registered, the pool includes your own hardware — priced at $0/hr. For a university researcher with a 3090 workstation running overnight jobs, or a startup with a rack of 4090s before they've moved to cloud: Terradev routes workloads to the cheapest available compute, and $0/hr always wins.
|
|
564
|
+
|
|
565
|
+
```bash
|
|
566
|
+
# Get quotes including local pool
|
|
567
|
+
terradev quote -g RTX4090 --include-local
|
|
568
|
+
|
|
569
|
+
# Output:
|
|
570
|
+
# GPU PROVIDER $/HR AVAILABLE
|
|
571
|
+
# RTX 4090 local (workstation-4090) $0.00 Yes
|
|
572
|
+
# RTX 4090 vastai $0.34 Yes
|
|
573
|
+
# RTX 4090 runpod $0.39 Yes
|
|
574
|
+
|
|
575
|
+
# Provision to cheapest available — prefers local automatically
|
|
576
|
+
terradev provision -g RTX4090 --prefer-local
|
|
577
|
+
|
|
578
|
+
# Launch training on local GPU with cloud overflow
|
|
579
|
+
terradev train --script train.py --pool workstation-4090 --overflow-to-cloud
|
|
580
|
+
```
|
|
581
|
+
|
|
582
|
+
### How Discovery Works
|
|
583
|
+
|
|
584
|
+
The local scanner uses direct NVML bindings (Rust backend, 5–10x faster than `nvidia-smi` parsing) to introspect every GPU on the target machine:
|
|
585
|
+
|
|
586
|
+
- GPU model, memory, PCIe bus ID, NUMA affinity
|
|
587
|
+
- Current utilization, memory usage, temperature, clock speeds
|
|
588
|
+
- Driver version, CUDA version, compute capability
|
|
589
|
+
- Multi-GPU topology (NVLink, PCIe switch topology)
|
|
590
|
+
|
|
591
|
+
Falls back to `nvidia-smi` parsing automatically if the Rust NVML extension isn't available.
|
|
592
|
+
|
|
593
|
+
```bash
|
|
594
|
+
# Detailed hardware report for local GPU
|
|
595
|
+
terradev local scan --detailed
|
|
596
|
+
|
|
597
|
+
# Output includes:
|
|
598
|
+
# GPU 0: RTX 4090 VRAM 24GB PCIe x16 NUMA node 0
|
|
599
|
+
# NVLink: none (single GPU)
|
|
600
|
+
# Compute: 8.9 Driver: 545.29 CUDA: 12.3
|
|
601
|
+
# P-state: P0 Temp: 42C Power: 45W / 450W TDP
|
|
602
|
+
```
|
|
603
|
+
---
|
|
604
|
+
|
|
472
605
|
## Quick Reference
|
|
473
606
|
```bash
|
|
474
607
|
# Set up cloud provider credentials
|
|
@@ -502,28 +635,6 @@ terradev analytics --days 30
|
|
|
502
635
|
terradev optimize
|
|
503
636
|
```
|
|
504
637
|
|
|
505
|
-
## Configuration
|
|
506
|
-
|
|
507
|
-
Your API keys are stored locally at ~/.terradev/credentials.json and never sent to Terradev servers.
|
|
508
|
-
|
|
509
|
-
```bash
|
|
510
|
-
# Configure multiple providers
|
|
511
|
-
terradev configure --provider runpod
|
|
512
|
-
terradev configure --provider vastai
|
|
513
|
-
terradev configure --provider aws
|
|
514
|
-
terradev configure --provider gcp
|
|
515
|
-
```
|
|
516
|
-
|
|
517
|
-
## Performance
|
|
518
|
-
|
|
519
|
-
- **2-8x throughput improvements** with vLLM optimization
|
|
520
|
-
- **30-50% bandwidth penalty eliminated** with NUMA topology
|
|
521
|
-
- **2-5x CUDA Graph speedup** with optimal topology
|
|
522
|
-
- **Up to 90% cost savings** with automatic provider switching
|
|
523
|
-
- **<2 minute spot recovery** with KV cache checkpointing
|
|
524
|
-
- **3.6x faster cold starts** with weight streaming
|
|
525
|
-
- **57.3% cost savings** with MLA-aware VRAM estimation
|
|
526
|
-
|
|
527
638
|
### Troubleshooting Training Workflows
|
|
528
639
|
|
|
529
640
|
**NCCL Connectivity Problems**
|
|
@@ -4,8 +4,8 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "terradev-cli"
|
|
7
|
-
version = "5.0.
|
|
8
|
-
description = "
|
|
7
|
+
version = "5.0.2"
|
|
8
|
+
description = "Open Source BYOAPI Multi-Cloud GPU Infrastructure Platform"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = {text = "Apache-2.0"}
|
|
11
11
|
authors = [
|
|
@@ -113,16 +113,10 @@ dependencies = [
|
|
|
113
113
|
"pyyaml>=6.0",
|
|
114
114
|
"cryptography>=41.0.0",
|
|
115
115
|
"requests>=2.31.0",
|
|
116
|
-
"gradio>=4.0.0",
|
|
117
|
-
"streamlit>=1.28.0",
|
|
118
|
-
"transformers>=4.0.0",
|
|
119
|
-
"torch>=2.0.0",
|
|
120
|
-
"sentence-transformers>=2.0.0",
|
|
121
116
|
"plotly>=5.0.0",
|
|
122
117
|
"pandas>=1.0.0",
|
|
123
118
|
"numpy>=1.0.0",
|
|
124
119
|
"huggingface-hub>=0.19.0",
|
|
125
|
-
"stripe>=7.0.0",
|
|
126
120
|
]
|
|
127
121
|
|
|
128
122
|
[project.optional-dependencies]
|
|
@@ -130,6 +124,14 @@ aws = ["boto3>=1.34.0"]
|
|
|
130
124
|
gcp = ["google-cloud-compute>=1.8.0"]
|
|
131
125
|
azure = ["azure-mgmt-compute>=29.0.0", "azure-identity>=1.12.0"]
|
|
132
126
|
lmcache = ["lmcache>=0.1", "redis>=5.0.0"]
|
|
127
|
+
ml = [
|
|
128
|
+
"torch>=2.0.0",
|
|
129
|
+
"transformers>=4.0.0",
|
|
130
|
+
"sentence-transformers>=2.0.0",
|
|
131
|
+
"gradio>=4.0.0",
|
|
132
|
+
"streamlit>=1.28.0",
|
|
133
|
+
]
|
|
134
|
+
billing = ["stripe>=7.0.0"]
|
|
133
135
|
all = [
|
|
134
136
|
"boto3>=1.34.0",
|
|
135
137
|
"google-cloud-compute>=1.8.0",
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
[workspace]
|
|
2
|
+
resolver = "2"
|
|
2
3
|
members = [
|
|
3
4
|
"terradev-state-machine",
|
|
4
5
|
"terradev-resource-pool",
|
|
@@ -33,7 +34,7 @@ members = [
|
|
|
33
34
|
]
|
|
34
35
|
|
|
35
36
|
[workspace.dependencies]
|
|
36
|
-
pyo3 = { version = "0.20", features = ["
|
|
37
|
+
pyo3 = { version = "0.20", features = ["abi3-py38"] }
|
|
37
38
|
serde = { version = "1.0", features = ["derive"] }
|
|
38
39
|
serde_json = "1.0"
|
|
39
40
|
thiserror = "1.0"
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
#![allow(non_local_definitions)]
|
|
2
|
+
|
|
1
3
|
mod types;
|
|
2
4
|
mod verifier;
|
|
3
5
|
|
|
@@ -15,24 +17,35 @@ fn terradev_artifact_verification(_py: Python, m: &PyModule) -> PyResult<()> {
|
|
|
15
17
|
#[pyclass]
|
|
16
18
|
pub struct PyArtifactVerifier;
|
|
17
19
|
|
|
20
|
+
#[allow(non_local_definitions)]
|
|
18
21
|
#[pymethods]
|
|
19
22
|
impl PyArtifactVerifier {
|
|
20
23
|
#[new]
|
|
21
24
|
fn new() -> Self {
|
|
22
25
|
Self
|
|
23
26
|
}
|
|
24
|
-
|
|
27
|
+
|
|
25
28
|
fn compute_sha256(&self, data: Vec<u8>) -> String {
|
|
26
29
|
ArtifactVerifier::compute_sha256(&data)
|
|
27
30
|
}
|
|
28
|
-
|
|
29
|
-
fn verify_artifact(
|
|
31
|
+
|
|
32
|
+
fn verify_artifact(
|
|
33
|
+
&self,
|
|
34
|
+
data: Vec<u8>,
|
|
35
|
+
expected_checksum: String,
|
|
36
|
+
algorithm: String,
|
|
37
|
+
) -> PyResult<PyVerificationResult> {
|
|
30
38
|
ArtifactVerifier::verify_artifact(&data, &expected_checksum, &algorithm)
|
|
31
39
|
.map(|r| r.into())
|
|
32
40
|
.map_err(|e| PyErr::new::<pyo3::exceptions::PyValueError, _>(e.to_string()))
|
|
33
41
|
}
|
|
34
|
-
|
|
35
|
-
fn verify_file(
|
|
42
|
+
|
|
43
|
+
fn verify_file(
|
|
44
|
+
&self,
|
|
45
|
+
path: String,
|
|
46
|
+
expected_checksum: String,
|
|
47
|
+
algorithm: String,
|
|
48
|
+
) -> PyResult<PyVerificationResult> {
|
|
36
49
|
ArtifactVerifier::verify_file(&path, &expected_checksum, &algorithm)
|
|
37
50
|
.map(|r| r.into())
|
|
38
51
|
.map_err(|e| PyErr::new::<pyo3::exceptions::PyValueError, _>(e.to_string()))
|
|
@@ -5,14 +5,16 @@ use thiserror::Error;
|
|
|
5
5
|
pub enum VerificationError {
|
|
6
6
|
#[error("Hash mismatch: expected {expected}, got {actual}")]
|
|
7
7
|
HashMismatch { expected: String, actual: String },
|
|
8
|
-
|
|
8
|
+
|
|
9
|
+
#[allow(dead_code)]
|
|
9
10
|
#[error("Invalid signature")]
|
|
10
11
|
InvalidSignature,
|
|
11
|
-
|
|
12
|
+
|
|
12
13
|
#[error("Artifact not found: {0}")]
|
|
13
14
|
NotFound(String),
|
|
14
15
|
}
|
|
15
16
|
|
|
17
|
+
#[allow(dead_code)]
|
|
16
18
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
17
19
|
pub struct Artifact {
|
|
18
20
|
pub name: String,
|