terradev-cli 5.5.2__tar.gz → 5.5.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/Deployment Package/BNF_GRAMMAR.md +4 -1
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/PKG-INFO +1 -1
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/pyproject.toml +1 -1
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/cli.py +136 -10
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/hf_smart_templates.py +37 -22
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/mcp/server.py +2 -1
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/ml_services/kubernetes_enhanced.py +3 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/ml_services/langgraph_service.py +38 -1
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/optimization/auto_optimizer.py +1 -1
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/providers/base_provider.py +3 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/providers/runpod_provider.py +10 -15
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli.egg-info/PKG-INFO +1 -1
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/.env.example +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/.github/workflows/action.yml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/.github/workflows/ci.yml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/.github/workflows/release.yml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/.github/workflows/static.yml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/.terradev/custom_providers.example.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/Deployment Package/LIFECYCLES.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/Deployment Package/architecture.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/Deployment Package/overview.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/Deployment Package/security.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/Deployment Package/troubleshooting.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/Dockerfile +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/Dockerfile.test +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/LICENSE +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/MANIFEST.in +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/README.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/agentic-template/helm/values-agentic.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/agentic-template/k8s/fleet-manifests.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/glm-5/README.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/glm-5/helm/values-glm5.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/glm-5/k8s/hpa.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/glm-5/k8s/model-cache-pvc.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/glm-5/k8s/namespace.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/glm-5/k8s/pdb.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/glm-5/k8s/service.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/glm-5/k8s/sglang-deployment.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/glm-5/k8s/vllm-deployment.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/glm-5/task.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/glm-5/terraform/main.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/glm-5/terraform/outputs.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/glm-5/terraform/variables.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/llmd-template/README.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/llmd-template/helm/values-llmd.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/llmd-template/k8s/gateway.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/llmd-template/k8s/leaderworkerset.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/llmd-template/k8s/llminferenceservice.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/llmd-template/task.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/lora-template/helm/Chart.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/lora-template/helm/templates/_helpers.tpl +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/lora-template/helm/templates/deployment.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/lora-template/helm/templates/pvc-adapter.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/lora-template/helm/templates/pvc-registry.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/lora-template/helm/templates/service.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/lora-template/helm/templates/serviceaccount.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/lora-template/helm/values-lora.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/lora-template/k8s/adapter-pvc.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/lora-template/k8s/deployment.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/lora-template/k8s/namespace.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/lora-template/k8s/registry-pvc.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/lora-template/k8s/service.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/lora-template/k8s/serviceaccount.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/lorax-template/helm/Chart.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/lorax-template/helm/templates/_helpers.tpl +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/lorax-template/helm/templates/deployment.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/lorax-template/helm/templates/pvc.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/lorax-template/helm/templates/service.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/lorax-template/helm/templates/serviceaccount.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/lorax-template/helm/values-lorax.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/moe-template/README.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/moe-template/helm/values-moe.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/moe-template/k8s/deployment.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/moe-template/k8s/hpa.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/moe-template/k8s/model-cache-pvc.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/moe-template/k8s/namespace.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/moe-template/k8s/pdb.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/moe-template/k8s/service.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/moe-template/task.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/moe-template/terraform/main.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/moe-template/terraform/outputs.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/moe-template/terraform/variables.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/rag-template/README.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/rag-template/helm/values-rag.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/rag-template/k8s/deployment.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/rag-template/terraform/main.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/demo/RECORDING_GUIDE.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/demo/generate_gif.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/demo/terradev-demo.gif +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/docs/ADVANCED_FINANCIAL_INNOVATIONS.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/docs/API_DOCUMENTATION.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/docs/BingSiteAuth.xml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/docs/FINOPS_ATTRIBUTION_SYSTEM.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/docs/LORA_COMMAND_LIFECYCLE.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/docs/USER_GUIDE.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/docs/VLLM_AUTO_OPTIMIZATION_GUIDE.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/docs/VLLM_OPTIMIZATION_GUIDE.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/docs/architecture.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/docs/index.html +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/docs/overview.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/docs/robots.txt +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/docs/sitemap.xml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/docs/test_spot_provision.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/examples/aws_ssm_starter.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/examples/config.example.json +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/examples/demo_k8s_config.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/examples/direct_aws_starter.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/examples/ec2_user_data_starter.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/examples/example-pipeline.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/examples/kubernetes_training_deployment.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/examples/simple_ssm_starter.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/examples/ssh_server_starter.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/examples/start_aws_servers.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/helm/terradev/Chart.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/helm/terradev/templates/_helpers.tpl +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/helm/terradev/templates/deployment.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/helm/terradev/values.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/infrastructure/bucket-policy.json +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/infrastructure/grafana_training_dashboard.json +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/infrastructure/kubernetes/microservices.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/infrastructure/terraform/main.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/infrastructure/terraform/parallelism.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/integrations/cli-tool.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/integrations/cloud-management-widgets.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/integrations/cloud-provider-apis.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/integrations/critical-widgets.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/integrations/devops-cicd-widgets.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/integrations/devops-essential-tools.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/integrations/docker-integration.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/integrations/kubernetes-operator.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/integrations/mlflow-integration.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/marketing/bare-metal-latitude-post.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/modules/datadog/README.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/modules/datadog/dashboard.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/modules/datadog/monitors.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/modules/datadog/outputs.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/modules/datadog/provider.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/modules/datadog/variables.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/modules/datadog/versions.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/modules/prometheus_training_config.yml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/Cargo.toml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/INTEGRATION_GUIDE.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/PERFORMANCE_OPTIMIZATIONS.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/README.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-artifact-verification/Cargo.toml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-artifact-verification/src/lib.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-artifact-verification/src/types.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-artifact-verification/src/verifier.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-authentication/Cargo.toml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-authentication/src/encoding.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-authentication/src/hmac.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-authentication/src/lib.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-authentication/src/types.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-cache-eviction/Cargo.toml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-cache-eviction/src/cache.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-cache-eviction/src/lib.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-cache-eviction/src/types.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-command-executor/Cargo.toml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-command-executor/src/lib.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-config-validator/Cargo.toml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-config-validator/src/lib.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-config-validator/src/types.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-config-validator/src/validator.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-connection-pool/Cargo.toml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-connection-pool/src/lib.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-connection-pool/src/pool.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-connection-pool/src/types.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-cost-calculator/Cargo.toml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-cost-calculator/src/calculator.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-cost-calculator/src/lib.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-cost-calculator/src/types.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-cost-scaler/Cargo.toml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-cost-scaler/src/lib.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-credential-vault/Cargo.toml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-credential-vault/src/lib.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-credential-vault/src/types.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-credential-vault/src/vault.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-dag-executor/Cargo.toml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-dag-executor/src/lib.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-distributed-lock/Cargo.toml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-distributed-lock/src/lib.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-distributed-lock/src/lock.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-distributed-lock/src/types.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-egress-optimizer/Cargo.toml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-egress-optimizer/src/graph.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-egress-optimizer/src/lib.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-egress-optimizer/src/types.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-event-bus/Cargo.toml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-event-bus/src/bus.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-event-bus/src/lib.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-event-bus/src/types.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-governance/Cargo.toml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-governance/src/lib.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-gpu-discovery/Cargo.toml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-gpu-discovery/src/lib.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-gpu-topology/Cargo.toml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-gpu-topology/src/lib.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-gpu-topology/src/topology.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-gpu-topology/src/types.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-helm-generator/Cargo.toml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-helm-generator/src/lib.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-mcp-codec/Cargo.toml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-mcp-codec/src/lib.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-mcp-optimizer/Cargo.toml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-mcp-optimizer/src/lib.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-price-intelligence/Cargo.toml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-price-intelligence/src/lib.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-quota-manager/Cargo.toml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-quota-manager/src/lib.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-quota-manager/src/manager.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-quota-manager/src/types.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-resource-pool/Cargo.toml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-resource-pool/src/lib.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-resource-pool/src/pool.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-resource-pool/src/types.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-result-compressor/Cargo.toml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-result-compressor/src/lib.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-semantic-router/Cargo.toml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-semantic-router/src/lib.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-snapshot-manager/Cargo.toml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-snapshot-manager/src/lib.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-snapshot-manager/src/snapshot.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-snapshot-manager/src/types.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-state-machine/Cargo.toml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-state-machine/src/lib.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-state-machine/src/state.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-state-machine/src/types.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-telemetry/Cargo.toml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-telemetry/src/lib.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-telemetry/src/pipeline.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-telemetry/src/types.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-tool-registry/Cargo.toml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-tool-registry/src/lib.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-vram-estimator/Cargo.toml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-vram-estimator/src/estimator.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-vram-estimator/src/lib.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-vram-estimator/src/types.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-warm-pool/Cargo.toml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/rust/terradev-warm-pool/src/lib.rs +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/scripts/action.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/scripts/gpu-check.sh +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/setup/Lambda Cloud API spec 1.8.3.json +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/setup/docker-compose.yml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/setup/nginx.conf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/setup/setup.sh +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/setup.cfg +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/CHANGELOG.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/COMPLETE_COMMAND_REFERENCE.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/COMPLETE_INTEGRATION_GUIDE.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/IMPLEMENTATION_SUMMARY.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/MAKING_SPOT_WORK_FOR_STATEFUL_WORKLOADS.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/README.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/SGLANG_COMMAND_GUIDE.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/TERRADEV_STACK_CHART.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/__init__.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/__main__.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/cli_hf_spaces.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/cli_karpenter.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/__init__.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/agentic_provisioner.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/agentic_topology.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/async_config.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/auth.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/auto_lineage.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/cache_manager.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/checkpoint_manager.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/command_executor.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/config.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/config_validator.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/cost_scaler.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/cost_tracker.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/credential_vault.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/cuda_graph_integrator.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/dag_executor.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/data_governance.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/dataset_stager.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/deployment_router.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/distributed_lock.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/drift_detector.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/egress_cost_monitor.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/egress_optimizer.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/evaluation_orchestrator.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/event_system.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/gitops_manager.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/gpu_discovery.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/gpu_topology.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/helm_generator.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/hf_cli_integration.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/hf_spaces.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/inference_router.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/inference_spot_manager.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/job_state_manager.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/kv_cache_checkpoint_manager.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/kv_cache_checkpoint_tests.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/kv_sharing.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/lora_consistency.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/lora_cost_attribution.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/lora_versioning.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/manifest_cache.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/manifest_example.json +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/mig_manager.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/migration_orchestrator.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/mla_vram_estimator.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/mla_vram_tests.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/model_orchestrator.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/oidc_provider.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/optimization_config.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/parallel_provisioner.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/pd_transport.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/pipeline_schema.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/preflight_validator.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/price_discovery.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/price_intelligence.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/public_ip_billing_tracker.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/quick_start.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/quota_manager.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/rate_limiter.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/rust_telemetry.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/semantic_router.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/semantic_signals/__init__.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/semantic_signals/base_signal.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/semantic_signals/complexity_signal.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/semantic_signals/domain_signal.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/semantic_signals/keyword_signal.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/semantic_signals/language_signal.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/semantic_signals/modality_signal.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/semantic_signals/orchestrator.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/semantic_signals/routing_policy.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/semantic_signals/safety_signal.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/session_manager.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/ssh_key_manager.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/telemetry.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/terradev_engine.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/trace_viewer.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/training_monitor.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/training_orchestrator.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/user_manager.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/warm_pool_manager.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/weight_streaming_benchmarks.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/core/weight_streaming_manager.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/cost_optimizer.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/credential_prompt.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/demo.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/entry_point.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/integrations/Terradev LOGO BLACK.png +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/integrations/Terradev LOGO WHITEW.png +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/integrations/__init__.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/integrations/databricks_integration.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/integrations/datadog_integration.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/integrations/helicone_integration.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/integrations/prometheus_integration.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/integrations/wandb_integration.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/k8s/terraform_wrapper.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/kubernetes/inferx-cost-optimized.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/kubernetes/inferx-infrastructure.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/kubernetes/inferx-models.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/kubernetes/inferx-platform.yaml +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/kubernetes/inferx_setup.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/mcp/__init__.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/ml_services/__init__.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/ml_services/agentic_serving.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/ml_services/drift_retrain_service.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/ml_services/dvc_service.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/ml_services/guardrails_service.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/ml_services/huggingface_service.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/ml_services/kserve_service.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/ml_services/kubernetes_service.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/ml_services/langchain_service.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/ml_services/langfuse_service.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/ml_services/lmcache_service.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/ml_services/lora_registry.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/ml_services/lorax_service.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/ml_services/mlflow_service.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/ml_services/model_router.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/ml_services/ollama_service.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/ml_services/peft_import_service.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/ml_services/phoenix_service.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/ml_services/qdrant_service.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/ml_services/ray_enhanced.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/ml_services/ray_service.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/ml_services/sglang_service.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/ml_services/vllm_service.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/ml_services/wandb_enhanced.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/optimization/__init__.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/optimization/cuco_optimizer.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/providers/LATITUDE_PROVIDER.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/providers/__init__.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/providers/alibaba_provider.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/providers/aws_provider.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/providers/azure_provider.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/providers/baseten_provider.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/providers/coreweave_provider.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/providers/crusoe_provider.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/providers/demo_mode.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/providers/digitalocean_provider.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/providers/e2e_networks_provider.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/providers/fluidstack_provider.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/providers/gcp_provider.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/providers/gpu_catalog.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/providers/hetzner_provider.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/providers/huggingface_provider.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/providers/hyperstack_provider.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/providers/inferx_provider.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/providers/lambda_labs_provider.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/providers/latitude_provider.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/providers/oracle_provider.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/providers/ovhcloud_provider.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/providers/provider_factory.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/providers/provider_profiles.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/providers/real_pricing.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/providers/registry.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/providers/siliconflow_provider.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/providers/tensordock_provider.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/providers/types.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/providers/vastai_provider.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/providers/yottalabs_provider.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/requirements.txt +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/requirements_minimal.txt +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/terraform/main.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/terraform/modules/__init__.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/terraform/modules/gpu-node-aws/bootstrap.sh +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/terraform/modules/gpu-node-aws/main.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/terraform/modules/gpu-node-aws/outputs.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/terraform/modules/gpu-node-aws/variables.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/terraform/modules/gpu-node-aws/versions.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/terraform/modules/gpu-node-hyperstack/bootstrap.sh +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/terraform/modules/gpu-node-hyperstack/main.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/terraform/modules/gpu-node-hyperstack/outputs.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/terraform/modules/gpu-node-hyperstack/variables.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/terraform/modules/gpu-node-hyperstack/versions.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/terraform/modules/gpu-node-lambda/bootstrap.sh +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/terraform/modules/gpu-node-lambda/main.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/terraform/modules/gpu-node-lambda/outputs.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/terraform/modules/gpu-node-lambda/variables.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/terraform/modules/gpu-node-lambda/versions.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/terraform/modules/gpu-node-vastai/bootstrap.sh +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/terraform/modules/gpu-node-vastai/main.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/terraform/modules/gpu-node-vastai/outputs.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/terraform/modules/gpu-node-vastai/variables.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/terraform/modules/gpu-node-vastai/versions.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/terraform/modules/k8s-control-plane/join-script.tpl +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/terraform/modules/k8s-control-plane/kubeconfig.tpl +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/terraform/modules/k8s-control-plane/main.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/terraform/modules/k8s-control-plane/outputs.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/terraform/modules/k8s-control-plane/variables.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/terraform/modules/k8s-control-plane/versions.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/terraform/modules/networking/main.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/terraform/modules/networking/outputs.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/terraform/modules/networking/variables.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/terraform/modules/networking/versions.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/terraform/outputs.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/terraform/price-optimizer/optimal-allocation.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/terraform/providers.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/terraform/variables.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/test_summary.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/utils/__init__.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli/utils/formatters.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli.egg-info/SOURCES.txt +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli.egg-info/dependency_links.txt +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli.egg-info/entry_points.txt +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli.egg-info/requires.txt +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terradev_cli.egg-info/top_level.txt +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terraform.tfvars.example +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terraform_optimization/backend.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terraform_optimization/error_handling.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terraform_optimization/parallel_provisioning.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terraform_optimization/storage_choice_matrix.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terraform_optimization/test_error_handler.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terraform_optimization/versions.tf +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terraform_transparency/audit_demo/trail_3caed73ad5bf.json +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terraform_transparency/audit_trail.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terraform_transparency/audit_trails.json +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terraform_transparency/decision_engine.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terraform_transparency/decision_logs.json +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terraform_transparency/operations.json +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terraform_transparency/terraform_manager.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terraform_transparency/terraform_plans.json +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terraform_transparency/transparency_demo.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/terraform_transparency/transparency_report.json +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/tests/CREDENTIAL_STRATEGY.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/tests/INTEGRATION_STRATEGY.md +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/tests/Makefile +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/tests/ci_pipeline.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/tests/conftest.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/tests/root_tests/test_cli_ux_battle.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/tests/root_tests/test_cli_ux_battle_fixed.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/tests/root_tests/test_cli_ux_final.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/tests/root_tests/test_final_integration.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/tests/root_tests/test_integrated_optimization.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/tests/root_tests/test_p10_production_failover.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/tests/root_tests/test_sso_phase1.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/tests/root_tests/test_vllm_optimization.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/tests/simple_test.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/tests/test_ai_integrations.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/tests/test_checkpoint_manager.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/tests/test_cli_smoke.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/tests/test_dag_executor.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/tests/test_flashoptim.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/tests/test_integration.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/tests/test_job_state_manager.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/tests/test_k8s_regression.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/tests/test_latitude_provider.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/tests/test_major_providers.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/tests/test_mcp_handlers.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/tests/test_new_providers.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/tests/test_provider_conformance.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/tests/test_providers.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/tests/test_semantic_router.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/tests/test_sglang_optimization.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/tests/test_ssh_key_manager.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/tests/test_training_monitor.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/tests/test_training_orchestrator.py +0 -0
- {terradev_cli-5.5.2 → terradev_cli-5.5.3}/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 |
|
|
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>
|
|
@@ -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
|
|
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
|
-
|
|
2966
|
-
itype = f"{pname}-{
|
|
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():
|
|
@@ -3846,6 +3965,11 @@ def optimize(instance_id, auto_apply):
|
|
|
3846
3965
|
"""
|
|
3847
3966
|
all_optimizations = []
|
|
3848
3967
|
|
|
3968
|
+
api = TerradevAPI()
|
|
3969
|
+
instances = api.usage.get("instances_created", [])
|
|
3970
|
+
if instance_id:
|
|
3971
|
+
instances = [inst for inst in instances if inst.get("id") == instance_id]
|
|
3972
|
+
|
|
3849
3973
|
try:
|
|
3850
3974
|
# Fetch fresh quotes for cost optimization
|
|
3851
3975
|
gpu_types = list(set(inst.get("gpu_type", "A100") for inst in instances))
|
|
@@ -4282,6 +4406,8 @@ def job(job_file, optimize):
|
|
|
4282
4406
|
|
|
4283
4407
|
# Load job configuration
|
|
4284
4408
|
try:
|
|
4409
|
+
import yaml
|
|
4410
|
+
|
|
4285
4411
|
with open(job_file, "r") as f:
|
|
4286
4412
|
job_config = yaml.safe_load(f)
|
|
4287
4413
|
|
|
@@ -8546,7 +8672,7 @@ def init(
|
|
|
8546
8672
|
@click.option("--namespace", default="gitops-system", help="Namespace for GitOps tools")
|
|
8547
8673
|
def bootstrap(tool, cluster, namespace):
|
|
8548
8674
|
"""Bootstrap GitOps tool on the cluster"""
|
|
8549
|
-
from terradev_cli.core.gitops_manager import GitOpsManager, GitOpsConfig, GitOpsTool
|
|
8675
|
+
from terradev_cli.core.gitops_manager import GitOpsManager, GitOpsConfig, GitOpsTool, GitProvider
|
|
8550
8676
|
|
|
8551
8677
|
# This is a simplified bootstrap - in practice, you'd load config from previous init
|
|
8552
8678
|
config = GitOpsConfig(
|
|
@@ -8584,7 +8710,7 @@ def bootstrap(tool, cluster, namespace):
|
|
|
8584
8710
|
)
|
|
8585
8711
|
def sync(cluster, environment, tool):
|
|
8586
8712
|
"""Sync cluster with Git repository"""
|
|
8587
|
-
from terradev_cli.core.gitops_manager import GitOpsManager, GitOpsConfig, GitOpsTool
|
|
8713
|
+
from terradev_cli.core.gitops_manager import GitOpsManager, GitOpsConfig, GitOpsTool, GitProvider
|
|
8588
8714
|
|
|
8589
8715
|
# This is a simplified sync - in practice, you'd load config from previous init
|
|
8590
8716
|
config = GitOpsConfig(
|
|
@@ -8618,7 +8744,7 @@ def sync(cluster, environment, tool):
|
|
|
8618
8744
|
@click.option("--environment", default="prod", help="Environment to validate")
|
|
8619
8745
|
def validate(dry_run, cluster, environment):
|
|
8620
8746
|
"""Validate GitOps configuration"""
|
|
8621
|
-
from terradev_cli.core.gitops_manager import GitOpsManager, GitOpsConfig, GitOpsTool
|
|
8747
|
+
from terradev_cli.core.gitops_manager import GitOpsManager, GitOpsConfig, GitOpsTool, GitProvider
|
|
8622
8748
|
|
|
8623
8749
|
# This is a simplified validation - in practice, you'd load config from previous init
|
|
8624
8750
|
config = GitOpsConfig(
|
|
@@ -8652,8 +8778,7 @@ def validate(dry_run, cluster, environment):
|
|
|
8652
8778
|
for warning in results["warnings"]:
|
|
8653
8779
|
print(f" Warning: {warning}")
|
|
8654
8780
|
|
|
8655
|
-
|
|
8656
|
-
asyncio.run(gitops_manager.validate_configuration(path))
|
|
8781
|
+
asyncio.run(run_validate())
|
|
8657
8782
|
|
|
8658
8783
|
|
|
8659
8784
|
# InferX Commands
|
|
@@ -14129,7 +14254,7 @@ def disable_trigger(name):
|
|
|
14129
14254
|
def fire_event(event_type, data, source):
|
|
14130
14255
|
"""Manually fire an event for testing"""
|
|
14131
14256
|
try:
|
|
14132
|
-
from terradev_cli.core.event_system import event_bus, EventType
|
|
14257
|
+
from terradev_cli.core.event_system import event_bus, EventType, Event
|
|
14133
14258
|
|
|
14134
14259
|
event_type_enum = EventType(event_type.replace("-", "_").upper())
|
|
14135
14260
|
|
|
@@ -14328,6 +14453,7 @@ def register_artifact(type, name, uri, environment, artifact_hash, size, user, p
|
|
|
14328
14453
|
Environment,
|
|
14329
14454
|
event_bus,
|
|
14330
14455
|
EventType,
|
|
14456
|
+
Event,
|
|
14331
14457
|
)
|
|
14332
14458
|
|
|
14333
14459
|
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
|
-
|
|
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 = "
|
|
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: {
|
|
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: {
|
|
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: {
|
|
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: {
|
|
574
|
-
prompt = f"{
|
|
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: {
|
|
596
|
+
return f"❌ Generation error: {e}"
|
|
593
597
|
|
|
594
598
|
# Create enhanced chat interface
|
|
595
|
-
with gr.Blocks(title="
|
|
599
|
+
with gr.Blocks(title="__SPACE_NAME__", theme=gr.themes.Soft()) as demo:
|
|
596
600
|
gr.Markdown(f"""
|
|
597
|
-
# 🤖
|
|
601
|
+
# 🤖 __SPACE_NAME__
|
|
598
602
|
|
|
599
603
|
**Model:** `{MODEL_ID}`
|
|
600
|
-
**Hardware:**
|
|
601
|
-
**Parameters:**
|
|
602
|
-
**Streaming:**
|
|
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
|
-
|
|
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 = "
|
|
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="
|
|
750
|
+
st.set_page_config(page_title="__SPACE_NAME__", layout="wide")
|
|
739
751
|
|
|
740
|
-
st.title(f"🔤
|
|
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: {
|
|
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 **{
|
|
805
|
-
st.write(f"📏 Embedding dimensions: **{
|
|
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 {
|
|
820
|
-
y=[f"Text {
|
|
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:
|
|
@@ -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 =
|
|
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
|
)
|
|
@@ -11,8 +11,11 @@ from typing import Dict, List, Any, Optional, Callable, Awaitable
|
|
|
11
11
|
from dataclasses import asdict
|
|
12
12
|
import asyncio
|
|
13
13
|
import aiohttp
|
|
14
|
+
import logging
|
|
14
15
|
import time
|
|
15
16
|
|
|
17
|
+
logger = logging.getLogger(__name__)
|
|
18
|
+
|
|
16
19
|
# Rust connection pool integration
|
|
17
20
|
try:
|
|
18
21
|
from terradev_connection_pool import PyConnectionPool, PyConnectionConfig
|
|
@@ -150,21 +150,16 @@ class RunPodProvider(BaseProvider):
|
|
|
150
150
|
)
|
|
151
151
|
|
|
152
152
|
try:
|
|
153
|
-
# Extract GPU ID from instance type (format: runpod-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
if cloud_type not in ["runpod-community", "runpod-secure"]:
|
|
164
|
-
raise Exception(f"Unsupported cloud type: {cloud_type}")
|
|
165
|
-
|
|
166
|
-
# Determine cloud type for API
|
|
167
|
-
is_secure = cloud_type == "runpod-secure"
|
|
153
|
+
# Extract GPU ID from instance type (format: runpod-community-<GPU_ID> or runpod-secure-<GPU_ID>)
|
|
154
|
+
# Use startswith to handle GPU IDs that contain hyphens (e.g. NVIDIA A100-SXM4-40GB)
|
|
155
|
+
if instance_type.startswith("runpod-community-"):
|
|
156
|
+
is_secure = False
|
|
157
|
+
gpu_id = instance_type[len("runpod-community-"):]
|
|
158
|
+
elif instance_type.startswith("runpod-secure-"):
|
|
159
|
+
is_secure = True
|
|
160
|
+
gpu_id = instance_type[len("runpod-secure-"):]
|
|
161
|
+
else:
|
|
162
|
+
raise Exception(f"Unsupported cloud type: {instance_type}")
|
|
168
163
|
|
|
169
164
|
# Create pod specification
|
|
170
165
|
pod_spec = {
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/agentic-template/helm/values-agentic.yaml
RENAMED
|
File without changes
|
{terradev_cli-5.5.2 → terradev_cli-5.5.3}/clusters/agentic-template/k8s/fleet-manifests.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|