terradev-cli 5.2.0__tar.gz → 5.2.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (494) hide show
  1. {terradev_cli-5.2.0/terradev_cli.egg-info → terradev_cli-5.2.1}/PKG-INFO +13 -4
  2. {terradev_cli-5.2.0/terradev_cli → terradev_cli-5.2.1}/README.md +12 -3
  3. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/pyproject.toml +1 -1
  4. {terradev_cli-5.2.0 → terradev_cli-5.2.1/terradev_cli}/README.md +12 -3
  5. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/providers/__init__.py +4 -0
  6. terradev_cli-5.2.1/terradev_cli/providers/e2e_networks_provider.py +370 -0
  7. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/providers/provider_factory.py +2 -0
  8. terradev_cli-5.2.1/terradev_cli/providers/yottalabs_provider.py +378 -0
  9. {terradev_cli-5.2.0 → terradev_cli-5.2.1/terradev_cli.egg-info}/PKG-INFO +13 -4
  10. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli.egg-info/SOURCES.txt +2 -20
  11. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/tests/test_provider_conformance.py +6 -2
  12. terradev_cli-5.2.0/.ebextensions/python.config +0 -6
  13. terradev_cli-5.2.0/activations/973dfe463ec85785f5f95af5ba3906eedb2d931c24e69824a89ea65dba4e813b.json +0 -1
  14. terradev_cli-5.2.0/analysis/api-differences-comparison.tf +0 -311
  15. terradev_cli-5.2.0/analysis/cost-structure-differences.tf +0 -198
  16. terradev_cli-5.2.0/analysis/inference-arbitrage-pivot.tf +0 -322
  17. terradev_cli-5.2.0/scripts/check_logs_fix.py +0 -91
  18. terradev_cli-5.2.0/scripts/debug_comparison.py +0 -16
  19. terradev_cli-5.2.0/scripts/debug_mla.py +0 -15
  20. terradev_cli-5.2.0/scripts/debug_streaming.py +0 -41
  21. terradev_cli-5.2.0/scripts/deployment/deploy_correct_pricing.py +0 -91
  22. terradev_cli-5.2.0/scripts/deployment/deploy_enhanced_server.py +0 -660
  23. terradev_cli-5.2.0/scripts/deployment/deploy_exact_servers.py +0 -70
  24. terradev_cli-5.2.0/scripts/deployment/deploy_simple_enhanced.py +0 -81
  25. terradev_cli-5.2.0/scripts/deployment/deploy_telemetry_aws.py +0 -465
  26. terradev_cli-5.2.0/scripts/deployment/deploy_to_aws.py +0 -239
  27. terradev_cli-5.2.0/scripts/figure_calculation_breakdown.py +0 -265
  28. terradev_cli-5.2.0/scripts/fix_server_ports.py +0 -140
  29. terradev_cli-5.2.0/scripts/server_manager.py +0 -287
  30. terradev_cli-5.2.0/setup/account-setup-guide.tf +0 -393
  31. terradev_cli-5.2.0/setup/render.yaml +0 -18
  32. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/.env.example +0 -0
  33. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/.github/workflows/action.yml +0 -0
  34. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/.github/workflows/ci.yml +0 -0
  35. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/.github/workflows/release.yml +0 -0
  36. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/.github/workflows/static.yml +0 -0
  37. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/Deployment Package/BNF_GRAMMAR.md +0 -0
  38. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/Deployment Package/LIFECYCLES.md +0 -0
  39. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/Deployment Package/architecture.md +0 -0
  40. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/Deployment Package/overview.md +0 -0
  41. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/Deployment Package/security.md +0 -0
  42. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/Deployment Package/troubleshooting.md +0 -0
  43. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/Dockerfile +0 -0
  44. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/Dockerfile.test +0 -0
  45. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/LICENSE +0 -0
  46. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/MANIFEST.in +0 -0
  47. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/clusters/glm-5/README.md +0 -0
  48. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/clusters/glm-5/helm/values-glm5.yaml +0 -0
  49. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/clusters/glm-5/k8s/hpa.yaml +0 -0
  50. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/clusters/glm-5/k8s/model-cache-pvc.yaml +0 -0
  51. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/clusters/glm-5/k8s/namespace.yaml +0 -0
  52. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/clusters/glm-5/k8s/pdb.yaml +0 -0
  53. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/clusters/glm-5/k8s/service.yaml +0 -0
  54. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/clusters/glm-5/k8s/sglang-deployment.yaml +0 -0
  55. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/clusters/glm-5/k8s/vllm-deployment.yaml +0 -0
  56. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/clusters/glm-5/task.yaml +0 -0
  57. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/clusters/glm-5/terraform/main.tf +0 -0
  58. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/clusters/glm-5/terraform/outputs.tf +0 -0
  59. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/clusters/glm-5/terraform/variables.tf +0 -0
  60. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/clusters/llmd-template/README.md +0 -0
  61. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/clusters/llmd-template/helm/values-llmd.yaml +0 -0
  62. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/clusters/llmd-template/k8s/gateway.yaml +0 -0
  63. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/clusters/llmd-template/k8s/leaderworkerset.yaml +0 -0
  64. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/clusters/llmd-template/k8s/llminferenceservice.yaml +0 -0
  65. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/clusters/llmd-template/task.yaml +0 -0
  66. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/clusters/moe-template/README.md +0 -0
  67. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/clusters/moe-template/helm/values-moe.yaml +0 -0
  68. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/clusters/moe-template/k8s/deployment.yaml +0 -0
  69. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/clusters/moe-template/k8s/hpa.yaml +0 -0
  70. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/clusters/moe-template/k8s/model-cache-pvc.yaml +0 -0
  71. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/clusters/moe-template/k8s/namespace.yaml +0 -0
  72. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/clusters/moe-template/k8s/pdb.yaml +0 -0
  73. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/clusters/moe-template/k8s/service.yaml +0 -0
  74. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/clusters/moe-template/task.yaml +0 -0
  75. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/clusters/moe-template/terraform/main.tf +0 -0
  76. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/clusters/moe-template/terraform/outputs.tf +0 -0
  77. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/clusters/moe-template/terraform/variables.tf +0 -0
  78. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/clusters/rag-template/README.md +0 -0
  79. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/clusters/rag-template/helm/values-rag.yaml +0 -0
  80. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/clusters/rag-template/k8s/deployment.yaml +0 -0
  81. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/clusters/rag-template/terraform/main.tf +0 -0
  82. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/demo/RECORDING_GUIDE.md +0 -0
  83. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/demo/generate_gif.py +0 -0
  84. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/demo/terradev-demo.gif +0 -0
  85. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/docs/ADVANCED_FINANCIAL_INNOVATIONS.md +0 -0
  86. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/docs/API_DOCUMENTATION.md +0 -0
  87. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/docs/BingSiteAuth.xml +0 -0
  88. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/docs/FINOPS_ATTRIBUTION_SYSTEM.md +0 -0
  89. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/docs/USER_GUIDE.md +0 -0
  90. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/docs/VLLM_AUTO_OPTIMIZATION_GUIDE.md +0 -0
  91. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/docs/VLLM_OPTIMIZATION_GUIDE.md +0 -0
  92. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/docs/architecture.md +0 -0
  93. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/docs/index.html +0 -0
  94. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/docs/overview.md +0 -0
  95. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/docs/robots.txt +0 -0
  96. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/docs/sitemap.xml +0 -0
  97. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/docs/test_spot_provision.md +0 -0
  98. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/examples/aws_ssm_starter.py +0 -0
  99. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/examples/config.example.json +0 -0
  100. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/examples/demo_k8s_config.yaml +0 -0
  101. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/examples/direct_aws_starter.py +0 -0
  102. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/examples/ec2_user_data_starter.py +0 -0
  103. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/examples/example-pipeline.yaml +0 -0
  104. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/examples/kubernetes_training_deployment.yaml +0 -0
  105. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/examples/simple_ssm_starter.py +0 -0
  106. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/examples/ssh_server_starter.py +0 -0
  107. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/examples/start_aws_servers.py +0 -0
  108. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/helm/terradev/Chart.yaml +0 -0
  109. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/helm/terradev/templates/_helpers.tpl +0 -0
  110. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/helm/terradev/templates/deployment.yaml +0 -0
  111. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/helm/terradev/values.yaml +0 -0
  112. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/infrastructure/bucket-policy.json +0 -0
  113. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/infrastructure/grafana_training_dashboard.json +0 -0
  114. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/infrastructure/kubernetes/microservices.yaml +0 -0
  115. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/infrastructure/terraform/main.tf +0 -0
  116. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/infrastructure/terraform/parallelism.tf +0 -0
  117. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/integrations/cli-tool.tf +0 -0
  118. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/integrations/cloud-management-widgets.tf +0 -0
  119. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/integrations/cloud-provider-apis.py +0 -0
  120. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/integrations/critical-widgets.tf +0 -0
  121. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/integrations/devops-cicd-widgets.tf +0 -0
  122. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/integrations/devops-essential-tools.tf +0 -0
  123. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/integrations/docker-integration.tf +0 -0
  124. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/integrations/kubernetes-operator.tf +0 -0
  125. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/integrations/mlflow-integration.tf +0 -0
  126. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/modules/datadog/README.md +0 -0
  127. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/modules/datadog/dashboard.tf +0 -0
  128. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/modules/datadog/monitors.tf +0 -0
  129. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/modules/datadog/outputs.tf +0 -0
  130. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/modules/datadog/provider.tf +0 -0
  131. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/modules/datadog/variables.tf +0 -0
  132. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/modules/datadog/versions.tf +0 -0
  133. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/modules/prometheus_training_config.yml +0 -0
  134. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/requirements.txt +0 -0
  135. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/Cargo.toml +0 -0
  136. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/INTEGRATION_GUIDE.md +0 -0
  137. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/PERFORMANCE_OPTIMIZATIONS.md +0 -0
  138. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/README.md +0 -0
  139. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-artifact-verification/Cargo.toml +0 -0
  140. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-artifact-verification/src/lib.rs +0 -0
  141. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-artifact-verification/src/types.rs +0 -0
  142. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-artifact-verification/src/verifier.rs +0 -0
  143. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-authentication/Cargo.toml +0 -0
  144. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-authentication/src/encoding.rs +0 -0
  145. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-authentication/src/hmac.rs +0 -0
  146. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-authentication/src/lib.rs +0 -0
  147. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-authentication/src/types.rs +0 -0
  148. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-cache-eviction/Cargo.toml +0 -0
  149. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-cache-eviction/src/cache.rs +0 -0
  150. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-cache-eviction/src/lib.rs +0 -0
  151. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-cache-eviction/src/types.rs +0 -0
  152. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-command-executor/Cargo.toml +0 -0
  153. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-command-executor/src/lib.rs +0 -0
  154. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-config-validator/Cargo.toml +0 -0
  155. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-config-validator/src/lib.rs +0 -0
  156. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-config-validator/src/types.rs +0 -0
  157. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-config-validator/src/validator.rs +0 -0
  158. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-connection-pool/Cargo.toml +0 -0
  159. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-connection-pool/src/lib.rs +0 -0
  160. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-connection-pool/src/pool.rs +0 -0
  161. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-connection-pool/src/types.rs +0 -0
  162. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-cost-calculator/Cargo.toml +0 -0
  163. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-cost-calculator/src/calculator.rs +0 -0
  164. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-cost-calculator/src/lib.rs +0 -0
  165. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-cost-calculator/src/types.rs +0 -0
  166. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-cost-scaler/Cargo.toml +0 -0
  167. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-cost-scaler/src/lib.rs +0 -0
  168. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-credential-vault/Cargo.toml +0 -0
  169. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-credential-vault/src/lib.rs +0 -0
  170. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-credential-vault/src/types.rs +0 -0
  171. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-credential-vault/src/vault.rs +0 -0
  172. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-dag-executor/Cargo.toml +0 -0
  173. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-dag-executor/src/lib.rs +0 -0
  174. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-distributed-lock/Cargo.toml +0 -0
  175. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-distributed-lock/src/lib.rs +0 -0
  176. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-distributed-lock/src/lock.rs +0 -0
  177. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-distributed-lock/src/types.rs +0 -0
  178. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-egress-optimizer/Cargo.toml +0 -0
  179. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-egress-optimizer/src/graph.rs +0 -0
  180. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-egress-optimizer/src/lib.rs +0 -0
  181. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-egress-optimizer/src/types.rs +0 -0
  182. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-event-bus/Cargo.toml +0 -0
  183. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-event-bus/src/bus.rs +0 -0
  184. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-event-bus/src/lib.rs +0 -0
  185. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-event-bus/src/types.rs +0 -0
  186. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-governance/Cargo.toml +0 -0
  187. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-governance/src/lib.rs +0 -0
  188. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-gpu-discovery/Cargo.toml +0 -0
  189. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-gpu-discovery/src/lib.rs +0 -0
  190. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-gpu-topology/Cargo.toml +0 -0
  191. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-gpu-topology/src/lib.rs +0 -0
  192. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-gpu-topology/src/topology.rs +0 -0
  193. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-gpu-topology/src/types.rs +0 -0
  194. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-helm-generator/Cargo.toml +0 -0
  195. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-helm-generator/src/lib.rs +0 -0
  196. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-mcp-codec/Cargo.toml +0 -0
  197. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-mcp-codec/src/lib.rs +0 -0
  198. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-mcp-optimizer/Cargo.toml +0 -0
  199. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-mcp-optimizer/src/lib.rs +0 -0
  200. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-price-intelligence/Cargo.toml +0 -0
  201. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-price-intelligence/src/lib.rs +0 -0
  202. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-quota-manager/Cargo.toml +0 -0
  203. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-quota-manager/src/lib.rs +0 -0
  204. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-quota-manager/src/manager.rs +0 -0
  205. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-quota-manager/src/types.rs +0 -0
  206. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-resource-pool/Cargo.toml +0 -0
  207. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-resource-pool/src/lib.rs +0 -0
  208. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-resource-pool/src/pool.rs +0 -0
  209. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-resource-pool/src/types.rs +0 -0
  210. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-result-compressor/Cargo.toml +0 -0
  211. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-result-compressor/src/lib.rs +0 -0
  212. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-semantic-router/Cargo.toml +0 -0
  213. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-semantic-router/src/lib.rs +0 -0
  214. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-snapshot-manager/Cargo.toml +0 -0
  215. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-snapshot-manager/src/lib.rs +0 -0
  216. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-snapshot-manager/src/snapshot.rs +0 -0
  217. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-snapshot-manager/src/types.rs +0 -0
  218. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-state-machine/Cargo.toml +0 -0
  219. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-state-machine/src/lib.rs +0 -0
  220. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-state-machine/src/state.rs +0 -0
  221. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-state-machine/src/types.rs +0 -0
  222. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-telemetry/Cargo.toml +0 -0
  223. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-telemetry/src/lib.rs +0 -0
  224. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-telemetry/src/pipeline.rs +0 -0
  225. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-telemetry/src/types.rs +0 -0
  226. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-tool-registry/Cargo.toml +0 -0
  227. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-tool-registry/src/lib.rs +0 -0
  228. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-vram-estimator/Cargo.toml +0 -0
  229. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-vram-estimator/src/estimator.rs +0 -0
  230. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-vram-estimator/src/lib.rs +0 -0
  231. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-vram-estimator/src/types.rs +0 -0
  232. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-warm-pool/Cargo.toml +0 -0
  233. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/rust/terradev-warm-pool/src/lib.rs +0 -0
  234. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/scripts/action.py +0 -0
  235. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/scripts/gpu-check.sh +0 -0
  236. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/setup/Lambda Cloud API spec 1.8.3.json +0 -0
  237. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/setup/docker-compose.yml +0 -0
  238. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/setup/nginx.conf +0 -0
  239. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/setup/setup.sh +0 -0
  240. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/setup.cfg +0 -0
  241. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/CHANGELOG.md +0 -0
  242. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/COMPLETE_COMMAND_REFERENCE.md +0 -0
  243. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/COMPLETE_INTEGRATION_GUIDE.md +0 -0
  244. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/IMPLEMENTATION_SUMMARY.md +0 -0
  245. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/MAKING_SPOT_WORK_FOR_STATEFUL_WORKLOADS.md +0 -0
  246. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/SGLANG_COMMAND_GUIDE.md +0 -0
  247. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/TERRADEV_STACK_CHART.md +0 -0
  248. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/__init__.py +0 -0
  249. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/__main__.py +0 -0
  250. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/cli.py +0 -0
  251. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/cli_hf_spaces.py +0 -0
  252. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/cli_karpenter.py +0 -0
  253. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/__init__.py +0 -0
  254. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/async_config.py +0 -0
  255. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/auth.py +0 -0
  256. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/auto_lineage.py +0 -0
  257. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/cache_manager.py +0 -0
  258. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/checkpoint_manager.py +0 -0
  259. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/command_executor.py +0 -0
  260. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/config.py +0 -0
  261. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/config_validator.py +0 -0
  262. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/cost_scaler.py +0 -0
  263. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/cost_tracker.py +0 -0
  264. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/credential_vault.py +0 -0
  265. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/cuda_graph_integrator.py +0 -0
  266. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/dag_executor.py +0 -0
  267. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/data_governance.py +0 -0
  268. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/dataset_stager.py +0 -0
  269. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/deployment_router.py +0 -0
  270. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/distributed_lock.py +0 -0
  271. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/drift_detector.py +0 -0
  272. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/egress_cost_monitor.py +0 -0
  273. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/egress_optimizer.py +0 -0
  274. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/evaluation_orchestrator.py +0 -0
  275. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/event_system.py +0 -0
  276. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/gitops_manager.py +0 -0
  277. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/gpu_discovery.py +0 -0
  278. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/gpu_topology.py +0 -0
  279. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/helm_generator.py +0 -0
  280. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/hf_cli_integration.py +0 -0
  281. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/hf_smart_templates.py +0 -0
  282. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/hf_spaces.py +0 -0
  283. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/inference_router.py +0 -0
  284. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/inference_spot_manager.py +0 -0
  285. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/job_state_manager.py +0 -0
  286. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/kv_cache_checkpoint_manager.py +0 -0
  287. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/kv_cache_checkpoint_tests.py +0 -0
  288. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/manifest_cache.py +0 -0
  289. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/manifest_example.json +0 -0
  290. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/mig_manager.py +0 -0
  291. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/migration_orchestrator.py +0 -0
  292. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/mla_vram_estimator.py +0 -0
  293. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/mla_vram_tests.py +0 -0
  294. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/model_orchestrator.py +0 -0
  295. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/oidc_provider.py +0 -0
  296. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/optimization_config.py +0 -0
  297. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/parallel_provisioner.py +0 -0
  298. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/pipeline_schema.py +0 -0
  299. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/preflight_validator.py +0 -0
  300. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/price_discovery.py +0 -0
  301. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/price_intelligence.py +0 -0
  302. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/public_ip_billing_tracker.py +0 -0
  303. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/quick_start.py +0 -0
  304. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/quota_manager.py +0 -0
  305. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/rate_limiter.py +0 -0
  306. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/rust_telemetry.py +0 -0
  307. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/semantic_router.py +0 -0
  308. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/semantic_signals/__init__.py +0 -0
  309. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/semantic_signals/base_signal.py +0 -0
  310. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/semantic_signals/complexity_signal.py +0 -0
  311. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/semantic_signals/domain_signal.py +0 -0
  312. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/semantic_signals/keyword_signal.py +0 -0
  313. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/semantic_signals/language_signal.py +0 -0
  314. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/semantic_signals/modality_signal.py +0 -0
  315. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/semantic_signals/orchestrator.py +0 -0
  316. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/semantic_signals/routing_policy.yaml +0 -0
  317. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/semantic_signals/safety_signal.py +0 -0
  318. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/session_manager.py +0 -0
  319. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/ssh_key_manager.py +0 -0
  320. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/telemetry.py +0 -0
  321. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/terradev_engine.py +0 -0
  322. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/trace_viewer.py +0 -0
  323. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/training_monitor.py +0 -0
  324. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/training_orchestrator.py +0 -0
  325. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/user_manager.py +0 -0
  326. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/warm_pool_manager.py +0 -0
  327. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/weight_streaming_benchmarks.py +0 -0
  328. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/core/weight_streaming_manager.py +0 -0
  329. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/cost_optimizer.py +0 -0
  330. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/credential_prompt.py +0 -0
  331. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/demo.py +0 -0
  332. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/entry_point.py +0 -0
  333. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/integrations/Terradev LOGO BLACK.png +0 -0
  334. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/integrations/Terradev LOGO WHITEW.png +0 -0
  335. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/integrations/__init__.py +0 -0
  336. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/integrations/databricks_integration.py +0 -0
  337. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/integrations/datadog_integration.py +0 -0
  338. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/integrations/helicone_integration.py +0 -0
  339. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/integrations/prometheus_integration.py +0 -0
  340. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/integrations/wandb_integration.py +0 -0
  341. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/k8s/terraform_wrapper.py +0 -0
  342. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/kubernetes/inferx-cost-optimized.yaml +0 -0
  343. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/kubernetes/inferx-infrastructure.yaml +0 -0
  344. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/kubernetes/inferx-models.yaml +0 -0
  345. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/kubernetes/inferx-platform.yaml +0 -0
  346. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/kubernetes/inferx_setup.py +0 -0
  347. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/mcp/__init__.py +0 -0
  348. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/mcp/server.py +0 -0
  349. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/ml_services/__init__.py +0 -0
  350. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/ml_services/agentic_serving.py +0 -0
  351. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/ml_services/drift_retrain_service.py +0 -0
  352. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/ml_services/dvc_service.py +0 -0
  353. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/ml_services/guardrails_service.py +0 -0
  354. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/ml_services/huggingface_service.py +0 -0
  355. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/ml_services/kserve_service.py +0 -0
  356. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/ml_services/kubernetes_enhanced.py +0 -0
  357. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/ml_services/kubernetes_service.py +0 -0
  358. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/ml_services/langchain_service.py +0 -0
  359. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/ml_services/langfuse_service.py +0 -0
  360. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/ml_services/langgraph_service.py +0 -0
  361. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/ml_services/lmcache_service.py +0 -0
  362. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/ml_services/mlflow_service.py +0 -0
  363. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/ml_services/model_router.py +0 -0
  364. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/ml_services/ollama_service.py +0 -0
  365. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/ml_services/phoenix_service.py +0 -0
  366. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/ml_services/qdrant_service.py +0 -0
  367. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/ml_services/ray_enhanced.py +0 -0
  368. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/ml_services/ray_service.py +0 -0
  369. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/ml_services/sglang_service.py +0 -0
  370. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/ml_services/vllm_service.py +0 -0
  371. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/ml_services/wandb_enhanced.py +0 -0
  372. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/optimization/__init__.py +0 -0
  373. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/optimization/auto_optimizer.py +0 -0
  374. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/optimization/cuco_optimizer.py +0 -0
  375. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/providers/LATITUDE_PROVIDER.md +0 -0
  376. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/providers/alibaba_provider.py +0 -0
  377. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/providers/aws_provider.py +0 -0
  378. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/providers/azure_provider.py +0 -0
  379. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/providers/base_provider.py +0 -0
  380. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/providers/baseten_provider.py +0 -0
  381. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/providers/coreweave_provider.py +0 -0
  382. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/providers/crusoe_provider.py +0 -0
  383. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/providers/demo_mode.py +0 -0
  384. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/providers/digitalocean_provider.py +0 -0
  385. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/providers/fluidstack_provider.py +0 -0
  386. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/providers/gcp_provider.py +0 -0
  387. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/providers/hetzner_provider.py +0 -0
  388. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/providers/huggingface_provider.py +0 -0
  389. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/providers/hyperstack_provider.py +0 -0
  390. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/providers/inferx_provider.py +0 -0
  391. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/providers/lambda_labs_provider.py +0 -0
  392. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/providers/latitude_provider.py +0 -0
  393. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/providers/oracle_provider.py +0 -0
  394. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/providers/ovhcloud_provider.py +0 -0
  395. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/providers/real_pricing.py +0 -0
  396. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/providers/runpod_provider.py +0 -0
  397. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/providers/siliconflow_provider.py +0 -0
  398. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/providers/tensordock_provider.py +0 -0
  399. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/providers/vastai_provider.py +0 -0
  400. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/requirements.txt +0 -0
  401. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/requirements_minimal.txt +0 -0
  402. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/terraform/main.tf +0 -0
  403. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/terraform/modules/__init__.py +0 -0
  404. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/terraform/modules/gpu-node-aws/bootstrap.sh +0 -0
  405. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/terraform/modules/gpu-node-aws/main.tf +0 -0
  406. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/terraform/modules/gpu-node-aws/outputs.tf +0 -0
  407. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/terraform/modules/gpu-node-aws/variables.tf +0 -0
  408. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/terraform/modules/gpu-node-aws/versions.tf +0 -0
  409. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/terraform/modules/gpu-node-hyperstack/bootstrap.sh +0 -0
  410. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/terraform/modules/gpu-node-hyperstack/main.tf +0 -0
  411. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/terraform/modules/gpu-node-hyperstack/outputs.tf +0 -0
  412. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/terraform/modules/gpu-node-hyperstack/variables.tf +0 -0
  413. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/terraform/modules/gpu-node-hyperstack/versions.tf +0 -0
  414. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/terraform/modules/gpu-node-lambda/bootstrap.sh +0 -0
  415. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/terraform/modules/gpu-node-lambda/main.tf +0 -0
  416. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/terraform/modules/gpu-node-lambda/outputs.tf +0 -0
  417. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/terraform/modules/gpu-node-lambda/variables.tf +0 -0
  418. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/terraform/modules/gpu-node-lambda/versions.tf +0 -0
  419. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/terraform/modules/gpu-node-vastai/bootstrap.sh +0 -0
  420. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/terraform/modules/gpu-node-vastai/main.tf +0 -0
  421. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/terraform/modules/gpu-node-vastai/outputs.tf +0 -0
  422. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/terraform/modules/gpu-node-vastai/variables.tf +0 -0
  423. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/terraform/modules/gpu-node-vastai/versions.tf +0 -0
  424. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/terraform/modules/k8s-control-plane/join-script.tpl +0 -0
  425. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/terraform/modules/k8s-control-plane/kubeconfig.tpl +0 -0
  426. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/terraform/modules/k8s-control-plane/main.tf +0 -0
  427. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/terraform/modules/k8s-control-plane/outputs.tf +0 -0
  428. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/terraform/modules/k8s-control-plane/variables.tf +0 -0
  429. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/terraform/modules/k8s-control-plane/versions.tf +0 -0
  430. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/terraform/modules/networking/main.tf +0 -0
  431. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/terraform/modules/networking/outputs.tf +0 -0
  432. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/terraform/modules/networking/variables.tf +0 -0
  433. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/terraform/modules/networking/versions.tf +0 -0
  434. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/terraform/outputs.tf +0 -0
  435. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/terraform/price-optimizer/optimal-allocation.py +0 -0
  436. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/terraform/providers.tf +0 -0
  437. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/terraform/variables.tf +0 -0
  438. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/test_summary.py +0 -0
  439. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/utils/__init__.py +0 -0
  440. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli/utils/formatters.py +0 -0
  441. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli.egg-info/dependency_links.txt +0 -0
  442. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli.egg-info/entry_points.txt +0 -0
  443. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli.egg-info/requires.txt +0 -0
  444. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terradev_cli.egg-info/top_level.txt +0 -0
  445. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terraform.tfvars.example +0 -0
  446. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terraform_optimization/backend.tf +0 -0
  447. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terraform_optimization/error_handling.py +0 -0
  448. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terraform_optimization/parallel_provisioning.tf +0 -0
  449. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terraform_optimization/storage_choice_matrix.py +0 -0
  450. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terraform_optimization/test_error_handler.py +0 -0
  451. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terraform_optimization/versions.tf +0 -0
  452. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terraform_transparency/audit_demo/trail_3caed73ad5bf.json +0 -0
  453. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terraform_transparency/audit_trail.py +0 -0
  454. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terraform_transparency/audit_trails.json +0 -0
  455. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terraform_transparency/decision_engine.py +0 -0
  456. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terraform_transparency/decision_logs.json +0 -0
  457. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terraform_transparency/operations.json +0 -0
  458. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terraform_transparency/terraform_manager.py +0 -0
  459. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terraform_transparency/terraform_plans.json +0 -0
  460. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terraform_transparency/transparency_demo.py +0 -0
  461. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/terraform_transparency/transparency_report.json +0 -0
  462. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/tests/CREDENTIAL_STRATEGY.md +0 -0
  463. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/tests/INTEGRATION_STRATEGY.md +0 -0
  464. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/tests/Makefile +0 -0
  465. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/tests/ci_pipeline.py +0 -0
  466. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/tests/conftest.py +0 -0
  467. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/tests/root_tests/test_cli_ux_battle.py +0 -0
  468. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/tests/root_tests/test_cli_ux_battle_fixed.py +0 -0
  469. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/tests/root_tests/test_cli_ux_final.py +0 -0
  470. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/tests/root_tests/test_final_integration.py +0 -0
  471. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/tests/root_tests/test_integrated_optimization.py +0 -0
  472. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/tests/root_tests/test_p10_production_failover.py +0 -0
  473. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/tests/root_tests/test_sso_phase1.py +0 -0
  474. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/tests/root_tests/test_vllm_optimization.py +0 -0
  475. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/tests/simple_test.py +0 -0
  476. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/tests/test_ai_integrations.py +0 -0
  477. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/tests/test_checkpoint_manager.py +0 -0
  478. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/tests/test_cli_smoke.py +0 -0
  479. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/tests/test_dag_executor.py +0 -0
  480. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/tests/test_flashoptim.py +0 -0
  481. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/tests/test_integration.py +0 -0
  482. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/tests/test_job_state_manager.py +0 -0
  483. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/tests/test_k8s_regression.py +0 -0
  484. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/tests/test_latitude_provider.py +0 -0
  485. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/tests/test_major_providers.py +0 -0
  486. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/tests/test_mcp_handlers.py +0 -0
  487. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/tests/test_new_providers.py +0 -0
  488. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/tests/test_providers.py +0 -0
  489. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/tests/test_semantic_router.py +0 -0
  490. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/tests/test_sglang_optimization.py +0 -0
  491. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/tests/test_ssh_key_manager.py +0 -0
  492. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/tests/test_training_monitor.py +0 -0
  493. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/tests/test_training_orchestrator.py +0 -0
  494. {terradev_cli-5.2.0 → terradev_cli-5.2.1}/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.2.0
