terradev-cli 5.3.1__tar.gz → 5.3.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.
Files changed (480) hide show
  1. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/PKG-INFO +2 -2
  2. {terradev_cli-5.3.1/terradev_cli → terradev_cli-5.3.2}/README.md +1 -1
  3. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/pyproject.toml +1 -1
  4. {terradev_cli-5.3.1 → terradev_cli-5.3.2/terradev_cli}/README.md +1 -1
  5. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/__init__.py +1 -1
  6. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/inference_router.py +3 -0
  7. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/ml_services/ollama_service.py +16 -0
  8. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/ml_services/sglang_service.py +7 -0
  9. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/ml_services/vllm_service.py +7 -0
  10. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/providers/crusoe_provider.py +70 -15
  11. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/providers/e2e_networks_provider.py +19 -9
  12. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/providers/lambda_labs_provider.py +7 -1
  13. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/providers/oracle_provider.py +7 -5
  14. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/providers/yottalabs_provider.py +35 -17
  15. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli.egg-info/PKG-INFO +2 -2
  16. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/.env.example +0 -0
  17. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/.github/workflows/action.yml +0 -0
  18. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/.github/workflows/ci.yml +0 -0
  19. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/.github/workflows/release.yml +0 -0
  20. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/.github/workflows/static.yml +0 -0
  21. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/Deployment Package/BNF_GRAMMAR.md +0 -0
  22. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/Deployment Package/LIFECYCLES.md +0 -0
  23. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/Deployment Package/architecture.md +0 -0
  24. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/Deployment Package/overview.md +0 -0
  25. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/Deployment Package/security.md +0 -0
  26. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/Deployment Package/troubleshooting.md +0 -0
  27. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/Dockerfile +0 -0
  28. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/Dockerfile.test +0 -0
  29. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/LICENSE +0 -0
  30. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/MANIFEST.in +0 -0
  31. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/agentic-template/helm/values-agentic.yaml +0 -0
  32. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/agentic-template/k8s/fleet-manifests.yaml +0 -0
  33. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/glm-5/README.md +0 -0
  34. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/glm-5/helm/values-glm5.yaml +0 -0
  35. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/glm-5/k8s/hpa.yaml +0 -0
  36. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/glm-5/k8s/model-cache-pvc.yaml +0 -0
  37. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/glm-5/k8s/namespace.yaml +0 -0
  38. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/glm-5/k8s/pdb.yaml +0 -0
  39. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/glm-5/k8s/service.yaml +0 -0
  40. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/glm-5/k8s/sglang-deployment.yaml +0 -0
  41. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/glm-5/k8s/vllm-deployment.yaml +0 -0
  42. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/glm-5/task.yaml +0 -0
  43. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/glm-5/terraform/main.tf +0 -0
  44. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/glm-5/terraform/outputs.tf +0 -0
  45. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/glm-5/terraform/variables.tf +0 -0
  46. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/llmd-template/README.md +0 -0
  47. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/llmd-template/helm/values-llmd.yaml +0 -0
  48. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/llmd-template/k8s/gateway.yaml +0 -0
  49. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/llmd-template/k8s/leaderworkerset.yaml +0 -0
  50. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/llmd-template/k8s/llminferenceservice.yaml +0 -0
  51. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/llmd-template/task.yaml +0 -0
  52. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/moe-template/README.md +0 -0
  53. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/moe-template/helm/values-moe.yaml +0 -0
  54. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/moe-template/k8s/deployment.yaml +0 -0
  55. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/moe-template/k8s/hpa.yaml +0 -0
  56. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/moe-template/k8s/model-cache-pvc.yaml +0 -0
  57. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/moe-template/k8s/namespace.yaml +0 -0
  58. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/moe-template/k8s/pdb.yaml +0 -0
  59. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/moe-template/k8s/service.yaml +0 -0
  60. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/moe-template/task.yaml +0 -0
  61. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/moe-template/terraform/main.tf +0 -0
  62. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/moe-template/terraform/outputs.tf +0 -0
  63. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/moe-template/terraform/variables.tf +0 -0
  64. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/rag-template/README.md +0 -0
  65. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/rag-template/helm/values-rag.yaml +0 -0
  66. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/rag-template/k8s/deployment.yaml +0 -0
  67. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/clusters/rag-template/terraform/main.tf +0 -0
  68. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/demo/RECORDING_GUIDE.md +0 -0
  69. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/demo/generate_gif.py +0 -0
  70. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/demo/terradev-demo.gif +0 -0
  71. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/docs/ADVANCED_FINANCIAL_INNOVATIONS.md +0 -0
  72. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/docs/API_DOCUMENTATION.md +0 -0
  73. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/docs/BingSiteAuth.xml +0 -0
  74. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/docs/FINOPS_ATTRIBUTION_SYSTEM.md +0 -0
  75. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/docs/USER_GUIDE.md +0 -0
  76. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/docs/VLLM_AUTO_OPTIMIZATION_GUIDE.md +0 -0
  77. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/docs/VLLM_OPTIMIZATION_GUIDE.md +0 -0
  78. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/docs/architecture.md +0 -0
  79. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/docs/index.html +0 -0
  80. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/docs/overview.md +0 -0
  81. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/docs/robots.txt +0 -0
  82. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/docs/sitemap.xml +0 -0
  83. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/docs/test_spot_provision.md +0 -0
  84. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/examples/aws_ssm_starter.py +0 -0
  85. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/examples/config.example.json +0 -0
  86. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/examples/demo_k8s_config.yaml +0 -0
  87. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/examples/direct_aws_starter.py +0 -0
  88. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/examples/ec2_user_data_starter.py +0 -0
  89. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/examples/example-pipeline.yaml +0 -0
  90. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/examples/kubernetes_training_deployment.yaml +0 -0
  91. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/examples/simple_ssm_starter.py +0 -0
  92. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/examples/ssh_server_starter.py +0 -0
  93. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/examples/start_aws_servers.py +0 -0
  94. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/helm/terradev/Chart.yaml +0 -0
  95. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/helm/terradev/templates/_helpers.tpl +0 -0
  96. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/helm/terradev/templates/deployment.yaml +0 -0
  97. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/helm/terradev/values.yaml +0 -0
  98. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/infrastructure/bucket-policy.json +0 -0
  99. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/infrastructure/grafana_training_dashboard.json +0 -0
  100. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/infrastructure/kubernetes/microservices.yaml +0 -0
  101. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/infrastructure/terraform/main.tf +0 -0
  102. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/infrastructure/terraform/parallelism.tf +0 -0
  103. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/integrations/cli-tool.tf +0 -0
  104. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/integrations/cloud-management-widgets.tf +0 -0
  105. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/integrations/cloud-provider-apis.py +0 -0
  106. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/integrations/critical-widgets.tf +0 -0
  107. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/integrations/devops-cicd-widgets.tf +0 -0
  108. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/integrations/devops-essential-tools.tf +0 -0
  109. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/integrations/docker-integration.tf +0 -0
  110. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/integrations/kubernetes-operator.tf +0 -0
  111. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/integrations/mlflow-integration.tf +0 -0
  112. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/modules/datadog/README.md +0 -0
  113. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/modules/datadog/dashboard.tf +0 -0
  114. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/modules/datadog/monitors.tf +0 -0
  115. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/modules/datadog/outputs.tf +0 -0
  116. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/modules/datadog/provider.tf +0 -0
  117. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/modules/datadog/variables.tf +0 -0
  118. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/modules/datadog/versions.tf +0 -0
  119. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/modules/prometheus_training_config.yml +0 -0
  120. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/requirements.txt +0 -0
  121. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/Cargo.toml +0 -0
  122. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/INTEGRATION_GUIDE.md +0 -0
  123. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/PERFORMANCE_OPTIMIZATIONS.md +0 -0
  124. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/README.md +0 -0
  125. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-artifact-verification/Cargo.toml +0 -0
  126. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-artifact-verification/src/lib.rs +0 -0
  127. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-artifact-verification/src/types.rs +0 -0
  128. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-artifact-verification/src/verifier.rs +0 -0
  129. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-authentication/Cargo.toml +0 -0
  130. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-authentication/src/encoding.rs +0 -0
  131. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-authentication/src/hmac.rs +0 -0
  132. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-authentication/src/lib.rs +0 -0
  133. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-authentication/src/types.rs +0 -0
  134. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-cache-eviction/Cargo.toml +0 -0
  135. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-cache-eviction/src/cache.rs +0 -0
  136. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-cache-eviction/src/lib.rs +0 -0
  137. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-cache-eviction/src/types.rs +0 -0
  138. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-command-executor/Cargo.toml +0 -0
  139. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-command-executor/src/lib.rs +0 -0
  140. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-config-validator/Cargo.toml +0 -0
  141. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-config-validator/src/lib.rs +0 -0
  142. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-config-validator/src/types.rs +0 -0
  143. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-config-validator/src/validator.rs +0 -0
  144. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-connection-pool/Cargo.toml +0 -0
  145. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-connection-pool/src/lib.rs +0 -0
  146. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-connection-pool/src/pool.rs +0 -0
  147. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-connection-pool/src/types.rs +0 -0
  148. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-cost-calculator/Cargo.toml +0 -0
  149. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-cost-calculator/src/calculator.rs +0 -0
  150. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-cost-calculator/src/lib.rs +0 -0
  151. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-cost-calculator/src/types.rs +0 -0
  152. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-cost-scaler/Cargo.toml +0 -0
  153. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-cost-scaler/src/lib.rs +0 -0
  154. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-credential-vault/Cargo.toml +0 -0
  155. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-credential-vault/src/lib.rs +0 -0
  156. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-credential-vault/src/types.rs +0 -0
  157. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-credential-vault/src/vault.rs +0 -0
  158. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-dag-executor/Cargo.toml +0 -0
  159. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-dag-executor/src/lib.rs +0 -0
  160. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-distributed-lock/Cargo.toml +0 -0
  161. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-distributed-lock/src/lib.rs +0 -0
  162. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-distributed-lock/src/lock.rs +0 -0
  163. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-distributed-lock/src/types.rs +0 -0
  164. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-egress-optimizer/Cargo.toml +0 -0
  165. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-egress-optimizer/src/graph.rs +0 -0
  166. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-egress-optimizer/src/lib.rs +0 -0
  167. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-egress-optimizer/src/types.rs +0 -0
  168. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-event-bus/Cargo.toml +0 -0
  169. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-event-bus/src/bus.rs +0 -0
  170. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-event-bus/src/lib.rs +0 -0
  171. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-event-bus/src/types.rs +0 -0
  172. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-governance/Cargo.toml +0 -0
  173. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-governance/src/lib.rs +0 -0
  174. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-gpu-discovery/Cargo.toml +0 -0
  175. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-gpu-discovery/src/lib.rs +0 -0
  176. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-gpu-topology/Cargo.toml +0 -0
  177. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-gpu-topology/src/lib.rs +0 -0
  178. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-gpu-topology/src/topology.rs +0 -0
  179. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-gpu-topology/src/types.rs +0 -0
  180. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-helm-generator/Cargo.toml +0 -0
  181. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-helm-generator/src/lib.rs +0 -0
  182. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-mcp-codec/Cargo.toml +0 -0
  183. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-mcp-codec/src/lib.rs +0 -0
  184. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-mcp-optimizer/Cargo.toml +0 -0
  185. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-mcp-optimizer/src/lib.rs +0 -0
  186. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-price-intelligence/Cargo.toml +0 -0
  187. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-price-intelligence/src/lib.rs +0 -0
  188. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-quota-manager/Cargo.toml +0 -0
  189. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-quota-manager/src/lib.rs +0 -0
  190. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-quota-manager/src/manager.rs +0 -0
  191. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-quota-manager/src/types.rs +0 -0
  192. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-resource-pool/Cargo.toml +0 -0
  193. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-resource-pool/src/lib.rs +0 -0
  194. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-resource-pool/src/pool.rs +0 -0
  195. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-resource-pool/src/types.rs +0 -0
  196. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-result-compressor/Cargo.toml +0 -0
  197. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-result-compressor/src/lib.rs +0 -0
  198. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-semantic-router/Cargo.toml +0 -0
  199. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-semantic-router/src/lib.rs +0 -0
  200. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-snapshot-manager/Cargo.toml +0 -0
  201. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-snapshot-manager/src/lib.rs +0 -0
  202. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-snapshot-manager/src/snapshot.rs +0 -0
  203. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-snapshot-manager/src/types.rs +0 -0
  204. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-state-machine/Cargo.toml +0 -0
  205. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-state-machine/src/lib.rs +0 -0
  206. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-state-machine/src/state.rs +0 -0
  207. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-state-machine/src/types.rs +0 -0
  208. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-telemetry/Cargo.toml +0 -0
  209. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-telemetry/src/lib.rs +0 -0
  210. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-telemetry/src/pipeline.rs +0 -0
  211. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-telemetry/src/types.rs +0 -0
  212. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-tool-registry/Cargo.toml +0 -0
  213. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-tool-registry/src/lib.rs +0 -0
  214. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-vram-estimator/Cargo.toml +0 -0
  215. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-vram-estimator/src/estimator.rs +0 -0
  216. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-vram-estimator/src/lib.rs +0 -0
  217. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-vram-estimator/src/types.rs +0 -0
  218. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-warm-pool/Cargo.toml +0 -0
  219. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/rust/terradev-warm-pool/src/lib.rs +0 -0
  220. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/scripts/action.py +0 -0
  221. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/scripts/gpu-check.sh +0 -0
  222. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/setup/Lambda Cloud API spec 1.8.3.json +0 -0
  223. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/setup/docker-compose.yml +0 -0
  224. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/setup/nginx.conf +0 -0
  225. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/setup/setup.sh +0 -0
  226. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/setup.cfg +0 -0
  227. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/CHANGELOG.md +0 -0
  228. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/COMPLETE_COMMAND_REFERENCE.md +0 -0
  229. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/COMPLETE_INTEGRATION_GUIDE.md +0 -0
  230. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/IMPLEMENTATION_SUMMARY.md +0 -0
  231. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/MAKING_SPOT_WORK_FOR_STATEFUL_WORKLOADS.md +0 -0
  232. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/SGLANG_COMMAND_GUIDE.md +0 -0
  233. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/TERRADEV_STACK_CHART.md +0 -0
  234. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/__main__.py +0 -0
  235. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/cli.py +0 -0
  236. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/cli_hf_spaces.py +0 -0
  237. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/cli_karpenter.py +0 -0
  238. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/__init__.py +0 -0
  239. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/agentic_provisioner.py +0 -0
  240. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/agentic_topology.py +0 -0
  241. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/async_config.py +0 -0
  242. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/auth.py +0 -0
  243. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/auto_lineage.py +0 -0
  244. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/cache_manager.py +0 -0
  245. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/checkpoint_manager.py +0 -0
  246. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/command_executor.py +0 -0
  247. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/config.py +0 -0
  248. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/config_validator.py +0 -0
  249. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/cost_scaler.py +0 -0
  250. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/cost_tracker.py +0 -0
  251. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/credential_vault.py +0 -0
  252. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/cuda_graph_integrator.py +0 -0
  253. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/dag_executor.py +0 -0
  254. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/data_governance.py +0 -0
  255. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/dataset_stager.py +0 -0
  256. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/deployment_router.py +0 -0
  257. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/distributed_lock.py +0 -0
  258. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/drift_detector.py +0 -0
  259. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/egress_cost_monitor.py +0 -0
  260. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/egress_optimizer.py +0 -0
  261. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/evaluation_orchestrator.py +0 -0
  262. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/event_system.py +0 -0
  263. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/gitops_manager.py +0 -0
  264. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/gpu_discovery.py +0 -0
  265. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/gpu_topology.py +0 -0
  266. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/helm_generator.py +0 -0
  267. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/hf_cli_integration.py +0 -0
  268. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/hf_smart_templates.py +0 -0
  269. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/hf_spaces.py +0 -0
  270. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/inference_spot_manager.py +0 -0
  271. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/job_state_manager.py +0 -0
  272. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/kv_cache_checkpoint_manager.py +0 -0
  273. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/kv_cache_checkpoint_tests.py +0 -0
  274. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/kv_sharing.py +0 -0
  275. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/manifest_cache.py +0 -0
  276. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/manifest_example.json +0 -0
  277. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/mig_manager.py +0 -0
  278. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/migration_orchestrator.py +0 -0
  279. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/mla_vram_estimator.py +0 -0
  280. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/mla_vram_tests.py +0 -0
  281. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/model_orchestrator.py +0 -0
  282. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/oidc_provider.py +0 -0
  283. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/optimization_config.py +0 -0
  284. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/parallel_provisioner.py +0 -0
  285. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/pd_transport.py +0 -0
  286. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/pipeline_schema.py +0 -0
  287. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/preflight_validator.py +0 -0
  288. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/price_discovery.py +0 -0
  289. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/price_intelligence.py +0 -0
  290. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/public_ip_billing_tracker.py +0 -0
  291. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/quick_start.py +0 -0
  292. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/quota_manager.py +0 -0
  293. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/rate_limiter.py +0 -0
  294. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/rust_telemetry.py +0 -0
  295. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/semantic_router.py +0 -0
  296. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/semantic_signals/__init__.py +0 -0
  297. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/semantic_signals/base_signal.py +0 -0
  298. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/semantic_signals/complexity_signal.py +0 -0
  299. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/semantic_signals/domain_signal.py +0 -0
  300. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/semantic_signals/keyword_signal.py +0 -0
  301. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/semantic_signals/language_signal.py +0 -0
  302. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/semantic_signals/modality_signal.py +0 -0
  303. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/semantic_signals/orchestrator.py +0 -0
  304. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/semantic_signals/routing_policy.yaml +0 -0
  305. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/semantic_signals/safety_signal.py +0 -0
  306. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/session_manager.py +0 -0
  307. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/ssh_key_manager.py +0 -0
  308. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/telemetry.py +0 -0
  309. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/terradev_engine.py +0 -0
  310. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/trace_viewer.py +0 -0
  311. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/training_monitor.py +0 -0
  312. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/training_orchestrator.py +0 -0
  313. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/user_manager.py +0 -0
  314. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/warm_pool_manager.py +0 -0
  315. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/weight_streaming_benchmarks.py +0 -0
  316. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/core/weight_streaming_manager.py +0 -0
  317. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/cost_optimizer.py +0 -0
  318. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/credential_prompt.py +0 -0
  319. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/demo.py +0 -0
  320. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/entry_point.py +0 -0
  321. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/integrations/Terradev LOGO BLACK.png +0 -0
  322. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/integrations/Terradev LOGO WHITEW.png +0 -0
  323. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/integrations/__init__.py +0 -0
  324. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/integrations/databricks_integration.py +0 -0
  325. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/integrations/datadog_integration.py +0 -0
  326. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/integrations/helicone_integration.py +0 -0
  327. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/integrations/prometheus_integration.py +0 -0
  328. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/integrations/wandb_integration.py +0 -0
  329. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/k8s/terraform_wrapper.py +0 -0
  330. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/kubernetes/inferx-cost-optimized.yaml +0 -0
  331. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/kubernetes/inferx-infrastructure.yaml +0 -0
  332. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/kubernetes/inferx-models.yaml +0 -0
  333. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/kubernetes/inferx-platform.yaml +0 -0
  334. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/kubernetes/inferx_setup.py +0 -0
  335. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/mcp/__init__.py +0 -0
  336. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/mcp/server.py +0 -0
  337. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/ml_services/__init__.py +0 -0
  338. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/ml_services/agentic_serving.py +0 -0
  339. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/ml_services/drift_retrain_service.py +0 -0
  340. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/ml_services/dvc_service.py +0 -0
  341. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/ml_services/guardrails_service.py +0 -0
  342. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/ml_services/huggingface_service.py +0 -0
  343. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/ml_services/kserve_service.py +0 -0
  344. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/ml_services/kubernetes_enhanced.py +0 -0
  345. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/ml_services/kubernetes_service.py +0 -0
  346. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/ml_services/langchain_service.py +0 -0
  347. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/ml_services/langfuse_service.py +0 -0
  348. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/ml_services/langgraph_service.py +0 -0
  349. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/ml_services/lmcache_service.py +0 -0
  350. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/ml_services/mlflow_service.py +0 -0
  351. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/ml_services/model_router.py +0 -0
  352. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/ml_services/phoenix_service.py +0 -0
  353. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/ml_services/qdrant_service.py +0 -0
  354. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/ml_services/ray_enhanced.py +0 -0
  355. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/ml_services/ray_service.py +0 -0
  356. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/ml_services/wandb_enhanced.py +0 -0
  357. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/optimization/__init__.py +0 -0
  358. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/optimization/auto_optimizer.py +0 -0
  359. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/optimization/cuco_optimizer.py +0 -0
  360. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/providers/LATITUDE_PROVIDER.md +0 -0
  361. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/providers/__init__.py +0 -0
  362. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/providers/alibaba_provider.py +0 -0
  363. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/providers/aws_provider.py +0 -0
  364. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/providers/azure_provider.py +0 -0
  365. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/providers/base_provider.py +0 -0
  366. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/providers/baseten_provider.py +0 -0
  367. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/providers/coreweave_provider.py +0 -0
  368. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/providers/demo_mode.py +0 -0
  369. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/providers/digitalocean_provider.py +0 -0
  370. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/providers/fluidstack_provider.py +0 -0
  371. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/providers/gcp_provider.py +0 -0
  372. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/providers/hetzner_provider.py +0 -0
  373. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/providers/huggingface_provider.py +0 -0
  374. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/providers/hyperstack_provider.py +0 -0
  375. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/providers/inferx_provider.py +0 -0
  376. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/providers/latitude_provider.py +0 -0
  377. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/providers/ovhcloud_provider.py +0 -0
  378. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/providers/provider_factory.py +0 -0
  379. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/providers/real_pricing.py +0 -0
  380. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/providers/runpod_provider.py +0 -0
  381. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/providers/siliconflow_provider.py +0 -0
  382. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/providers/tensordock_provider.py +0 -0
  383. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/providers/vastai_provider.py +0 -0
  384. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/requirements.txt +0 -0
  385. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/requirements_minimal.txt +0 -0
  386. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/terraform/main.tf +0 -0
  387. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/terraform/modules/__init__.py +0 -0
  388. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/terraform/modules/gpu-node-aws/bootstrap.sh +0 -0
  389. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/terraform/modules/gpu-node-aws/main.tf +0 -0
  390. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/terraform/modules/gpu-node-aws/outputs.tf +0 -0
  391. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/terraform/modules/gpu-node-aws/variables.tf +0 -0
  392. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/terraform/modules/gpu-node-aws/versions.tf +0 -0
  393. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/terraform/modules/gpu-node-hyperstack/bootstrap.sh +0 -0
  394. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/terraform/modules/gpu-node-hyperstack/main.tf +0 -0
  395. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/terraform/modules/gpu-node-hyperstack/outputs.tf +0 -0
  396. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/terraform/modules/gpu-node-hyperstack/variables.tf +0 -0
  397. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/terraform/modules/gpu-node-hyperstack/versions.tf +0 -0
  398. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/terraform/modules/gpu-node-lambda/bootstrap.sh +0 -0
  399. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/terraform/modules/gpu-node-lambda/main.tf +0 -0
  400. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/terraform/modules/gpu-node-lambda/outputs.tf +0 -0
  401. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/terraform/modules/gpu-node-lambda/variables.tf +0 -0
  402. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/terraform/modules/gpu-node-lambda/versions.tf +0 -0
  403. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/terraform/modules/gpu-node-vastai/bootstrap.sh +0 -0
  404. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/terraform/modules/gpu-node-vastai/main.tf +0 -0
  405. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/terraform/modules/gpu-node-vastai/outputs.tf +0 -0
  406. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/terraform/modules/gpu-node-vastai/variables.tf +0 -0
  407. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/terraform/modules/gpu-node-vastai/versions.tf +0 -0
  408. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/terraform/modules/k8s-control-plane/join-script.tpl +0 -0
  409. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/terraform/modules/k8s-control-plane/kubeconfig.tpl +0 -0
  410. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/terraform/modules/k8s-control-plane/main.tf +0 -0
  411. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/terraform/modules/k8s-control-plane/outputs.tf +0 -0
  412. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/terraform/modules/k8s-control-plane/variables.tf +0 -0
  413. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/terraform/modules/k8s-control-plane/versions.tf +0 -0
  414. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/terraform/modules/networking/main.tf +0 -0
  415. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/terraform/modules/networking/outputs.tf +0 -0
  416. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/terraform/modules/networking/variables.tf +0 -0
  417. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/terraform/modules/networking/versions.tf +0 -0
  418. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/terraform/outputs.tf +0 -0
  419. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/terraform/price-optimizer/optimal-allocation.py +0 -0
  420. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/terraform/providers.tf +0 -0
  421. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/terraform/variables.tf +0 -0
  422. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/test_summary.py +0 -0
  423. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/utils/__init__.py +0 -0
  424. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli/utils/formatters.py +0 -0
  425. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli.egg-info/SOURCES.txt +0 -0
  426. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli.egg-info/dependency_links.txt +0 -0
  427. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli.egg-info/entry_points.txt +0 -0
  428. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli.egg-info/requires.txt +0 -0
  429. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terradev_cli.egg-info/top_level.txt +0 -0
  430. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terraform.tfvars.example +0 -0
  431. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terraform_optimization/backend.tf +0 -0
  432. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terraform_optimization/error_handling.py +0 -0
  433. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terraform_optimization/parallel_provisioning.tf +0 -0
  434. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terraform_optimization/storage_choice_matrix.py +0 -0
  435. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terraform_optimization/test_error_handler.py +0 -0
  436. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terraform_optimization/versions.tf +0 -0
  437. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terraform_transparency/audit_demo/trail_3caed73ad5bf.json +0 -0
  438. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terraform_transparency/audit_trail.py +0 -0
  439. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terraform_transparency/audit_trails.json +0 -0
  440. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terraform_transparency/decision_engine.py +0 -0
  441. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terraform_transparency/decision_logs.json +0 -0
  442. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terraform_transparency/operations.json +0 -0
  443. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terraform_transparency/terraform_manager.py +0 -0
  444. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terraform_transparency/terraform_plans.json +0 -0
  445. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terraform_transparency/transparency_demo.py +0 -0
  446. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/terraform_transparency/transparency_report.json +0 -0
  447. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/tests/CREDENTIAL_STRATEGY.md +0 -0
  448. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/tests/INTEGRATION_STRATEGY.md +0 -0
  449. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/tests/Makefile +0 -0
  450. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/tests/ci_pipeline.py +0 -0
  451. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/tests/conftest.py +0 -0
  452. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/tests/root_tests/test_cli_ux_battle.py +0 -0
  453. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/tests/root_tests/test_cli_ux_battle_fixed.py +0 -0
  454. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/tests/root_tests/test_cli_ux_final.py +0 -0
  455. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/tests/root_tests/test_final_integration.py +0 -0
  456. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/tests/root_tests/test_integrated_optimization.py +0 -0
  457. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/tests/root_tests/test_p10_production_failover.py +0 -0
  458. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/tests/root_tests/test_sso_phase1.py +0 -0
  459. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/tests/root_tests/test_vllm_optimization.py +0 -0
  460. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/tests/simple_test.py +0 -0
  461. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/tests/test_ai_integrations.py +0 -0
  462. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/tests/test_checkpoint_manager.py +0 -0
  463. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/tests/test_cli_smoke.py +0 -0
  464. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/tests/test_dag_executor.py +0 -0
  465. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/tests/test_flashoptim.py +0 -0
  466. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/tests/test_integration.py +0 -0
  467. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/tests/test_job_state_manager.py +0 -0
  468. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/tests/test_k8s_regression.py +0 -0
  469. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/tests/test_latitude_provider.py +0 -0
  470. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/tests/test_major_providers.py +0 -0
  471. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/tests/test_mcp_handlers.py +0 -0
  472. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/tests/test_new_providers.py +0 -0
  473. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/tests/test_provider_conformance.py +0 -0
  474. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/tests/test_providers.py +0 -0
  475. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/tests/test_semantic_router.py +0 -0
  476. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/tests/test_sglang_optimization.py +0 -0
  477. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/tests/test_ssh_key_manager.py +0 -0
  478. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/tests/test_training_monitor.py +0 -0
  479. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/tests/test_training_orchestrator.py +0 -0
  480. {terradev_cli-5.3.1 → terradev_cli-5.3.2}/tests/test_vllm_features.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: terradev-cli
