terradev-cli 5.5.2__tar.gz → 5.5.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (514) hide show
  1. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/Deployment Package/BNF_GRAMMAR.md +4 -1
  2. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/PKG-INFO +1 -1
  3. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/pyproject.toml +1 -1
  4. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/cli.py +163 -11
  5. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/hf_smart_templates.py +37 -22
  6. terradev_cli-5.5.4/terradev_cli/core/monitoring.py +31 -0
  7. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/mcp/server.py +2 -1
  8. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/ml_services/kubernetes_enhanced.py +3 -0
  9. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/ml_services/langgraph_service.py +38 -1
  10. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/optimization/auto_optimizer.py +1 -1
  11. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/providers/alibaba_provider.py +1 -1
  12. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/providers/aws_provider.py +22 -1
  13. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/providers/azure_provider.py +1 -1
  14. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/providers/base_provider.py +19 -129
  15. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/providers/baseten_provider.py +1 -1
  16. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/providers/coreweave_provider.py +1 -1
  17. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/providers/crusoe_provider.py +1 -1
  18. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/providers/digitalocean_provider.py +1 -1
  19. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/providers/e2e_networks_provider.py +1 -1
  20. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/providers/fluidstack_provider.py +1 -1
  21. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/providers/gcp_provider.py +1 -1
  22. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/providers/hetzner_provider.py +1 -1
  23. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/providers/huggingface_provider.py +1 -1
  24. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/providers/hyperstack_provider.py +1 -1
  25. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/providers/inferx_provider.py +1 -1
  26. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/providers/lambda_labs_provider.py +8 -3
  27. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/providers/oracle_provider.py +1 -1
  28. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/providers/ovhcloud_provider.py +1 -1
  29. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/providers/runpod_provider.py +146 -82
  30. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/providers/siliconflow_provider.py +1 -1
  31. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/providers/tensordock_provider.py +1 -1
  32. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/providers/vastai_provider.py +1 -1
  33. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/providers/yottalabs_provider.py +1 -1
  34. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli.egg-info/PKG-INFO +1 -1
  35. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli.egg-info/SOURCES.txt +1 -0
  36. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/.env.example +0 -0
  37. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/.github/workflows/action.yml +0 -0
  38. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/.github/workflows/ci.yml +0 -0
  39. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/.github/workflows/release.yml +0 -0
  40. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/.github/workflows/static.yml +0 -0
  41. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/.terradev/custom_providers.example.yaml +0 -0
  42. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/Deployment Package/LIFECYCLES.md +0 -0
  43. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/Deployment Package/architecture.md +0 -0
  44. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/Deployment Package/overview.md +0 -0
  45. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/Deployment Package/security.md +0 -0
  46. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/Deployment Package/troubleshooting.md +0 -0
  47. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/Dockerfile +0 -0
  48. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/Dockerfile.test +0 -0
  49. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/LICENSE +0 -0
  50. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/MANIFEST.in +0 -0
  51. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/README.md +0 -0
  52. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/agentic-template/helm/values-agentic.yaml +0 -0
  53. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/agentic-template/k8s/fleet-manifests.yaml +0 -0
  54. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/glm-5/README.md +0 -0
  55. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/glm-5/helm/values-glm5.yaml +0 -0
  56. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/glm-5/k8s/hpa.yaml +0 -0
  57. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/glm-5/k8s/model-cache-pvc.yaml +0 -0
  58. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/glm-5/k8s/namespace.yaml +0 -0
  59. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/glm-5/k8s/pdb.yaml +0 -0
  60. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/glm-5/k8s/service.yaml +0 -0
  61. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/glm-5/k8s/sglang-deployment.yaml +0 -0
  62. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/glm-5/k8s/vllm-deployment.yaml +0 -0
  63. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/glm-5/task.yaml +0 -0
  64. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/glm-5/terraform/main.tf +0 -0
  65. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/glm-5/terraform/outputs.tf +0 -0
  66. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/glm-5/terraform/variables.tf +0 -0
  67. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/llmd-template/README.md +0 -0
  68. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/llmd-template/helm/values-llmd.yaml +0 -0
  69. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/llmd-template/k8s/gateway.yaml +0 -0
  70. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/llmd-template/k8s/leaderworkerset.yaml +0 -0
  71. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/llmd-template/k8s/llminferenceservice.yaml +0 -0
  72. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/llmd-template/task.yaml +0 -0
  73. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/lora-template/helm/Chart.yaml +0 -0
  74. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/lora-template/helm/templates/_helpers.tpl +0 -0
  75. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/lora-template/helm/templates/deployment.yaml +0 -0
  76. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/lora-template/helm/templates/pvc-adapter.yaml +0 -0
  77. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/lora-template/helm/templates/pvc-registry.yaml +0 -0
  78. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/lora-template/helm/templates/service.yaml +0 -0
  79. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/lora-template/helm/templates/serviceaccount.yaml +0 -0
  80. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/lora-template/helm/values-lora.yaml +0 -0
  81. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/lora-template/k8s/adapter-pvc.yaml +0 -0
  82. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/lora-template/k8s/deployment.yaml +0 -0
  83. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/lora-template/k8s/namespace.yaml +0 -0
  84. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/lora-template/k8s/registry-pvc.yaml +0 -0
  85. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/lora-template/k8s/service.yaml +0 -0
  86. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/lora-template/k8s/serviceaccount.yaml +0 -0
  87. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/lorax-template/helm/Chart.yaml +0 -0
  88. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/lorax-template/helm/templates/_helpers.tpl +0 -0
  89. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/lorax-template/helm/templates/deployment.yaml +0 -0
  90. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/lorax-template/helm/templates/pvc.yaml +0 -0
  91. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/lorax-template/helm/templates/service.yaml +0 -0
  92. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/lorax-template/helm/templates/serviceaccount.yaml +0 -0
  93. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/lorax-template/helm/values-lorax.yaml +0 -0
  94. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/moe-template/README.md +0 -0
  95. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/moe-template/helm/values-moe.yaml +0 -0
  96. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/moe-template/k8s/deployment.yaml +0 -0
  97. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/moe-template/k8s/hpa.yaml +0 -0
  98. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/moe-template/k8s/model-cache-pvc.yaml +0 -0
  99. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/moe-template/k8s/namespace.yaml +0 -0
  100. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/moe-template/k8s/pdb.yaml +0 -0
  101. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/moe-template/k8s/service.yaml +0 -0
  102. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/moe-template/task.yaml +0 -0
  103. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/moe-template/terraform/main.tf +0 -0
  104. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/moe-template/terraform/outputs.tf +0 -0
  105. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/moe-template/terraform/variables.tf +0 -0
  106. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/rag-template/README.md +0 -0
  107. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/rag-template/helm/values-rag.yaml +0 -0
  108. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/rag-template/k8s/deployment.yaml +0 -0
  109. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/clusters/rag-template/terraform/main.tf +0 -0
  110. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/demo/RECORDING_GUIDE.md +0 -0
  111. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/demo/generate_gif.py +0 -0
  112. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/demo/terradev-demo.gif +0 -0
  113. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/docs/ADVANCED_FINANCIAL_INNOVATIONS.md +0 -0
  114. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/docs/API_DOCUMENTATION.md +0 -0
  115. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/docs/BingSiteAuth.xml +0 -0
  116. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/docs/FINOPS_ATTRIBUTION_SYSTEM.md +0 -0
  117. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/docs/LORA_COMMAND_LIFECYCLE.md +0 -0
  118. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/docs/USER_GUIDE.md +0 -0
  119. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/docs/VLLM_AUTO_OPTIMIZATION_GUIDE.md +0 -0
  120. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/docs/VLLM_OPTIMIZATION_GUIDE.md +0 -0
  121. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/docs/architecture.md +0 -0
  122. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/docs/index.html +0 -0
  123. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/docs/overview.md +0 -0
  124. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/docs/robots.txt +0 -0
  125. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/docs/sitemap.xml +0 -0
  126. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/docs/test_spot_provision.md +0 -0
  127. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/examples/aws_ssm_starter.py +0 -0
  128. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/examples/config.example.json +0 -0
  129. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/examples/demo_k8s_config.yaml +0 -0
  130. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/examples/direct_aws_starter.py +0 -0
  131. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/examples/ec2_user_data_starter.py +0 -0
  132. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/examples/example-pipeline.yaml +0 -0
  133. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/examples/kubernetes_training_deployment.yaml +0 -0
  134. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/examples/simple_ssm_starter.py +0 -0
  135. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/examples/ssh_server_starter.py +0 -0
  136. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/examples/start_aws_servers.py +0 -0
  137. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/helm/terradev/Chart.yaml +0 -0
  138. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/helm/terradev/templates/_helpers.tpl +0 -0
  139. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/helm/terradev/templates/deployment.yaml +0 -0
  140. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/helm/terradev/values.yaml +0 -0
  141. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/infrastructure/bucket-policy.json +0 -0
  142. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/infrastructure/grafana_training_dashboard.json +0 -0
  143. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/infrastructure/kubernetes/microservices.yaml +0 -0
  144. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/infrastructure/terraform/main.tf +0 -0
  145. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/infrastructure/terraform/parallelism.tf +0 -0
  146. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/integrations/cli-tool.tf +0 -0
  147. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/integrations/cloud-management-widgets.tf +0 -0
  148. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/integrations/cloud-provider-apis.py +0 -0
  149. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/integrations/critical-widgets.tf +0 -0
  150. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/integrations/devops-cicd-widgets.tf +0 -0
  151. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/integrations/devops-essential-tools.tf +0 -0
  152. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/integrations/docker-integration.tf +0 -0
  153. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/integrations/kubernetes-operator.tf +0 -0
  154. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/integrations/mlflow-integration.tf +0 -0
  155. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/marketing/bare-metal-latitude-post.md +0 -0
  156. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/modules/datadog/README.md +0 -0
  157. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/modules/datadog/dashboard.tf +0 -0
  158. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/modules/datadog/monitors.tf +0 -0
  159. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/modules/datadog/outputs.tf +0 -0
  160. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/modules/datadog/provider.tf +0 -0
  161. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/modules/datadog/variables.tf +0 -0
  162. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/modules/datadog/versions.tf +0 -0
  163. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/modules/prometheus_training_config.yml +0 -0
  164. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/Cargo.toml +0 -0
  165. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/INTEGRATION_GUIDE.md +0 -0
  166. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/PERFORMANCE_OPTIMIZATIONS.md +0 -0
  167. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/README.md +0 -0
  168. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-artifact-verification/Cargo.toml +0 -0
  169. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-artifact-verification/src/lib.rs +0 -0
  170. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-artifact-verification/src/types.rs +0 -0
  171. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-artifact-verification/src/verifier.rs +0 -0
  172. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-authentication/Cargo.toml +0 -0
  173. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-authentication/src/encoding.rs +0 -0
  174. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-authentication/src/hmac.rs +0 -0
  175. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-authentication/src/lib.rs +0 -0
  176. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-authentication/src/types.rs +0 -0
  177. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-cache-eviction/Cargo.toml +0 -0
  178. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-cache-eviction/src/cache.rs +0 -0
  179. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-cache-eviction/src/lib.rs +0 -0
  180. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-cache-eviction/src/types.rs +0 -0
  181. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-command-executor/Cargo.toml +0 -0
  182. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-command-executor/src/lib.rs +0 -0
  183. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-config-validator/Cargo.toml +0 -0
  184. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-config-validator/src/lib.rs +0 -0
  185. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-config-validator/src/types.rs +0 -0
  186. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-config-validator/src/validator.rs +0 -0
  187. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-connection-pool/Cargo.toml +0 -0
  188. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-connection-pool/src/lib.rs +0 -0
  189. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-connection-pool/src/pool.rs +0 -0
  190. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-connection-pool/src/types.rs +0 -0
  191. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-cost-calculator/Cargo.toml +0 -0
  192. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-cost-calculator/src/calculator.rs +0 -0
  193. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-cost-calculator/src/lib.rs +0 -0
  194. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-cost-calculator/src/types.rs +0 -0
  195. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-cost-scaler/Cargo.toml +0 -0
  196. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-cost-scaler/src/lib.rs +0 -0
  197. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-credential-vault/Cargo.toml +0 -0
  198. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-credential-vault/src/lib.rs +0 -0
  199. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-credential-vault/src/types.rs +0 -0
  200. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-credential-vault/src/vault.rs +0 -0
  201. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-dag-executor/Cargo.toml +0 -0
  202. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-dag-executor/src/lib.rs +0 -0
  203. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-distributed-lock/Cargo.toml +0 -0
  204. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-distributed-lock/src/lib.rs +0 -0
  205. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-distributed-lock/src/lock.rs +0 -0
  206. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-distributed-lock/src/types.rs +0 -0
  207. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-egress-optimizer/Cargo.toml +0 -0
  208. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-egress-optimizer/src/graph.rs +0 -0
  209. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-egress-optimizer/src/lib.rs +0 -0
  210. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-egress-optimizer/src/types.rs +0 -0
  211. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-event-bus/Cargo.toml +0 -0
  212. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-event-bus/src/bus.rs +0 -0
  213. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-event-bus/src/lib.rs +0 -0
  214. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-event-bus/src/types.rs +0 -0
  215. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-governance/Cargo.toml +0 -0
  216. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-governance/src/lib.rs +0 -0
  217. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-gpu-discovery/Cargo.toml +0 -0
  218. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-gpu-discovery/src/lib.rs +0 -0
  219. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-gpu-topology/Cargo.toml +0 -0
  220. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-gpu-topology/src/lib.rs +0 -0
  221. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-gpu-topology/src/topology.rs +0 -0
  222. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-gpu-topology/src/types.rs +0 -0
  223. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-helm-generator/Cargo.toml +0 -0
  224. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-helm-generator/src/lib.rs +0 -0
  225. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-mcp-codec/Cargo.toml +0 -0
  226. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-mcp-codec/src/lib.rs +0 -0
  227. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-mcp-optimizer/Cargo.toml +0 -0
  228. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-mcp-optimizer/src/lib.rs +0 -0
  229. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-price-intelligence/Cargo.toml +0 -0
  230. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-price-intelligence/src/lib.rs +0 -0
  231. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-quota-manager/Cargo.toml +0 -0
  232. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-quota-manager/src/lib.rs +0 -0
  233. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-quota-manager/src/manager.rs +0 -0
  234. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-quota-manager/src/types.rs +0 -0
  235. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-resource-pool/Cargo.toml +0 -0
  236. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-resource-pool/src/lib.rs +0 -0
  237. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-resource-pool/src/pool.rs +0 -0
  238. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-resource-pool/src/types.rs +0 -0
  239. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-result-compressor/Cargo.toml +0 -0
  240. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-result-compressor/src/lib.rs +0 -0
  241. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-semantic-router/Cargo.toml +0 -0
  242. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-semantic-router/src/lib.rs +0 -0
  243. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-snapshot-manager/Cargo.toml +0 -0
  244. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-snapshot-manager/src/lib.rs +0 -0
  245. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-snapshot-manager/src/snapshot.rs +0 -0
  246. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-snapshot-manager/src/types.rs +0 -0
  247. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-state-machine/Cargo.toml +0 -0
  248. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-state-machine/src/lib.rs +0 -0
  249. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-state-machine/src/state.rs +0 -0
  250. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-state-machine/src/types.rs +0 -0
  251. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-telemetry/Cargo.toml +0 -0
  252. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-telemetry/src/lib.rs +0 -0
  253. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-telemetry/src/pipeline.rs +0 -0
  254. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-telemetry/src/types.rs +0 -0
  255. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-tool-registry/Cargo.toml +0 -0
  256. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-tool-registry/src/lib.rs +0 -0
  257. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-vram-estimator/Cargo.toml +0 -0
  258. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-vram-estimator/src/estimator.rs +0 -0
  259. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-vram-estimator/src/lib.rs +0 -0
  260. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-vram-estimator/src/types.rs +0 -0
  261. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-warm-pool/Cargo.toml +0 -0
  262. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/rust/terradev-warm-pool/src/lib.rs +0 -0
  263. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/scripts/action.py +0 -0
  264. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/scripts/gpu-check.sh +0 -0
  265. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/setup/Lambda Cloud API spec 1.8.3.json +0 -0
  266. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/setup/docker-compose.yml +0 -0
  267. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/setup/nginx.conf +0 -0
  268. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/setup/setup.sh +0 -0
  269. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/setup.cfg +0 -0
  270. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/CHANGELOG.md +0 -0
  271. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/COMPLETE_COMMAND_REFERENCE.md +0 -0
  272. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/COMPLETE_INTEGRATION_GUIDE.md +0 -0
  273. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/IMPLEMENTATION_SUMMARY.md +0 -0
  274. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/MAKING_SPOT_WORK_FOR_STATEFUL_WORKLOADS.md +0 -0
  275. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/README.md +0 -0
  276. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/SGLANG_COMMAND_GUIDE.md +0 -0
  277. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/TERRADEV_STACK_CHART.md +0 -0
  278. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/__init__.py +0 -0
  279. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/__main__.py +0 -0
  280. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/cli_hf_spaces.py +0 -0
  281. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/cli_karpenter.py +0 -0
  282. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/__init__.py +0 -0
  283. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/agentic_provisioner.py +0 -0
  284. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/agentic_topology.py +0 -0
  285. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/async_config.py +0 -0
  286. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/auth.py +0 -0
  287. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/auto_lineage.py +0 -0
  288. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/cache_manager.py +0 -0
  289. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/checkpoint_manager.py +0 -0
  290. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/command_executor.py +0 -0
  291. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/config.py +0 -0
  292. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/config_validator.py +0 -0
  293. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/cost_scaler.py +0 -0
  294. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/cost_tracker.py +0 -0
  295. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/credential_vault.py +0 -0
  296. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/cuda_graph_integrator.py +0 -0
  297. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/dag_executor.py +0 -0
  298. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/data_governance.py +0 -0
  299. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/dataset_stager.py +0 -0
  300. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/deployment_router.py +0 -0
  301. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/distributed_lock.py +0 -0
  302. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/drift_detector.py +0 -0
  303. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/egress_cost_monitor.py +0 -0
  304. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/egress_optimizer.py +0 -0
  305. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/evaluation_orchestrator.py +0 -0
  306. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/event_system.py +0 -0
  307. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/gitops_manager.py +0 -0
  308. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/gpu_discovery.py +0 -0
  309. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/gpu_topology.py +0 -0
  310. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/helm_generator.py +0 -0
  311. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/hf_cli_integration.py +0 -0
  312. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/hf_spaces.py +0 -0
  313. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/inference_router.py +0 -0
  314. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/inference_spot_manager.py +0 -0
  315. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/job_state_manager.py +0 -0
  316. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/kv_cache_checkpoint_manager.py +0 -0
  317. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/kv_cache_checkpoint_tests.py +0 -0
  318. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/kv_sharing.py +0 -0
  319. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/lora_consistency.py +0 -0
  320. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/lora_cost_attribution.py +0 -0
  321. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/lora_versioning.py +0 -0
  322. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/manifest_cache.py +0 -0
  323. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/manifest_example.json +0 -0
  324. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/mig_manager.py +0 -0
  325. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/migration_orchestrator.py +0 -0
  326. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/mla_vram_estimator.py +0 -0
  327. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/mla_vram_tests.py +0 -0
  328. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/model_orchestrator.py +0 -0
  329. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/oidc_provider.py +0 -0
  330. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/optimization_config.py +0 -0
  331. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/parallel_provisioner.py +0 -0
  332. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/pd_transport.py +0 -0
  333. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/pipeline_schema.py +0 -0
  334. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/preflight_validator.py +0 -0
  335. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/price_discovery.py +0 -0
  336. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/price_intelligence.py +0 -0
  337. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/public_ip_billing_tracker.py +0 -0
  338. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/quick_start.py +0 -0
  339. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/quota_manager.py +0 -0
  340. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/rate_limiter.py +0 -0
  341. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/rust_telemetry.py +0 -0
  342. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/semantic_router.py +0 -0
  343. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/semantic_signals/__init__.py +0 -0
  344. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/semantic_signals/base_signal.py +0 -0
  345. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/semantic_signals/complexity_signal.py +0 -0
  346. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/semantic_signals/domain_signal.py +0 -0
  347. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/semantic_signals/keyword_signal.py +0 -0
  348. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/semantic_signals/language_signal.py +0 -0
  349. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/semantic_signals/modality_signal.py +0 -0
  350. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/semantic_signals/orchestrator.py +0 -0
  351. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/semantic_signals/routing_policy.yaml +0 -0
  352. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/semantic_signals/safety_signal.py +0 -0
  353. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/session_manager.py +0 -0
  354. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/ssh_key_manager.py +0 -0
  355. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/telemetry.py +0 -0
  356. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/terradev_engine.py +0 -0
  357. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/trace_viewer.py +0 -0
  358. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/training_monitor.py +0 -0
  359. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/training_orchestrator.py +0 -0
  360. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/user_manager.py +0 -0
  361. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/warm_pool_manager.py +0 -0
  362. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/weight_streaming_benchmarks.py +0 -0
  363. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/core/weight_streaming_manager.py +0 -0
  364. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/cost_optimizer.py +0 -0
  365. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/credential_prompt.py +0 -0
  366. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/demo.py +0 -0
  367. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/entry_point.py +0 -0
  368. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/integrations/Terradev LOGO BLACK.png +0 -0
  369. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/integrations/Terradev LOGO WHITEW.png +0 -0
  370. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/integrations/__init__.py +0 -0
  371. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/integrations/databricks_integration.py +0 -0
  372. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/integrations/datadog_integration.py +0 -0
  373. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/integrations/helicone_integration.py +0 -0
  374. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/integrations/prometheus_integration.py +0 -0
  375. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/integrations/wandb_integration.py +0 -0
  376. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/k8s/terraform_wrapper.py +0 -0
  377. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/kubernetes/inferx-cost-optimized.yaml +0 -0
  378. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/kubernetes/inferx-infrastructure.yaml +0 -0
  379. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/kubernetes/inferx-models.yaml +0 -0
  380. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/kubernetes/inferx-platform.yaml +0 -0
  381. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/kubernetes/inferx_setup.py +0 -0
  382. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/mcp/__init__.py +0 -0
  383. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/ml_services/__init__.py +0 -0
  384. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/ml_services/agentic_serving.py +0 -0
  385. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/ml_services/drift_retrain_service.py +0 -0
  386. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/ml_services/dvc_service.py +0 -0
  387. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/ml_services/guardrails_service.py +0 -0
  388. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/ml_services/huggingface_service.py +0 -0
  389. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/ml_services/kserve_service.py +0 -0
  390. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/ml_services/kubernetes_service.py +0 -0
  391. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/ml_services/langchain_service.py +0 -0
  392. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/ml_services/langfuse_service.py +0 -0
  393. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/ml_services/lmcache_service.py +0 -0
  394. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/ml_services/lora_registry.py +0 -0
  395. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/ml_services/lorax_service.py +0 -0
  396. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/ml_services/mlflow_service.py +0 -0
  397. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/ml_services/model_router.py +0 -0
  398. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/ml_services/ollama_service.py +0 -0
  399. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/ml_services/peft_import_service.py +0 -0
  400. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/ml_services/phoenix_service.py +0 -0
  401. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/ml_services/qdrant_service.py +0 -0
  402. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/ml_services/ray_enhanced.py +0 -0
  403. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/ml_services/ray_service.py +0 -0
  404. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/ml_services/sglang_service.py +0 -0
  405. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/ml_services/vllm_service.py +0 -0
  406. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/ml_services/wandb_enhanced.py +0 -0
  407. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/optimization/__init__.py +0 -0
  408. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/optimization/cuco_optimizer.py +0 -0
  409. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/providers/LATITUDE_PROVIDER.md +0 -0
  410. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/providers/__init__.py +0 -0
  411. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/providers/demo_mode.py +0 -0
  412. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/providers/gpu_catalog.py +0 -0
  413. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/providers/latitude_provider.py +0 -0
  414. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/providers/provider_factory.py +0 -0
  415. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/providers/provider_profiles.py +0 -0
  416. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/providers/real_pricing.py +0 -0
  417. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/providers/registry.py +0 -0
  418. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/providers/types.py +0 -0
  419. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/requirements.txt +0 -0
  420. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/requirements_minimal.txt +0 -0
  421. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/terraform/main.tf +0 -0
  422. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/terraform/modules/__init__.py +0 -0
  423. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/terraform/modules/gpu-node-aws/bootstrap.sh +0 -0
  424. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/terraform/modules/gpu-node-aws/main.tf +0 -0
  425. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/terraform/modules/gpu-node-aws/outputs.tf +0 -0
  426. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/terraform/modules/gpu-node-aws/variables.tf +0 -0
  427. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/terraform/modules/gpu-node-aws/versions.tf +0 -0
  428. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/terraform/modules/gpu-node-hyperstack/bootstrap.sh +0 -0
  429. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/terraform/modules/gpu-node-hyperstack/main.tf +0 -0
  430. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/terraform/modules/gpu-node-hyperstack/outputs.tf +0 -0
  431. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/terraform/modules/gpu-node-hyperstack/variables.tf +0 -0
  432. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/terraform/modules/gpu-node-hyperstack/versions.tf +0 -0
  433. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/terraform/modules/gpu-node-lambda/bootstrap.sh +0 -0
  434. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/terraform/modules/gpu-node-lambda/main.tf +0 -0
  435. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/terraform/modules/gpu-node-lambda/outputs.tf +0 -0
  436. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/terraform/modules/gpu-node-lambda/variables.tf +0 -0
  437. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/terraform/modules/gpu-node-lambda/versions.tf +0 -0
  438. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/terraform/modules/gpu-node-vastai/bootstrap.sh +0 -0
  439. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/terraform/modules/gpu-node-vastai/main.tf +0 -0
  440. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/terraform/modules/gpu-node-vastai/outputs.tf +0 -0
  441. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/terraform/modules/gpu-node-vastai/variables.tf +0 -0
  442. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/terraform/modules/gpu-node-vastai/versions.tf +0 -0
  443. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/terraform/modules/k8s-control-plane/join-script.tpl +0 -0
  444. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/terraform/modules/k8s-control-plane/kubeconfig.tpl +0 -0
  445. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/terraform/modules/k8s-control-plane/main.tf +0 -0
  446. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/terraform/modules/k8s-control-plane/outputs.tf +0 -0
  447. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/terraform/modules/k8s-control-plane/variables.tf +0 -0
  448. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/terraform/modules/k8s-control-plane/versions.tf +0 -0
  449. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/terraform/modules/networking/main.tf +0 -0
  450. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/terraform/modules/networking/outputs.tf +0 -0
  451. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/terraform/modules/networking/variables.tf +0 -0
  452. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/terraform/modules/networking/versions.tf +0 -0
  453. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/terraform/outputs.tf +0 -0
  454. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/terraform/price-optimizer/optimal-allocation.py +0 -0
  455. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/terraform/providers.tf +0 -0
  456. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/terraform/variables.tf +0 -0
  457. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/test_summary.py +0 -0
  458. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/utils/__init__.py +0 -0
  459. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli/utils/formatters.py +0 -0
  460. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli.egg-info/dependency_links.txt +0 -0
  461. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli.egg-info/entry_points.txt +0 -0
  462. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli.egg-info/requires.txt +0 -0
  463. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terradev_cli.egg-info/top_level.txt +0 -0
  464. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terraform.tfvars.example +0 -0
  465. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terraform_optimization/backend.tf +0 -0
  466. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terraform_optimization/error_handling.py +0 -0
  467. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terraform_optimization/parallel_provisioning.tf +0 -0
  468. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terraform_optimization/storage_choice_matrix.py +0 -0
  469. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terraform_optimization/test_error_handler.py +0 -0
  470. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terraform_optimization/versions.tf +0 -0
  471. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terraform_transparency/audit_demo/trail_3caed73ad5bf.json +0 -0
  472. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terraform_transparency/audit_trail.py +0 -0
  473. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terraform_transparency/audit_trails.json +0 -0
  474. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terraform_transparency/decision_engine.py +0 -0
  475. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terraform_transparency/decision_logs.json +0 -0
  476. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terraform_transparency/operations.json +0 -0
  477. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terraform_transparency/terraform_manager.py +0 -0
  478. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terraform_transparency/terraform_plans.json +0 -0
  479. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terraform_transparency/transparency_demo.py +0 -0
  480. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/terraform_transparency/transparency_report.json +0 -0
  481. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/tests/CREDENTIAL_STRATEGY.md +0 -0
  482. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/tests/INTEGRATION_STRATEGY.md +0 -0
  483. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/tests/Makefile +0 -0
  484. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/tests/ci_pipeline.py +0 -0
  485. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/tests/conftest.py +0 -0
  486. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/tests/root_tests/test_cli_ux_battle.py +0 -0
  487. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/tests/root_tests/test_cli_ux_battle_fixed.py +0 -0
  488. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/tests/root_tests/test_cli_ux_final.py +0 -0
  489. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/tests/root_tests/test_final_integration.py +0 -0
  490. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/tests/root_tests/test_integrated_optimization.py +0 -0
  491. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/tests/root_tests/test_p10_production_failover.py +0 -0
  492. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/tests/root_tests/test_sso_phase1.py +0 -0
  493. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/tests/root_tests/test_vllm_optimization.py +0 -0
  494. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/tests/simple_test.py +0 -0
  495. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/tests/test_ai_integrations.py +0 -0
  496. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/tests/test_checkpoint_manager.py +0 -0
  497. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/tests/test_cli_smoke.py +0 -0
  498. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/tests/test_dag_executor.py +0 -0
  499. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/tests/test_flashoptim.py +0 -0
  500. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/tests/test_integration.py +0 -0
  501. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/tests/test_job_state_manager.py +0 -0
  502. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/tests/test_k8s_regression.py +0 -0
  503. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/tests/test_latitude_provider.py +0 -0
  504. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/tests/test_major_providers.py +0 -0
  505. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/tests/test_mcp_handlers.py +0 -0
  506. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/tests/test_new_providers.py +0 -0
  507. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/tests/test_provider_conformance.py +0 -0
  508. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/tests/test_providers.py +0 -0
  509. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/tests/test_semantic_router.py +0 -0
  510. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/tests/test_sglang_optimization.py +0 -0
  511. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/tests/test_ssh_key_manager.py +0 -0
  512. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/tests/test_training_monitor.py +0 -0
  513. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/tests/test_training_orchestrator.py +0 -0
  514. {terradev_cli-5.5.2 → terradev_cli-5.5.4}/tests/test_vllm_features.py +0 -0