3
+ Version: 5.2.1
4
4
  Summary: An imperative command-line-interface for AI workload orchestration.
5
5
  Author-email: Terradev Team <team@terradev.com>
6
6
  Maintainer-email: Terradev Team <team@terradev.com>
@@ -93,7 +93,7 @@ Requires-Dist: redis>=5.0.0; extra == "enterprise"
93
93
  Requires-Dist: PyJWT>=2.8.0; extra == "enterprise"
94
94
  Dynamic: license-file
95
95
 
96
- # Terradev CLI v5.1.7
96
+ # Terradev CLI v5.2.1
97
97
 
98
98
  **An imperative command-line-interface for AI workload orchestration.**
99
99
 
@@ -105,13 +105,22 @@ pypi.org/project/terradev-cli/
105
105
 
106
106
  Terradev is a cross-cloud compute-provisioning CLI that compresses + stages datasets, provisions optimal instances + nodes, and deploys **3-5x faster** than sequential provisioning.
107
107
 
108
+ **NOTES ON 5.2.1**
109
+
110
+ Added two new BYOAPI providers: **Yotta Labs (Shakti Cloud)** and **E2E Networks** — India's leading GPU clouds. Yotta Labs uses a pod-based compute model (similar to RunPod), and E2E Networks is a traditional VM-style hyperscaler that is NSE-listed and MeitY empanelled. Both are BYOAPI: your key, stored locally, never touches a Terradev server.
111
+
112
+ ```bash
113
+ terradev configure --provider yottalabs
114
+ terradev configure --provider e2enetworks
115
+ ```
116
+
108
117
  **NOTES ON 5.0.0**
