thestage 0.5.41__tar.gz → 0.5.43__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 (174) hide show
  1. {thestage-0.5.41 → thestage-0.5.43}/PKG-INFO +1 -1
  2. {thestage-0.5.41 → thestage-0.5.43}/pyproject.toml +1 -1
  3. {thestage-0.5.41 → thestage-0.5.43}/thestage/__init__.py +1 -1
  4. {thestage-0.5.41 → thestage-0.5.43}/thestage/color_scheme/color_scheme.py +1 -0
  5. {thestage-0.5.41 → thestage-0.5.43}/thestage/controllers/project_controller.py +40 -0
  6. thestage-0.5.43/thestage/main.py +19 -0
  7. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/api_client.py +4 -0
  8. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/project_controller/project_start_inference_simulator_request.py +3 -1
  9. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/project/project_service.py +5 -1
  10. thestage-0.5.41/thestage/main.py +0 -18
  11. {thestage-0.5.41 → thestage-0.5.43}/LICENSE.txt +0 -0
  12. {thestage-0.5.41 → thestage-0.5.43}/README.md +0 -0
  13. {thestage-0.5.41 → thestage-0.5.43}/thestage/.env +0 -0
  14. {thestage-0.5.41 → thestage-0.5.43}/thestage/__main__.py +0 -0
  15. {thestage-0.5.41 → thestage-0.5.43}/thestage/config/__init__.py +0 -0
  16. {thestage-0.5.41 → thestage-0.5.43}/thestage/config/env_base.py +0 -0
  17. {thestage-0.5.41 → thestage-0.5.43}/thestage/controllers/__init__.py +0 -0
  18. {thestage-0.5.41 → thestage-0.5.43}/thestage/controllers/base_controller.py +0 -0
  19. {thestage-0.5.41 → thestage-0.5.43}/thestage/controllers/config_controller.py +0 -0
  20. {thestage-0.5.41 → thestage-0.5.43}/thestage/controllers/container_controller.py +0 -0
  21. {thestage-0.5.41 → thestage-0.5.43}/thestage/controllers/instance_controller.py +0 -0
  22. {thestage-0.5.41 → thestage-0.5.43}/thestage/controllers/utils_controller.py +0 -0
  23. {thestage-0.5.41 → thestage-0.5.43}/thestage/debug_main.dist.py +0 -0
  24. {thestage-0.5.41 → thestage-0.5.43}/thestage/entities/__init__.py +0 -0
  25. {thestage-0.5.41 → thestage-0.5.43}/thestage/entities/container.py +0 -0
  26. {thestage-0.5.41 → thestage-0.5.43}/thestage/entities/enums/__init__.py +0 -0
  27. {thestage-0.5.41 → thestage-0.5.43}/thestage/entities/enums/order_direction_type.py +0 -0
  28. {thestage-0.5.41 → thestage-0.5.43}/thestage/entities/enums/shell_type.py +0 -0
  29. {thestage-0.5.41 → thestage-0.5.43}/thestage/entities/enums/tail_output_type.py +0 -0
  30. {thestage-0.5.41 → thestage-0.5.43}/thestage/entities/enums/yes_no_response.py +0 -0
  31. {thestage-0.5.41 → thestage-0.5.43}/thestage/entities/file_item.py +0 -0
  32. {thestage-0.5.41 → thestage-0.5.43}/thestage/entities/project_inference_simulator.py +0 -0
  33. {thestage-0.5.41 → thestage-0.5.43}/thestage/entities/project_inference_simulator_model.py +0 -0
  34. {thestage-0.5.41 → thestage-0.5.43}/thestage/entities/project_task.py +0 -0
  35. {thestage-0.5.41 → thestage-0.5.43}/thestage/entities/rented_instance.py +0 -0
  36. {thestage-0.5.41 → thestage-0.5.43}/thestage/entities/self_hosted_instance.py +0 -0
  37. {thestage-0.5.41 → thestage-0.5.43}/thestage/exceptions/__init__.py +0 -0
  38. {thestage-0.5.41 → thestage-0.5.43}/thestage/exceptions/auth_exception.py +0 -0
  39. {thestage-0.5.41 → thestage-0.5.43}/thestage/exceptions/base_exception.py +0 -0
  40. {thestage-0.5.41 → thestage-0.5.43}/thestage/exceptions/business_logic_exception.py +0 -0
  41. {thestage-0.5.41 → thestage-0.5.43}/thestage/exceptions/config_exception.py +0 -0
  42. {thestage-0.5.41 → thestage-0.5.43}/thestage/exceptions/file_system_exception.py +0 -0
  43. {thestage-0.5.41 → thestage-0.5.43}/thestage/exceptions/git_access_exception.py +0 -0
  44. {thestage-0.5.41 → thestage-0.5.43}/thestage/exceptions/http_error_exception.py +0 -0
  45. {thestage-0.5.41 → thestage-0.5.43}/thestage/exceptions/remote_server_exception.py +0 -0
  46. {thestage-0.5.41 → thestage-0.5.43}/thestage/git/ProgressPrinter.py +0 -0
  47. {thestage-0.5.41 → thestage-0.5.43}/thestage/helpers/__init__.py +0 -0
  48. {thestage-0.5.41 → thestage-0.5.43}/thestage/helpers/error_handler.py +0 -0
  49. {thestage-0.5.41 → thestage-0.5.43}/thestage/helpers/logger/__init__.py +0 -0
  50. {thestage-0.5.41 → thestage-0.5.43}/thestage/helpers/logger/app_logger.py +0 -0
  51. {thestage-0.5.41 → thestage-0.5.43}/thestage/helpers/ssh_util.py +0 -0
  52. {thestage-0.5.41 → thestage-0.5.43}/thestage/i18n/en_GB/messages.po +0 -0
  53. {thestage-0.5.41 → thestage-0.5.43}/thestage/i18n/translation.py +0 -0
  54. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/.env +0 -0
  55. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/__init__.py +0 -0
  56. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/abstract_mapper.py +0 -0
  57. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/abstract_service.py +0 -0
  58. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/app_config_service.py +0 -0
  59. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/.DS_Store +0 -0
  60. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/__init__.py +0 -0
  61. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/git/__init__.py +0 -0
  62. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/git/git_client.py +0 -0
  63. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/__init__.py +0 -0
  64. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/core/api_client_abstract.py +0 -0
  65. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/core/api_client_core.py +0 -0
  66. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/core/http_client_exception.py +0 -0
  67. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/__init__.py +0 -0
  68. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/base_response.py +0 -0
  69. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/cloud_provider_region.py +0 -0
  70. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/container_param_request.py +0 -0
  71. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/container_response.py +0 -0
  72. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/docker_container_assigned_device.py +0 -0
  73. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/docker_container_controller/docker_container_list_request.py +0 -0
  74. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/docker_container_controller/docker_container_list_response.py +0 -0
  75. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/docker_container_mapping.py +0 -0
  76. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/entity_filter_request.py +0 -0
  77. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/enums/__init__.py +0 -0
  78. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/enums/container_pending_action.py +0 -0
  79. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/enums/container_status.py +0 -0
  80. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/enums/cpu_type.py +0 -0
  81. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/enums/currency_type.py +0 -0
  82. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/enums/daemon_status.py +0 -0
  83. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/enums/disk_type.py +0 -0
  84. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/enums/drive_type.py +0 -0
  85. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/enums/gpu_name.py +0 -0
  86. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/enums/inference_model_status.py +0 -0
  87. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/enums/inference_simulator_status.py +0 -0
  88. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/enums/instance_rented_status.py +0 -0
  89. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/enums/instance_type.py +0 -0
  90. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/enums/location_region.py +0 -0
  91. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/enums/power_status.py +0 -0
  92. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/enums/provider_name.py +0 -0
  93. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/enums/selfhosted_status.py +0 -0
  94. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/enums/task_execution_status.py +0 -0
  95. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/enums/task_status.py +0 -0
  96. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/frontend_status.py +0 -0
  97. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/inference_controller/deploy_inference_model_to_instance_request.py +0 -0
  98. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/inference_controller/deploy_inference_model_to_instance_response.py +0 -0
  99. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/inference_controller/deploy_inference_model_to_sagemaker_request.py +0 -0
  100. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/inference_controller/deploy_inference_model_to_sagemaker_response.py +0 -0
  101. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/inference_controller/get_inference_simulator_request.py +0 -0
  102. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/inference_controller/get_inference_simulator_response.py +0 -0
  103. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/inference_controller/inference_simulator_list_for_project_request.py +0 -0
  104. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/inference_controller/inference_simulator_list_for_project_response.py +0 -0
  105. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/inference_controller/inference_simulator_model_list_for_project_request.py +0 -0
  106. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/inference_controller/inference_simulator_model_list_for_project_response.py +0 -0
  107. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/inference_simulator_model_response.py +0 -0
  108. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/inference_simulator_response.py +0 -0
  109. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/installed_service.py +0 -0
  110. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/instance_detected_gpus.py +0 -0
  111. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/instance_rented_response.py +0 -0
  112. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/logging_controller/docker_container_log_stream_request.py +0 -0
  113. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/logging_controller/log_polling_request.py +0 -0
  114. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/logging_controller/log_polling_response.py +0 -0
  115. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/logging_controller/task_log_stream_request.py +0 -0
  116. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/logging_controller/user_logs_query_request.py +0 -0
  117. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/logging_controller/user_logs_query_response.py +0 -0
  118. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/paginated_entity_list.py +0 -0
  119. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/pagination_data.py +0 -0
  120. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/price_definition.py +0 -0
  121. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/project_controller/project_get_deploy_ssh_key_request.py +0 -0
  122. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/project_controller/project_get_deploy_ssh_key_response.py +0 -0
  123. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/project_controller/project_push_inference_simulator_model_request.py +0 -0
  124. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/project_controller/project_push_inference_simulator_model_response.py +0 -0
  125. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/project_controller/project_run_task_request.py +0 -0
  126. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/project_controller/project_run_task_response.py +0 -0
  127. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/project_controller/project_start_inference_simulator_response.py +0 -0
  128. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/project_response.py +0 -0
  129. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/selfhosted_instance_response.py +0 -0
  130. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/sftp_path_helper.py +0 -0
  131. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/ssh_key_controller/add_ssh_key_to_user_request.py +0 -0
  132. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/ssh_key_controller/add_ssh_key_to_user_response.py +0 -0
  133. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/ssh_key_controller/add_ssh_public_key_to_instance_request.py +0 -0
  134. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/ssh_key_controller/add_ssh_public_key_to_instance_response.py +0 -0
  135. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/ssh_key_controller/is_user_has_public_ssh_key_request.py +0 -0
  136. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/ssh_key_controller/is_user_has_public_ssh_key_response.py +0 -0
  137. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/task_controller/task_list_for_project_request.py +0 -0
  138. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/task_controller/task_list_for_project_response.py +0 -0
  139. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/task_controller/task_status_localized_map_response.py +0 -0
  140. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/task_controller/task_view_response.py +0 -0
  141. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/clients/thestage_api/dtos/user_profile.py +0 -0
  142. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/config_provider/__init__.py +0 -0
  143. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/config_provider/config_provider.py +0 -0
  144. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/connect/connect_service.py +0 -0
  145. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/connect/dto/remote_server_config.py +0 -0
  146. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/container/__init__.py +0 -0
  147. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/container/container_service.py +0 -0
  148. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/container/mapper/__init__.py +0 -0
  149. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/container/mapper/container_mapper.py +0 -0
  150. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/core_files/config_entity.py +0 -0
  151. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/filesystem_service.py +0 -0
  152. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/instance/__init__.py +0 -0
  153. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/instance/instance_service.py +0 -0
  154. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/instance/mapper/__init__.py +0 -0
  155. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/instance/mapper/instance_mapper.py +0 -0
  156. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/instance/mapper/selfhosted_mapper.py +0 -0
  157. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/logging/byte_print_style.py +0 -0
  158. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/logging/dto/log_message.py +0 -0
  159. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/logging/dto/log_type.py +0 -0
  160. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/logging/exception/log_polling_exception.py +0 -0
  161. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/logging/logging_constants.py +0 -0
  162. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/logging/logging_service.py +0 -0
  163. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/project/__init__.py +0 -0
  164. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/project/dto/inference_simulator_dto.py +0 -0
  165. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/project/dto/inference_simulator_model_dto.py +0 -0
  166. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/project/dto/project_config.py +0 -0
  167. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/project/mapper/__init__.py +0 -0
  168. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/project/mapper/project_inference_simulator_mapper.py +0 -0
  169. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/project/mapper/project_inference_simulator_model_mapper.py +0 -0
  170. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/project/mapper/project_task_mapper.py +0 -0
  171. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/remote_server_service.py +0 -0
  172. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/service_factory.py +0 -0
  173. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/task/dto/task_dto.py +0 -0
  174. {thestage-0.5.41 → thestage-0.5.43}/thestage/services/validation_service.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: thestage