3
- Version: 5.3.1
3
+ Version: 5.3.2
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.1
96
+ # Terradev CLI v5.3.2
97
97
 
98
98
  **An imperative command-line-interface for AI workload orchestration.**
99
99
 
@@ -1,4 +1,4 @@
1
- # Terradev CLI v5.3.0
1
+ # Terradev CLI v5.3.2
2
2
 
3
3
  **An imperative command-line-interface for AI workload orchestration.**
4
4
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "terradev-cli"
7
- version = "5.3.1"
7
+ version = "5.3.2"
8
8
  description = "An imperative command-line-interface for AI workload orchestration."
9
9
  readme = "README.md"
10
10
  license = {text = "Apache-2.0"}
@@ -1,4 +1,4 @@
1
- # Terradev CLI v5.3.1
1
+ # Terradev CLI v5.3.2
2
2
 
3
3
  **An imperative command-line-interface for AI workload orchestration.**
4
4
 
@@ -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.0.1"
6
+ __version__ = "5.3.2"
7
7
  __author__ = "Terradev Team"
8
8
  __description__ = "Open Source BYOAPI Multi-Cloud GPU Infrastructure Platform"
@@ -813,6 +813,9 @@ class InferenceRouter:
813
813
  ) -> Optional[float]:
814
814
  """Measure latency to a target via async ping (ms)"""