109
118
 
110
119
  We removed the paywall, open-sourced Terradev, and added Rust accelerators for safe and snappy delivery...
111
120
 
112
121
  With the Rust DAG orchestrator, the execution graph enforces correct sequencing and idempotency at the runtime level. You or the agent can issue commands freely... the orchestrator ensures they're safe to execute.
113
122
 
114
- 218 tools not including subcommand/flags require heavy context. The Rust MCP orchestrator processes tool calls with minimal overhead: deserializing, routing, executing, and responding faster than pure-Python-based MCP servers by an order of magnitude. For an agent running a complex provisioning workflow across 21+ cloud providers, that compounds across every tool call in the chain.
123
+ 218 tools not including subcommand/flags require heavy context. The Rust MCP orchestrator processes tool calls with minimal overhead: deserializing, routing, executing, and responding faster than pure-Python-based MCP servers by an order of magnitude. For an agent running a complex provisioning workflow across 23 cloud providers, that compounds across every tool call in the chain.
115
124
 
116
125
  ## BYOAPI Configuration
117
126
 
@@ -153,7 +162,7 @@ terradev --help
153
162
  ```
154
163
 
155
164
  ### Step 2: Configure Your First Cloud Provider
156
- Terradev supports 21+ GPU cloud providers. Start with one, RunPod is the fastest to set up:
165
+ Terradev supports 23 GPU cloud providers. Start with one, RunPod is the fastest to set up:
157
166
 
158
167
  ```bash