3
- Version: 0.5.41
3
+ Version: 0.5.43
4
4
  Summary:
5
5
  Author: TheStage AI team
6
6
  Author-email: hello@thestage.ai
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "thestage"
3
- version = "0.5.41"
3
+ version = "0.5.43"
4
4
  description = ""
5
5
  authors = ["TheStage AI team <hello@thestage.ai>"]
6
6
  readme = "README.md"
@@ -1,3 +1,3 @@
1
1
  from . import *
2
2
  __app_name__ = "thestage"
3
- __version__ = "0.5.41"
3
+ __version__ = "0.5.43"
@@ -3,3 +3,4 @@ from enum import Enum
3
3
 
4
4
  class ColorScheme(str, Enum):
5
5
  GIT_HEADLESS = "orange_red1"
6
+ WARNING = "orange_red1"
@@ -1,7 +1,9 @@
1
1
  import time
2
+ from pathlib import Path
2
3
  from typing import Optional, List
3
4
 
4
5
  import re
6
+
5
7
  import typer
6
8
  from typing_extensions import Annotated
7
9
 
@@ -425,6 +427,13 @@ def run_inference_simulator(
425
427
  help=__("Disable real-time log streaming"),
426
428
  is_eager=False,
427
429
  ),
430
+ is_skip_installation: Optional[bool] = typer.Option(
431
+ False,
432
+ "--skip-installation",
433
+ "-si",
434
+ help=__("Skip installing dependencies from requirements.txt and install.sh"),
435
+ is_eager=False,
436
+ ),
428
437
  ):