815
815
  try:
816
+ # R3-B: Defense-in-depth — refuse targets that look like flags.
817
+ if not target or target.startswith("-"):
818
+ return None
816
819
  proc = await asyncio.create_subprocess_exec(
817
820
  "ping",
818
821
  "-c",
@@ -5,11 +5,24 @@ Local LLM deployment and management
5
5
  """
6
6
 
7
7
  import json
8
+ import re
8
9
  import aiohttp
9
10
  import subprocess
10
11
  from typing import Dict, List, Any, Optional
11
12
  from dataclasses import dataclass
12
13
 
14
+ # R3-A: Allowlist for model names that get interpolated into shell scripts.
15
+ # Matches HuggingFace IDs ("org/model-name"), Ollama tags ("llama3.2:13b"),
16
+ # and version suffixes. Rejects shell metacharacters and newlines.
17
+ _MODEL_NAME_RE = re.compile(r'^[A-Za-z0-9_.:/\-]{1,256}$')
18
+
19
+
20
+ def _validate_model_name(name: str) -> None:
21
+ if not isinstance(name, str) or not _MODEL_NAME_RE.match(name):
22
+ raise ValueError(
23
+ f"Unsafe model name {name!r}: only [A-Za-z0-9_.:/-] (max 256) allowed."
24
+ )
25
+
13
26
 
14
27
  @dataclass
15
28
  class OllamaConfig:
@@ -130,6 +143,7 @@ ollama --version
130
143
  ) -> Dict[str, Any]:
131
144
  """Pull a model on remote instance"""
132
145
  try:
146
+ _validate_model_name(model_name)
133
147
  pull_script = f"""
134
148
  #!/bin/bash
135
149
  # Pull model: {model_name}
@@ -360,6 +374,7 @@ ollama list | grep {model_name}
360
374
  ) -> Dict[str, Any]:
361
375
  """Delete a model on remote instance"""
362
376
  try:
377
+ _validate_model_name(model)
363
378
  delete_script = f"""
364
379
  #!/bin/bash
365
380
  # Delete model: {model}
@@ -443,6 +458,7 @@ ollama list
443
458
  ssh_key: Optional[str] = None,
444
459
  ) -> str:
445
460
  """Generate deployment script for Ollama"""
461
+ _validate_model_name(model)
446
462
  script = f"""
447
463
  #!/bin/bash
448
464
  # Ollama Deployment Script for Terradev
@@ -988,6 +988,13 @@ python3 -c "import sglang; print('SGLang', sglang.__version__, 'installed')"
988
988
  ) -> Dict[str, Any]:
989
989
  """Start SGLang server on a remote instance via systemd"""
990
990
  try:
991
+ # R3-A: Reject model names that could escape the heredoc / inject shell.
992
+ import re as _re
993
+ if not _re.match(r'^[A-Za-z0-9_.:/\-]{1,256}$', self.config.model_name or ""):
994
+ return {
995
+ "status": "failed",
996
+ "error": f"Unsafe model_name {self.config.model_name!r}: only [A-Za-z0-9_.:/-] allowed.",
997
+ }
991
998
  server_cmd = [
992
999
  "python3",
993
1000
  "-m",
@@ -500,6 +500,13 @@ python3 -c "import vllm; print('vLLM installed successfully')"
500
500
  ) -> Dict[str, Any]:
501
501
  """Start vLLM server on remote instance"""
502
502
  try:
503
+ # R3-A: Reject model names that could escape the heredoc / inject shell.
504
+ import re as _re
505
+ if not _re.match(r'^[A-Za-z0-9_.:/\-]{1,256}$', self.config.model_name or ""):
506
+ return {
507
+ "status": "failed",
508
+ "error": f"Unsafe model_name {self.config.model_name!r}: only [A-Za-z0-9_.:/-] allowed.",
509
+ }
503
510
  # Build vLLM server command
504
511
  server_cmd = [
505
512
  "vllm",
@@ -5,9 +5,15 @@ BYOAPI: Uses the end-client's Crusoe API access key + secret key
5
5
  API: https://api.crusoecloud.com/v1alpha5
6
6
  """
7
7
 
8
+ import base64
9
+ import hashlib
10
+ import hmac
8
11
  import os
12
+ from datetime import datetime, timezone
9
13
  from typing import Dict, List, Any, Optional
10
- from datetime import datetime
14
+ from urllib.parse import urlparse
15
+
16
+ import aiohttp
11
17
 
12
18
  from .base_provider import BaseProvider
13
19
 
@@ -76,24 +82,73 @@ class CrusoeProvider(BaseProvider):
76
82
  # ── Authentication ────────────────────────────────────────────────
77
83
 
78
84
  async def _ensure_auth(self):
79
- """Obtain a bearer token from Crusoe using access_key + secret_key.
80
-
81
- Crusoe authenticates via an Authorization header built from the
82
- access key and secret key. The simplest approach is HTTP Basic
83
- auth (access_key:secret_key) exchanged for a short-lived bearer
84
- token, but the v1alpha5 API also accepts the key-pair directly
85
- as a Bearer header in the format ``Bearer <access_key>:<secret_key>``.
86
- We use the direct header approach to avoid an extra token-exchange
87
- round-trip.
88
- """
89
- if self.access_key and self.secret_key:
90
- self._bearer_token = f"{self.access_key}:{self.secret_key}"
85
+ """No-op: Crusoe uses per-request HMAC-SHA256 signing (see _make_request)."""
86
+ pass
91
87
 
92
88
  def _get_auth_headers(self) -> Dict[str, str]:
93
- if self.access_key and self.secret_key:
94
- return {"Authorization": f"Bearer {self.access_key}:{self.secret_key}"}
89
+ # Auth is injected per-request via _make_request override (HMAC-SHA256 signed).
95
90
  return {}
96
91
 
92
+ # ── Per-request HMAC-SHA256 signing ──────────────────────────────
93
+
94
+ async def _make_request(self, method: str, url: str, **kwargs) -> Dict[str, Any]:
95
+ """Override base _make_request to inject Crusoe HMAC-SHA256 signed headers.
96
+
97
+ Signature scheme (v1.0):
98
+ payload = path + "\n" + canonicalized_query + "\n" + METHOD + "\n" + timestamp + "\n"
99
+ sig = base64url(hex(hmac_sha256(payload, urlsafe_b64decode(secret_key))))
100
+ header = "Bearer 1.0:{access_key_id}:{sig}"
101
+ See: https://docs.crusoecloud.com/reference/api/
102
+ """
103
+ if not self.session or self.session.closed:
104
+ self.session = aiohttp.ClientSession()
105
+ self._owns_session = True
106
+
107
+ headers = kwargs.pop("headers", {})
108
+ headers.update(self._build_signed_headers(method, url))
109
+ headers.setdefault("Content-Type", "application/json")
110
+
111
+ async with self.session.request(method, url, headers=headers, **kwargs) as response:
112
+ if response.status >= 400:
113
+ error_text = await response.text()
114
+ raise Exception(f"HTTP {response.status}: {error_text}")
115
+ return await response.json()
116
+
117
+ def _build_signed_headers(self, method: str, url: str) -> Dict[str, str]:
118
+ """Build X-Crusoe-Timestamp and Authorization headers for a single request."""
119
+ if not self.access_key or not self.secret_key:
120
+ return {}
121
+
122
+ parsed = urlparse(url)
123
+ path = parsed.path
124
+ timestamp = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S+00:00")
125
+
126
+ # Canonicalize query params: sort lexicographically, join with &
127
+ if parsed.query:
128
+ pairs = sorted(
129
+ part for part in parsed.query.split("&") if part
130
+ )
131
+ query_str = "&".join(pairs)
132
+ else:
133
+ query_str = ""
134
+
135
+ payload = f"{path}\n{query_str}\n{method.upper()}\n{timestamp}\n"
136
+
137
+ # Decode URL-safe base64 secret key (add padding if needed)
138
+ sk = self.secret_key
139
+ padding = (4 - len(sk) % 4) % 4
140
+ secret_bytes = base64.urlsafe_b64decode(sk + "=" * padding)
141
+
142
+ # HMAC-SHA256 → hex-encode → URL-safe base64 (no padding)
143
+ mac = hmac.new(secret_bytes, payload.encode("utf-8"), hashlib.sha256)
144
+ hex_digest = mac.hexdigest()
145
+ sig_b64 = base64.urlsafe_b64encode(hex_digest.encode("utf-8")).rstrip(b"=").decode()
146
+
147
+ return {
148
+ "X-Crusoe-Timestamp": timestamp,
149
+ "Authorization": f"Bearer 1.0:{self.access_key}:{sig_b64}",
150
+ }
151
+
97
152
  # ── Capacity / Quotes ─────────────────────────────────────────────
98
153
 
99
154
  async def get_instance_quotes(
@@ -76,11 +76,13 @@ class E2ENetworksProvider(BaseProvider):
76
76
  # ── URL helpers ───────────────────────────────────────────────────
77
77
 
78
78
  def _nodes_url(self, path: str = "") -> str:
79
- """Build a nodes endpoint URL, optionally scoped to project."""
80
- if self.project_id:
81
- return f"{self.API_BASE}/projects/{self.project_id}/nodes{path}"
79
+ """Build a nodes endpoint URL. Project scoping is done via ?project_id= query param."""
82
80
  return f"{self.API_BASE}/nodes{path}"
83
81
 
82
+ def _project_params(self) -> Dict[str, str]:
83
+ """Return project_id as a query-param dict if configured."""
84
+ return {"project_id": self.project_id} if self.project_id else {}
85
+
84
86
  # ── Capacity / Quotes ─────────────────────────────────────────────
85
87
 
86
88
  async def get_instance_quotes(
@@ -240,24 +242,31 @@ class E2ENetworksProvider(BaseProvider):
240
242
  "india_based": True,
241
243
  }
242
244
 
243
- async def _node_action(self, instance_id: str, action: str) -> Dict[str, Any]:
244
- """Send a lifecycle action to a node (start/stop/reboot)."""
245
- body = {"action": action}
245
+ async def _node_action(self, instance_id: str, action_type: str) -> Dict[str, Any]:
246
+ """Send a lifecycle action to a node.
247
+
248
+ Endpoint: PUT /api/v1/nodes/{node_id}/actions/
249
+ Body: {"type": <action_type>}
250
+ Supported types: power_off, power_on, reboot, reinstall, rename, ...
251
+ See: https://docs.e2enetworks.com/api/myaccount/compute/nodes/actions/node-action/
252
+ """
253
+ body = {"type": action_type}
246
254
  data = await self._make_request(
247
- "POST", self._nodes_url(f"/{instance_id}/action/"), json=body
255
+ "PUT", self._nodes_url(f"/{instance_id}/actions/"),
256
+ json=body, params=self._project_params()
248
257
  )
249
258
  return data if isinstance(data, dict) else {}
250
259
 
251
260
  async def stop_instance(self, instance_id: str) -> Dict[str, Any]:
252
261
  if not self.api_key:
253
262
  raise Exception("E2E Networks API key not configured")
254
- await self._node_action(instance_id, "stop")
263
+ await self._node_action(instance_id, "power_off")
255
264
  return {"instance_id": instance_id, "action": "stop", "status": "stopping"}
256
265
 
257
266
  async def start_instance(self, instance_id: str) -> Dict[str, Any]:
258
267
  if not self.api_key:
259
268
  raise Exception("E2E Networks API key not configured")
260
- await self._node_action(instance_id, "start")
269
+ await self._node_action(instance_id, "power_on")
261
270
  return {"instance_id": instance_id, "action": "start", "status": "starting"}
262
271
 
263
272
  async def terminate_instance(self, instance_id: str) -> Dict[str, Any]:
@@ -368,3 +377,4 @@ class E2ENetworksProvider(BaseProvider):
368
377
  raise Exception("E2E Networks API key not configured")
369
378
  await self._node_action(instance_id, "reboot")
370
379
  return {"instance_id": instance_id, "action": "reboot", "status": "rebooting"}
380
+
@@ -9,6 +9,7 @@ CRITICAL FIXES v4.0.0:
9
9
  - Container image pinning strategy
10
10
  """
11
11
 
12
+ import base64
12
13
  import os
13
14
  from typing import Dict, List, Any, Optional
14
15
  from datetime import datetime
@@ -363,7 +364,12 @@ class LambdaLabsProvider(BaseProvider):
363
364
  }