159
168
  terradev setup runpod --quick
@@ -1,4 +1,4 @@
1
- # Terradev CLI v5.1.7
1
+ # Terradev CLI v5.2.1
2
2
 
3
3
  **An imperative command-line-interface for AI workload orchestration.**
4
4
 
@@ -10,13 +10,22 @@ pypi.org/project/terradev-cli/
10
10
 
11
11
  Terradev is a cross-cloud compute-provisioning CLI that compresses + stages datasets, provisions optimal instances + nodes, and deploys **3-5x faster** than sequential provisioning.
12
12
 
13
+ **NOTES ON 5.2.1**
14
+
15
+ Added two new BYOAPI providers: **Yotta Labs (Shakti Cloud)** and **E2E Networks** — India's leading GPU clouds. Yotta Labs uses a pod-based compute model (similar to RunPod), and E2E Networks is a traditional VM-style hyperscaler that is NSE-listed and MeitY empanelled. Both are BYOAPI: your key, stored locally, never touches a Terradev server.
16
+
17
+ ```bash
18
+ terradev configure --provider yottalabs
19
+ terradev configure --provider e2enetworks
20
+ ```
21
+
13
22
  **NOTES ON 5.0.0**
14
23
 
15
24
  We removed the paywall, open-sourced Terradev, and added Rust accelerators for safe and snappy delivery...