@@ -123,9 +123,12 @@
123
123
  [--spot-strategy <spot-strategy>]
124
124
  [--backend <inference-backend>]
125
125
  [--prefer-local]
126
+ [--select <selection>]
127
+ [--auto]
126
128
 
127
129
  <provision-type> ::= inference | training | jupyter | custom
128
- <spot-strategy> ::= cheapest | most-available | balanced
130
+ <spot-strategy> ::= aggressive | cheapest | balanced | conservative | safe
131
+ <selection> ::= <integer> | "cheapest" | "cheapest-spot" | "cheapest-secure"
129
132
 
130
133
  <instance-command> ::= instance
131
134
  -i <string>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: terradev-cli
3
- Version: 5.5.2
3
+ Version: 5.5.4
4
4
  Summary: An imperative command-line-interface for AI workload orchestration.
5
5
  Author-email: Terradev Team <team@terradev.com>
6
6
  Maintainer-email: Terradev Team <team@terradev.com>
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "terradev-cli"
7
- version = "5.5.2"
7
+ version = "5.5.4"
8
8
  description = "An imperative command-line-interface for AI workload orchestration."
9
9
  readme = "README.md"
10
10
  license = {text = "Apache-2.0"}
@@ -507,6 +507,7 @@ class TerradevAPI:
507
507
  "availability": "spot" if q.get("spot") else "on-demand",