364
365
 
365
366
  def _get_auth_headers(self) -> Dict[str, str]:
366
- return {"Authorization": f"Bearer {self.api_key}"} if self.api_key else {}
367
+ # Lambda Labs uses HTTP Basic auth: api_key as username, empty password
368
+ # Per official docs: curl -u $LAMBDA_API_KEY: https://cloud.lambdalabs.com/api/v1/...
369
+ if self.api_key:
370
+ token = base64.b64encode(f"{self.api_key}:".encode()).decode()
371
+ return {"Authorization": f"Basic {token}"}
372
+ return {}
367
373
 
368
374
  async def _check_capacity_availability(self, instance_type: str) -> Dict[str, Any]:
369
375
  """CRITICAL: Check real-time capacity availability for Lambda instances"""
@@ -271,9 +271,11 @@ class OracleProvider(BaseProvider):
271
271
  }
272
272
 
273
273
  def _get_auth_headers(self) -> Dict[str, str]:
274
- # OCI uses request signing, not simple bearer tokens
275
- # For full implementation, use oci-python-sdk's Signer
276
- # This provides basic API key auth for compatible endpoints
277
- if self.api_key:
278
- return {"Authorization": f"Bearer {self.api_key}"}
274
+ # KNOWN LIMITATION: Oracle Cloud Infrastructure requires RSA HTTP request
275
+ # signing (OCI Signature v1), NOT a simple Bearer token. Live API calls
276
+ # (provision, status, stop, terminate) will return HTTP 401 without a
277
+ # proper RSA-signed request. For production use, replace this provider
278
+ # with one that uses oci-python-sdk's oci.auth.signers.Signer.
279
+ # get_instance_quotes() falls back to static pricing, so quoting works.
280
+ # See: https://docs.oracle.com/en-us/iaas/Content/API/Concepts/usingapi.htm
279
281
  return {}