16
25
 
17
26
  With the Rust DAG orchestrator, the execution graph enforces correct sequencing and idempotency at the runtime level. You or the agent can issue commands freely... the orchestrator ensures they're safe to execute.
18
27
 
19
- 218 tools not including subcommand/flags require heavy context. The Rust MCP orchestrator processes tool calls with minimal overhead: deserializing, routing, executing, and responding faster than pure-Python-based MCP servers by an order of magnitude. For an agent running a complex provisioning workflow across 21+ cloud providers, that compounds across every tool call in the chain.
28
+ 218 tools not including subcommand/flags require heavy context. The Rust MCP orchestrator processes tool calls with minimal overhead: deserializing, routing, executing, and responding faster than pure-Python-based MCP servers by an order of magnitude. For an agent running a complex provisioning workflow across 23 cloud providers, that compounds across every tool call in the chain.
20
29
 
21
30
  ## BYOAPI Configuration
22
31
 
@@ -58,7 +67,7 @@ terradev --help
58
67
  ```
59
68
 
60
69
  ### Step 2: Configure Your First Cloud Provider
61
- Terradev supports 21+ GPU cloud providers. Start with one, RunPod is the fastest to set up:
70
+ Terradev supports 23 GPU cloud providers. Start with one, RunPod is the fastest to set up:
62
71
 
63
72
  ```bash