429
438
  """
430
439
  Run an inference simulator within a project
@@ -438,6 +447,35 @@ def run_inference_simulator(
438
447
  service_factory = validate_config_and_get_service_factory(working_directory=working_directory)
439
448
  config = service_factory.get_config_provider().get_full_config()
440
449
 
450
+ working_dir_path = Path(working_directory) if working_directory else Path(config.runtime.working_directory)
451
+ inference_files = list(working_dir_path.rglob("inference.py"))
452
+ if not inference_files:
453
+ typer.echo("No inference.py file found in the project directory.")
454
+ raise typer.Exit(1)
455
+ elif len(inference_files) == 1:
456
+ selected_inference = inference_files[0]
457
+ else:
458
+ choices = [str(path.relative_to(working_dir_path)) for path in inference_files]
459
+ typer.echo("Multiple inference.py files found:")
460
+ for idx, choice in enumerate(choices, start=1):
461
+ typer.echo(f"{idx}) {choice}")
462
+ choice_str = typer.prompt("Choose which inference.py to use")
463
+ try:
464
+ choice_index = int(choice_str)
465
+ except ValueError:
466
+ raise typer.BadParameter("Invalid input. Please enter a number.")
467
+ if not (1 <= choice_index <= len(choices)):
468
+ raise typer.BadParameter("Choice out of range.")
469
+ selected_inference = inference_files[choice_index - 1]
470
+
471
+ relative_inference = selected_inference.relative_to(working_dir_path)
472
+ parent_dir = relative_inference.parent
473
+ if parent_dir == Path("."):
474
+ inference_dir = "/"
475
+ else:
476
+ inference_dir = f"{parent_dir.as_posix()}/"
477
+ typer.echo(f"Selected inference file relative path: {inference_dir}")
478
+
441
479
  project_service = service_factory.get_project_service()
442
480
 
443
481
  project_service.project_run_inference_simulator(
@@ -446,6 +484,8 @@ def run_inference_simulator(
446
484
  slug=unique_id,
447
485
  rented_instance_unique_id=rented_instance_unique_id,
448
486
  self_hosted_instance_unique_id=self_hosted_instance_unique_id,
487
+ inference_dir=inference_dir,
488
+ is_skip_installation=is_skip_installation,
449
489
  )
450
490
 
451
491
  if enable_log_stream:
@@ -0,0 +1,19 @@
1
+ def main():
2
+ try:
3
+ import warnings
4
+ warnings.filterwarnings(action='ignore', module='.*paramiko.*')
5
+
6
+ from . import __app_name__
7
+
8
+ from thestage.controllers import base_controller, container_controller, instance_controller, project_controller, \
9
+ config_controller
10
+
11
+ base_controller.app.add_typer(container_controller.app, name="container")
12
+ base_controller.app.add_typer(instance_controller.app, name="instance")
13
+ base_controller.app.add_typer(project_controller.app, name="project")
14
+ base_controller.app.add_typer(config_controller.app, name="config")
15
+
16
+ import thestage.config
17
+ base_controller.app(prog_name=__app_name__)
18
+ except KeyboardInterrupt:
19
+ print('THESTAGE: Keyboard Interrupt')
@@ -603,6 +603,8 @@ class TheStageApiClient(TheStageApiClientCore):
603
603
  commit_hash: Optional[str] = None,
604
604
  rented_instance_unique_id: Optional[str] = None,
605
605
  self_hosted_instance_unique_id: Optional[str] = None,
606
+ inference_dir: Optional[str] = None,
607
+ is_skip_installation: Optional[bool] = False,
606
608
  ) -> Optional[ProjectStartInferenceSimulatorResponse]:
607
609
  request = ProjectStartInferenceSimulatorRequest(
608
610
  projectSlug=project_slug,
@@ -610,6 +612,8 @@ class TheStageApiClient(TheStageApiClientCore):
610
612
  slug=slug,
611
613
  instanceRentedUId=rented_instance_unique_id,
612
614
  selfhostedInstanceUId=self_hosted_instance_unique_id,
615
+ inferenceDir=inference_dir,
616
+ isSkipInstallation=is_skip_installation,
613
617
  )
614
618
 
615
619
  response = self._request(
@@ -10,4 +10,6 @@ class ProjectStartInferenceSimulatorRequest(BaseModel):
10
10
  instanceRentedUId: Optional[str] = Field(None, alias='instanceRentedUId')
11
11
  selfhostedInstanceUId: Optional[str] = Field(None, alias='selfhostedInstanceUId')
12
12
  commitHash: Optional[str] = Field(None, alias='commitHash')
13
- slug: Optional[str] = Field(None, alias='slug')
13
+ slug: Optional[str] = Field(None, alias='slug')
14
+ inferenceDir: Optional[str] = Field(None, alias='inferenceDir')
15
+ isSkipInstallation: Optional[bool] = Field(False, alias='isSkipInstallation')
@@ -390,7 +390,7 @@ class ProjectService(AbstractService):
390
390
  )
391
391
  if run_task_response:
392
392
  if run_task_response.message:
393
- typer.echo(run_task_response.message)
393
+ print(f"[{ColorScheme.WARNING.value}]{run_task_response.message}[{ColorScheme.WARNING.value}]")
394
394
  if run_task_response.is_success and run_task_response.task:
395
395
  typer.echo(f"Task '{run_task_response.task.title}' has been scheduled successfully. Task ID: {run_task_response.task.id}")
396
396
  return run_task_response.task
@@ -409,6 +409,8 @@ class ProjectService(AbstractService):
409
409
  commit_hash: Optional[str] = None,
410
410
  rented_instance_unique_id: Optional[str] = None,
411
411
  self_hosted_instance_unique_id: Optional[str] = None,
412
+ inference_dir: Optional[str] = None,
413
+ is_skip_installation: Optional[bool] = False,
412
414
  ) -> Optional[InferenceSimulatorDto]:
413
415
  project_config: ProjectConfig = self.__get_fixed_project_config(config=config)
414
416
  if not project_config:
@@ -543,6 +545,8 @@ class ProjectService(AbstractService):
543
545
  slug=slug,
544
546
  rented_instance_unique_id=rented_instance_unique_id,
545
547
  self_hosted_instance_unique_id=self_hosted_instance_unique_id,
548
+ inference_dir=inference_dir,
549
+ is_skip_installation=is_skip_installation,
546
550
  )
547
551
  if start_inference_simulator_response:
548
552
  if start_inference_simulator_response.message:
@@ -1,18 +0,0 @@
1
- # temp fix to reduce annoying warnings
2
- import warnings
3
- warnings.filterwarnings(action='ignore', module='.*paramiko.*')
4
-
5
- from . import __app_name__
6
-
7
- from thestage.controllers import base_controller, container_controller, instance_controller, project_controller, \
8
- config_controller
9
-
10
- base_controller.app.add_typer(container_controller.app, name="container")
11
- base_controller.app.add_typer(instance_controller.app, name="instance")
12
- base_controller.app.add_typer(project_controller.app, name="project")
13
- base_controller.app.add_typer(config_controller.app, name="config")
14
-
15
-
16
- def main():
17
- import thestage.config
18
- base_controller.app(prog_name=__app_name__)
File without changes
File without changes
File without changes