@@ -29,37 +29,55 @@ class YottaLabsProvider(BaseProvider):
29
29
  DEFAULT_IMAGE = "yottalabsai/pytorch:2.9.0-py3.11-cuda12.8.1-cudnn-devel-ubuntu22.04"
30
30
 
31
31
  # Map Terradev canonical GPU names → Yotta Labs gpuType strings
32
+ # Source: https://docs.yottalabs.ai/api-and-sdk/api-guides (GPU Types Reference)
32
33
  GPU_TYPE_MAP = {
33
- "H100": "NVIDIA_H100_SXM5_80G",
34
- "H100-80GB": "NVIDIA_H100_SXM5_80G",
35
- "H100-SXM": "NVIDIA_H100_SXM5_80G",
34
+ "H100": "NVIDIA_H100_80G",
35
+ "H100-80GB": "NVIDIA_H100_80G",
36
+ "H100-SXM": "NVIDIA_H100_80G",
37
+ "H100-PCIe": "NVIDIA_H100_PCIe_80G",
36
38
  "H200": "NVIDIA_H200_141G",
37
- "A100": "NVIDIA_A100_SXM4_80G",
38
- "A100-80GB": "NVIDIA_A100_SXM4_80G",
39
- "A100-40GB": "NVIDIA_A100_PCIE_40G",
39
+ "B200": "NVIDIA_B200_180G",
40
+ "B300": "NVIDIA_B300_262G",
41
+ "A100": "NVIDIA_A100_80G",
42
+ "A100-80GB": "NVIDIA_A100_80G",
43
+ "A100-PCIe": "NVIDIA_A100_PCIe_80G",
44
+ "A100-40GB": "NVIDIA_A100_PCIe_40G",
40
45
  "RTX4090": "NVIDIA_RTX_4090_24G",
46
+ "RTX5090": "NVIDIA_RTX_5090_32G",
41
47
  "RTX3090": "NVIDIA_RTX_3090_24G",
42
- "RTX3080": "NVIDIA_RTX_3080_10G",
43
48
  "L40S": "NVIDIA_L40S_48G",
44
49
  "L40": "NVIDIA_L40_48G",
45
50
  "A6000": "NVIDIA_RTX_A6000_48G",
51
+ "RTX6000Ada": "NVIDIA_RTX_6000_Ada_48G",
52
+ "RTXPro6000": "NVIDIA_RTX_PRO_6000_96G",
53
+ "MI300X": "AMD_MI300X_192G",
46
54
  "T4": "NVIDIA_T4_16G",
47
55
  "V100": "NVIDIA_V100_16G",
48
56
  }