64
73
  terradev setup runpod --quick
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "terradev-cli"
7
- version = "5.2.0"
7
+ version = "5.2.1"
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.1.7
1
+ # Terradev CLI v5.2.1
2
2
 
3
3
  **An imperative command-line-interface for AI workload orchestration.**
4
4
 
@@ -10,13 +10,22 @@ pypi.org/project/terradev-cli/
10
10
 
11
11
  Terradev is a cross-cloud compute-provisioning CLI that compresses + stages datasets, provisions optimal instances + nodes, and deploys **3-5x faster** than sequential provisioning.
12
12
 
13
+ **NOTES ON 5.2.1**
14
+
15
+ Added two new BYOAPI providers: **Yotta Labs (Shakti Cloud)** and **E2E Networks** — India's leading GPU clouds. Yotta Labs uses a pod-based compute model (similar to RunPod), and E2E Networks is a traditional VM-style hyperscaler that is NSE-listed and MeitY empanelled. Both are BYOAPI: your key, stored locally, never touches a Terradev server.
16
+
17
+ ```bash
18
+ terradev configure --provider yottalabs
19
+ terradev configure --provider e2enetworks
20
+ ```
21
+
13
22
  **NOTES ON 5.0.0**
14
23
 
15
24
  We removed the paywall, open-sourced Terradev, and added Rust accelerators for safe and snappy delivery...
16
25
 
17
26
  With the Rust DAG orchestrator, the execution graph enforces correct sequencing and idempotency at the runtime level. You or the agent can issue commands freely... the orchestrator ensures they're safe to execute.
18
27
 
19
- 218 tools not including subcommand/flags require heavy context. The Rust MCP orchestrator processes tool calls with minimal overhead: deserializing, routing, executing, and responding faster than pure-Python-based MCP servers by an order of magnitude. For an agent running a complex provisioning workflow across 21+ cloud providers, that compounds across every tool call in the chain.
28
+ 218 tools not including subcommand/flags require heavy context. The Rust MCP orchestrator processes tool calls with minimal overhead: deserializing, routing, executing, and responding faster than pure-Python-based MCP servers by an order of magnitude. For an agent running a complex provisioning workflow across 23 cloud providers, that compounds across every tool call in the chain.
20
29
 
21
30
  ## BYOAPI Configuration
22
31
 
@@ -58,7 +67,7 @@ terradev --help
58
67
  ```
59
68
 
60
69
  ### Step 2: Configure Your First Cloud Provider
61
- Terradev supports 21+ GPU cloud providers. Start with one, RunPod is the fastest to set up:
70
+ Terradev supports 23 GPU cloud providers. Start with one, RunPod is the fastest to set up:
62
71
 
63
72
  ```bash
64
73
  terradev setup runpod --quick
@@ -21,6 +21,8 @@ from .runpod_provider import RunPodProvider
21
21
  from .siliconflow_provider import SiliconFlowProvider
22
22
  from .tensordock_provider import TensorDockProvider
23
23
  from .vastai_provider import VastAIProvider
24
+ from .yottalabs_provider import YottaLabsProvider
25
+ from .e2e_networks_provider import E2ENetworksProvider
24
26
 