508
508
  "gpu_count": q.get("gpu_count", 1),
509
509
  "instance_type": q.get("instance_type", "N/A"),
510
+ "memory_gb": q.get("memory_gb", 0),
510
511
  }
511
512
  )
512
513
  return quotes
@@ -2338,9 +2339,9 @@ profiles:
2338
2339
  )
2339
2340
  @click.option(
2340
2341
  "--spot-strategy",
2341
- type=click.Choice(["aggressive", "balanced", "conservative"]),
2342
+ type=click.Choice(["aggressive", "cheapest", "balanced", "conservative", "safe"]),
2342
2343
  default="balanced",
2343
- help="Spot instance strategy: aggressive (cheapest), balanced, conservative (most stable)",
2344
+ help="Spot instance strategy: aggressive/cheapest, balanced, conservative/safe (most stable)",
2344
2345
  )
2345
2346
  @click.option(
2346
2347
  "--backend",
@@ -2378,6 +2379,18 @@ profiles:
2378
2379
  default="fp16",
2379
2380
  help="KV cache dtype. fp8 halves KV VRAM requirement.",
2380
2381
  )
2382
+ @click.option(
2383
+ "--select",
2384
+ "select_instance",
2385
+ default=None,
2386
+ help="Select instance by number or keyword: 1-N, cheapest, cheapest-spot, cheapest-secure, SXM4-40GB, SXM4-80GB, 80GB PCIe",
2387
+ )
2388
+ @click.option(
2389
+ "--auto",
2390
+ is_flag=True,
2391
+ default=False,
2392
+ help="Auto-select cheapest instance without prompting (CI/CD mode)",
2393
+ )
2381
2394
  def provision(
2382
2395
  gpu_type,
2383
2396
  count,
@@ -2399,6 +2412,8 @@ def provision(
2399
2412
  context_k,
2400
2413
  sharing_topology,
2401
2414
  dtype,
2415
+ select_instance,
2416
+ auto,
2402
2417
  ):
2403
2418
  """Provision GPU instances across multiple clouds with auto-optimization.
2404
2419
 
@@ -2565,6 +2580,9 @@ def provision(
2565
2580
 
2566
2581
  # ── Spot vs On-Demand Selection Logic ──
2567
2582
  use_spot = None
2583
+ # Normalize spot strategy aliases
2584
+ _strategy_aliases = {"cheapest": "aggressive", "safe": "conservative"}
2585
+ spot_strategy = _strategy_aliases.get(spot_strategy, spot_strategy)
2568
2586
  if spot and on_demand:
2569
2587
  print("ERROR: Cannot specify both --spot and --on-demand")
2570
2588
  return 1
@@ -2811,6 +2829,107 @@ def provision(
2811
2829
  f"LOCKED: Only on-demand instances available ({len(on_demand_quotes)} options)"
2812
2830
  )
2813
2831
 
2832
+ # ── Instance Selection Logic ──
2833
+ # Display instance table and handle selection (interactive, --select, --auto)
2834
+ import sys
2835
+
2836
+ def _select_instance(quotes, select_arg, auto_mode):
2837
+ """Select an instance from quotes based on selection criteria"""
2838
+ if not quotes:
2839
+ return None
2840
+
2841
+ # Display instance table
2842
+ print(f"\nAvailable {gpu_type} Instances:")
2843
+ print(f"{'#':<4} {'Provider':<14} {'Region':<14} {'$/hr':<10} {'VRAM':<8} {'Instance':<20} {'Spot'}")
2844
+ print("-" * 78)
2845
+ for i, q in enumerate(quotes):
2846
+ vram_str = f"{q.get('memory_gb', 0):.0f}GB" if q.get('memory_gb') else "N/A"
2847
+ spot_mark = "✓" if q.get("availability") == "spot" else ""
2848
+ instance_short = q.get("instance_type", "N/A")[:20]
2849
+ print(f"{i+1:<4} {q['provider']:<14} {q['region']:<14} ${q['price']:<9.2f} {vram_str:<8} {instance_short:<20} {spot_mark}")
2850
+ print("-" * 78)
2851
+
2852
+ # Determine selection
2853
+ selected_index = None
2854
+
2855
+ if select_arg:
2856
+ # --select flag specified
2857
+ if select_arg.isdigit():
2858
+ # Numeric selection
2859
+ idx = int(select_arg) - 1
2860
+ if 0 <= idx < len(quotes):
2861
+ selected_index = idx
2862
+ else:
2863
+ print(f"ERROR: Invalid selection {select_arg}. Must be 1-{len(quotes)}")
2864
+ return None
2865
+ elif select_arg == "cheapest":
2866
+ selected_index = 0
2867
+ elif select_arg == "cheapest-spot":
2868
+ spot_quotes = [q for q in quotes if q.get("availability") == "spot"]
2869
+ if spot_quotes:
2870
+ selected_index = quotes.index(spot_quotes[0])
2871
+ else:
2872
+ print("ERROR: No spot instances available")
2873
+ return None
2874
+ elif select_arg == "cheapest-secure":
2875
+ secure_quotes = [q for q in quotes if q.get("availability") != "spot"]
2876
+ if secure_quotes:
2877
+ selected_index = quotes.index(secure_quotes[0])
2878
+ else:
2879
+ print("ERROR: No secure (non-spot) instances available")
2880
+ return None
2881
+ else:
2882
+ # GPU memory variant selection (e.g., SXM4-40GB, 80GB PCIe)
2883
+ select_lower = select_arg.lower()
2884
+ for i, q in enumerate(quotes):
2885
+ instance_type = q.get("instance_type", "").lower()
2886
+ if select_lower in instance_type:
2887
+ selected_index = i
2888
+ break
2889
+ if selected_index is None:
2890
+ print(f"ERROR: No instance matching '{select_arg}' found")
2891
+ return None
2892
+ elif auto_mode or not sys.stdin.isatty():
2893
+ # --auto or non-interactive context: select cheapest
2894
+ selected_index = 0
2895
+ print(f"Auto-selecting cheapest instance (option 1)")
2896
+ else:
2897
+ # Interactive mode: prompt for selection
2898
+ try:
2899
+ user_input = input(f"\nSelect instance [1-{len(quotes)}] (default: 1, Enter to confirm): ").strip()
2900
+ if not user_input:
2901
+ selected_index = 0
2902
+ elif user_input.isdigit():
2903
+ idx = int(user_input) - 1
2904
+ if 0 <= idx < len(quotes):
2905
+ selected_index = idx
2906
+ else:
2907
+ print(f"ERROR: Invalid selection. Must be 1-{len(quotes)}")
2908
+ return None
2909
+ else:
2910
+ print(f"ERROR: Invalid input. Enter a number 1-{len(quotes)}")
2911
+ return None
2912
+ except (EOFError, KeyboardInterrupt):
2913
+ print("\nSelection cancelled")
2914
+ return None
2915
+
2916
+ if selected_index is not None:
2917
+ selected = quotes[selected_index]
2918
+ print(f"\nSelected: {selected['provider']} {selected['region']} ${selected['price']:.2f}/hr {selected.get('instance_type', 'N/A')}")
2919
+ return selected
2920
+
2921
+ return None
2922
+
2923
+ # Apply instance selection
2924
+ selected_instance = _select_instance(all_quotes, select_instance, auto)
2925
+ if selected_instance is None:
2926
+ print("ERROR: No instance selected")
2927
+ return
2928
+
2929
+ # Use only the selected instance for provisioning
2930
+ all_quotes = [selected_instance]
2931
+ count = 1 # Always provision 1 when selecting specific instance
2932
+
2814
2933
  # Record to cost DB
2815
2934
  try:
2816
2935
  from terradev_cli.core.cost_tracker import record_quotes
@@ -2962,8 +3081,8 @@ def provision(
2962
3081
  t0 = time.monotonic()
2963
3082
  try:
2964
3083
  provider = factory.create_provider(pname, creds)
2965
- spot_flag = q.get("availability") == "spot"
2966
- itype = f"{pname}-{'spot' if spot_flag else 'ondemand'}-{gpu_type.lower()}"
3084
+ # Use the instance_type from the quote (provider-specific format)
3085
+ itype = q.get("instance_type", f"{pname}-{gpu_type.lower()}")
2967
3086
 
2968
3087
  # Wrap provision with rate limiter
2969
3088
  async def _provision_with_rate_limit():
@@ -2971,6 +3090,7 @@ def provision(
2971
3090
  itype,
2972
3091
  q.get("region", "us-east-1"),
2973
3092
  gpu_type,
3093
+ ssh_public_key=_provision_ssh_pubkey,
2974
3094
  )
2975
3095
 
2976
3096
  result = await rate_limiter.execute_with_rate_limit(
@@ -3270,6 +3390,11 @@ def provision(
3270
3390
  for r in failed:
3271
3391
  print(f" {r['provider']}/{r['region']}: {r['error']}")
3272
3392
  print(f"Total provision time: {provision_time:.0f}ms")
3393
+ if _provision_ssh_pubkey and succeeded:
3394
+ print(f"\nSSH key (Ed25519, encrypted): ~/.terradev/ssh/{group_id}.key")
3395
+ print("Instance is provisioning — SSH available once status is 'running'.")
3396
+ print("Check status: terradev manage -i <instance-id> -a status")
3397
+ print("Then connect: (SSH command shown automatically with IP)")
3273
3398
  if type == "inference":
3274
3399
  print(f"Model: {model_name or 'Not specified'}")
3275
3400
  print("Type: Inference workload")
@@ -3413,7 +3538,27 @@ def manage(instance_id, action):
3413
3538
  print(f"Status: {st}")
3414
3539
 
3415
3540
  if isinstance(result, dict):
3416
- for k in ("ip_address", "public_ip", "gpu_utilization", "uptime"):
3541
+ ip = result.get("ip") or result.get("ip_address") or result.get("public_ip")
3542
+ port = result.get("port") or result.get("ssh_port")
3543
+ if ip:
3544
+ ssh_cmd = f"ssh root@{ip}"
3545
+ if port and port != 22:
3546
+ ssh_cmd += f" -p {port}"
3547
+ try:
3548
+ from terradev_cli.core.ssh_key_manager import decrypt_private_key
3549
+ group_id = None
3550
+ for inst in api.usage.get("instances_created", []):
3551
+ if inst.get("id") == instance_id:
3552
+ group_id = inst.get("parallel_group")
3553
+ break
3554
+ if group_id:
3555
+ tmp_key = decrypt_private_key(group_id)
3556
+ if tmp_key:
3557
+ ssh_cmd += f" -i {tmp_key}"
3558
+ except Exception:
3559
+ pass
3560
+ print(f" SSH: {ssh_cmd}")
3561
+ for k in ("gpu_utilization", "uptime"):
3417
3562
  if result.get(k):
3418
3563
  print(f" {k}: {result[k]}")
3419
3564
 
@@ -3846,6 +3991,11 @@ def optimize(instance_id, auto_apply):
3846
3991
  """
3847
3992
  all_optimizations = []
3848
3993
 
3994
+ api = TerradevAPI()
3995
+ instances = api.usage.get("instances_created", [])
3996
+ if instance_id:
3997
+ instances = [inst for inst in instances if inst.get("id") == instance_id]
3998
+
3849
3999
  try:
3850
4000
  # Fetch fresh quotes for cost optimization
3851
4001
  gpu_types = list(set(inst.get("gpu_type", "A100") for inst in instances))
@@ -4282,6 +4432,8 @@ def job(job_file, optimize):
4282
4432
 
4283
4433
  # Load job configuration
4284
4434
  try:
4435
+ import yaml
4436
+
4285
4437
  with open(job_file, "r") as f:
4286
4438
  job_config = yaml.safe_load(f)
4287
4439
 
@@ -8546,7 +8698,7 @@ def init(
8546
8698
  @click.option("--namespace", default="gitops-system", help="Namespace for GitOps tools")
8547
8699
  def bootstrap(tool, cluster, namespace):
8548
8700
  """Bootstrap GitOps tool on the cluster"""
8549
- from terradev_cli.core.gitops_manager import GitOpsManager, GitOpsConfig, GitOpsTool
8701
+ from terradev_cli.core.gitops_manager import GitOpsManager, GitOpsConfig, GitOpsTool, GitProvider
8550
8702
 
8551
8703
  # This is a simplified bootstrap - in practice, you'd load config from previous init
8552
8704
  config = GitOpsConfig(
@@ -8584,7 +8736,7 @@ def bootstrap(tool, cluster, namespace):
8584
8736
  )
8585
8737
  def sync(cluster, environment, tool):
8586
8738
  """Sync cluster with Git repository"""
8587
- from terradev_cli.core.gitops_manager import GitOpsManager, GitOpsConfig, GitOpsTool
8739
+ from terradev_cli.core.gitops_manager import GitOpsManager, GitOpsConfig, GitOpsTool, GitProvider
8588
8740
 
8589
8741
  # This is a simplified sync - in practice, you'd load config from previous init
8590
8742
  config = GitOpsConfig(
@@ -8618,7 +8770,7 @@ def sync(cluster, environment, tool):
8618
8770
  @click.option("--environment", default="prod", help="Environment to validate")
8619
8771
  def validate(dry_run, cluster, environment):
8620
8772
  """Validate GitOps configuration"""
8621
- from terradev_cli.core.gitops_manager import GitOpsManager, GitOpsConfig, GitOpsTool
8773
+ from terradev_cli.core.gitops_manager import GitOpsManager, GitOpsConfig, GitOpsTool, GitProvider
8622
8774
 
8623
8775
  # This is a simplified validation - in practice, you'd load config from previous init
8624
8776
  config = GitOpsConfig(
@@ -8652,8 +8804,7 @@ def validate(dry_run, cluster, environment):
8652
8804
  for warning in results["warnings"]:
8653
8805
  print(f" Warning: {warning}")
8654
8806
 
8655
- gitops_manager = GitOpsManager(config)
8656
- asyncio.run(gitops_manager.validate_configuration(path))
8807
+ asyncio.run(run_validate())
8657
8808
 
8658
8809
 
8659
8810
  # InferX Commands
@@ -14129,7 +14280,7 @@ def disable_trigger(name):
14129
14280
  def fire_event(event_type, data, source):
14130
14281
  """Manually fire an event for testing"""
14131
14282
  try:
14132
- from terradev_cli.core.event_system import event_bus, EventType
14283
+ from terradev_cli.core.event_system import event_bus, EventType, Event
14133
14284
 
14134
14285
  event_type_enum = EventType(event_type.replace("-", "_").upper())
14135
14286
 
@@ -14328,6 +14479,7 @@ def register_artifact(type, name, uri, environment, artifact_hash, size, user, p
14328
14479
  Environment,
14329
14480
  event_bus,
14330
14481
  EventType,
14482
+ Event,
14331
14483
  )
14332
14484
 
14333
14485
  artifact_type_enum = ArtifactType(type)
@@ -483,20 +483,24 @@ class SmartTemplateGenerator:
483
483
  if not model_spec or model_spec.model_type != "llm":
484
484
  return "# Error: This model is not suitable for chat applications"
485
485
 
486
- return f'''import gradio as gr
486
+ hardware = model_spec.recommended_hardware.upper()
487
+ parameters = str(model_spec.parameters)
488
+ streaming = "✅ Enabled" if model_spec.streaming_capable else "❌ Disabled"
489
+
490
+ template = '''import gradio as gr
487
491
  import torch
488
492
  from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer
489
493
  import threading
490
494
  import time
491
495
 
492
496
  # Model configuration
493
- MODEL_ID = "{model_id}"
497
+ MODEL_ID = "__MODEL_ID__"
494
498
  DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
495
499
  MAX_LENGTH = 500
496
500
  TEMPERATURE = 0.7
497
501
 
498
502
  # Load model and tokenizer
499
- print(f"Loading model: {{MODEL_ID}}")
503
+ print(f"Loading model: {MODEL_ID}")
500
504
  try:
501
505
  tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)
502
506
  if tokenizer.pad_token is None:
@@ -512,7 +516,7 @@ try:
512
516
  model.eval()
513
517
  print("Model loaded successfully!")
514
518
  except Exception as e:
515
- print(f"Error loading model: {{e}}")
519
+ print(f"Error loading model: {e}")
516
520
  model = None
517
521
  tokenizer = None
518
522
 
@@ -559,7 +563,7 @@ def generate_response_stream(message, history, temperature=TEMPERATURE, max_leng
559
563
  yield partial_text
560
564
 
561
565
  except Exception as e:
562
- yield f"❌ Generation error: {{e}}"
566
+ yield f"❌ Generation error: {e}"
563
567
 
564
568
  def generate_response_non_stream(message, history, temperature=TEMPERATURE, max_length=MAX_LENGTH):
565
569
  """Generate non-streaming response (fallback)"""
@@ -570,8 +574,8 @@ def generate_response_non_stream(message, history, temperature=TEMPERATURE, max_
570
574
  # Simple prompt for non-streaming mode
571
575
  prompt = message
572
576
  if history:
573
- context = "\\n".join([f"User: {{h}}\\nAssistant: {{a}}" for h, a in history[-3:]])
574
- prompt = f"{{context}}\\nUser: {{message}}\\nAssistant: "
577
+ context = "\\n".join([f"User: {h}\\nAssistant: {a}" for h, a in history[-3:]])
578
+ prompt = f"{context}\\nUser: {message}\\nAssistant: "
575
579
 
576
580
  inputs = tokenizer(prompt, return_tensors="pt").to(DEVICE)
577
581
 
@@ -589,17 +593,17 @@ def generate_response_non_stream(message, history, temperature=TEMPERATURE, max_
589
593
  return response
590
594
 
591
595
  except Exception as e:
592
- return f"❌ Generation error: {{e}}"
596
+ return f"❌ Generation error: {e}"
593
597
 
594
598
  # Create enhanced chat interface
595
- with gr.Blocks(title="{space_name}", theme=gr.themes.Soft()) as demo:
599
+ with gr.Blocks(title="__SPACE_NAME__", theme=gr.themes.Soft()) as demo:
596
600
  gr.Markdown(f"""
597
- # 🤖 {space_name}
601
+ # 🤖 __SPACE_NAME__
598
602
 
599
603
  **Model:** `{MODEL_ID}`
600
- **Hardware:** {model_spec.recommended_hardware.upper()}
601
- **Parameters:** {model_spec.parameters}
602
- **Streaming:** {'✅ Enabled' if model_spec.streaming_capable else '❌ Disabled'}
604
+ **Hardware:** __HARDWARE__
605
+ **Parameters:** __PARAMETERS__
606
+ **Streaming:** __STREAMING__
603
607
 
604
608
  ---
605
609
  """)
@@ -717,10 +721,18 @@ if __name__ == "__main__":
717
721
  demo.queue()
718
722
  demo.launch()
719
723
  '''
724
+ return (
725
+ template
726
+ .replace("__MODEL_ID__", model_id)
727
+ .replace("__SPACE_NAME__", space_name)
728
+ .replace("__HARDWARE__", hardware)
729
+ .replace("__PARAMETERS__", parameters)
730
+ .replace("__STREAMING__", streaming)
731
+ )
720
732
 
721
733
  def generate_embedding_template(self, model_id: str, space_name: str) -> str:
722
734
  """Generate optimized embedding template"""
723
- return f"""import streamlit as st
735
+ template = """import streamlit as st
724
736
  import torch
725
737
  from transformers import AutoModel, AutoTokenizer
726
738
  import numpy as np
@@ -730,14 +742,14 @@ import plotly.express as px
730
742
  import plotly.graph_objects as go
731
743
 
732
744
  # Model configuration
733
- MODEL_ID = "{model_id}"
745
+ MODEL_ID = "__MODEL_ID__"
734
746
  DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
735
747
  BATCH_SIZE = 32
736
748
  MAX_SEQ_LENGTH = 512
737
749
 
738
- st.set_page_config(page_title="{space_name}", layout="wide")
750
+ st.set_page_config(page_title="__SPACE_NAME__", layout="wide")
739
751
 
740
- st.title(f"🔤 {space_name}")
752
+ st.title(f"🔤 __SPACE_NAME__")
741
753
  st.markdown(f"**Model:** `{MODEL_ID}`")
742
754
  st.markdown("**Hardware:** CPU-Optimized for Embeddings")
743
755
 
@@ -749,7 +761,7 @@ def load_model():
749
761
  model = SentenceTransformer(MODEL_ID)
750
762
  return model
751
763
  except Exception as e:
752
- st.error(f"Error loading model: {{e}}")
764
+ st.error(f"Error loading model: {e}")
753
765
  return None
754
766
 
755
767
  st.header("Text Embedding Service")
@@ -801,8 +813,8 @@ if st.button("🚀 Generate Embeddings", type="primary"):
801
813
  })
802
814
 
803
815
  # Show summary
804
- st.write(f"✅ Generated embeddings for **{{len(texts)}}** texts")
805
- st.write(f"📏 Embedding dimensions: **{{len(embeddings[0])}}**")
816
+ st.write(f"✅ Generated embeddings for **{len(texts)}** texts")
817
+ st.write(f"📏 Embedding dimensions: **{len(embeddings[0])}**")
806
818
 
807
819
  # Similarity matrix
808
820
  if len(texts) > 1:
@@ -816,8 +828,8 @@ if st.button("🚀 Generate Embeddings", type="primary"):
816
828
  fig = px.imshow(
817
829
  similarity_matrix,
818
830
  labels=dict(x="Text", y="Text", color="Similarity"),
819
- x=[f"Text {{i+1}}" for i in range(len(texts))],
820
- y=[f"Text {{i+1}}" for i in range(len(texts))],
831
+ x=[f"Text {i+1}" for i in range(len(texts))],
832
+ y=[f"Text {i+1}" for i in range(len(texts))],
821
833
  color_continuous_scale="viridis"
822
834
  )
823
835
  fig.update_layout(title="Text Similarity Matrix")
@@ -921,6 +933,9 @@ with col2:
921
933
  st.markdown("---")
922
934
  st.markdown("🚀 **Powered by Terradev** | Multi-Cloud GPU Arbitrage Platform")
923
935
  """
936
+ return template.replace("__MODEL_ID__", model_id).replace(
937
+ "__SPACE_NAME__", space_name
938
+ )
924
939
 
925
940
 
926
941
  class HardwareOptimizer:
@@ -0,0 +1,31 @@
1
+ """
2
+ Minimal MetricsCollector stub so optimization modules can import without error.
3
+ """
4
+
5
+ import logging
6
+ import time
7
+ from typing import Any, Dict, List, Optional
8
+
9
+ logger = logging.getLogger(__name__)
10
+
11
+
12
+ class MetricsCollector:
13
+ """Lightweight metrics collector used by the optimization layer."""
14
+
15
+ def __init__(self, config: Optional[Any] = None):
16
+ self.config = config
17
+ self._metrics: List[Dict[str, Any]] = []
18
+
19
+ def record(self, name: str, value: float, tags: Optional[Dict[str, str]] = None) -> None:
20
+ entry = {"name": name, "value": value, "ts": time.time(), "tags": tags or {}}
21
+ self._metrics.append(entry)
22
+ logger.debug("metric %s=%.4f tags=%s", name, value, entry["tags"])
23
+
24
+ def increment(self, name: str, tags: Optional[Dict[str, str]] = None) -> None:
25
+ self.record(name, 1.0, tags)
26
+
27
+ def get_metrics(self) -> List[Dict[str, Any]]:
28
+ return list(self._metrics)
29
+
30
+ def reset(self) -> None:
31
+ self._metrics.clear()
@@ -18,6 +18,7 @@ import hashlib
18
18
  import json
19
19
  import logging
20
20
  import os
21
+ import re
21
22
  import secrets
22
23
  import subprocess
23
24
  import sys
@@ -33,7 +34,7 @@ try:
33
34
  import aiohttp
34
35
  except ImportError:
35
36
  aiohttp = None # type: ignore[assignment]
36
- from typing import Any, Dict, List
37
+ from typing import Any, Dict, List, Optional
37
38
  from urllib.parse import urlencode
38
39
 
39
40
  try:
@@ -6,12 +6,15 @@ Integrates Karpenter, Prometheus, Grafana, and Terradev monitoring
6
6
 
7
7
  import os
8
8
  import json
9
+ import logging
9
10
  import aiohttp
10
11
  import subprocess
11
12
  from typing import Dict, List, Any, Optional
12
13
 
13
14
  from .kubernetes_service import KubernetesConfig # single canonical definition
14
15
 
16
+ logger = logging.getLogger(__name__)
17
+
15
18
 
16
19
  class EnhancedKubernetesService:
17
20
  """Enhanced Kubernetes service with deep monitoring integration"""
@@ -9,6 +9,25 @@ from typing import Dict, List, Any, Optional
9
9
  from dataclasses import dataclass
10
10
  from datetime import datetime
11
11
 
12
+ try:
13
+ from langchain_core.messages import SystemMessage, HumanMessage
14
+ from langchain_openai import ChatOpenAI
15
+
16
+ def LLM(llm: str = "openai/gpt-4", temperature: float = 0.7):
17
+ """Build a chat model from a 'provider/model' identifier."""
18
+ model = llm.split("/", 1)[-1]
19
+ return ChatOpenAI(model=model, temperature=temperature)
20
+
21
+ except ImportError: # pragma: no cover - optional dependency
22
+ SystemMessage = None # type: ignore[assignment]
23
+ HumanMessage = None # type: ignore[assignment]
24
+
25
+ def LLM(llm: str = "openai/gpt-4", temperature: float = 0.7):
26
+ raise RuntimeError(
27
+ "langchain-openai and langchain-core are required for LangGraph LLM nodes. "
28
+ "Install with: pip install langchain-openai langchain-core"
29
+ )
30
+
12
31
 
13
32
  @dataclass
14
33
  class LangGraphConfig:
@@ -55,7 +74,7 @@ class LangGraphService:
55
74
 
56
75
  # Test LangSmith connection
57
76
  if self.config.langsmith_api_key:
58
- langsmith_session = langsmith_session
77
+ langsmith_session = self.session
59
78
 
60
79
  url = f"{self.langsmith_api_base}/v1/organizations"
61
80
  async with langsmith_session.get(
@@ -136,6 +155,24 @@ class LangGraphService:
136
155
  # Define the workflow state
137
156
  from langgraph.graph import StateGraph, START, END
138
157
 
158
+ workflow_id = (
159
+ f"terradev-orchestrator-{datetime.now().strftime('%Y%m%d-%H%M%S')}"
160
+ )
161
+ enhanced_config = {
162
+ **workflow_config,
163
+ "monitoring": {
164
+ "enabled": self.config.dashboard_enabled,
165
+ "tracing": self.config.tracing_enabled,
166
+ "evaluation": self.config.evaluation_enabled,
167
+ "deployment": self.config.deployment_enabled,
168
+ "observability": self.config.observability_enabled,
169
+ },
170
+ "langsmith": {
171
+ "project": self.config.project_name or "terradev",
172
+ "workspace_id": self.config.workspace_id,
173
+ },
174
+ }
175
+
139
176
  # Enhanced state with monitoring
140
177
  class WorkflowState:
141
178
  topic: str
@@ -473,7 +473,7 @@ class AutoOptimizer:
473
473
  base_confidence += 0.05
474
474
 
475
475
  # Adjust based on historical performance
476
- if deployment_id in self.optimization_history:
476
+ if context.deployment_id in self.optimization_history:
477
477
  historical_success = self._calculate_historical_success_rate(
478
478
  context.deployment_id
479
479
  )
@@ -322,7 +322,7 @@ class AlibabaProvider(BaseProvider):
322
322
  # ── Provisioning ──────────────────────────────────────────────────
323
323
 
324
324
  async def provision_instance(
325
- self, instance_type: str, region: str, gpu_type: str
325
+ self, instance_type: str, region: str, gpu_type: str, ssh_public_key: str = ""
326
326
  ) -> Dict[str, Any]:
327
327
  """Provision Alibaba instance with compliance checks"""
328
328
  # CRITICAL: Check compliance before provisioning