49
57
 
50
58
  # Reference pricing (USD/hr per GPU) — live API takes precedence
59
+ # Keys must exactly match the gpuType strings from GPU_TYPE_MAP / Yotta API reference
51
60
  GPU_PRICING = {
52
- "NVIDIA_H100_SXM5_80G": {"price": 2.99, "mem_gb": 80, "vcpus": 16, "ram_gb": 64},
61
+ "NVIDIA_H100_80G": {"price": 2.99, "mem_gb": 80, "vcpus": 16, "ram_gb": 64},
62
+ "NVIDIA_H100_PCIe_80G": {"price": 2.49, "mem_gb": 80, "vcpus": 16, "ram_gb": 64},
53
63
  "NVIDIA_H200_141G": {"price": 4.49, "mem_gb": 141, "vcpus": 16, "ram_gb": 64},
54
- "NVIDIA_A100_SXM4_80G": {"price": 1.89, "mem_gb": 80, "vcpus": 16, "ram_gb": 64},
55
- "NVIDIA_A100_PCIE_40G": {"price": 1.29, "mem_gb": 40, "vcpus": 12, "ram_gb": 48},
56
- "NVIDIA_RTX_4090_24G": {"price": 0.69, "mem_gb": 24, "vcpus": 8, "ram_gb": 32},
57
- "NVIDIA_RTX_3090_24G": {"price": 0.29, "mem_gb": 24, "vcpus": 8, "ram_gb": 32},
58
- "NVIDIA_L40S_48G": {"price": 1.19, "mem_gb": 48, "vcpus": 16, "ram_gb": 64},
59
- "NVIDIA_L40_48G": {"price": 0.99, "mem_gb": 48, "vcpus": 12, "ram_gb": 48},
60
- "NVIDIA_RTX_A6000_48G": {"price": 0.79, "mem_gb": 48, "vcpus": 12, "ram_gb": 48},
61
- "NVIDIA_T4_16G": {"price": 0.35, "mem_gb": 16, "vcpus": 4, "ram_gb": 16},
62
- "NVIDIA_V100_16G": {"price": 0.55, "mem_gb": 16, "vcpus": 8, "ram_gb": 32},
64
+ "NVIDIA_B200_180G": {"price": 6.99, "mem_gb": 180, "vcpus": 24, "ram_gb": 128},
65
+ "NVIDIA_B300_262G": {"price": 8.99, "mem_gb": 262, "vcpus": 32, "ram_gb": 192},
66
+ "NVIDIA_A100_80G": {"price": 1.89, "mem_gb": 80, "vcpus": 16, "ram_gb": 64},
67
+ "NVIDIA_A100_PCIe_80G": {"price": 1.79, "mem_gb": 80, "vcpus": 16, "ram_gb": 64},
68
+ "NVIDIA_A100_PCIe_40G": {"price": 1.29, "mem_gb": 40, "vcpus": 12, "ram_gb": 48},
69
+ "NVIDIA_A100_40G": {"price": 1.29, "mem_gb": 40, "vcpus": 12, "ram_gb": 48},
70
+ "NVIDIA_RTX_4090_24G": {"price": 0.69, "mem_gb": 24, "vcpus": 8, "ram_gb": 32},
71
+ "NVIDIA_RTX_5090_32G": {"price": 0.99, "mem_gb": 32, "vcpus": 8, "ram_gb": 32},
72
+ "NVIDIA_RTX_3090_24G": {"price": 0.29, "mem_gb": 24, "vcpus": 8, "ram_gb": 32},
73
+ "NVIDIA_L40S_48G": {"price": 1.19, "mem_gb": 48, "vcpus": 16, "ram_gb": 64},
74
+ "NVIDIA_L40_48G": {"price": 0.99, "mem_gb": 48, "vcpus": 12, "ram_gb": 48},
75
+ "NVIDIA_RTX_A6000_48G": {"price": 0.79, "mem_gb": 48, "vcpus": 12, "ram_gb": 48},
76
+ "NVIDIA_RTX_6000_Ada_48G": {"price": 0.89, "mem_gb": 48, "vcpus": 12, "ram_gb": 48},
77
+ "NVIDIA_RTX_PRO_6000_96G": {"price": 1.49, "mem_gb": 96, "vcpus": 16, "ram_gb": 64},
78
+ "AMD_MI300X_192G": {"price": 3.49, "mem_gb": 192, "vcpus": 24, "ram_gb": 128},
79
+ "NVIDIA_T4_16G": {"price": 0.35, "mem_gb": 16, "vcpus": 4, "ram_gb": 16},
80
+ "NVIDIA_V100_16G": {"price": 0.55, "mem_gb": 16, "vcpus": 8, "ram_gb": 32},
63
81
  }
64
82
 
65
83
  def __init__(self, credentials: Dict[str, str]):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: terradev-cli
3
- Version: 5.3.1
3
+ Version: 5.3.2
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.1
96
+ # Terradev CLI v5.3.2
97
97
 
98
98
  **An imperative command-line-interface for AI workload orchestration.**
99
99
 
File without changes
File without changes
File without changes
File without changes