25
27
  __all__ = [
26
28
  "AlibabaProvider",
@@ -44,4 +46,6 @@ __all__ = [
44
46
  "SiliconFlowProvider",
45
47
  "TensorDockProvider",
46
48
  "VastAIProvider",
49
+ "YottaLabsProvider",
50
+ "E2ENetworksProvider",
47
51
  ]
@@ -0,0 +1,370 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ E2E Networks Provider - E2E Networks GPU cloud integration (India)
4
+ BYOAPI: Uses the end-client's E2E Networks Bearer token
5
+ API: https://api.e2enetworks.com/myaccount/api/v1
6
+
7
+ Auth: Authorization: Bearer {token}
8
+ Compute model: Traditional VM-style GPU nodes
9
+ Strengths: NSE-listed India hyperscaler, H200/H100/A100/B200, MeitY empanelled
10
+ Docs: https://docs.e2enetworks.com/api/myaccount/
11
+ """
12
+
13
+ import logging
14
+ import os
15
+ from datetime import datetime
16
+ from typing import Any, Dict, List, Optional
17
+
18
+ from .base_provider import BaseProvider
19
+
20
+ logger = logging.getLogger(__name__)
21
+
22
+
23
+ class E2ENetworksProvider(BaseProvider):
24
+ """E2E Networks provider — VM-based GPU nodes, India-first hyperscaler"""
25
+
26
+ API_BASE = "https://api.e2enetworks.com/myaccount/api/v1"
27
+
28
+ # Map Terradev canonical GPU names → E2E Networks node plan prefixes
29
+ GPU_PLAN_MAP = {
30
+ "B200": "b200",
31
+ "H200": "h200",
32
+ "H100": "h100",
33
+ "H100-SXM": "h100-sxm",
34
+ "A100": "a100-80gb",
35
+ "A100-80GB": "a100-80gb",
36
+ "A100-40GB": "a100-40gb",
37
+ "L40S": "l40s",
38
+ "L4": "l4",
39
+ "T4": "t4",
40
+ "V100": "v100",
41
+ "RTX3090": "rtx3090",
42
+ }
43
+
44
+ # Reference pricing (USD/hr per GPU) — live API takes precedence
45
+ # Pricing sourced from e2enetworks.com/pricing (USD region)
46
+ GPU_PRICING = {
47
+ "B200": {"price": 6.50, "mem_gb": 192, "vcpus": 32, "ram_gb": 256, "gpu_count": 1},
48
+ "H200": {"price": 4.50, "mem_gb": 141, "vcpus": 24, "ram_gb": 192, "gpu_count": 1},
49
+ "H100": {"price": 3.20, "mem_gb": 80, "vcpus": 16, "ram_gb": 128, "gpu_count": 1},
50
+ "H100-SXM": {"price": 3.50, "mem_gb": 80, "vcpus": 16, "ram_gb": 128, "gpu_count": 1},
51
+ "A100": {"price": 1.80, "mem_gb": 80, "vcpus": 16, "ram_gb": 128, "gpu_count": 1},
52
+ "A100-80GB": {"price": 1.80, "mem_gb": 80, "vcpus": 16, "ram_gb": 128, "gpu_count": 1},
53
+ "A100-40GB": {"price": 1.20, "mem_gb": 40, "vcpus": 12, "ram_gb": 96, "gpu_count": 1},
54
+ "L40S": {"price": 1.10, "mem_gb": 48, "vcpus": 16, "ram_gb": 128, "gpu_count": 1},
55
+ "L4": {"price": 0.55, "mem_gb": 24, "vcpus": 8, "ram_gb": 64, "gpu_count": 1},
56
+ "T4": {"price": 0.40, "mem_gb": 16, "vcpus": 8, "ram_gb": 32, "gpu_count": 1},
57
+ "V100": {"price": 0.90, "mem_gb": 32, "vcpus": 12, "ram_gb": 96, "gpu_count": 1},
58
+ "RTX3090": {"price": 0.35, "mem_gb": 24, "vcpus": 8, "ram_gb": 32, "gpu_count": 1},
59
+ }
60
+
61
+ def __init__(self, credentials: Dict[str, str]):
62
+ super().__init__(credentials)
63
+ self.name = "e2enetworks"
64
+ self.api_key = credentials.get("api_key", "")
65
+ # E2E Networks may require a project ID for multi-project accounts
66
+ self.project_id = credentials.get("project_id", "")
67
+
68
+ # ── Authentication ────────────────────────────────────────────────
69
+
70
+ def _get_auth_headers(self) -> Dict[str, str]:
71
+ headers: Dict[str, str] = {"Content-Type": "application/json"}
72
+ if self.api_key:
73
+ headers["Authorization"] = f"Bearer {self.api_key}"
74
+ return headers
75
+
76
+ # ── URL helpers ───────────────────────────────────────────────────
77
+
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}"
82
+ return f"{self.API_BASE}/nodes{path}"
83
+
84
+ # ── Capacity / Quotes ─────────────────────────────────────────────
85
+
86
+ async def get_instance_quotes(
87
+ self, gpu_type: str, region: Optional[str] = None
88
+ ) -> List[Dict[str, Any]]:
89
+ if not self.api_key:
90
+ return []
91
+
92
+ try:
93
+ live = await self._get_live_plans(gpu_type, region)
94
+ if live:
95
+ return live
96
+ except Exception as e:
97
+ logger.debug(f"E2E Networks API error: {e}")
98
+
99
+ # Static fallback
100
+ info = self.GPU_PRICING.get(gpu_type)
101
+ if not info:
102
+ # Try case-insensitive partial match
103
+ upper = gpu_type.upper()
104
+ for key, val in self.GPU_PRICING.items():
105
+ if upper in key.upper() or key.upper() in upper:
106
+ info = val
107
+ break
108
+ if not info:
109
+ return []
110
+
111
+ return [
112
+ {
113
+ "instance_type": self.GPU_PLAN_MAP.get(gpu_type, gpu_type.lower()),
114
+ "gpu_type": gpu_type,
115
+ "price_per_hour": info["price"],
116
+ "region": region or "in-delhi-1",
117
+ "available": True,
118
+ "provider": "e2enetworks",
119
+ "vcpus": info["vcpus"],
120
+ "memory_gb": info["ram_gb"],
121
+ "gpu_memory_gb": info["mem_gb"],
122
+ "gpu_count": info["gpu_count"],
123
+ "spot": False,
124
+ "india_based": True,
125
+ }
126
+ ]
127
+
128
+ async def _get_live_plans(
129
+ self, gpu_type: str, region: Optional[str]
130
+ ) -> List[Dict[str, Any]]:
131
+ """Query node plans/types from the API."""
132
+ try:
133
+ data = await self._make_request("GET", f"{self.API_BASE}/plans/")
134
+ except Exception:
135
+ # Fall back to node-types endpoint
136
+ data = await self._make_request("GET", f"{self.API_BASE}/node-types/")
137
+
138
+ plans = data if isinstance(data, list) else data.get("data", data.get("results", []))
139
+ gpu_upper = gpu_type.upper()
140
+ quotes = []
141
+
142
+ for plan in plans:
143
+ plan_name = plan.get("name", plan.get("plan_name", "")).upper()
144
+ plan_gpu = plan.get("gpu_type", plan.get("gpu", "")).upper()
145
+
146
+ if (
147
+ gpu_upper not in plan_name
148
+ and gpu_upper not in plan_gpu
149
+ and not any(part in plan_name for part in gpu_upper.split("-") if len(part) > 2)
150
+ ):
151
+ continue
152
+
153
+ price_inr = float(plan.get("price_per_hour", plan.get("price", 0)) or 0)
154
+ # Convert INR to USD if price looks like INR (>10 per hour for GPU)
155
+ price_usd = price_inr / 83.5 if price_inr > 10 else price_inr
156
+
157
+ plan_region = plan.get("region", region or "in-delhi-1")
158
+ if region and plan_region != region:
159
+ continue
160
+
161
+ quotes.append(
162
+ {
163
+ "instance_type": plan.get("name", plan.get("plan_name", gpu_type)),
164
+ "gpu_type": gpu_type,
165
+ "price_per_hour": round(price_usd, 4),
166
+ "price_inr_per_hour": price_inr,
167
+ "region": plan_region,
168
+ "available": plan.get("available", True),
169
+ "provider": "e2enetworks",
170
+ "vcpus": plan.get("vcpus", plan.get("cpu", 16)),
171
+ "memory_gb": plan.get("ram_gb", plan.get("ram", 128)),
172
+ "gpu_memory_gb": plan.get("gpu_memory_gb", 0),
173
+ "gpu_count": plan.get("gpu_count", plan.get("gpu_num", 1)),
174
+ "spot": False,
175
+ "india_based": True,
176
+ }
177
+ )
178
+
179
+ return sorted(quotes, key=lambda q: q["price_per_hour"])
180
+
181
+ # ── Provisioning ──────────────────────────────────────────────────
182
+
183
+ async def provision_instance(
184
+ self, instance_type: str, region: str, gpu_type: str
185
+ ) -> Dict[str, Any]:
186
+ if not self.api_key:
187
+ raise Exception("E2E Networks API key not configured")
188
+
189
+ ssh_key = self.credentials.get("ssh_key_name", "")
190
+ image = self.credentials.get("image", "ubuntu-22.04-x64")
191
+ gpu_count = int(self.credentials.get("gpu_count", 1))
192
+
193
+ body: Dict[str, Any] = {
194
+ "name": f"terradev-{gpu_type.lower().replace('_', '-')}-{datetime.now().strftime('%H%M%S')}",
195
+ "plan": instance_type,
196
+ "location": region or "in-delhi-1",
197
+ "image": image,
198
+ "gpu_count": gpu_count,
199
+ }
200
+ if ssh_key:
201
+ body["ssh_keys"] = [ssh_key]
202
+
203
+ data = await self._make_request("POST", self._nodes_url("/"), json=body)
204
+ node = data if isinstance(data, dict) else data.get("data", {})
205
+
206
+ return {
207
+ "instance_id": str(node.get("id", f"e2e-{datetime.now().strftime('%Y%m%d%H%M%S')}")),
208
+ "instance_type": instance_type,
209
+ "region": region or "in-delhi-1",
210
+ "gpu_type": gpu_type,
211
+ "status": node.get("status", "provisioning"),
212
+ "provider": "e2enetworks",
213
+ "metadata": {
214
+ "name": node.get("name", body["name"]),
215
+ "image": image,
216
+ "gpu_count": gpu_count,
217
+ "ssh_key": ssh_key,
218
+ "india_based": True,
219
+ },
220
+ }
221
+
222
+ # ── Instance management ───────────────────────────────────────────
223
+
224
+ async def get_instance_status(self, instance_id: str) -> Dict[str, Any]:
225
+ if not self.api_key:
226
+ raise Exception("E2E Networks API key not configured")
227
+
228
+ data = await self._make_request("GET", self._nodes_url(f"/{instance_id}/"))
229
+ node = data if isinstance(data, dict) else data.get("data", {})
230
+
231
+ return {
232
+ "instance_id": instance_id,
233
+ "status": node.get("status", "unknown"),
234
+ "instance_type": node.get("plan", node.get("node_type", "unknown")),
235
+ "region": node.get("location", node.get("region", "unknown")),
236
+ "provider": "e2enetworks",
237
+ "public_ip": node.get("ip", node.get("public_ip")),
238
+ "private_ip": node.get("private_ip"),
239
+ "gpu_count": node.get("gpu_count", 1),
240
+ "india_based": True,
241
+ }
242
+
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}
246
+ data = await self._make_request(
247
+ "POST", self._nodes_url(f"/{instance_id}/action/"), json=body
248
+ )
249
+ return data if isinstance(data, dict) else {}
250
+
251
+ async def stop_instance(self, instance_id: str) -> Dict[str, Any]:
252
+ if not self.api_key:
253
+ raise Exception("E2E Networks API key not configured")
254
+ await self._node_action(instance_id, "stop")
255
+ return {"instance_id": instance_id, "action": "stop", "status": "stopping"}
256
+
257
+ async def start_instance(self, instance_id: str) -> Dict[str, Any]:
258
+ if not self.api_key:
259
+ raise Exception("E2E Networks API key not configured")
260
+ await self._node_action(instance_id, "start")
261
+ return {"instance_id": instance_id, "action": "start", "status": "starting"}
262
+
263
+ async def terminate_instance(self, instance_id: str) -> Dict[str, Any]:
264
+ if not self.api_key:
265
+ raise Exception("E2E Networks API key not configured")
266
+ await self._make_request("DELETE", self._nodes_url(f"/{instance_id}/"))
267
+ return {"instance_id": instance_id, "action": "terminate", "status": "terminating"}
268
+
269
+ async def list_instances(self) -> List[Dict[str, Any]]:
270
+ if not self.api_key:
271
+ return []
272
+ try:
273
+ data = await self._make_request("GET", self._nodes_url("/"))
274
+ nodes = data if isinstance(data, list) else data.get("data", data.get("results", []))
275
+ return [
276
+ {
277
+ "instance_id": str(node.get("id", "unknown")),
278
+ "status": node.get("status", "unknown"),
279
+ "instance_type": node.get("plan", node.get("node_type", "unknown")),
280
+ "region": node.get("location", node.get("region", "unknown")),
281
+ "provider": "e2enetworks",
282
+ "public_ip": node.get("ip", node.get("public_ip")),
283
+ "gpu_count": node.get("gpu_count", 1),
284
+ "india_based": True,
285
+ }
286
+ for node in (nodes if isinstance(nodes, list) else [])
287
+ ]
288
+ except Exception:
289
+ return []
290
+
291
+ async def execute_command(
292
+ self, instance_id: str, command: str, async_exec: bool
293
+ ) -> Dict[str, Any]:
294
+ """Execute command via SSH on the node's public IP."""
295
+ if not self.api_key:
296
+ raise Exception("E2E Networks API key not configured")
297
+
298
+ try:
299
+ status = await self.get_instance_status(instance_id)
300
+ public_ip = status.get("public_ip")
301
+ if not public_ip:
302
+ return {
303
+ "instance_id": instance_id,
304
+ "command": command,
305
+ "exit_code": 1,
306
+ "output": "No public IP — node may still be provisioning",
307
+ "async": async_exec,
308
+ }
309
+
310
+ import subprocess
311
+
312
+ ssh_cmd = [
313
+ "ssh",
314
+ "-o", "StrictHostKeyChecking=accept-new",
315
+ "-o", f"UserKnownHostsFile={os.path.expanduser('~/.terradev/known_hosts')}",
316
+ "-o", "ConnectTimeout=10",
317
+ f"root@{public_ip}",
318
+ command,
319
+ ]
320
+
321
+ if async_exec:
322
+ proc = subprocess.Popen(ssh_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
323
+ return {
324
+ "instance_id": instance_id,
325
+ "command": command,
326
+ "exit_code": 0,
327
+ "job_id": str(proc.pid),
328
+ "output": f"Async SSH started (PID: {proc.pid})",
329
+ "async": True,
330
+ }
331
+
332
+ result = subprocess.run(ssh_cmd, capture_output=True, text=True, timeout=300)
333
+ return {
334
+ "instance_id": instance_id,
335
+ "command": command,
336
+ "exit_code": result.returncode,
337
+ "stdout": result.stdout,
338
+ "stderr": result.stderr,
339
+ "async": False,
340
+ }
341
+ except Exception as e:
342
+ return {
343
+ "instance_id": instance_id,
344
+ "command": command,
345
+ "exit_code": 1,
346
+ "output": f"E2E Networks exec error: {e}",
347
+ "async": async_exec,
348
+ }
349
+
350
+ # ── E2E Networks-specific helpers ─────────────────────────────────
351
+
352
+ async def get_plans(self) -> List[Dict[str, Any]]:
353
+ """List all available node plans/configurations."""
354
+ try:
355
+ data = await self._make_request("GET", f"{self.API_BASE}/plans/")
356
+ except Exception:
357
+ data = await self._make_request("GET", f"{self.API_BASE}/node-types/")
358
+ return data if isinstance(data, list) else data.get("data", data.get("results", []))
359
+
360
+ async def get_images(self) -> List[Dict[str, Any]]:
361
+ """List available OS images for node provisioning."""
362
+ data = await self._make_request("GET", f"{self.API_BASE}/images/")
363
+ return data if isinstance(data, list) else data.get("data", data.get("results", []))
364
+
365
+ async def reboot_instance(self, instance_id: str) -> Dict[str, Any]:
366
+ """Reboot a running node."""
367
+ if not self.api_key:
368
+ raise Exception("E2E Networks API key not configured")
369
+ await self._node_action(instance_id, "reboot")
370
+ return {"instance_id": instance_id, "action": "reboot", "status": "rebooting"}
@@ -52,6 +52,8 @@ _PROVIDER_LOADERS = {
52
52
  "inferx": _lazy_import(".inferx_provider.InferXProvider"),
53
53
  "latitude": _lazy_import(".latitude_provider.LatitudeProvider"),
54
54
  "demo": _lazy_import(".demo_mode.DemoModeProvider"),
55
+ "yottalabs": _lazy_import(".yottalabs_provider.YottaLabsProvider"),
56
+ "e2enetworks": _lazy_import(".e2e_networks_provider.E2ENetworksProvider"),
55
57
  }
56
58
 
57
59