anyscale 0.24.86__py3-none-any.whl

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 (1131) hide show
  1. anyscale/__init__.py +181 -0
  2. anyscale/_private/anyscale_client/README.md +16 -0
  3. anyscale/_private/anyscale_client/__init__.py +8 -0
  4. anyscale/_private/anyscale_client/anyscale_client.py +1847 -0
  5. anyscale/_private/anyscale_client/common.py +593 -0
  6. anyscale/_private/anyscale_client/fake_anyscale_client.py +1080 -0
  7. anyscale/_private/docgen/README.md +15 -0
  8. anyscale/_private/docgen/__main__.py +700 -0
  9. anyscale/_private/docgen/api.md +1106 -0
  10. anyscale/_private/docgen/generator.py +559 -0
  11. anyscale/_private/docgen/generator_legacy.py +104 -0
  12. anyscale/_private/docgen/models.md +2261 -0
  13. anyscale/_private/models/__init__.py +2 -0
  14. anyscale/_private/models/image_uri.py +116 -0
  15. anyscale/_private/models/model_base.py +251 -0
  16. anyscale/_private/sdk/__init__.py +102 -0
  17. anyscale/_private/sdk/base_sdk.py +35 -0
  18. anyscale/_private/sdk/timer.py +46 -0
  19. anyscale/_private/utils/__init__.py +0 -0
  20. anyscale/_private/utils/progress_util.py +85 -0
  21. anyscale/_private/workload/__init__.py +2 -0
  22. anyscale/_private/workload/workload_config.py +195 -0
  23. anyscale/_private/workload/workload_sdk.py +324 -0
  24. anyscale/aggregated_instance_usage/__init__.py +36 -0
  25. anyscale/aggregated_instance_usage/_private/aggregated_instance_usage_sdk.py +30 -0
  26. anyscale/aggregated_instance_usage/commands.py +42 -0
  27. anyscale/aggregated_instance_usage/models.py +85 -0
  28. anyscale/anyscale-cloud-setup-gcp-oa.yaml +88 -0
  29. anyscale/anyscale-cloud-setup-gcp.yaml +113 -0
  30. anyscale/anyscale-cloud-setup-oa.yaml +121 -0
  31. anyscale/anyscale-cloud-setup.yaml +327 -0
  32. anyscale/anyscale_pydantic/HISTORY.md +1254 -0
  33. anyscale/anyscale_pydantic/LICENSE +21 -0
  34. anyscale/anyscale_pydantic/PKG-INFO +1351 -0
  35. anyscale/anyscale_pydantic/README.md +7 -0
  36. anyscale/anyscale_pydantic/__init__.py +131 -0
  37. anyscale/anyscale_pydantic/_hypothesis_plugin.py +391 -0
  38. anyscale/anyscale_pydantic/annotated_types.py +72 -0
  39. anyscale/anyscale_pydantic/class_validators.py +361 -0
  40. anyscale/anyscale_pydantic/color.py +494 -0
  41. anyscale/anyscale_pydantic/config.py +191 -0
  42. anyscale/anyscale_pydantic/dataclasses.py +478 -0
  43. anyscale/anyscale_pydantic/datetime_parse.py +248 -0
  44. anyscale/anyscale_pydantic/decorator.py +264 -0
  45. anyscale/anyscale_pydantic/env_settings.py +350 -0
  46. anyscale/anyscale_pydantic/error_wrappers.py +162 -0
  47. anyscale/anyscale_pydantic/errors.py +646 -0
  48. anyscale/anyscale_pydantic/fields.py +1256 -0
  49. anyscale/anyscale_pydantic/generics.py +400 -0
  50. anyscale/anyscale_pydantic/json.py +112 -0
  51. anyscale/anyscale_pydantic/main.py +1109 -0
  52. anyscale/anyscale_pydantic/mypy.py +943 -0
  53. anyscale/anyscale_pydantic/networks.py +739 -0
  54. anyscale/anyscale_pydantic/parse.py +66 -0
  55. anyscale/anyscale_pydantic/py.typed +0 -0
  56. anyscale/anyscale_pydantic/schema.py +1164 -0
  57. anyscale/anyscale_pydantic/tools.py +92 -0
  58. anyscale/anyscale_pydantic/types.py +1206 -0
  59. anyscale/anyscale_pydantic/typing.py +603 -0
  60. anyscale/anyscale_pydantic/utils.py +803 -0
  61. anyscale/anyscale_pydantic/validators.py +765 -0
  62. anyscale/anyscale_pydantic/version.py +38 -0
  63. anyscale/anyscale_schema.json +9 -0
  64. anyscale/api.py +215 -0
  65. anyscale/api_utils/README.md +2 -0
  66. anyscale/api_utils/__init__.py +0 -0
  67. anyscale/api_utils/common_utils.py +81 -0
  68. anyscale/api_utils/exceptions/__init__.py +0 -0
  69. anyscale/api_utils/exceptions/job_errors.py +2 -0
  70. anyscale/api_utils/job_logs_util.py +116 -0
  71. anyscale/api_utils/job_util.py +22 -0
  72. anyscale/api_utils/logs_util.py +61 -0
  73. anyscale/authenticate.py +298 -0
  74. anyscale/aws_iam_policies.py +465 -0
  75. anyscale/background/__init__.py +0 -0
  76. anyscale/background/job_runner.py +64 -0
  77. anyscale/cli_logger.py +378 -0
  78. anyscale/client/.gitignore +66 -0
  79. anyscale/client/.openapi-generator/VERSION +1 -0
  80. anyscale/client/.openapi-generator-ignore +23 -0
  81. anyscale/client/README.md +1070 -0
  82. anyscale/client/git_push.sh +58 -0
  83. anyscale/client/openapi_client/__init__.py +667 -0
  84. anyscale/client/openapi_client/api/__init__.py +6 -0
  85. anyscale/client/openapi_client/api/default_api.py +40922 -0
  86. anyscale/client/openapi_client/api_client.py +647 -0
  87. anyscale/client/openapi_client/configuration.py +373 -0
  88. anyscale/client/openapi_client/exceptions.py +120 -0
  89. anyscale/client/openapi_client/models/__init__.py +652 -0
  90. anyscale/client/openapi_client/models/access_config.py +122 -0
  91. anyscale/client/openapi_client/models/aggregated_instance_usage_with_cost_model.py +733 -0
  92. anyscale/client/openapi_client/models/aggregatedinstanceusagewithcostmodel_list_response.py +147 -0
  93. anyscale/client/openapi_client/models/aica_endpoint.py +527 -0
  94. anyscale/client/openapi_client/models/aica_endpoint_event.py +433 -0
  95. anyscale/client/openapi_client/models/aica_endpoint_event_level.py +103 -0
  96. anyscale/client/openapi_client/models/aica_endpoint_event_type.py +120 -0
  97. anyscale/client/openapi_client/models/aica_endpoint_scope.py +102 -0
  98. anyscale/client/openapi_client/models/aica_model.py +398 -0
  99. anyscale/client/openapi_client/models/aica_model_accelerator_map.py +123 -0
  100. anyscale/client/openapi_client/models/aica_model_configuration.py +209 -0
  101. anyscale/client/openapi_client/models/aica_observability_urls.py +178 -0
  102. anyscale/client/openapi_client/models/aicaendpoint_list_response.py +147 -0
  103. anyscale/client/openapi_client/models/aicaendpoint_response.py +121 -0
  104. anyscale/client/openapi_client/models/aicaendpointevent_list_response.py +147 -0
  105. anyscale/client/openapi_client/models/aicamodel_list_response.py +147 -0
  106. anyscale/client/openapi_client/models/aicamodel_response.py +121 -0
  107. anyscale/client/openapi_client/models/aioa_cloud_waitlist_record.py +254 -0
  108. anyscale/client/openapi_client/models/aioacloudwaitlistrecord_response.py +121 -0
  109. anyscale/client/openapi_client/models/alert_type.py +103 -0
  110. anyscale/client/openapi_client/models/anyscale_aws_account.py +121 -0
  111. anyscale/client/openapi_client/models/anyscale_service_account.py +256 -0
  112. anyscale/client/openapi_client/models/anyscale_version_response.py +121 -0
  113. anyscale/client/openapi_client/models/anyscaleawsaccount_response.py +121 -0
  114. anyscale/client/openapi_client/models/anyscaled_credential_response.py +121 -0
  115. anyscale/client/openapi_client/models/anyscaledcredentialresponse_response.py +121 -0
  116. anyscale/client/openapi_client/models/anyscaleserviceaccount_response.py +121 -0
  117. anyscale/client/openapi_client/models/anyscaleversionresponse_response.py +121 -0
  118. anyscale/client/openapi_client/models/api_key_parameters.py +147 -0
  119. anyscale/client/openapi_client/models/app_config.py +436 -0
  120. anyscale/client/openapi_client/models/app_config_config_schema.py +235 -0
  121. anyscale/client/openapi_client/models/appconfig_list_response.py +147 -0
  122. anyscale/client/openapi_client/models/appconfig_response.py +121 -0
  123. anyscale/client/openapi_client/models/application_type.py +99 -0
  124. anyscale/client/openapi_client/models/applied_snapshot.py +175 -0
  125. anyscale/client/openapi_client/models/apply_production_service_v2_model.py +490 -0
  126. anyscale/client/openapi_client/models/archive_status.py +101 -0
  127. anyscale/client/openapi_client/models/archived_logs_info.py +164 -0
  128. anyscale/client/openapi_client/models/archivedlogsinfo_response.py +121 -0
  129. anyscale/client/openapi_client/models/attach_machine_pool_to_cloud_request.py +152 -0
  130. anyscale/client/openapi_client/models/attachmachinepooltocloudresponse_response.py +121 -0
  131. anyscale/client/openapi_client/models/aviary_model_config_v2.py +358 -0
  132. anyscale/client/openapi_client/models/aws_credentials.py +181 -0
  133. anyscale/client/openapi_client/models/aws_memory_db_cluster_config.py +148 -0
  134. anyscale/client/openapi_client/models/aws_region_and_zones.py +123 -0
  135. anyscale/client/openapi_client/models/aws_region_info.py +152 -0
  136. anyscale/client/openapi_client/models/awsregionandzones_response.py +121 -0
  137. anyscale/client/openapi_client/models/bank_account_information.py +239 -0
  138. anyscale/client/openapi_client/models/base_job_status.py +105 -0
  139. anyscale/client/openapi_client/models/baseimagesenum.py +2130 -0
  140. anyscale/client/openapi_client/models/batch_response_batched_result_organization_invitation_base.py +121 -0
  141. anyscale/client/openapi_client/models/batched_result_organization_invitation_base.py +173 -0
  142. anyscale/client/openapi_client/models/billing_information.py +181 -0
  143. anyscale/client/openapi_client/models/billing_version_code.py +100 -0
  144. anyscale/client/openapi_client/models/body_aws_marketplace_registration_api_v2_organization_billing_aws_marketplace_registration_post.py +121 -0
  145. anyscale/client/openapi_client/models/buffer_registration.py +285 -0
  146. anyscale/client/openapi_client/models/build.py +607 -0
  147. anyscale/client/openapi_client/models/build_log_response.py +123 -0
  148. anyscale/client/openapi_client/models/build_registration.py +285 -0
  149. anyscale/client/openapi_client/models/build_response.py +121 -0
  150. anyscale/client/openapi_client/models/build_status.py +104 -0
  151. anyscale/client/openapi_client/models/buildlogresponse_response.py +121 -0
  152. anyscale/client/openapi_client/models/card.py +181 -0
  153. anyscale/client/openapi_client/models/card_id.py +108 -0
  154. anyscale/client/openapi_client/models/card_list_response.py +147 -0
  155. anyscale/client/openapi_client/models/change_password_params.py +148 -0
  156. anyscale/client/openapi_client/models/cleanup_leaked_grafana_dashboard_response.py +208 -0
  157. anyscale/client/openapi_client/models/cleanupleakedgrafanadashboardresponse_response.py +121 -0
  158. anyscale/client/openapi_client/models/clone_experimental_workspace.py +151 -0
  159. anyscale/client/openapi_client/models/cloud.py +802 -0
  160. anyscale/client/openapi_client/models/cloud_analytics_event.py +351 -0
  161. anyscale/client/openapi_client/models/cloud_analytics_event_cloud_provider_error.py +152 -0
  162. anyscale/client/openapi_client/models/cloud_analytics_event_cloud_resource.py +117 -0
  163. anyscale/client/openapi_client/models/cloud_analytics_event_command_name.py +103 -0
  164. anyscale/client/openapi_client/models/cloud_analytics_event_error.py +150 -0
  165. anyscale/client/openapi_client/models/cloud_analytics_event_name.py +109 -0
  166. anyscale/client/openapi_client/models/cloud_collaborator.py +175 -0
  167. anyscale/client/openapi_client/models/cloud_collaborator_value.py +177 -0
  168. anyscale/client/openapi_client/models/cloud_collaborators_query.py +122 -0
  169. anyscale/client/openapi_client/models/cloud_config.py +206 -0
  170. anyscale/client/openapi_client/models/cloud_data_bucket_access_mode.py +100 -0
  171. anyscale/client/openapi_client/models/cloud_data_bucket_file_type.py +102 -0
  172. anyscale/client/openapi_client/models/cloud_data_bucket_presigned_upload_info.py +268 -0
  173. anyscale/client/openapi_client/models/cloud_data_bucket_presigned_upload_request.py +152 -0
  174. anyscale/client/openapi_client/models/cloud_data_bucket_presigned_upload_scheme.py +100 -0
  175. anyscale/client/openapi_client/models/cloud_data_bucket_presigned_url_request.py +209 -0
  176. anyscale/client/openapi_client/models/cloud_data_bucket_presigned_url_response.py +296 -0
  177. anyscale/client/openapi_client/models/cloud_data_bucket_presigned_url_scheme.py +100 -0
  178. anyscale/client/openapi_client/models/cloud_data_bucket_request_scope.py +100 -0
  179. anyscale/client/openapi_client/models/cloud_hosting_type.py +100 -0
  180. anyscale/client/openapi_client/models/cloud_list_response.py +147 -0
  181. anyscale/client/openapi_client/models/cloud_name_options.py +121 -0
  182. anyscale/client/openapi_client/models/cloud_overview_dashboard.py +175 -0
  183. anyscale/client/openapi_client/models/cloud_project_collaborator.py +175 -0
  184. anyscale/client/openapi_client/models/cloud_project_collaborator_value.py +121 -0
  185. anyscale/client/openapi_client/models/cloud_provider.py +102 -0
  186. anyscale/client/openapi_client/models/cloud_providers.py +103 -0
  187. anyscale/client/openapi_client/models/cloud_region_and_zones.py +123 -0
  188. anyscale/client/openapi_client/models/cloud_region_info.py +152 -0
  189. anyscale/client/openapi_client/models/cloud_resource.py +740 -0
  190. anyscale/client/openapi_client/models/cloud_resource_gcp.py +691 -0
  191. anyscale/client/openapi_client/models/cloud_response.py +121 -0
  192. anyscale/client/openapi_client/models/cloud_state.py +104 -0
  193. anyscale/client/openapi_client/models/cloud_status.py +100 -0
  194. anyscale/client/openapi_client/models/cloud_type.py +100 -0
  195. anyscale/client/openapi_client/models/cloud_types.py +100 -0
  196. anyscale/client/openapi_client/models/cloud_version.py +100 -0
  197. anyscale/client/openapi_client/models/cloud_waitlist_status.py +102 -0
  198. anyscale/client/openapi_client/models/cloud_with_cloud_resource.py +830 -0
  199. anyscale/client/openapi_client/models/cloud_with_cloud_resource_gcp.py +830 -0
  200. anyscale/client/openapi_client/models/cloudcollaborator_list_response.py +147 -0
  201. anyscale/client/openapi_client/models/clouddatabucketpresigneduploadinfo_response.py +121 -0
  202. anyscale/client/openapi_client/models/clouddatabucketpresignedurlresponse_response.py +121 -0
  203. anyscale/client/openapi_client/models/cloudoverviewdashboard_response.py +121 -0
  204. anyscale/client/openapi_client/models/cloudregionandzones_response.py +121 -0
  205. anyscale/client/openapi_client/models/cloudresource_response.py +121 -0
  206. anyscale/client/openapi_client/models/cloudresourcegcp_response.py +121 -0
  207. anyscale/client/openapi_client/models/cloudwithcloudresource_response.py +121 -0
  208. anyscale/client/openapi_client/models/cloudwithcloudresourcegcp_response.py +121 -0
  209. anyscale/client/openapi_client/models/cluster_auth_response.py +148 -0
  210. anyscale/client/openapi_client/models/cluster_config.py +178 -0
  211. anyscale/client/openapi_client/models/cluster_config_with_session_idle_timeout.py +204 -0
  212. anyscale/client/openapi_client/models/cluster_environments_query.py +290 -0
  213. anyscale/client/openapi_client/models/cluster_event.py +174 -0
  214. anyscale/client/openapi_client/models/cluster_events_output.py +175 -0
  215. anyscale/client/openapi_client/models/cluster_features.py +152 -0
  216. anyscale/client/openapi_client/models/cluster_management_stack_versions.py +100 -0
  217. anyscale/client/openapi_client/models/cluster_startup.py +208 -0
  218. anyscale/client/openapi_client/models/cluster_status.py +104 -0
  219. anyscale/client/openapi_client/models/cluster_status_details.py +100 -0
  220. anyscale/client/openapi_client/models/clusterauthresponse_response.py +121 -0
  221. anyscale/client/openapi_client/models/clusterconfig_response.py +121 -0
  222. anyscale/client/openapi_client/models/clusterconfigwithsessionidletimeout_response.py +121 -0
  223. anyscale/client/openapi_client/models/clustereventsoutput_response.py +121 -0
  224. anyscale/client/openapi_client/models/clusterfeatures_response.py +121 -0
  225. anyscale/client/openapi_client/models/company_size.py +103 -0
  226. anyscale/client/openapi_client/models/compute_node_type.py +292 -0
  227. anyscale/client/openapi_client/models/compute_stack.py +100 -0
  228. anyscale/client/openapi_client/models/compute_template.py +415 -0
  229. anyscale/client/openapi_client/models/compute_template_config.py +461 -0
  230. anyscale/client/openapi_client/models/compute_template_query.py +316 -0
  231. anyscale/client/openapi_client/models/computetemplate_response.py +121 -0
  232. anyscale/client/openapi_client/models/computetemplateconfig_response.py +121 -0
  233. anyscale/client/openapi_client/models/create_aica_endpoint.py +210 -0
  234. anyscale/client/openapi_client/models/create_aioa_cloud_waitlist.py +173 -0
  235. anyscale/client/openapi_client/models/create_analytics_event.py +122 -0
  236. anyscale/client/openapi_client/models/create_app_config.py +235 -0
  237. anyscale/client/openapi_client/models/create_app_config_configuration_schema.py +235 -0
  238. anyscale/client/openapi_client/models/create_billing_version.py +181 -0
  239. anyscale/client/openapi_client/models/create_bug_report_response.py +152 -0
  240. anyscale/client/openapi_client/models/create_build.py +263 -0
  241. anyscale/client/openapi_client/models/create_byod_app_config.py +180 -0
  242. anyscale/client/openapi_client/models/create_byod_app_config_configuration_schema.py +206 -0
  243. anyscale/client/openapi_client/models/create_byod_build.py +152 -0
  244. anyscale/client/openapi_client/models/create_cloud_collaborator.py +148 -0
  245. anyscale/client/openapi_client/models/create_cloud_resource.py +682 -0
  246. anyscale/client/openapi_client/models/create_cloud_resource_gcp.py +633 -0
  247. anyscale/client/openapi_client/models/create_cloud_with_cloud_resource.py +546 -0
  248. anyscale/client/openapi_client/models/create_cluster_compute_config.py +463 -0
  249. anyscale/client/openapi_client/models/create_compute_template.py +229 -0
  250. anyscale/client/openapi_client/models/create_compute_template_config.py +464 -0
  251. anyscale/client/openapi_client/models/create_dataset.py +200 -0
  252. anyscale/client/openapi_client/models/create_experimental_workspace.py +435 -0
  253. anyscale/client/openapi_client/models/create_experimental_workspace_from_job.py +123 -0
  254. anyscale/client/openapi_client/models/create_fine_tuning_hyperparameters.py +156 -0
  255. anyscale/client/openapi_client/models/create_fine_tuning_job_product_request.py +353 -0
  256. anyscale/client/openapi_client/models/create_instance_usage_budget.py +253 -0
  257. anyscale/client/openapi_client/models/create_internal_production_job.py +262 -0
  258. anyscale/client/openapi_client/models/create_job_queue_config.py +206 -0
  259. anyscale/client/openapi_client/models/create_job_queue_requests.py +323 -0
  260. anyscale/client/openapi_client/models/create_machine_pool_request.py +151 -0
  261. anyscale/client/openapi_client/models/create_machine_pool_response.py +123 -0
  262. anyscale/client/openapi_client/models/create_machine_request.py +151 -0
  263. anyscale/client/openapi_client/models/create_machine_response.py +123 -0
  264. anyscale/client/openapi_client/models/create_metronome_webhook_notification.py +175 -0
  265. anyscale/client/openapi_client/models/create_notification_channel_record.py +146 -0
  266. anyscale/client/openapi_client/models/create_organization_configuration.py +199 -0
  267. anyscale/client/openapi_client/models/create_organization_invitation.py +121 -0
  268. anyscale/client/openapi_client/models/create_otp_return_api_model.py +148 -0
  269. anyscale/client/openapi_client/models/create_production_job_config.py +347 -0
  270. anyscale/client/openapi_client/models/create_resource_quota.py +293 -0
  271. anyscale/client/openapi_client/models/create_schedule.py +263 -0
  272. anyscale/client/openapi_client/models/create_session_from_snapshot_options.py +565 -0
  273. anyscale/client/openapi_client/models/create_session_in_db.py +434 -0
  274. anyscale/client/openapi_client/models/create_session_response.py +174 -0
  275. anyscale/client/openapi_client/models/create_user.py +439 -0
  276. anyscale/client/openapi_client/models/create_user_project_collaborator.py +148 -0
  277. anyscale/client/openapi_client/models/create_user_project_collaborator_value.py +121 -0
  278. anyscale/client/openapi_client/models/create_workspace_from_template.py +263 -0
  279. anyscale/client/openapi_client/models/createbugreportresponse_response.py +121 -0
  280. anyscale/client/openapi_client/models/createcomputetemplateconfig_response.py +121 -0
  281. anyscale/client/openapi_client/models/createmachinepoolresponse_response.py +121 -0
  282. anyscale/client/openapi_client/models/createmachineresponse_response.py +121 -0
  283. anyscale/client/openapi_client/models/createotpreturnapimodel_response.py +121 -0
  284. anyscale/client/openapi_client/models/createsessionresponse_response.py +121 -0
  285. anyscale/client/openapi_client/models/credit_card_information.py +268 -0
  286. anyscale/client/openapi_client/models/customer_alert_status.py +101 -0
  287. anyscale/client/openapi_client/models/customer_billing_type.py +101 -0
  288. anyscale/client/openapi_client/models/dataplane_services.py +102 -0
  289. anyscale/client/openapi_client/models/dataset.py +416 -0
  290. anyscale/client/openapi_client/models/dataset_list_response.py +150 -0
  291. anyscale/client/openapi_client/models/dataset_response.py +121 -0
  292. anyscale/client/openapi_client/models/dataset_upload.py +148 -0
  293. anyscale/client/openapi_client/models/datasetupload_response.py +121 -0
  294. anyscale/client/openapi_client/models/decorated_application_template.py +493 -0
  295. anyscale/client/openapi_client/models/decorated_build.py +664 -0
  296. anyscale/client/openapi_client/models/decorated_compute_template.py +446 -0
  297. anyscale/client/openapi_client/models/decorated_compute_template_config.py +490 -0
  298. anyscale/client/openapi_client/models/decorated_interactive_session.py +793 -0
  299. anyscale/client/openapi_client/models/decorated_job.py +793 -0
  300. anyscale/client/openapi_client/models/decorated_job_queue.py +639 -0
  301. anyscale/client/openapi_client/models/decorated_job_submission.py +575 -0
  302. anyscale/client/openapi_client/models/decorated_list_service_api_model.py +670 -0
  303. anyscale/client/openapi_client/models/decorated_production_job.py +805 -0
  304. anyscale/client/openapi_client/models/decorated_production_job_state_transition.py +319 -0
  305. anyscale/client/openapi_client/models/decorated_production_service_v2_api_model.py +641 -0
  306. anyscale/client/openapi_client/models/decorated_production_service_v2_version_api_model.py +437 -0
  307. anyscale/client/openapi_client/models/decorated_runtime_env.py +488 -0
  308. anyscale/client/openapi_client/models/decorated_schedule.py +552 -0
  309. anyscale/client/openapi_client/models/decorated_serve_deployment.py +711 -0
  310. anyscale/client/openapi_client/models/decorated_service_event_api_model.py +513 -0
  311. anyscale/client/openapi_client/models/decorated_session.py +1789 -0
  312. anyscale/client/openapi_client/models/decorated_support_request.py +283 -0
  313. anyscale/client/openapi_client/models/decorated_unified_job.py +466 -0
  314. anyscale/client/openapi_client/models/decoratedapplicationtemplate_list_response.py +147 -0
  315. anyscale/client/openapi_client/models/decoratedapplicationtemplate_response.py +121 -0
  316. anyscale/client/openapi_client/models/decoratedbuild_list_response.py +147 -0
  317. anyscale/client/openapi_client/models/decoratedbuild_response.py +121 -0
  318. anyscale/client/openapi_client/models/decoratedcomputetemplate_list_response.py +147 -0
  319. anyscale/client/openapi_client/models/decoratedcomputetemplate_response.py +121 -0
  320. anyscale/client/openapi_client/models/decoratedinteractivesession_list_response.py +147 -0
  321. anyscale/client/openapi_client/models/decoratedinteractivesession_response.py +121 -0
  322. anyscale/client/openapi_client/models/decoratedjob_list_response.py +147 -0
  323. anyscale/client/openapi_client/models/decoratedjob_response.py +121 -0
  324. anyscale/client/openapi_client/models/decoratedjobqueue_list_response.py +147 -0
  325. anyscale/client/openapi_client/models/decoratedjobqueue_response.py +121 -0
  326. anyscale/client/openapi_client/models/decoratedjobsubmission_list_response.py +147 -0
  327. anyscale/client/openapi_client/models/decoratedjobsubmission_response.py +121 -0
  328. anyscale/client/openapi_client/models/decoratedlistserviceapimodel_list_response.py +147 -0
  329. anyscale/client/openapi_client/models/decoratedproductionjob_list_response.py +147 -0
  330. anyscale/client/openapi_client/models/decoratedproductionjob_response.py +121 -0
  331. anyscale/client/openapi_client/models/decoratedproductionjobstatetransition_list_response.py +147 -0
  332. anyscale/client/openapi_client/models/decoratedproductionservicev2_apimodel_response.py +121 -0
  333. anyscale/client/openapi_client/models/decoratedproductionservicev2_versionapimodel_list_response.py +147 -0
  334. anyscale/client/openapi_client/models/decoratedruntimeenv_list_response.py +147 -0
  335. anyscale/client/openapi_client/models/decoratedruntimeenv_response.py +121 -0
  336. anyscale/client/openapi_client/models/decoratedschedule_list_response.py +147 -0
  337. anyscale/client/openapi_client/models/decoratedschedule_response.py +121 -0
  338. anyscale/client/openapi_client/models/decoratedservedeployment_list_response.py +147 -0
  339. anyscale/client/openapi_client/models/decoratedservedeployment_response.py +121 -0
  340. anyscale/client/openapi_client/models/decoratedserviceeventapimodel_list_response.py +147 -0
  341. anyscale/client/openapi_client/models/decoratedsession_list_response.py +147 -0
  342. anyscale/client/openapi_client/models/decoratedsession_response.py +121 -0
  343. anyscale/client/openapi_client/models/decoratedsupportrequest_list_response.py +147 -0
  344. anyscale/client/openapi_client/models/decoratedsupportrequest_response.py +121 -0
  345. anyscale/client/openapi_client/models/decoratedunifiedjob_list_response.py +147 -0
  346. anyscale/client/openapi_client/models/decoratedunifiedjob_response.py +121 -0
  347. anyscale/client/openapi_client/models/delete_machine_pool_request.py +123 -0
  348. anyscale/client/openapi_client/models/delete_machine_request.py +206 -0
  349. anyscale/client/openapi_client/models/deleted_platform_fine_tuned_model.py +148 -0
  350. anyscale/client/openapi_client/models/deletedplatformfinetunedmodel_response.py +121 -0
  351. anyscale/client/openapi_client/models/deletemachinepoolresponse_response.py +121 -0
  352. anyscale/client/openapi_client/models/detach_machine_pool_from_cloud_request.py +152 -0
  353. anyscale/client/openapi_client/models/detachmachinepoolfromcloudresponse_response.py +121 -0
  354. anyscale/client/openapi_client/models/dismissal_type.py +100 -0
  355. anyscale/client/openapi_client/models/editable_cloud_resource.py +206 -0
  356. anyscale/client/openapi_client/models/editable_cloud_resource_gcp.py +178 -0
  357. anyscale/client/openapi_client/models/error.py +174 -0
  358. anyscale/client/openapi_client/models/event_level.py +104 -0
  359. anyscale/client/openapi_client/models/execute_command_response.py +175 -0
  360. anyscale/client/openapi_client/models/execute_interactive_command_options.py +147 -0
  361. anyscale/client/openapi_client/models/execute_shell_command_options.py +121 -0
  362. anyscale/client/openapi_client/models/executecommandresponse_response.py +121 -0
  363. anyscale/client/openapi_client/models/experimental_workspace.py +748 -0
  364. anyscale/client/openapi_client/models/experimental_workspaces_sort_field.py +100 -0
  365. anyscale/client/openapi_client/models/experimentalworkspace_list_response.py +147 -0
  366. anyscale/client/openapi_client/models/experimentalworkspace_response.py +121 -0
  367. anyscale/client/openapi_client/models/external_service_status.py +147 -0
  368. anyscale/client/openapi_client/models/external_service_status_response.py +250 -0
  369. anyscale/client/openapi_client/models/external_terminal_command.py +280 -0
  370. anyscale/client/openapi_client/models/externalservicestatusresponse_response.py +121 -0
  371. anyscale/client/openapi_client/models/feature_compatibility.py +152 -0
  372. anyscale/client/openapi_client/models/feature_flag_response.py +121 -0
  373. anyscale/client/openapi_client/models/featureflagresponse_response.py +121 -0
  374. anyscale/client/openapi_client/models/fine_tune_type.py +100 -0
  375. anyscale/client/openapi_client/models/fine_tuned_model.py +412 -0
  376. anyscale/client/openapi_client/models/fine_tuning_job_status.py +103 -0
  377. anyscale/client/openapi_client/models/finetunedmodel_list_response.py +147 -0
  378. anyscale/client/openapi_client/models/finetunedmodel_response.py +121 -0
  379. anyscale/client/openapi_client/models/finish_ft_job_request.py +204 -0
  380. anyscale/client/openapi_client/models/finish_ft_job_request_v2.py +183 -0
  381. anyscale/client/openapi_client/models/gcp_file_store_config.py +175 -0
  382. anyscale/client/openapi_client/models/gcp_memorystore_instance_config.py +148 -0
  383. anyscale/client/openapi_client/models/grafana_dashboard.py +201 -0
  384. anyscale/client/openapi_client/models/grpc_protocol_config.py +178 -0
  385. anyscale/client/openapi_client/models/ha_job_error_types.py +103 -0
  386. anyscale/client/openapi_client/models/ha_job_event_level.py +101 -0
  387. anyscale/client/openapi_client/models/ha_job_event_origin.py +100 -0
  388. anyscale/client/openapi_client/models/ha_job_goal_states.py +102 -0
  389. anyscale/client/openapi_client/models/ha_job_states.py +109 -0
  390. anyscale/client/openapi_client/models/ha_job_type.py +100 -0
  391. anyscale/client/openapi_client/models/ha_jobs_sort_field.py +105 -0
  392. anyscale/client/openapi_client/models/head_ip.py +121 -0
  393. anyscale/client/openapi_client/models/headip_response.py +121 -0
  394. anyscale/client/openapi_client/models/http_protocol_config.py +150 -0
  395. anyscale/client/openapi_client/models/http_validation_error.py +120 -0
  396. anyscale/client/openapi_client/models/idle_termination_status.py +104 -0
  397. anyscale/client/openapi_client/models/import_aica_model.py +241 -0
  398. anyscale/client/openapi_client/models/instance_usage_budget.py +572 -0
  399. anyscale/client/openapi_client/models/instance_usage_budget_evaluation_period.py +100 -0
  400. anyscale/client/openapi_client/models/instanceusagebudget_list_response.py +147 -0
  401. anyscale/client/openapi_client/models/instanceusagebudget_response.py +121 -0
  402. anyscale/client/openapi_client/models/integration_details.py +120 -0
  403. anyscale/client/openapi_client/models/interactive_session_logs.py +152 -0
  404. anyscale/client/openapi_client/models/interactivesessionlogs_response.py +121 -0
  405. anyscale/client/openapi_client/models/internal_production_job.py +663 -0
  406. anyscale/client/openapi_client/models/internalproductionjob_response.py +121 -0
  407. anyscale/client/openapi_client/models/invoice.py +413 -0
  408. anyscale/client/openapi_client/models/invoice_list_response.py +147 -0
  409. anyscale/client/openapi_client/models/invoice_status.py +102 -0
  410. anyscale/client/openapi_client/models/invoices_query.py +150 -0
  411. anyscale/client/openapi_client/models/job_access.py +102 -0
  412. anyscale/client/openapi_client/models/job_queue.py +467 -0
  413. anyscale/client/openapi_client/models/job_queue_config.py +122 -0
  414. anyscale/client/openapi_client/models/job_queue_execution_mode.py +101 -0
  415. anyscale/client/openapi_client/models/job_queue_spec.py +263 -0
  416. anyscale/client/openapi_client/models/job_queue_state.py +100 -0
  417. anyscale/client/openapi_client/models/job_queues_query.py +262 -0
  418. anyscale/client/openapi_client/models/job_run_type.py +101 -0
  419. anyscale/client/openapi_client/models/job_state_log_level_types.py +100 -0
  420. anyscale/client/openapi_client/models/job_status.py +105 -0
  421. anyscale/client/openapi_client/models/job_submissions_sort_field.py +101 -0
  422. anyscale/client/openapi_client/models/jobqueue_response.py +121 -0
  423. anyscale/client/openapi_client/models/jobs_logs.py +152 -0
  424. anyscale/client/openapi_client/models/jobs_logs_query_info.py +181 -0
  425. anyscale/client/openapi_client/models/jobs_sort_field.py +104 -0
  426. anyscale/client/openapi_client/models/jobslogs_response.py +121 -0
  427. anyscale/client/openapi_client/models/jobslogsqueryinfo_response.py +121 -0
  428. anyscale/client/openapi_client/models/json_patch_operation.py +200 -0
  429. anyscale/client/openapi_client/models/kubernetes_manager_registration_request.py +123 -0
  430. anyscale/client/openapi_client/models/kubernetes_manager_registration_response.py +123 -0
  431. anyscale/client/openapi_client/models/kubernetesmanagerregistrationresponse_response.py +121 -0
  432. anyscale/client/openapi_client/models/lb_resource.py +123 -0
  433. anyscale/client/openapi_client/models/lbresource_response.py +121 -0
  434. anyscale/client/openapi_client/models/list_machine_pools_response.py +123 -0
  435. anyscale/client/openapi_client/models/list_machines_response.py +121 -0
  436. anyscale/client/openapi_client/models/list_resource_quotas_query.py +234 -0
  437. anyscale/client/openapi_client/models/list_response_metadata.py +146 -0
  438. anyscale/client/openapi_client/models/listmachinepoolsresponse_response.py +121 -0
  439. anyscale/client/openapi_client/models/listmachinesresponse_response.py +121 -0
  440. anyscale/client/openapi_client/models/log_detail.py +187 -0
  441. anyscale/client/openapi_client/models/log_details.py +151 -0
  442. anyscale/client/openapi_client/models/log_download_config.py +206 -0
  443. anyscale/client/openapi_client/models/log_download_request.py +150 -0
  444. anyscale/client/openapi_client/models/log_download_result.py +207 -0
  445. anyscale/client/openapi_client/models/log_file_chunk.py +439 -0
  446. anyscale/client/openapi_client/models/log_filter.py +430 -0
  447. anyscale/client/openapi_client/models/log_item.py +181 -0
  448. anyscale/client/openapi_client/models/log_item_batch.py +151 -0
  449. anyscale/client/openapi_client/models/log_level_types.py +100 -0
  450. anyscale/client/openapi_client/models/log_stream.py +151 -0
  451. anyscale/client/openapi_client/models/logdetails_response.py +121 -0
  452. anyscale/client/openapi_client/models/logdownloadresult_response.py +121 -0
  453. anyscale/client/openapi_client/models/login_user_params.py +205 -0
  454. anyscale/client/openapi_client/models/logitembatch_response.py +121 -0
  455. anyscale/client/openapi_client/models/logs_output.py +202 -0
  456. anyscale/client/openapi_client/models/logsoutput_response.py +121 -0
  457. anyscale/client/openapi_client/models/logstream_response.py +121 -0
  458. anyscale/client/openapi_client/models/long_running_workload.py +256 -0
  459. anyscale/client/openapi_client/models/longrunningworkload_list_response.py +147 -0
  460. anyscale/client/openapi_client/models/machine_allocation_state.py +100 -0
  461. anyscale/client/openapi_client/models/machine_connection_state.py +100 -0
  462. anyscale/client/openapi_client/models/machine_info.py +466 -0
  463. anyscale/client/openapi_client/models/machine_pool.py +266 -0
  464. anyscale/client/openapi_client/models/metronome_customer_info_model.py +148 -0
  465. anyscale/client/openapi_client/models/metronome_dashboard_type.py +101 -0
  466. anyscale/client/openapi_client/models/metronomecustomerinfomodel_list_response.py +147 -0
  467. anyscale/client/openapi_client/models/metronomecustomerinfomodel_response.py +121 -0
  468. anyscale/client/openapi_client/models/mini_build.py +267 -0
  469. anyscale/client/openapi_client/models/mini_cloud.py +321 -0
  470. anyscale/client/openapi_client/models/mini_cluster.py +148 -0
  471. anyscale/client/openapi_client/models/mini_compute_template.py +228 -0
  472. anyscale/client/openapi_client/models/mini_compute_template_config.py +121 -0
  473. anyscale/client/openapi_client/models/mini_job_run.py +599 -0
  474. anyscale/client/openapi_client/models/mini_namespace.py +148 -0
  475. anyscale/client/openapi_client/models/mini_organization.py +148 -0
  476. anyscale/client/openapi_client/models/mini_production_job.py +202 -0
  477. anyscale/client/openapi_client/models/mini_project.py +205 -0
  478. anyscale/client/openapi_client/models/mini_runtime_environment.py +147 -0
  479. anyscale/client/openapi_client/models/mini_schedule.py +180 -0
  480. anyscale/client/openapi_client/models/mini_user.py +266 -0
  481. anyscale/client/openapi_client/models/minibuild_list_response.py +147 -0
  482. anyscale/client/openapi_client/models/minicomputetemplate_list_response.py +147 -0
  483. anyscale/client/openapi_client/models/miniproject_list_response.py +147 -0
  484. anyscale/client/openapi_client/models/monitor_logs_extension.py +100 -0
  485. anyscale/client/openapi_client/models/named_entity.py +148 -0
  486. anyscale/client/openapi_client/models/nfs_mount_target.py +151 -0
  487. anyscale/client/openapi_client/models/node_registration_aws.py +152 -0
  488. anyscale/client/openapi_client/models/node_registration_gcp.py +123 -0
  489. anyscale/client/openapi_client/models/node_registration_k8_s.py +178 -0
  490. anyscale/client/openapi_client/models/node_registration_provisioned.py +150 -0
  491. anyscale/client/openapi_client/models/node_registration_v2.py +279 -0
  492. anyscale/client/openapi_client/models/node_type.py +100 -0
  493. anyscale/client/openapi_client/models/notification_channel_email_config.py +121 -0
  494. anyscale/client/openapi_client/models/notification_channel_webhook_config.py +121 -0
  495. anyscale/client/openapi_client/models/onboarding_user_cards_query.py +122 -0
  496. anyscale/client/openapi_client/models/organization.py +490 -0
  497. anyscale/client/openapi_client/models/organization_availability.py +148 -0
  498. anyscale/client/openapi_client/models/organization_collaborator.py +259 -0
  499. anyscale/client/openapi_client/models/organization_configuration.py +280 -0
  500. anyscale/client/openapi_client/models/organization_configuration_response.py +227 -0
  501. anyscale/client/openapi_client/models/organization_invitation.py +255 -0
  502. anyscale/client/openapi_client/models/organization_invitation_base.py +121 -0
  503. anyscale/client/openapi_client/models/organization_marketing_questions.py +198 -0
  504. anyscale/client/openapi_client/models/organization_permission_level.py +100 -0
  505. anyscale/client/openapi_client/models/organization_project_collaborator.py +175 -0
  506. anyscale/client/openapi_client/models/organization_project_collaborator_value.py +148 -0
  507. anyscale/client/openapi_client/models/organization_public_identifier.py +121 -0
  508. anyscale/client/openapi_client/models/organization_response.py +121 -0
  509. anyscale/client/openapi_client/models/organization_summary.py +229 -0
  510. anyscale/client/openapi_client/models/organization_usage_alert.py +210 -0
  511. anyscale/client/openapi_client/models/organization_usage_alert_severity.py +100 -0
  512. anyscale/client/openapi_client/models/organizationavailability_response.py +121 -0
  513. anyscale/client/openapi_client/models/organizationcollaborator_list_response.py +147 -0
  514. anyscale/client/openapi_client/models/organizationconfiguration_list_response.py +147 -0
  515. anyscale/client/openapi_client/models/organizationconfigurationresponse_response.py +121 -0
  516. anyscale/client/openapi_client/models/organizationinvitation_list_response.py +147 -0
  517. anyscale/client/openapi_client/models/organizationinvitation_response.py +121 -0
  518. anyscale/client/openapi_client/models/organizationinvitationbase_response.py +121 -0
  519. anyscale/client/openapi_client/models/organizationprojectcollaborator_list_response.py +147 -0
  520. anyscale/client/openapi_client/models/organizationpublicidentifier_response.py +121 -0
  521. anyscale/client/openapi_client/models/organizationusagealert_list_response.py +147 -0
  522. anyscale/client/openapi_client/models/page_query.py +153 -0
  523. anyscale/client/openapi_client/models/pause_schedule.py +123 -0
  524. anyscale/client/openapi_client/models/permission_level.py +101 -0
  525. anyscale/client/openapi_client/models/platform_fine_tuning_job.py +577 -0
  526. anyscale/client/openapi_client/models/platformfinetuningjob_list_response.py +147 -0
  527. anyscale/client/openapi_client/models/platformfinetuningjob_response.py +121 -0
  528. anyscale/client/openapi_client/models/product_autoscaler_flag.py +122 -0
  529. anyscale/client/openapi_client/models/product_type.py +100 -0
  530. anyscale/client/openapi_client/models/productautoscalerflag_response.py +121 -0
  531. anyscale/client/openapi_client/models/production_job.py +437 -0
  532. anyscale/client/openapi_client/models/production_job_config.py +348 -0
  533. anyscale/client/openapi_client/models/production_job_event.py +378 -0
  534. anyscale/client/openapi_client/models/production_job_event_scope_filter.py +101 -0
  535. anyscale/client/openapi_client/models/production_job_state_transition.py +293 -0
  536. anyscale/client/openapi_client/models/productionjob_response.py +121 -0
  537. anyscale/client/openapi_client/models/productionjobevent_list_response.py +147 -0
  538. anyscale/client/openapi_client/models/project.py +554 -0
  539. anyscale/client/openapi_client/models/project_base.py +121 -0
  540. anyscale/client/openapi_client/models/project_collaborator.py +175 -0
  541. anyscale/client/openapi_client/models/project_collaborator_value.py +175 -0
  542. anyscale/client/openapi_client/models/project_collaborators_put_message.py +121 -0
  543. anyscale/client/openapi_client/models/project_create_message.py +148 -0
  544. anyscale/client/openapi_client/models/project_default_session_name.py +121 -0
  545. anyscale/client/openapi_client/models/project_delete_message.py +121 -0
  546. anyscale/client/openapi_client/models/project_list_response.py +147 -0
  547. anyscale/client/openapi_client/models/project_patch_message.py +121 -0
  548. anyscale/client/openapi_client/models/project_response.py +121 -0
  549. anyscale/client/openapi_client/models/projectbase_response.py +121 -0
  550. anyscale/client/openapi_client/models/projectcollaborator_list_response.py +147 -0
  551. anyscale/client/openapi_client/models/projectdefaultsessionname_response.py +121 -0
  552. anyscale/client/openapi_client/models/projects_sort_field.py +101 -0
  553. anyscale/client/openapi_client/models/projects_violating_tree_hierarchy_response.py +121 -0
  554. anyscale/client/openapi_client/models/projectsviolatingtreehierarchyresponse_response.py +121 -0
  555. anyscale/client/openapi_client/models/protocols.py +150 -0
  556. anyscale/client/openapi_client/models/provider_metadata.py +205 -0
  557. anyscale/client/openapi_client/models/providermetadata_response.py +121 -0
  558. anyscale/client/openapi_client/models/python_modules.py +150 -0
  559. anyscale/client/openapi_client/models/quota.py +198 -0
  560. anyscale/client/openapi_client/models/ray_gcs_external_storage_config.py +178 -0
  561. anyscale/client/openapi_client/models/ray_runtime_env_config.py +262 -0
  562. anyscale/client/openapi_client/models/read_billing_version.py +210 -0
  563. anyscale/client/openapi_client/models/readbillingversion_list_response.py +147 -0
  564. anyscale/client/openapi_client/models/replica_details.py +152 -0
  565. anyscale/client/openapi_client/models/replica_state.py +104 -0
  566. anyscale/client/openapi_client/models/request_email_magic_link_response.py +147 -0
  567. anyscale/client/openapi_client/models/request_otp_return_api_model.py +148 -0
  568. anyscale/client/openapi_client/models/request_password_reset_params.py +147 -0
  569. anyscale/client/openapi_client/models/requestemailmagiclinkresponse_response.py +121 -0
  570. anyscale/client/openapi_client/models/requestotpreturnapimodel_response.py +121 -0
  571. anyscale/client/openapi_client/models/reset_password_params.py +148 -0
  572. anyscale/client/openapi_client/models/resource_quota.py +465 -0
  573. anyscale/client/openapi_client/models/resource_quota_status.py +123 -0
  574. anyscale/client/openapi_client/models/resourcequota_list_response.py +147 -0
  575. anyscale/client/openapi_client/models/resourcequota_response.py +121 -0
  576. anyscale/client/openapi_client/models/resources.py +234 -0
  577. anyscale/client/openapi_client/models/resubmit_ft_job_request.py +121 -0
  578. anyscale/client/openapi_client/models/rollback_service_model.py +122 -0
  579. anyscale/client/openapi_client/models/rollout_strategy.py +100 -0
  580. anyscale/client/openapi_client/models/s3_download_location.py +148 -0
  581. anyscale/client/openapi_client/models/schedule_config.py +151 -0
  582. anyscale/client/openapi_client/models/serve_deployment_grafana_dashboard_status.py +101 -0
  583. anyscale/client/openapi_client/models/serve_deployment_logs.py +152 -0
  584. anyscale/client/openapi_client/models/serve_deployment_state.py +104 -0
  585. anyscale/client/openapi_client/models/servedeploymentlogs_response.py +121 -0
  586. anyscale/client/openapi_client/models/server_session_token.py +121 -0
  587. anyscale/client/openapi_client/models/serversessiontoken_response.py +121 -0
  588. anyscale/client/openapi_client/models/service_config.py +178 -0
  589. anyscale/client/openapi_client/models/service_event_current_state.py +108 -0
  590. anyscale/client/openapi_client/models/service_event_level.py +102 -0
  591. anyscale/client/openapi_client/models/service_event_origin.py +103 -0
  592. anyscale/client/openapi_client/models/service_event_scope.py +103 -0
  593. anyscale/client/openapi_client/models/service_event_scope_filter.py +104 -0
  594. anyscale/client/openapi_client/models/service_event_type.py +125 -0
  595. anyscale/client/openapi_client/models/service_event_verbose_message_model.py +180 -0
  596. anyscale/client/openapi_client/models/service_goal_states.py +100 -0
  597. anyscale/client/openapi_client/models/service_observability_urls.py +206 -0
  598. anyscale/client/openapi_client/models/service_sort_field.py +101 -0
  599. anyscale/client/openapi_client/models/service_type.py +100 -0
  600. anyscale/client/openapi_client/models/service_usage.py +353 -0
  601. anyscale/client/openapi_client/models/service_version_state.py +106 -0
  602. anyscale/client/openapi_client/models/serviceeventverbosemessagemodel_list_response.py +147 -0
  603. anyscale/client/openapi_client/models/session.py +834 -0
  604. anyscale/client/openapi_client/models/session_access.py +102 -0
  605. anyscale/client/openapi_client/models/session_autosync_sessions_update_message.py +121 -0
  606. anyscale/client/openapi_client/models/session_command.py +413 -0
  607. anyscale/client/openapi_client/models/session_command_finish_options.py +226 -0
  608. anyscale/client/openapi_client/models/session_command_id.py +121 -0
  609. anyscale/client/openapi_client/models/session_command_types.py +100 -0
  610. anyscale/client/openapi_client/models/session_create_message.py +148 -0
  611. anyscale/client/openapi_client/models/session_delete_message.py +121 -0
  612. anyscale/client/openapi_client/models/session_describe.py +175 -0
  613. anyscale/client/openapi_client/models/session_details.py +148 -0
  614. anyscale/client/openapi_client/models/session_event.py +267 -0
  615. anyscale/client/openapi_client/models/session_event_cause.py +150 -0
  616. anyscale/client/openapi_client/models/session_event_types.py +111 -0
  617. anyscale/client/openapi_client/models/session_execute_message.py +121 -0
  618. anyscale/client/openapi_client/models/session_finish_command_message.py +175 -0
  619. anyscale/client/openapi_client/models/session_history_item.py +146 -0
  620. anyscale/client/openapi_client/models/session_kill_command_message.py +121 -0
  621. anyscale/client/openapi_client/models/session_list_response.py +147 -0
  622. anyscale/client/openapi_client/models/session_patch_message.py +121 -0
  623. anyscale/client/openapi_client/models/session_response.py +121 -0
  624. anyscale/client/openapi_client/models/session_ssh_key.py +148 -0
  625. anyscale/client/openapi_client/models/session_starting_up_data.py +146 -0
  626. anyscale/client/openapi_client/models/session_state.py +111 -0
  627. anyscale/client/openapi_client/models/session_state_change_message.py +121 -0
  628. anyscale/client/openapi_client/models/session_state_data.py +146 -0
  629. anyscale/client/openapi_client/models/session_stopping_data.py +146 -0
  630. anyscale/client/openapi_client/models/sessioncommand_list_response.py +147 -0
  631. anyscale/client/openapi_client/models/sessioncommandid_response.py +121 -0
  632. anyscale/client/openapi_client/models/sessiondescribe_response.py +121 -0
  633. anyscale/client/openapi_client/models/sessiondetails_response.py +121 -0
  634. anyscale/client/openapi_client/models/sessionevent_list_response.py +147 -0
  635. anyscale/client/openapi_client/models/sessionhistoryitem_list_response.py +147 -0
  636. anyscale/client/openapi_client/models/sessions_sort_field.py +104 -0
  637. anyscale/client/openapi_client/models/sessionsshkey_response.py +121 -0
  638. anyscale/client/openapi_client/models/setup_initialize_session_options.py +225 -0
  639. anyscale/client/openapi_client/models/show_otp_source_return_api_model.py +121 -0
  640. anyscale/client/openapi_client/models/showotpsourcereturnapimodel_response.py +121 -0
  641. anyscale/client/openapi_client/models/snapshot_create_message.py +148 -0
  642. anyscale/client/openapi_client/models/snapshot_delete_message.py +148 -0
  643. anyscale/client/openapi_client/models/snapshot_patch_message.py +148 -0
  644. anyscale/client/openapi_client/models/socket_message_schemas.py +499 -0
  645. anyscale/client/openapi_client/models/socket_message_types.py +113 -0
  646. anyscale/client/openapi_client/models/socketmessageschemas_response.py +121 -0
  647. anyscale/client/openapi_client/models/socketmessagetypes_response.py +121 -0
  648. anyscale/client/openapi_client/models/sort_order.py +100 -0
  649. anyscale/client/openapi_client/models/sso_login_info.py +151 -0
  650. anyscale/client/openapi_client/models/ssologininfo_response.py +121 -0
  651. anyscale/client/openapi_client/models/start_session_options.py +146 -0
  652. anyscale/client/openapi_client/models/stop_session_options.py +227 -0
  653. anyscale/client/openapi_client/models/stream_publish_request.py +239 -0
  654. anyscale/client/openapi_client/models/subnet_id_with_availability_zone_aws.py +148 -0
  655. anyscale/client/openapi_client/models/support_requests_query.py +178 -0
  656. anyscale/client/openapi_client/models/supportedbaseimagesenum.py +1570 -0
  657. anyscale/client/openapi_client/models/templatized_compute_configs.py +202 -0
  658. anyscale/client/openapi_client/models/templatized_decorated_application_templates.py +202 -0
  659. anyscale/client/openapi_client/models/templatizedcomputeconfigs_response.py +121 -0
  660. anyscale/client/openapi_client/models/templatizeddecoratedapplicationtemplates_response.py +121 -0
  661. anyscale/client/openapi_client/models/text_query.py +178 -0
  662. anyscale/client/openapi_client/models/timestamped_logs_output.py +148 -0
  663. anyscale/client/openapi_client/models/timestampedlogsoutput_response.py +121 -0
  664. anyscale/client/openapi_client/models/tool.py +100 -0
  665. anyscale/client/openapi_client/models/tracing_config.py +178 -0
  666. anyscale/client/openapi_client/models/try_login_email_response.py +208 -0
  667. anyscale/client/openapi_client/models/tryloginemailresponse_response.py +121 -0
  668. anyscale/client/openapi_client/models/unified_job_sort_field.py +103 -0
  669. anyscale/client/openapi_client/models/unified_job_status.py +114 -0
  670. anyscale/client/openapi_client/models/unified_job_type.py +100 -0
  671. anyscale/client/openapi_client/models/update_cloud_with_cloud_resource.py +178 -0
  672. anyscale/client/openapi_client/models/update_cloud_with_cloud_resource_gcp.py +178 -0
  673. anyscale/client/openapi_client/models/update_cluster_dns.py +152 -0
  674. anyscale/client/openapi_client/models/update_compute_template.py +146 -0
  675. anyscale/client/openapi_client/models/update_compute_template_config.py +464 -0
  676. anyscale/client/openapi_client/models/update_endpoint.py +152 -0
  677. anyscale/client/openapi_client/models/update_machine_pool_request.py +151 -0
  678. anyscale/client/openapi_client/models/update_model_deployment.py +152 -0
  679. anyscale/client/openapi_client/models/update_organization_collaborator.py +121 -0
  680. anyscale/client/openapi_client/models/update_project_collaborator.py +121 -0
  681. anyscale/client/openapi_client/models/update_resource_quota.py +122 -0
  682. anyscale/client/openapi_client/models/updatemachinepoolresponse_response.py +121 -0
  683. anyscale/client/openapi_client/models/upload_session_command_logs_locations.py +148 -0
  684. anyscale/client/openapi_client/models/uploadsessioncommandlogslocations_response.py +121 -0
  685. anyscale/client/openapi_client/models/user_info.py +569 -0
  686. anyscale/client/openapi_client/models/user_resend_email_options.py +147 -0
  687. anyscale/client/openapi_client/models/user_service_access_types.py +100 -0
  688. anyscale/client/openapi_client/models/userinfo_response.py +121 -0
  689. anyscale/client/openapi_client/models/utm_fields.py +224 -0
  690. anyscale/client/openapi_client/models/ux_instance.py +468 -0
  691. anyscale/client/openapi_client/models/validate_otp_params_api_model.py +121 -0
  692. anyscale/client/openapi_client/models/validation_error.py +175 -0
  693. anyscale/client/openapi_client/models/verify_response.py +147 -0
  694. anyscale/client/openapi_client/models/verifyresponse_response.py +121 -0
  695. anyscale/client/openapi_client/models/visibility.py +100 -0
  696. anyscale/client/openapi_client/models/waitlist_status_response.py +121 -0
  697. anyscale/client/openapi_client/models/waitlist_status_type.py +100 -0
  698. anyscale/client/openapi_client/models/waitliststatusresponse_response.py +121 -0
  699. anyscale/client/openapi_client/models/wand_b_run_details.py +147 -0
  700. anyscale/client/openapi_client/models/web_terminal.py +121 -0
  701. anyscale/client/openapi_client/models/webterminal_list_response.py +147 -0
  702. anyscale/client/openapi_client/models/webterminal_response.py +121 -0
  703. anyscale/client/openapi_client/models/worker_node_type.py +404 -0
  704. anyscale/client/openapi_client/models/workload_type.py +102 -0
  705. anyscale/client/openapi_client/models/workspace_dataplane_artifact.py +181 -0
  706. anyscale/client/openapi_client/models/workspace_dataplane_artifacts.py +123 -0
  707. anyscale/client/openapi_client/models/workspace_dataplane_proxied_artifacts.py +178 -0
  708. anyscale/client/openapi_client/models/workspace_event.py +325 -0
  709. anyscale/client/openapi_client/models/workspace_event_source.py +100 -0
  710. anyscale/client/openapi_client/models/workspace_event_source_filter.py +101 -0
  711. anyscale/client/openapi_client/models/workspace_readme.py +123 -0
  712. anyscale/client/openapi_client/models/workspace_snapshot_states.py +108 -0
  713. anyscale/client/openapi_client/models/workspace_template.py +353 -0
  714. anyscale/client/openapi_client/models/workspace_template_cluster_environment_metadata.py +178 -0
  715. anyscale/client/openapi_client/models/workspacedataplaneartifacts_response.py +121 -0
  716. anyscale/client/openapi_client/models/workspacedataplaneproxiedartifacts_response.py +121 -0
  717. anyscale/client/openapi_client/models/workspaceevent_list_response.py +147 -0
  718. anyscale/client/openapi_client/models/workspacereadme_response.py +121 -0
  719. anyscale/client/openapi_client/models/workspacetemplate_list_response.py +147 -0
  720. anyscale/client/openapi_client/models/workspacetemplateclusterenvironmentmetadata_response.py +121 -0
  721. anyscale/client/openapi_client/models/write_cloud.py +546 -0
  722. anyscale/client/openapi_client/models/write_cluster_config.py +123 -0
  723. anyscale/client/openapi_client/models/write_project.py +226 -0
  724. anyscale/client/openapi_client/models/write_session.py +147 -0
  725. anyscale/client/openapi_client/models/write_support_request.py +121 -0
  726. anyscale/client/openapi_client/rest.py +296 -0
  727. anyscale/client/requirements.txt +6 -0
  728. anyscale/client/setup.cfg +2 -0
  729. anyscale/client/setup.py +40 -0
  730. anyscale/client/test-requirements.txt +3 -0
  731. anyscale/client/tox.ini +9 -0
  732. anyscale/cloud.py +216 -0
  733. anyscale/cloud_resource.py +1032 -0
  734. anyscale/cluster.py +138 -0
  735. anyscale/cluster_compute.py +167 -0
  736. anyscale/cluster_env.py +173 -0
  737. anyscale/commands/__init__.py +0 -0
  738. anyscale/commands/aggregated_instance_usage_commands.py +86 -0
  739. anyscale/commands/anyscale_api/__init__.py +0 -0
  740. anyscale/commands/anyscale_api/api_commands.py +23 -0
  741. anyscale/commands/anyscale_api/session_commands_commands.py +80 -0
  742. anyscale/commands/anyscale_api/session_operations_commands.py +28 -0
  743. anyscale/commands/anyscale_api/sessions_commands.py +152 -0
  744. anyscale/commands/auth_commands.py +41 -0
  745. anyscale/commands/cloud_commands.py +1011 -0
  746. anyscale/commands/cloud_commands_util.py +10 -0
  747. anyscale/commands/cluster_commands.py +476 -0
  748. anyscale/commands/cluster_env_commands.py +139 -0
  749. anyscale/commands/command_examples.py +495 -0
  750. anyscale/commands/compute_config_commands.py +252 -0
  751. anyscale/commands/config_commands.py +213 -0
  752. anyscale/commands/exec_commands.py +14 -0
  753. anyscale/commands/experimental_integrations_commands.py +70 -0
  754. anyscale/commands/image_commands.py +125 -0
  755. anyscale/commands/job_commands.py +745 -0
  756. anyscale/commands/list_commands.py +85 -0
  757. anyscale/commands/llm/dataset_commands.py +269 -0
  758. anyscale/commands/llm/group.py +15 -0
  759. anyscale/commands/llm/models_commands.py +123 -0
  760. anyscale/commands/login_commands.py +79 -0
  761. anyscale/commands/logs_commands.py +312 -0
  762. anyscale/commands/machine_commands.py +116 -0
  763. anyscale/commands/machine_pool_commands.py +163 -0
  764. anyscale/commands/migrate_commands.py +84 -0
  765. anyscale/commands/project_commands.py +203 -0
  766. anyscale/commands/resource_quota_commands.py +214 -0
  767. anyscale/commands/schedule_commands.py +436 -0
  768. anyscale/commands/service_account_commands.py +72 -0
  769. anyscale/commands/service_commands.py +738 -0
  770. anyscale/commands/session_commands_hidden.py +179 -0
  771. anyscale/commands/util.py +152 -0
  772. anyscale/commands/workspace_commands.py +511 -0
  773. anyscale/commands/workspace_commands_v2.py +874 -0
  774. anyscale/component_activity_util.py +83 -0
  775. anyscale/compute_config/__init__.py +84 -0
  776. anyscale/compute_config/_private/compute_config_sdk.py +433 -0
  777. anyscale/compute_config/commands.py +122 -0
  778. anyscale/compute_config/models.py +630 -0
  779. anyscale/conf.py +23 -0
  780. anyscale/connect.py +1323 -0
  781. anyscale/connect_utils/__init__.py +0 -0
  782. anyscale/connect_utils/prepare_cluster.py +962 -0
  783. anyscale/connect_utils/project.py +298 -0
  784. anyscale/connect_utils/start_interactive_session.py +437 -0
  785. anyscale/controllers/__init__.py +0 -0
  786. anyscale/controllers/auth_controller.py +134 -0
  787. anyscale/controllers/base_controller.py +52 -0
  788. anyscale/controllers/cloud_controller.py +3609 -0
  789. anyscale/controllers/cloud_functional_verification_controller.py +858 -0
  790. anyscale/controllers/cluster_controller.py +720 -0
  791. anyscale/controllers/cluster_env_controller.py +219 -0
  792. anyscale/controllers/compute_config_controller.py +351 -0
  793. anyscale/controllers/config_controller.py +422 -0
  794. anyscale/controllers/experimental_integrations_controller.py +80 -0
  795. anyscale/controllers/job_controller.py +647 -0
  796. anyscale/controllers/jobs_bg_controller.py +0 -0
  797. anyscale/controllers/list_controller.py +290 -0
  798. anyscale/controllers/llm/__init__.py +0 -0
  799. anyscale/controllers/llm/models_controller.py +144 -0
  800. anyscale/controllers/logs_controller.py +449 -0
  801. anyscale/controllers/machine_controller.py +37 -0
  802. anyscale/controllers/machine_pool_controller.py +86 -0
  803. anyscale/controllers/project_controller.py +281 -0
  804. anyscale/controllers/resource_quota_controller.py +183 -0
  805. anyscale/controllers/schedule_controller.py +333 -0
  806. anyscale/controllers/service_account_controller.py +168 -0
  807. anyscale/controllers/service_controller.py +453 -0
  808. anyscale/controllers/workspace_controller.py +253 -0
  809. anyscale/feature_flags.py +4 -0
  810. anyscale/fingerprint.py +62 -0
  811. anyscale/formatters/__init__.py +0 -0
  812. anyscale/formatters/clouds_formatter.py +65 -0
  813. anyscale/formatters/common_formatter.py +22 -0
  814. anyscale/gcp_verification.py +792 -0
  815. anyscale/image/__init__.py +73 -0
  816. anyscale/image/_private/image_sdk.py +202 -0
  817. anyscale/image/commands.py +117 -0
  818. anyscale/image/models.py +57 -0
  819. anyscale/integrations.py +329 -0
  820. anyscale/job/__init__.py +166 -0
  821. anyscale/job/_private/job_sdk.py +497 -0
  822. anyscale/job/commands.py +267 -0
  823. anyscale/job/models.py +500 -0
  824. anyscale/links.py +4 -0
  825. anyscale/llm/__init__.py +2 -0
  826. anyscale/llm/dataset/__init__.py +2 -0
  827. anyscale/llm/dataset/_private/__init__.py +0 -0
  828. anyscale/llm/dataset/_private/docs.py +63 -0
  829. anyscale/llm/dataset/_private/models.py +71 -0
  830. anyscale/llm/dataset/_private/sdk.py +147 -0
  831. anyscale/llm/model/__init__.py +2 -0
  832. anyscale/llm/model/_private/models_sdk.py +62 -0
  833. anyscale/llm/model/commands.py +93 -0
  834. anyscale/llm/model/models.py +171 -0
  835. anyscale/llm/model/sdk.py +62 -0
  836. anyscale/llm/sdk.py +27 -0
  837. anyscale/memorydb_supported_zones.json +22 -0
  838. anyscale/models/job_model.py +457 -0
  839. anyscale/models/service_model.py +125 -0
  840. anyscale/project.py +501 -0
  841. anyscale/schedule/__init__.py +91 -0
  842. anyscale/schedule/_private/schedule_sdk.py +165 -0
  843. anyscale/schedule/commands.py +149 -0
  844. anyscale/schedule/models.py +145 -0
  845. anyscale/scripts.py +164 -0
  846. anyscale/sdk/anyscale_client/__init__.py +235 -0
  847. anyscale/sdk/anyscale_client/api/__init__.py +6 -0
  848. anyscale/sdk/anyscale_client/api/default_api.py +11625 -0
  849. anyscale/sdk/anyscale_client/api_client.py +647 -0
  850. anyscale/sdk/anyscale_client/configuration.py +373 -0
  851. anyscale/sdk/anyscale_client/exceptions.py +120 -0
  852. anyscale/sdk/anyscale_client/models/__init__.py +220 -0
  853. anyscale/sdk/anyscale_client/models/access_config.py +122 -0
  854. anyscale/sdk/anyscale_client/models/app_config.py +436 -0
  855. anyscale/sdk/anyscale_client/models/app_config_config_schema.py +235 -0
  856. anyscale/sdk/anyscale_client/models/appconfig_list_response.py +147 -0
  857. anyscale/sdk/anyscale_client/models/appconfig_response.py +121 -0
  858. anyscale/sdk/anyscale_client/models/apply_production_service_v2_model.py +490 -0
  859. anyscale/sdk/anyscale_client/models/apply_service_model.py +490 -0
  860. anyscale/sdk/anyscale_client/models/archive_status.py +101 -0
  861. anyscale/sdk/anyscale_client/models/base_job_status.py +105 -0
  862. anyscale/sdk/anyscale_client/models/baseimagesenum.py +2130 -0
  863. anyscale/sdk/anyscale_client/models/build.py +607 -0
  864. anyscale/sdk/anyscale_client/models/build_list_response.py +147 -0
  865. anyscale/sdk/anyscale_client/models/build_log_response.py +123 -0
  866. anyscale/sdk/anyscale_client/models/build_response.py +121 -0
  867. anyscale/sdk/anyscale_client/models/build_status.py +104 -0
  868. anyscale/sdk/anyscale_client/models/buildlogresponse_response.py +121 -0
  869. anyscale/sdk/anyscale_client/models/cloud.py +802 -0
  870. anyscale/sdk/anyscale_client/models/cloud_config.py +206 -0
  871. anyscale/sdk/anyscale_client/models/cloud_list_response.py +147 -0
  872. anyscale/sdk/anyscale_client/models/cloud_providers.py +103 -0
  873. anyscale/sdk/anyscale_client/models/cloud_response.py +121 -0
  874. anyscale/sdk/anyscale_client/models/cloud_state.py +104 -0
  875. anyscale/sdk/anyscale_client/models/cloud_status.py +100 -0
  876. anyscale/sdk/anyscale_client/models/cloud_type.py +100 -0
  877. anyscale/sdk/anyscale_client/models/cloud_types.py +100 -0
  878. anyscale/sdk/anyscale_client/models/cloud_version.py +100 -0
  879. anyscale/sdk/anyscale_client/models/clouds_query.py +150 -0
  880. anyscale/sdk/anyscale_client/models/cluster.py +721 -0
  881. anyscale/sdk/anyscale_client/models/cluster_compute.py +415 -0
  882. anyscale/sdk/anyscale_client/models/cluster_compute_config.py +461 -0
  883. anyscale/sdk/anyscale_client/models/cluster_computes_query.py +293 -0
  884. anyscale/sdk/anyscale_client/models/cluster_environment.py +380 -0
  885. anyscale/sdk/anyscale_client/models/cluster_environment_build.py +578 -0
  886. anyscale/sdk/anyscale_client/models/cluster_environment_build_log_response.py +123 -0
  887. anyscale/sdk/anyscale_client/models/cluster_environment_build_operation.py +237 -0
  888. anyscale/sdk/anyscale_client/models/cluster_environment_build_status.py +104 -0
  889. anyscale/sdk/anyscale_client/models/cluster_environments_query.py +290 -0
  890. anyscale/sdk/anyscale_client/models/cluster_head_node_info.py +152 -0
  891. anyscale/sdk/anyscale_client/models/cluster_list_response.py +147 -0
  892. anyscale/sdk/anyscale_client/models/cluster_management_stack_versions.py +100 -0
  893. anyscale/sdk/anyscale_client/models/cluster_operation.py +266 -0
  894. anyscale/sdk/anyscale_client/models/cluster_operation_type.py +101 -0
  895. anyscale/sdk/anyscale_client/models/cluster_response.py +121 -0
  896. anyscale/sdk/anyscale_client/models/cluster_services_urls.py +430 -0
  897. anyscale/sdk/anyscale_client/models/cluster_state.py +108 -0
  898. anyscale/sdk/anyscale_client/models/cluster_status.py +104 -0
  899. anyscale/sdk/anyscale_client/models/cluster_status_details.py +100 -0
  900. anyscale/sdk/anyscale_client/models/clustercompute_list_response.py +147 -0
  901. anyscale/sdk/anyscale_client/models/clustercompute_response.py +121 -0
  902. anyscale/sdk/anyscale_client/models/clusterenvironment_list_response.py +147 -0
  903. anyscale/sdk/anyscale_client/models/clusterenvironment_response.py +121 -0
  904. anyscale/sdk/anyscale_client/models/clusterenvironmentbuild_list_response.py +147 -0
  905. anyscale/sdk/anyscale_client/models/clusterenvironmentbuild_response.py +121 -0
  906. anyscale/sdk/anyscale_client/models/clusterenvironmentbuildlogresponse_response.py +121 -0
  907. anyscale/sdk/anyscale_client/models/clusterenvironmentbuildoperation_response.py +121 -0
  908. anyscale/sdk/anyscale_client/models/clusteroperation_response.py +121 -0
  909. anyscale/sdk/anyscale_client/models/clusters_query.py +234 -0
  910. anyscale/sdk/anyscale_client/models/compute_node_type.py +292 -0
  911. anyscale/sdk/anyscale_client/models/compute_stack.py +100 -0
  912. anyscale/sdk/anyscale_client/models/compute_template.py +415 -0
  913. anyscale/sdk/anyscale_client/models/compute_template_config.py +461 -0
  914. anyscale/sdk/anyscale_client/models/compute_template_query.py +316 -0
  915. anyscale/sdk/anyscale_client/models/computetemplate_list_response.py +147 -0
  916. anyscale/sdk/anyscale_client/models/computetemplate_response.py +121 -0
  917. anyscale/sdk/anyscale_client/models/computetemplateconfig_response.py +121 -0
  918. anyscale/sdk/anyscale_client/models/create_app_config.py +235 -0
  919. anyscale/sdk/anyscale_client/models/create_app_config_configuration_schema.py +235 -0
  920. anyscale/sdk/anyscale_client/models/create_build.py +263 -0
  921. anyscale/sdk/anyscale_client/models/create_byod_app_config_configuration_schema.py +206 -0
  922. anyscale/sdk/anyscale_client/models/create_byod_cluster_environment.py +180 -0
  923. anyscale/sdk/anyscale_client/models/create_byod_cluster_environment_build.py +152 -0
  924. anyscale/sdk/anyscale_client/models/create_byod_cluster_environment_configuration_schema.py +208 -0
  925. anyscale/sdk/anyscale_client/models/create_cloud.py +518 -0
  926. anyscale/sdk/anyscale_client/models/create_cluster.py +376 -0
  927. anyscale/sdk/anyscale_client/models/create_cluster_compute.py +229 -0
  928. anyscale/sdk/anyscale_client/models/create_cluster_compute_config.py +463 -0
  929. anyscale/sdk/anyscale_client/models/create_cluster_environment.py +235 -0
  930. anyscale/sdk/anyscale_client/models/create_cluster_environment_build.py +263 -0
  931. anyscale/sdk/anyscale_client/models/create_cluster_environment_configuration_schema.py +235 -0
  932. anyscale/sdk/anyscale_client/models/create_compute_template.py +229 -0
  933. anyscale/sdk/anyscale_client/models/create_compute_template_config.py +464 -0
  934. anyscale/sdk/anyscale_client/models/create_job_queue_config.py +206 -0
  935. anyscale/sdk/anyscale_client/models/create_production_job.py +234 -0
  936. anyscale/sdk/anyscale_client/models/create_production_job_config.py +347 -0
  937. anyscale/sdk/anyscale_client/models/create_project.py +207 -0
  938. anyscale/sdk/anyscale_client/models/create_schedule.py +263 -0
  939. anyscale/sdk/anyscale_client/models/create_session.py +432 -0
  940. anyscale/sdk/anyscale_client/models/create_session_command.py +152 -0
  941. anyscale/sdk/anyscale_client/models/create_sso_config.py +150 -0
  942. anyscale/sdk/anyscale_client/models/grpc_protocol_config.py +178 -0
  943. anyscale/sdk/anyscale_client/models/ha_job_goal_states.py +102 -0
  944. anyscale/sdk/anyscale_client/models/ha_job_states.py +109 -0
  945. anyscale/sdk/anyscale_client/models/http_protocol_config.py +150 -0
  946. anyscale/sdk/anyscale_client/models/http_validation_error.py +120 -0
  947. anyscale/sdk/anyscale_client/models/idle_termination_status.py +104 -0
  948. anyscale/sdk/anyscale_client/models/job.py +466 -0
  949. anyscale/sdk/anyscale_client/models/job_list_response.py +147 -0
  950. anyscale/sdk/anyscale_client/models/job_queue_config.py +122 -0
  951. anyscale/sdk/anyscale_client/models/job_queue_execution_mode.py +101 -0
  952. anyscale/sdk/anyscale_client/models/job_queue_spec.py +263 -0
  953. anyscale/sdk/anyscale_client/models/job_run_type.py +101 -0
  954. anyscale/sdk/anyscale_client/models/job_status.py +105 -0
  955. anyscale/sdk/anyscale_client/models/jobs_query.py +458 -0
  956. anyscale/sdk/anyscale_client/models/jobs_sort_field.py +104 -0
  957. anyscale/sdk/anyscale_client/models/list_response_metadata.py +146 -0
  958. anyscale/sdk/anyscale_client/models/list_service_model.py +347 -0
  959. anyscale/sdk/anyscale_client/models/listservicemodel_list_response.py +147 -0
  960. anyscale/sdk/anyscale_client/models/log_download_result.py +207 -0
  961. anyscale/sdk/anyscale_client/models/log_file_chunk.py +439 -0
  962. anyscale/sdk/anyscale_client/models/log_level_types.py +100 -0
  963. anyscale/sdk/anyscale_client/models/log_stream.py +151 -0
  964. anyscale/sdk/anyscale_client/models/logdownloadresult_response.py +121 -0
  965. anyscale/sdk/anyscale_client/models/logstream_response.py +121 -0
  966. anyscale/sdk/anyscale_client/models/node_type.py +100 -0
  967. anyscale/sdk/anyscale_client/models/object_storage_config.py +122 -0
  968. anyscale/sdk/anyscale_client/models/object_storage_config_s3.py +256 -0
  969. anyscale/sdk/anyscale_client/models/objectstorageconfig_response.py +121 -0
  970. anyscale/sdk/anyscale_client/models/operation_error.py +123 -0
  971. anyscale/sdk/anyscale_client/models/operation_progress.py +123 -0
  972. anyscale/sdk/anyscale_client/models/operation_result.py +150 -0
  973. anyscale/sdk/anyscale_client/models/organization.py +209 -0
  974. anyscale/sdk/anyscale_client/models/organization_response.py +121 -0
  975. anyscale/sdk/anyscale_client/models/page_query.py +153 -0
  976. anyscale/sdk/anyscale_client/models/pause_schedule.py +123 -0
  977. anyscale/sdk/anyscale_client/models/production_job.py +437 -0
  978. anyscale/sdk/anyscale_client/models/production_job_config.py +348 -0
  979. anyscale/sdk/anyscale_client/models/production_job_state_transition.py +293 -0
  980. anyscale/sdk/anyscale_client/models/production_service_v2_model.py +612 -0
  981. anyscale/sdk/anyscale_client/models/production_service_v2_version_model.py +437 -0
  982. anyscale/sdk/anyscale_client/models/productionjob_list_response.py +147 -0
  983. anyscale/sdk/anyscale_client/models/productionjob_response.py +121 -0
  984. anyscale/sdk/anyscale_client/models/productionservicev2_model_response.py +121 -0
  985. anyscale/sdk/anyscale_client/models/project.py +467 -0
  986. anyscale/sdk/anyscale_client/models/project_list_response.py +147 -0
  987. anyscale/sdk/anyscale_client/models/project_response.py +121 -0
  988. anyscale/sdk/anyscale_client/models/projects_query.py +234 -0
  989. anyscale/sdk/anyscale_client/models/protocols.py +150 -0
  990. anyscale/sdk/anyscale_client/models/python_modules.py +150 -0
  991. anyscale/sdk/anyscale_client/models/python_version.py +105 -0
  992. anyscale/sdk/anyscale_client/models/ray_gcs_external_storage_config.py +178 -0
  993. anyscale/sdk/anyscale_client/models/ray_runtime_env_config.py +262 -0
  994. anyscale/sdk/anyscale_client/models/resources.py +234 -0
  995. anyscale/sdk/anyscale_client/models/rollback_service_model.py +122 -0
  996. anyscale/sdk/anyscale_client/models/rollout_strategy.py +100 -0
  997. anyscale/sdk/anyscale_client/models/runtime_environment.py +406 -0
  998. anyscale/sdk/anyscale_client/models/runtimeenvironment_response.py +121 -0
  999. anyscale/sdk/anyscale_client/models/schedule_api_model.py +467 -0
  1000. anyscale/sdk/anyscale_client/models/schedule_config.py +151 -0
  1001. anyscale/sdk/anyscale_client/models/scheduleapimodel_list_response.py +147 -0
  1002. anyscale/sdk/anyscale_client/models/scheduleapimodel_response.py +121 -0
  1003. anyscale/sdk/anyscale_client/models/service_config.py +178 -0
  1004. anyscale/sdk/anyscale_client/models/service_event_current_state.py +108 -0
  1005. anyscale/sdk/anyscale_client/models/service_goal_states.py +100 -0
  1006. anyscale/sdk/anyscale_client/models/service_model.py +612 -0
  1007. anyscale/sdk/anyscale_client/models/service_observability_urls.py +206 -0
  1008. anyscale/sdk/anyscale_client/models/service_sort_field.py +101 -0
  1009. anyscale/sdk/anyscale_client/models/service_type.py +100 -0
  1010. anyscale/sdk/anyscale_client/models/service_version_state.py +106 -0
  1011. anyscale/sdk/anyscale_client/models/servicemodel_list_response.py +147 -0
  1012. anyscale/sdk/anyscale_client/models/servicemodel_response.py +121 -0
  1013. anyscale/sdk/anyscale_client/models/session.py +1535 -0
  1014. anyscale/sdk/anyscale_client/models/session_command.py +350 -0
  1015. anyscale/sdk/anyscale_client/models/session_command_types.py +100 -0
  1016. anyscale/sdk/anyscale_client/models/session_event.py +267 -0
  1017. anyscale/sdk/anyscale_client/models/session_event_cause.py +150 -0
  1018. anyscale/sdk/anyscale_client/models/session_event_types.py +111 -0
  1019. anyscale/sdk/anyscale_client/models/session_list_response.py +147 -0
  1020. anyscale/sdk/anyscale_client/models/session_operation.py +266 -0
  1021. anyscale/sdk/anyscale_client/models/session_operation_type.py +101 -0
  1022. anyscale/sdk/anyscale_client/models/session_response.py +121 -0
  1023. anyscale/sdk/anyscale_client/models/session_starting_up_data.py +146 -0
  1024. anyscale/sdk/anyscale_client/models/session_state.py +111 -0
  1025. anyscale/sdk/anyscale_client/models/session_state_data.py +146 -0
  1026. anyscale/sdk/anyscale_client/models/session_stopping_data.py +146 -0
  1027. anyscale/sdk/anyscale_client/models/sessioncommand_list_response.py +147 -0
  1028. anyscale/sdk/anyscale_client/models/sessioncommand_response.py +121 -0
  1029. anyscale/sdk/anyscale_client/models/sessionevent_list_response.py +147 -0
  1030. anyscale/sdk/anyscale_client/models/sessionoperation_response.py +121 -0
  1031. anyscale/sdk/anyscale_client/models/sessions_query.py +206 -0
  1032. anyscale/sdk/anyscale_client/models/sort_by_clause_jobs_sort_field.py +148 -0
  1033. anyscale/sdk/anyscale_client/models/sort_order.py +100 -0
  1034. anyscale/sdk/anyscale_client/models/sso_config.py +237 -0
  1035. anyscale/sdk/anyscale_client/models/sso_mode.py +101 -0
  1036. anyscale/sdk/anyscale_client/models/ssoconfig_response.py +121 -0
  1037. anyscale/sdk/anyscale_client/models/start_cluster_options.py +178 -0
  1038. anyscale/sdk/anyscale_client/models/start_session_options.py +206 -0
  1039. anyscale/sdk/anyscale_client/models/static_sso_config.py +210 -0
  1040. anyscale/sdk/anyscale_client/models/supportedbaseimagesenum.py +1570 -0
  1041. anyscale/sdk/anyscale_client/models/terminate_cluster_options.py +122 -0
  1042. anyscale/sdk/anyscale_client/models/terminate_session_options.py +206 -0
  1043. anyscale/sdk/anyscale_client/models/text_query.py +178 -0
  1044. anyscale/sdk/anyscale_client/models/tracing_config.py +178 -0
  1045. anyscale/sdk/anyscale_client/models/update_app_config.py +122 -0
  1046. anyscale/sdk/anyscale_client/models/update_cloud.py +150 -0
  1047. anyscale/sdk/anyscale_client/models/update_cluster.py +206 -0
  1048. anyscale/sdk/anyscale_client/models/update_compute_template.py +146 -0
  1049. anyscale/sdk/anyscale_client/models/update_compute_template_config.py +464 -0
  1050. anyscale/sdk/anyscale_client/models/update_organization.py +123 -0
  1051. anyscale/sdk/anyscale_client/models/update_project.py +150 -0
  1052. anyscale/sdk/anyscale_client/models/update_session.py +150 -0
  1053. anyscale/sdk/anyscale_client/models/user_service_access_types.py +100 -0
  1054. anyscale/sdk/anyscale_client/models/ux_instance.py +468 -0
  1055. anyscale/sdk/anyscale_client/models/validation_error.py +175 -0
  1056. anyscale/sdk/anyscale_client/models/worker_node_type.py +404 -0
  1057. anyscale/sdk/anyscale_client/rest.py +296 -0
  1058. anyscale/sdk/anyscale_client/sdk.py +634 -0
  1059. anyscale/service/__init__.py +168 -0
  1060. anyscale/service/_private/service_sdk.py +702 -0
  1061. anyscale/service/commands.py +261 -0
  1062. anyscale/service/models.py +671 -0
  1063. anyscale/shared_anyscale_utils/__init__.py +1 -0
  1064. anyscale/shared_anyscale_utils/aws.py +153 -0
  1065. anyscale/shared_anyscale_utils/bytes_util.py +10 -0
  1066. anyscale/shared_anyscale_utils/conf.py +47 -0
  1067. anyscale/shared_anyscale_utils/default_anyscale_aws.yaml +74 -0
  1068. anyscale/shared_anyscale_utils/default_anyscale_gcp.yaml +80 -0
  1069. anyscale/shared_anyscale_utils/headers.py +38 -0
  1070. anyscale/shared_anyscale_utils/latest_ray_version.py +2 -0
  1071. anyscale/shared_anyscale_utils/project.py +15 -0
  1072. anyscale/shared_anyscale_utils/test_util.py +22 -0
  1073. anyscale/shared_anyscale_utils/tests/__init__.py +1 -0
  1074. anyscale/shared_anyscale_utils/tests/test_asyncio.py +41 -0
  1075. anyscale/shared_anyscale_utils/tests/test_ray_semver.py +63 -0
  1076. anyscale/shared_anyscale_utils/util.py +50 -0
  1077. anyscale/shared_anyscale_utils/utils/__init__.py +2 -0
  1078. anyscale/shared_anyscale_utils/utils/asyncio.py +120 -0
  1079. anyscale/shared_anyscale_utils/utils/byod.py +40 -0
  1080. anyscale/shared_anyscale_utils/utils/collections.py +33 -0
  1081. anyscale/shared_anyscale_utils/utils/id_gen.py +147 -0
  1082. anyscale/shared_anyscale_utils/utils/protected_string.py +89 -0
  1083. anyscale/shared_anyscale_utils/utils/ray_semver.py +81 -0
  1084. anyscale/snapshot.py +46 -0
  1085. anyscale/tables.py +82 -0
  1086. anyscale/util.py +1155 -0
  1087. anyscale/utils/__init__.py +0 -0
  1088. anyscale/utils/cli_version_check_util.py +63 -0
  1089. anyscale/utils/cloud_update_utils.py +862 -0
  1090. anyscale/utils/cloud_utils.py +317 -0
  1091. anyscale/utils/cluster_debug.py +191 -0
  1092. anyscale/utils/connect_helpers.py +155 -0
  1093. anyscale/utils/deprecation_util.py +32 -0
  1094. anyscale/utils/entity_arg_utils.py +43 -0
  1095. anyscale/utils/env_utils.py +17 -0
  1096. anyscale/utils/gcp_managed_setup_utils.py +888 -0
  1097. anyscale/utils/gcp_utils.py +312 -0
  1098. anyscale/utils/imports/__init__.py +0 -0
  1099. anyscale/utils/imports/all.py +13 -0
  1100. anyscale/utils/imports/azure.py +14 -0
  1101. anyscale/utils/imports/gcp.py +59 -0
  1102. anyscale/utils/logs_utils.py +141 -0
  1103. anyscale/utils/name_utils.py +33 -0
  1104. anyscale/utils/network_verification.py +153 -0
  1105. anyscale/utils/ray_utils.py +128 -0
  1106. anyscale/utils/ray_version_checker.py +48 -0
  1107. anyscale/utils/ray_version_utils.py +53 -0
  1108. anyscale/utils/runtime_env.py +487 -0
  1109. anyscale/utils/s3.py +92 -0
  1110. anyscale/utils/user_utils.py +17 -0
  1111. anyscale/utils/workload_types.py +7 -0
  1112. anyscale/utils/workspace_notification.py +39 -0
  1113. anyscale/utils/workspace_utils.py +65 -0
  1114. anyscale/version.py +1 -0
  1115. anyscale/webterminal/__init__.py +0 -0
  1116. anyscale/webterminal/bash-preexec.sh +370 -0
  1117. anyscale/webterminal/command_persister.py +164 -0
  1118. anyscale/webterminal/utils.py +176 -0
  1119. anyscale/webterminal/webterminal.py +311 -0
  1120. anyscale/workspace/__init__.py +270 -0
  1121. anyscale/workspace/_private/workspace_sdk.py +737 -0
  1122. anyscale/workspace/commands.py +472 -0
  1123. anyscale/workspace/models.py +296 -0
  1124. anyscale/workspace_utils.py +35 -0
  1125. anyscale-0.24.86.dist-info/LICENSE +68 -0
  1126. anyscale-0.24.86.dist-info/METADATA +82 -0
  1127. anyscale-0.24.86.dist-info/NOTICE +6 -0
  1128. anyscale-0.24.86.dist-info/RECORD +1131 -0
  1129. anyscale-0.24.86.dist-info/WHEEL +5 -0
  1130. anyscale-0.24.86.dist-info/entry_points.txt +2 -0
  1131. anyscale-0.24.86.dist-info/top_level.txt +1 -0
@@ -0,0 +1,1080 @@
1
+ from collections import defaultdict
2
+ from datetime import date, datetime
3
+ import logging
4
+ import os
5
+ from typing import DefaultDict, Dict, Generator, List, Optional, Tuple
6
+ from unittest.mock import Mock
7
+ import uuid
8
+
9
+ from anyscale._private.anyscale_client.common import (
10
+ AnyscaleClientInterface,
11
+ WORKSPACE_CLUSTER_NAME_PREFIX,
12
+ )
13
+ from anyscale._private.models.image_uri import ImageURI
14
+ from anyscale._private.models.model_base import ListResponse
15
+ from anyscale.cli_logger import BlockLogger
16
+ from anyscale.client.openapi_client.models import (
17
+ Cloud,
18
+ ComputeTemplateConfig,
19
+ CreateExperimentalWorkspace,
20
+ CreateInternalProductionJob,
21
+ DecoratedComputeTemplate,
22
+ DeletedPlatformFineTunedModel,
23
+ ExperimentalWorkspace,
24
+ FineTunedModel,
25
+ FineTuneType,
26
+ HaJobGoalStates,
27
+ HaJobStates,
28
+ InternalProductionJob,
29
+ ProductionJob,
30
+ ProductionJobStateTransition,
31
+ Project,
32
+ WorkspaceDataplaneProxiedArtifacts,
33
+ )
34
+ from anyscale.client.openapi_client.models.create_schedule import CreateSchedule
35
+ from anyscale.client.openapi_client.models.decorated_schedule import DecoratedSchedule
36
+ from anyscale.client.openapi_client.models.decorated_session import DecoratedSession
37
+ from anyscale.client.openapi_client.models.session_ssh_key import SessionSshKey
38
+ from anyscale.cluster_compute import parse_cluster_compute_name_version
39
+ from anyscale.llm.dataset._private.models import Dataset
40
+ from anyscale.sdk.anyscale_client.configuration import Configuration
41
+ from anyscale.sdk.anyscale_client.models import (
42
+ ApplyServiceModel,
43
+ Cluster,
44
+ ClusterCompute,
45
+ ClusterComputeConfig,
46
+ ClusterEnvironmentBuild,
47
+ ClusterEnvironmentBuildStatus,
48
+ ComputeNodeType,
49
+ Job as APIJobRun,
50
+ ProductionServiceV2VersionModel,
51
+ ServiceEventCurrentState,
52
+ ServiceModel,
53
+ ServiceVersionState,
54
+ SessionState,
55
+ )
56
+ from anyscale.sdk.anyscale_client.models.cluster_environment import ClusterEnvironment
57
+ from anyscale.shared_anyscale_utils.latest_ray_version import LATEST_RAY_VERSION
58
+ from anyscale.utils.workspace_notification import WorkspaceNotification
59
+
60
+
61
+ block_logger = BlockLogger()
62
+ logger = logging.getLogger(__name__)
63
+
64
+ OPENAPI_NO_VALIDATION = Configuration()
65
+ OPENAPI_NO_VALIDATION.client_side_validation = False
66
+
67
+
68
+ class FakeAnyscaleClient(AnyscaleClientInterface):
69
+ BASE_UI_URL = "http://fake.com"
70
+ CLOUD_BUCKET = "s3://fake-bucket/{cloud_id}"
71
+ DEFAULT_CLOUD_ID = "fake-default-cloud-id"
72
+ DEFAULT_CLOUD_NAME = "fake-default-cloud"
73
+ DEFAULT_PROJECT_NAME = "fake-default-project"
74
+ DEFAULT_PROJECT_ID = "fake-default-project-id"
75
+ DEFAULT_CLUSTER_COMPUTE_NAME = "fake-default-cluster-compute"
76
+ DEFAULT_CLUSTER_COMPUTE_ID = "fake-default-cluster-compute-id"
77
+ DEFAULT_CLUSTER_ENV_BUILD_ID = "fake-default-cluster-env-build-id"
78
+ DEFAULT_USER_ID = "fake-user-id"
79
+ DEFAULT_USER_EMAIL = "user@email.com"
80
+ DEFAULT_ORGANIZATION_ID = "fake-org-id"
81
+
82
+ WORKSPACE_ID = "fake-workspace-id"
83
+ WORKSPACE_CLOUD_ID = "fake-workspace-cloud-id"
84
+ WORKSPACE_CLUSTER_ID = "fake-workspace-cluster-id"
85
+ WORKSPACE_PROJECT_ID = "fake-workspace-project-id"
86
+ WORKSPACE_CLUSTER_COMPUTE_ID = "fake-workspace-cluster-compute-id"
87
+ WORKSPACE_CLUSTER_ENV_BUILD_ID = "fake-workspace-cluster-env-build-id"
88
+
89
+ SCHEDULE_NEXT_TRIGGER_AT_TIME = datetime.utcnow()
90
+
91
+ def __init__(self):
92
+ self._builds: Dict[str, ClusterEnvironmentBuild] = {
93
+ self.DEFAULT_CLUSTER_ENV_BUILD_ID: ClusterEnvironmentBuild(
94
+ id=self.DEFAULT_CLUSTER_ENV_BUILD_ID,
95
+ cluster_environment_id="default-cluster-env-id",
96
+ docker_image_name="docker.io/my/base-image:latest",
97
+ status=ClusterEnvironmentBuildStatus.SUCCEEDED,
98
+ local_vars_configuration=OPENAPI_NO_VALIDATION,
99
+ ),
100
+ self.WORKSPACE_CLUSTER_ENV_BUILD_ID: ClusterEnvironmentBuild(
101
+ id=self.WORKSPACE_CLUSTER_ENV_BUILD_ID,
102
+ cluster_environment_id="workspace-cluster-env-id",
103
+ docker_image_name="docker.io/my/base-ws-image:latest",
104
+ status=ClusterEnvironmentBuildStatus.SUCCEEDED,
105
+ local_vars_configuration=OPENAPI_NO_VALIDATION,
106
+ ),
107
+ }
108
+ self._images: Dict[str, ClusterEnvironment] = {
109
+ "default-cluster-env-id": ClusterEnvironment(
110
+ id="default-cluster-env-id",
111
+ name="default-cluster-env",
112
+ anonymous=True,
113
+ is_default=True,
114
+ local_vars_configuration=OPENAPI_NO_VALIDATION,
115
+ ),
116
+ "workspace-cluster-env-id": ClusterEnvironment(
117
+ id="workspace-cluster-env-id",
118
+ name="default-workspace-cluster-env",
119
+ anonymous=True,
120
+ is_default=True,
121
+ local_vars_configuration=OPENAPI_NO_VALIDATION,
122
+ ),
123
+ }
124
+ self._compute_config_name_to_ids: DefaultDict[str, List[str]] = defaultdict(
125
+ list
126
+ )
127
+ self._compute_config_id_to_cloud_id: Dict[str, str] = {}
128
+ self._compute_configs: Dict[str, ClusterCompute] = {}
129
+ self._archived_compute_configs: Dict[str, ClusterCompute] = {}
130
+ self._workspace_cluster: Optional[Cluster] = None
131
+ self._workspace_dependency_tracking_enabled: bool = False
132
+ self._services: Dict[str, ServiceModel] = {}
133
+ self._jobs: Dict[str, ProductionJob] = {}
134
+ self._job_runs: Dict[str, List[APIJobRun]] = defaultdict(list)
135
+ self._project_to_id: Dict[Optional[str] : Dict[Optional[str], str]] = {}
136
+ self._rolled_out_model: Optional[ApplyServiceModel] = None
137
+ self._sent_workspace_notifications: List[WorkspaceNotification] = []
138
+ self._rolled_back_service: Optional[Tuple[str, Optional[int]]] = None
139
+ self._terminated_service: Optional[str] = None
140
+ self._archived_jobs: Dict[str, ProductionJob] = {}
141
+ self._requirements_path: Optional[str] = None
142
+ self._upload_uri_mapping: Dict[str, str] = {}
143
+ self._submitted_job: Optional[CreateInternalProductionJob] = None
144
+ self._env_vars: Optional[Dict[str, str]] = None
145
+ self._job_run_logs: Dict[str, str] = {}
146
+ self._controller_logs: Dict[str, str] = {}
147
+ self._schedules: Dict[str, DecoratedSchedule] = {}
148
+ self._schedule_trigger_counts: Dict[str, int] = defaultdict(int)
149
+ self._workspaces: Dict[str, ExperimentalWorkspace] = {}
150
+ self._workspaces_dependencies: Dict[str, List[str]] = {}
151
+ self._workspaces_env_vars: Dict[str, Dict[str, str]] = {}
152
+ self._clusters_headnode_ip: Dict[str, str] = {}
153
+ self._clusters_ssh_key: Dict[str, SessionSshKey] = {}
154
+
155
+ # Cloud ID -> Cloud.
156
+ self._clouds: Dict[str, Cloud] = {
157
+ self.DEFAULT_CLOUD_ID: Cloud(
158
+ id=self.DEFAULT_CLOUD_ID,
159
+ name=self.DEFAULT_CLOUD_NAME,
160
+ local_vars_configuration=OPENAPI_NO_VALIDATION,
161
+ ),
162
+ }
163
+
164
+ # Cloud ID -> default ClusterCompute.
165
+ compute_config = ClusterCompute(
166
+ id=self.DEFAULT_CLUSTER_COMPUTE_ID,
167
+ name=self.DEFAULT_CLUSTER_COMPUTE_NAME,
168
+ config=ClusterComputeConfig(
169
+ cloud_id=self.DEFAULT_CLOUD_ID,
170
+ head_node_type=ComputeNodeType(
171
+ name="default-head-node",
172
+ instance_type="m5.2xlarge",
173
+ resources={"CPU": 8, "GPU": 1},
174
+ ),
175
+ local_vars_configuration=OPENAPI_NO_VALIDATION,
176
+ ),
177
+ local_vars_configuration=OPENAPI_NO_VALIDATION,
178
+ )
179
+ self._default_compute_configs: Dict[str, ClusterCompute] = {
180
+ self.DEFAULT_CLOUD_ID: compute_config,
181
+ }
182
+ self.add_compute_config(compute_config)
183
+
184
+ def get_job_ui_url(self, job_id: str) -> str:
185
+ return f"{self.BASE_UI_URL}/jobs/{job_id}"
186
+
187
+ def get_service_ui_url(self, service_id: str) -> str:
188
+ return f"{self.BASE_UI_URL}/services/{service_id}"
189
+
190
+ def get_compute_config_ui_url(
191
+ self, compute_config_id: str, *, cloud_id: str
192
+ ) -> str:
193
+ return f"{self.BASE_UI_URL}/v2/{cloud_id}/compute-configs/{compute_config_id}"
194
+
195
+ def set_inside_workspace(
196
+ self,
197
+ inside_workspace: bool,
198
+ *,
199
+ requirements_path: Optional[str] = None,
200
+ cluster_name: Optional[str] = None,
201
+ env_vars: Optional[Dict[str, str]] = None,
202
+ ):
203
+ self._requirements_path = requirements_path
204
+ self._env_vars = env_vars
205
+ if inside_workspace:
206
+ self._workspace_cluster = Cluster(
207
+ id=self.WORKSPACE_CLUSTER_ID,
208
+ name=cluster_name
209
+ if cluster_name is not None
210
+ else WORKSPACE_CLUSTER_NAME_PREFIX + "test",
211
+ project_id=self.WORKSPACE_PROJECT_ID,
212
+ cluster_compute_id=self.WORKSPACE_CLUSTER_COMPUTE_ID,
213
+ cluster_environment_build_id=self.WORKSPACE_CLUSTER_ENV_BUILD_ID,
214
+ local_vars_configuration=OPENAPI_NO_VALIDATION,
215
+ )
216
+ else:
217
+ self._workspace_cluster = None
218
+
219
+ def get_current_workspace_id(self) -> Optional[str]:
220
+ return (
221
+ self.WORKSPACE_ID
222
+ if self.get_current_workspace_cluster() is not None
223
+ else None
224
+ )
225
+
226
+ def inside_workspace(self) -> bool:
227
+ return self.get_current_workspace_cluster() is not None
228
+
229
+ def get_workspace_env_vars(self) -> Optional[Dict[str, str]]:
230
+ return self._env_vars
231
+
232
+ def get_workspace_requirements_path(self) -> Optional[str]:
233
+ if self.inside_workspace():
234
+ return self._requirements_path
235
+ return None
236
+
237
+ def get_current_workspace_cluster(self) -> Optional[Cluster]:
238
+ return self._workspace_cluster
239
+
240
+ @property
241
+ def sent_workspace_notifications(self) -> List[WorkspaceNotification]:
242
+ return self._sent_workspace_notifications
243
+
244
+ def send_workspace_notification(self, notification: WorkspaceNotification):
245
+ if self.inside_workspace():
246
+ self._sent_workspace_notifications.append(notification)
247
+
248
+ def _find_project_cloud_id_tuples_by_name(self, name):
249
+ """Returns list of (cloud_id, project_id) tuples with name == name."""
250
+ project_id_cloud_id_pairs = []
251
+ for cloud_id, cloud_project_dict in self._project_to_id.items():
252
+ for p_name, p_id in cloud_project_dict.items():
253
+ if name == p_name:
254
+ project_id_cloud_id_pairs.append((cloud_id, p_id))
255
+ return project_id_cloud_id_pairs
256
+
257
+ def _get_project_id_by_name(
258
+ self, *, parent_cloud_id: Optional[str] = None, name: Optional[str] = None
259
+ ) -> str:
260
+ # items of existing_projects are (cloud_id, project_id)
261
+ existing_projects = self._find_project_cloud_id_tuples_by_name(name)
262
+ if len(existing_projects) == 0:
263
+ raise ValueError(f"Project '{name}' was not found.")
264
+ else:
265
+ for cloud_id, project_id in existing_projects:
266
+ if cloud_id == parent_cloud_id:
267
+ return project_id
268
+ raise ValueError(
269
+ f"{len(existing_projects)} project(s) found with name '{name}' and none matched cloud_id '{parent_cloud_id}'"
270
+ )
271
+
272
+ def _get_project_id_by_cloud_id(
273
+ self, *, parent_cloud_id: Optional[str] = None,
274
+ ) -> str:
275
+ workspace_cluster = self.get_current_workspace_cluster()
276
+ if workspace_cluster is not None:
277
+ if (
278
+ workspace_cluster.cluster_compute_config is not None
279
+ and workspace_cluster.cluster_compute_config.cloud_id == parent_cloud_id
280
+ ):
281
+ return workspace_cluster.project_id
282
+ elif workspace_cluster.cluster_compute_id is not None:
283
+ workspace_cluster_compute = self.get_compute_config(
284
+ workspace_cluster.cluster_compute_id
285
+ )
286
+ if (
287
+ workspace_cluster_compute is not None
288
+ and workspace_cluster_compute.config is not None
289
+ and workspace_cluster_compute.config.cloud_id == parent_cloud_id
290
+ ):
291
+ return workspace_cluster.project_id
292
+
293
+ return self.DEFAULT_PROJECT_ID
294
+
295
+ def get_project_id(
296
+ self,
297
+ *,
298
+ parent_cloud_id: Optional[str] = None, # noqa: ARG002
299
+ name: Optional[str] = None, # noqa: ARG002
300
+ ) -> str:
301
+ if name is not None:
302
+ return self._get_project_id_by_name(
303
+ parent_cloud_id=parent_cloud_id, name=name
304
+ )
305
+ else:
306
+ return self._get_project_id_by_cloud_id(parent_cloud_id=parent_cloud_id)
307
+
308
+ def get_cloud_id(
309
+ self,
310
+ *,
311
+ cloud_name: Optional[str] = None,
312
+ compute_config_id: Optional[str] = None,
313
+ ) -> str:
314
+ assert not (cloud_name and compute_config_id)
315
+ workspace_cluster = self.get_current_workspace_cluster()
316
+ if workspace_cluster is not None:
317
+ return self.WORKSPACE_CLOUD_ID
318
+
319
+ if compute_config_id is not None:
320
+ return self._compute_configs[compute_config_id].config.cloud_id
321
+
322
+ if cloud_name is None:
323
+ return self.DEFAULT_CLOUD_ID
324
+
325
+ for cloud in self._clouds.values():
326
+ if cloud.name == cloud_name:
327
+ return cloud.id
328
+
329
+ raise RuntimeError(f"Cloud with name '{cloud_name}' not found.")
330
+
331
+ def get_image_uri_from_build_id(self, build_id: str) -> Optional[ImageURI]:
332
+ cluster_env_build_id = self._builds[build_id].cluster_environment_id
333
+ return self.get_cluster_env_build_image_uri(cluster_env_build_id)
334
+
335
+ def add_build(self, build: ClusterEnvironmentBuild):
336
+ self._builds[build.id] = build
337
+
338
+ def add_image(self, image: ClusterEnvironment):
339
+ self._images[image.id] = image
340
+
341
+ def add_cloud(self, cloud: Cloud):
342
+ self._clouds[cloud.id] = cloud
343
+
344
+ def get_cloud(self, *, cloud_id: str) -> Optional[Cloud]:
345
+ return self._clouds.get(cloud_id, None)
346
+
347
+ def add_compute_config(self, compute_config: DecoratedComputeTemplate) -> int:
348
+ compute_config.version = (
349
+ len(self._compute_config_name_to_ids[compute_config.name]) + 1
350
+ )
351
+ self._compute_configs[compute_config.id] = compute_config
352
+ self._compute_config_name_to_ids[compute_config.name].append(compute_config.id)
353
+
354
+ return compute_config.version
355
+
356
+ def create_compute_config(
357
+ self, config: ComputeTemplateConfig, *, name: Optional[str] = None
358
+ ) -> Tuple[str, str]:
359
+ unique_id = str(uuid.uuid4())
360
+ compute_config_id = f"compute-config-id-{unique_id}"
361
+ if name is None:
362
+ anonymous = True
363
+ name = f"anonymous-compute-config-{unique_id}"
364
+ else:
365
+ anonymous = False
366
+
367
+ version = self.add_compute_config(
368
+ DecoratedComputeTemplate(
369
+ id=compute_config_id,
370
+ name=name,
371
+ config=config,
372
+ anonymous=anonymous,
373
+ local_vars_configuration=OPENAPI_NO_VALIDATION,
374
+ ),
375
+ )
376
+ return f"{name}:{version}", compute_config_id
377
+
378
+ def get_compute_config(
379
+ self, compute_config_id: str
380
+ ) -> Optional[DecoratedComputeTemplate]:
381
+ if compute_config_id in self._compute_configs:
382
+ return self._compute_configs[compute_config_id]
383
+
384
+ if compute_config_id in self._archived_compute_configs:
385
+ return self._archived_compute_configs[compute_config_id]
386
+
387
+ return None
388
+
389
+ def get_compute_config_id(
390
+ self, compute_config_name: Optional[str] = None, *, include_archived=False
391
+ ) -> Optional[str]:
392
+ if compute_config_name is not None:
393
+ name, version = parse_cluster_compute_name_version(compute_config_name)
394
+ if name not in self._compute_config_name_to_ids:
395
+ return None
396
+
397
+ if version is None:
398
+ version = len(self._compute_config_name_to_ids[name])
399
+
400
+ compute_config_id = self._compute_config_name_to_ids[name][version - 1]
401
+ if (
402
+ not include_archived
403
+ and compute_config_id in self._archived_compute_configs
404
+ ):
405
+ return None
406
+
407
+ return compute_config_id
408
+
409
+ workspace_cluster = self.get_current_workspace_cluster()
410
+ if workspace_cluster is not None:
411
+ return workspace_cluster.cluster_compute_id
412
+
413
+ return self.get_default_compute_config(cloud_id=self.get_cloud_id()).id
414
+
415
+ def archive_compute_config(self, *, compute_config_id: str):
416
+ archived_config = self._compute_configs.pop(compute_config_id)
417
+ archived_config.archived_at = datetime.utcnow()
418
+ self._archived_compute_configs[compute_config_id] = archived_config
419
+
420
+ def is_archived_compute_config(self, compute_config_id: str) -> bool:
421
+ return compute_config_id in self._archived_compute_configs
422
+
423
+ def set_default_compute_config(
424
+ self, compute_config: ClusterCompute, *, cloud_id: str
425
+ ):
426
+ self._default_compute_configs[cloud_id] = compute_config
427
+
428
+ def get_default_compute_config(self, *, cloud_id: str) -> ClusterCompute:
429
+ return self._default_compute_configs[cloud_id]
430
+
431
+ def list_cluster_env_builds(
432
+ self, cluster_env_id: str,
433
+ ) -> Generator[ClusterEnvironmentBuild, None, None]:
434
+ for v in self._builds.values():
435
+ if v.cluster_environment_id == cluster_env_id:
436
+ yield v
437
+
438
+ def get_non_default_cluster_env_builds(self) -> List[ClusterEnvironmentBuild]:
439
+ return [
440
+ v
441
+ for v in self._builds.values()
442
+ if v.id
443
+ not in [
444
+ self.DEFAULT_CLUSTER_ENV_BUILD_ID,
445
+ self.WORKSPACE_CLUSTER_ENV_BUILD_ID,
446
+ ]
447
+ ]
448
+
449
+ def get_default_build_id(self) -> str:
450
+ workspace_cluster = self.get_current_workspace_cluster()
451
+ if workspace_cluster is not None:
452
+ return workspace_cluster.cluster_environment_build_id
453
+ return self.DEFAULT_CLUSTER_ENV_BUILD_ID
454
+
455
+ def get_cluster_env_build(self, build_id: str) -> Optional[ClusterEnvironmentBuild]:
456
+ return self._builds.get(build_id, None)
457
+
458
+ def get_cluster_env_by_name(self, name) -> Optional[ClusterEnvironment]:
459
+ for v in self._images.values():
460
+ if v.name == name:
461
+ return v
462
+ return None
463
+
464
+ def get_cluster_env_build_id_from_containerfile(
465
+ self,
466
+ cluster_env_name: str,
467
+ containerfile: str,
468
+ anonymous: bool,
469
+ ray_version: Optional[str] = None, # noqa: ARG002
470
+ ) -> str:
471
+ for build in self._builds.values():
472
+ if build.containerfile == containerfile:
473
+ cluster_env = self._images.get(build.cluster_environment_id, None) # type: ignore
474
+ if cluster_env is not None and cluster_env.name == cluster_env_name:
475
+ return build.id # type: ignore
476
+ # create a new one if not found
477
+ cluster_env_id = f"cluster-env-id-{uuid.uuid4()!s}"
478
+ self._images[cluster_env_id] = ClusterEnvironment(
479
+ id=cluster_env_id,
480
+ name=cluster_env_name,
481
+ anonymous=anonymous,
482
+ local_vars_configuration=OPENAPI_NO_VALIDATION,
483
+ )
484
+ latest_build = None
485
+ for build in self._builds.values():
486
+ if build.cluster_environment_id == cluster_env_id and (latest_build is None or build.revision > latest_build.revision): # type: ignore
487
+ latest_build = build
488
+ build_id = f"cluster-env-build-id-{uuid.uuid4()!s}"
489
+ self._builds[build_id] = ClusterEnvironmentBuild(
490
+ id=build_id,
491
+ cluster_environment_id=cluster_env_id,
492
+ containerfile=containerfile,
493
+ status=ClusterEnvironmentBuildStatus.SUCCEEDED,
494
+ local_vars_configuration=OPENAPI_NO_VALIDATION,
495
+ ray_version=ray_version,
496
+ revision=latest_build.revision + 1 if latest_build is not None else 1, # type: ignore
497
+ )
498
+ return build_id
499
+
500
+ def get_cluster_env_build_id_from_image_uri(
501
+ self,
502
+ image_uri: ImageURI,
503
+ registry_login_secret: Optional[str] = None,
504
+ ray_version: Optional[str] = None,
505
+ name: Optional[str] = None,
506
+ ) -> str:
507
+ for build in self._builds.values():
508
+ build_image_uri = self.get_cluster_env_build_image_uri(build.id)
509
+ if (
510
+ build_image_uri.image_uri == image_uri.image_uri
511
+ if build_image_uri
512
+ else False
513
+ ):
514
+ return build.id # type: ignore
515
+ cluster_env_id = f"cluster-env-id-{uuid.uuid4()!s}"
516
+ cluster_env_name = name if name else image_uri.to_cluster_env_name()
517
+ self._images[cluster_env_id] = ClusterEnvironment(
518
+ id=cluster_env_id,
519
+ name=cluster_env_name,
520
+ anonymous=False,
521
+ local_vars_configuration=OPENAPI_NO_VALIDATION,
522
+ )
523
+ build_id = f"cluster-env-build-id-{uuid.uuid4()!s}"
524
+ self._builds[build_id] = ClusterEnvironmentBuild(
525
+ id=build_id,
526
+ cluster_environment_id=cluster_env_id,
527
+ docker_image_name=image_uri.image_uri,
528
+ status=ClusterEnvironmentBuildStatus.SUCCEEDED,
529
+ registry_login_secret=registry_login_secret,
530
+ ray_version=ray_version if ray_version else LATEST_RAY_VERSION,
531
+ local_vars_configuration=OPENAPI_NO_VALIDATION,
532
+ )
533
+ return build_id
534
+
535
+ def get_cluster_env_build_image_uri(
536
+ self, cluster_env_build_id: str, use_image_alias: bool = False
537
+ ) -> Optional[ImageURI]:
538
+ build = self._builds.get(cluster_env_build_id, None)
539
+ if build is None:
540
+ return None
541
+ else:
542
+ if build.docker_image_name is not None and not use_image_alias:
543
+ return ImageURI.from_str(build.docker_image_name)
544
+ else:
545
+ cluster_env = self._images[build.cluster_environment_id]
546
+ return ImageURI.from_cluster_env_build(cluster_env, build)
547
+
548
+ def update_service(self, model: ServiceModel):
549
+ self._services[model.id] = model
550
+
551
+ def get_service(
552
+ self, name: str, *, cloud: Optional[str], project: Optional[str]
553
+ ) -> Optional[ServiceModel]:
554
+ cloud_id = self.get_cloud_id(cloud_name=cloud)
555
+ cloud_project_dict = self._project_to_id.get(cloud_id, None)
556
+ project_id = (
557
+ cloud_project_dict.get(project, None) if cloud_project_dict else None
558
+ )
559
+ for service in self._services.values():
560
+ if service.name == name and (
561
+ project_id is None or service.project_id == project_id
562
+ ):
563
+ return service
564
+
565
+ return None
566
+
567
+ def get_project(self, project_id: str) -> Optional[Project]:
568
+ for cloud_project_dict in self._project_to_id.values():
569
+ for p_name, p_id in cloud_project_dict.items():
570
+ if p_id == project_id:
571
+ # return stub project
572
+ return Project(
573
+ name=p_name,
574
+ id=p_id,
575
+ local_vars_configuration=OPENAPI_NO_VALIDATION,
576
+ )
577
+ return None
578
+
579
+ def get_job(
580
+ self,
581
+ *,
582
+ name: Optional[str],
583
+ job_id: Optional[str],
584
+ cloud: Optional[str],
585
+ project: Optional[str],
586
+ ) -> Optional[ProductionJob]:
587
+ if job_id is not None:
588
+ return self._jobs.get(job_id, None)
589
+ else:
590
+ cloud_id = self.get_cloud_id(cloud_name=cloud)
591
+ cloud_project_dict = self._project_to_id.get(cloud_id, None)
592
+ project_id = (
593
+ cloud_project_dict.get(project, None) if cloud_project_dict else None
594
+ )
595
+ result: ProductionJob = None
596
+ for job in self._jobs.values():
597
+ if (
598
+ job is not None
599
+ and job.name == name
600
+ and (project_id is None or job.project_id == project_id)
601
+ and (result is None or job.created_at > result.created_at)
602
+ ):
603
+ result = job
604
+
605
+ return result
606
+
607
+ def get_job_runs(self, job_id: str) -> List[APIJobRun]:
608
+ return self._job_runs.get(job_id, [])
609
+
610
+ def update_job(self, model: ProductionJob):
611
+ self._jobs[model.id] = model
612
+
613
+ def update_job_run(self, prod_job_id: str, model: APIJobRun):
614
+ self._job_runs[prod_job_id].append(model)
615
+
616
+ def register_project_by_name(
617
+ self, name: str, cloud: str = DEFAULT_CLOUD_NAME, project_id: str = None
618
+ ) -> str:
619
+ """Helper method to create project name to project id mapping."""
620
+ cloud_id = self.get_cloud_id(cloud_name=cloud)
621
+ if cloud_id not in self._project_to_id:
622
+ self._project_to_id[cloud_id] = {}
623
+ cloud_project_dict = self._project_to_id[cloud_id]
624
+ if name in cloud_project_dict:
625
+ return cloud_project_dict[name]
626
+ else:
627
+ if project_id is None:
628
+ project_id = f"project-id-{uuid.uuid4()!s}"
629
+ cloud_project_dict[name] = project_id
630
+ return project_id
631
+
632
+ @property
633
+ def rolled_out_model(self) -> Optional[ApplyServiceModel]:
634
+ return self._rolled_out_model
635
+
636
+ def rollout_service(self, model: ApplyServiceModel) -> ServiceModel:
637
+ self._rolled_out_model = model
638
+ # TODO(mowen): This feels convoluted, is there a better way to pull cloud name and project name from the model?
639
+ project_model = self.get_project(model.project_id)
640
+ project = project_model.name if project_model else None
641
+ compute_config = self.get_compute_config(model.compute_config_id)
642
+ cloud_id = compute_config.config.cloud_id if compute_config else None
643
+ cloud_model = self.get_cloud(cloud_id=cloud_id)
644
+ cloud = cloud_model.name if cloud_model else None
645
+ existing_service = self.get_service(model.name, project=project, cloud=cloud)
646
+ if existing_service is not None:
647
+ service_id = existing_service.id
648
+ else:
649
+ service_id = f"service-id-{uuid.uuid4()!s}"
650
+
651
+ service = ServiceModel(
652
+ id=service_id,
653
+ name=model.name,
654
+ current_state=ServiceEventCurrentState.RUNNING,
655
+ cloud_id=cloud_id,
656
+ project_id=model.project_id,
657
+ base_url="http://fake-service-url",
658
+ auth_token="fake-auth-token"
659
+ if model.config.access.use_bearer_token
660
+ else None,
661
+ primary_version=ProductionServiceV2VersionModel(
662
+ id=str(uuid.uuid4()),
663
+ version="primary",
664
+ current_state=ServiceVersionState.RUNNING,
665
+ weight=100,
666
+ build_id=model.build_id,
667
+ compute_config_id=model.compute_config_id,
668
+ ray_serve_config=model.ray_serve_config,
669
+ ray_gcs_external_storage_config=model.ray_gcs_external_storage_config,
670
+ local_vars_configuration=OPENAPI_NO_VALIDATION,
671
+ ),
672
+ local_vars_configuration=OPENAPI_NO_VALIDATION,
673
+ )
674
+
675
+ self.update_service(service)
676
+ return service
677
+
678
+ @property
679
+ def rolled_back_service(self) -> Optional[Tuple[str, Optional[int]]]:
680
+ return self._rolled_back_service
681
+
682
+ def rollback_service(
683
+ self, service_id: str, *, max_surge_percent: Optional[int] = None
684
+ ):
685
+ self._rolled_back_service = (service_id, max_surge_percent)
686
+
687
+ @property
688
+ def terminated_service(self) -> Optional[str]:
689
+ return self._terminated_service
690
+
691
+ def terminate_service(self, service_id: str):
692
+ self._terminated_service = service_id
693
+ self._services[service_id].current_state = ServiceEventCurrentState.TERMINATED
694
+ self._services[service_id].canary_version = None
695
+ if self._services[service_id].primary_version is not None:
696
+ # The backend leaves the primary_version populated upon termination.
697
+ self._services[service_id].primary_version.weight = 100
698
+ self._services[
699
+ service_id
700
+ ].primary_version.current_state = ServiceVersionState.TERMINATED
701
+
702
+ @property
703
+ def submitted_job(self) -> Optional[CreateInternalProductionJob]:
704
+ return self._submitted_job
705
+
706
+ def submit_job(self, model: CreateInternalProductionJob) -> InternalProductionJob:
707
+ self._submitted_job = model
708
+
709
+ job = InternalProductionJob(
710
+ id=f"job-{uuid.uuid4()!s}",
711
+ name=model.name,
712
+ config=model.config,
713
+ state=ProductionJobStateTransition(
714
+ current_state=HaJobStates.PENDING,
715
+ goal_state=HaJobGoalStates.SUCCESS,
716
+ local_vars_configuration=OPENAPI_NO_VALIDATION,
717
+ ),
718
+ project_id=model.project_id,
719
+ local_vars_configuration=OPENAPI_NO_VALIDATION,
720
+ )
721
+
722
+ self.update_job(job)
723
+ return job
724
+
725
+ def terminate_job(self, job_id: str):
726
+ self._jobs[job_id].state = HaJobStates.TERMINATED
727
+
728
+ def archive_job(self, job_id: str):
729
+ self._archived_jobs[job_id] = self._jobs.pop(job_id)
730
+
731
+ def is_archived_job(self, job_id: str) -> bool:
732
+ return job_id in self._archived_jobs
733
+
734
+ def upload_local_dir_to_cloud_storage(
735
+ self,
736
+ local_dir: str, # noqa: ARG002
737
+ *,
738
+ cloud_id: str,
739
+ excludes: Optional[List[str]] = None, # noqa: ARG002
740
+ overwrite_existing_file: bool = False, # noqa: ARG002
741
+ ) -> str:
742
+ # Ensure that URIs are consistent for the same passed directory.
743
+ bucket = self.CLOUD_BUCKET.format(cloud_id=cloud_id)
744
+ if local_dir not in self._upload_uri_mapping:
745
+ self._upload_uri_mapping[
746
+ local_dir
747
+ ] = f"{bucket}/fake_pkg_{str(uuid.uuid4())}.zip"
748
+
749
+ return self._upload_uri_mapping[local_dir]
750
+
751
+ def add_job_run_logs(self, job_run_id: str, logs: str):
752
+ self._job_run_logs[job_run_id] = logs
753
+
754
+ def logs_for_job_run(
755
+ self,
756
+ job_run_id: str,
757
+ head: bool = False, # noqa: ARG002
758
+ tail: bool = True, # noqa: ARG002
759
+ max_lines: Optional[int] = None, # noqa: ARG002
760
+ parse_json: Optional[bool] = None, # noqa: ARG002
761
+ ) -> str:
762
+ log_lines = self._job_run_logs.get(job_run_id, "").splitlines()
763
+ if max_lines is None:
764
+ max_lines = len(log_lines)
765
+ if head:
766
+ return "\n".join(log_lines[:max_lines])
767
+ else:
768
+ return "\n".join(log_lines[-1 * max_lines :])
769
+
770
+ def add_controller_logs(self, service_version_id: str, logs: str):
771
+ self._controller_logs[service_version_id] = logs
772
+
773
+ def controller_logs_for_service_version(
774
+ self,
775
+ service_version: ProductionServiceV2VersionModel,
776
+ head: bool = False,
777
+ max_lines: Optional[int] = None,
778
+ parse_json: Optional[bool] = None, # noqa: ARG002
779
+ ) -> str:
780
+ log_lines = self._controller_logs.get(service_version.id, "").splitlines()
781
+ if max_lines is None:
782
+ max_lines = len(log_lines)
783
+ if head:
784
+ return "\n".join(log_lines[:max_lines])
785
+ else:
786
+ return "\n".join(log_lines[-1 * max_lines :])
787
+
788
+ def get_schedule(
789
+ self,
790
+ *,
791
+ name: Optional[str],
792
+ id: Optional[str], # noqa: A002
793
+ cloud: Optional[str],
794
+ project: Optional[str],
795
+ ) -> Optional[DecoratedSchedule]:
796
+ if id is not None:
797
+ return self._schedules.get(id, None)
798
+ else:
799
+ cloud_id = self.get_cloud_id(cloud_name=cloud)
800
+ cloud_project_dict = self._project_to_id.get(cloud_id, None)
801
+ project_id = (
802
+ cloud_project_dict.get(project, None) if cloud_project_dict else None
803
+ )
804
+ result: DecoratedSchedule = None
805
+ for schedule in self._schedules.values():
806
+ if (
807
+ schedule is not None
808
+ and schedule.name == name
809
+ and (project_id is None or schedule.project_id == project_id)
810
+ ):
811
+ result = schedule
812
+ break
813
+
814
+ return result
815
+
816
+ def update_schedule(self, model: DecoratedSchedule):
817
+ self._schedules[model.id] = model
818
+
819
+ def apply_schedule(self, model: CreateSchedule) -> DecoratedSchedule:
820
+ schedule = DecoratedSchedule(
821
+ id=f"sched-{uuid.uuid4()!s}",
822
+ name=model.name,
823
+ project_id=model.project_id,
824
+ config=model.config,
825
+ schedule=model.schedule,
826
+ # Fill in dummy time to represent schedule is enabled.
827
+ next_trigger_at=self.SCHEDULE_NEXT_TRIGGER_AT_TIME,
828
+ local_vars_configuration=OPENAPI_NO_VALIDATION,
829
+ )
830
+
831
+ self.update_schedule(schedule)
832
+ return schedule
833
+
834
+ def set_schedule_state(self, id: str, is_paused: bool): # noqa: A002
835
+ if is_paused:
836
+ self._schedules[id].next_trigger_at = None
837
+ else:
838
+ self._schedules[id].next_trigger_at = self.SCHEDULE_NEXT_TRIGGER_AT_TIME
839
+
840
+ def schedule_is_enabled(self, id: str) -> bool: # noqa: A002
841
+ return self._schedules[id].next_trigger_at is not None
842
+
843
+ def trigger_schedule(self, id: str): # noqa: A002
844
+ self._schedule_trigger_counts[id] += 1
845
+
846
+ def trigger_counts(self, id: str): # noqa: A002
847
+ return self._schedule_trigger_counts[id]
848
+
849
+ def get_dataset(
850
+ self, name: str, version: Optional[int], project: Optional[str] # noqa: ARG002
851
+ ) -> Dataset:
852
+ raise NotImplementedError
853
+
854
+ def upload_dataset(
855
+ self,
856
+ dataset_file: str, # noqa: ARG002
857
+ name: Optional[str], # noqa: ARG002
858
+ description: Optional[str], # noqa: ARG002
859
+ cloud: Optional[str], # noqa: ARG002
860
+ project: Optional[str], # noqa: ARG002
861
+ ) -> Dataset:
862
+ raise NotImplementedError
863
+
864
+ def download_dataset(
865
+ self, name: str, version: Optional[int], project: Optional[str] # noqa: ARG002
866
+ ) -> bytes:
867
+ return b""
868
+
869
+ def list_datasets(
870
+ self,
871
+ limit: Optional[int] = None, # noqa: ARG002
872
+ after: Optional[str] = None, # noqa: ARG002
873
+ name_contains: Optional[str] = None, # noqa: ARG002
874
+ cloud: Optional[str] = None, # noqa: ARG002
875
+ project: Optional[str] = None, # noqa: ARG002
876
+ ) -> ListResponse[Dataset]:
877
+ raise NotImplementedError
878
+
879
+ def get_finetuned_model(
880
+ self, model_id: Optional[str], job_id: Optional[str] # noqa: ARG002
881
+ ) -> FineTunedModel:
882
+ return FineTunedModel(
883
+ id=model_id if model_id else "test-model-id",
884
+ model_id=model_id if model_id else "test-model-id",
885
+ base_model_id="my_base_model_id",
886
+ ft_type=FineTuneType.LORA,
887
+ creator_id="",
888
+ creator_email="",
889
+ created_at=datetime.utcnow(),
890
+ storage_uri="s3://fake_bucket/fake_folder/",
891
+ )
892
+
893
+ def create_workspace(self, model: CreateExperimentalWorkspace) -> str:
894
+ workspace_id = uuid.uuid4()
895
+
896
+ # this usually happens on the backend
897
+ compute_config = self.get_compute_config(model.compute_config_id)
898
+ assert compute_config is not None
899
+ compute_config.idle_timeout_minutes = model.idle_timeout_minutes
900
+
901
+ workspace = ExperimentalWorkspace(
902
+ id=f"workspace-id-{workspace_id!s}",
903
+ name=model.name,
904
+ project_id=model.project_id or self.get_project_id(),
905
+ compute_config_id=model.compute_config_id,
906
+ environment_id=model.cluster_environment_build_id,
907
+ cloud_id=model.cloud_id or self.get_cloud_id(),
908
+ created_at=datetime.now(),
909
+ creator_id=self.DEFAULT_USER_ID,
910
+ creator_email=self.DEFAULT_USER_EMAIL,
911
+ organization_id=self.DEFAULT_ORGANIZATION_ID,
912
+ cluster_id=self.DEFAULT_CLOUD_ID,
913
+ state=SessionState.RUNNING
914
+ if not model.skip_start
915
+ else SessionState.TERMINATED,
916
+ )
917
+ self._workspaces[workspace.id] = workspace
918
+ return workspace.id
919
+
920
+ def get_workspace(
921
+ self,
922
+ *,
923
+ id: Optional[str] = None, # noqa: A002
924
+ name: Optional[str] = None,
925
+ cloud: Optional[str] = None,
926
+ project: Optional[str] = None,
927
+ ) -> Optional[ExperimentalWorkspace]:
928
+ if id is not None:
929
+ return self._workspaces.get(id, None)
930
+ else:
931
+ cloud_id = self.get_cloud_id(cloud_name=cloud)
932
+ cloud_project_dict = self._project_to_id.get(cloud_id, None)
933
+ project_id = (
934
+ cloud_project_dict.get(project, None) if cloud_project_dict else None
935
+ )
936
+ result: ExperimentalWorkspace = None
937
+ for workspace in self._workspaces.values():
938
+ if (
939
+ workspace is not None
940
+ and workspace.name == name
941
+ and (project_id is None or workspace.project_id == project_id)
942
+ ):
943
+ result = workspace
944
+ break
945
+
946
+ return result
947
+
948
+ @property
949
+ def workspaces(self) -> Dict[str, ExperimentalWorkspace]:
950
+ return self._workspaces
951
+
952
+ def start_workspace(self, workspace_id: str):
953
+ workspace = self._workspaces.get(workspace_id, None)
954
+ if workspace is None:
955
+ raise ValueError(f"Workspace '{workspace_id}' not found.")
956
+ workspace.state = SessionState.RUNNING
957
+
958
+ def terminate_workspace(self, workspace_id: str):
959
+ workspace = self._workspaces.get(workspace_id, None)
960
+ if workspace is None:
961
+ raise ValueError(f"Workspace '{workspace_id}' not found.")
962
+ workspace.state = SessionState.TERMINATED
963
+
964
+ def update_workspace_dependencies_offline_only(
965
+ self, workspace_id: str, requirements: List[str]
966
+ ):
967
+ self._workspaces_dependencies[workspace_id] = requirements
968
+
969
+ def update_workspace_env_vars_offline_only(
970
+ self, workspace_id: str, env_vars: Dict[str, str]
971
+ ):
972
+ self._workspaces_env_vars[workspace_id] = env_vars
973
+
974
+ def get_workspace_cluster(self, workspace_id: str) -> Optional[DecoratedSession]:
975
+ workspace_model = self._workspaces.get(workspace_id, None)
976
+ compute_config = self.get_compute_config(workspace_model.compute_config_id)
977
+ assert compute_config is not None
978
+ return Mock(
979
+ name=f"workspace-cluster-{workspace_model.name}",
980
+ build_id=workspace_model.environment_id,
981
+ state=workspace_model.state,
982
+ project_id=workspace_model.project_id,
983
+ cloud_id=workspace_model.cloud_id,
984
+ idle_timeout=compute_config.idle_timeout_minutes,
985
+ )
986
+
987
+ def get_workspace_proxied_dataplane_artifacts(
988
+ self, workspace_id: str
989
+ ) -> WorkspaceDataplaneProxiedArtifacts:
990
+ env_vars_dict = self._workspaces_env_vars.get(workspace_id, None)
991
+ return WorkspaceDataplaneProxiedArtifacts(
992
+ requirements=self._workspaces_dependencies.get(workspace_id, None),
993
+ environment_variables=[
994
+ f"{key}={value}" for key, value in env_vars_dict.items()
995
+ ]
996
+ if env_vars_dict
997
+ else None,
998
+ )
999
+
1000
+ def get_cluster_head_node_ip(self, cluster_id: str) -> str:
1001
+ return self._clusters_headnode_ip.get(cluster_id, "")
1002
+
1003
+ def get_cluster_ssh_key(self, cluster_id: str) -> SessionSshKey:
1004
+ return self._clusters_ssh_key.get(cluster_id, None)
1005
+
1006
+ def get_workspace_default_dir_name(self, workspace_id) -> str:
1007
+ workspace = self._workspaces.get(workspace_id, None)
1008
+ if workspace is None:
1009
+ raise ValueError(f"Workspace '{workspace_id}' not found.")
1010
+ return "default"
1011
+
1012
+ def delete_finetuned_model(self, model_id: str) -> DeletedPlatformFineTunedModel:
1013
+ return DeletedPlatformFineTunedModel(id=model_id, deleted_at=datetime.utcnow())
1014
+
1015
+ def list_finetuned_models(
1016
+ self,
1017
+ cloud_id: Optional[str], # noqa: ARG002
1018
+ project_id: Optional[str], # noqa: ARG002
1019
+ max_items: int,
1020
+ ) -> List[FineTunedModel]:
1021
+ return [
1022
+ FineTunedModel(
1023
+ id="test-model-id",
1024
+ model_id="test-model-id",
1025
+ base_model_id="my_base_model_id",
1026
+ ft_type=FineTuneType.LORA,
1027
+ creator_id="",
1028
+ creator_email="",
1029
+ created_at=datetime.utcnow(),
1030
+ storage_uri="s3://fake_bucket/fake_folder/",
1031
+ )
1032
+ for _ in range(max_items)
1033
+ ]
1034
+
1035
+ def update_workspace(
1036
+ self,
1037
+ *,
1038
+ workspace_id: str,
1039
+ name: Optional[str] = None,
1040
+ compute_config_id: Optional[str] = None,
1041
+ cluster_environment_build_id: Optional[str] = None,
1042
+ idle_timeout_minutes: Optional[int] = None,
1043
+ ):
1044
+ if workspace_id not in self._workspaces:
1045
+ raise ValueError(f"Workspace '{workspace_id}' not found.")
1046
+
1047
+ workspace = self._workspaces[workspace_id]
1048
+
1049
+ if name:
1050
+ workspace.name = name
1051
+
1052
+ if compute_config_id:
1053
+ workspace.compute_config_id = compute_config_id
1054
+
1055
+ if cluster_environment_build_id:
1056
+ workspace.environment_id = cluster_environment_build_id
1057
+
1058
+ if idle_timeout_minutes:
1059
+ workspace.idle_timeout_minutes = idle_timeout_minutes
1060
+
1061
+ compute_config = self.get_compute_config(workspace.compute_config_id)
1062
+ assert compute_config is not None
1063
+ compute_config.idle_timeout_minutes = idle_timeout_minutes
1064
+
1065
+ def download_aggregated_instance_usage_csv(
1066
+ self,
1067
+ start_date: date,
1068
+ end_date: date,
1069
+ cloud_id: Optional[str] = None, # noqa: ARG002
1070
+ project_id: Optional[str] = None, # noqa: ARG002
1071
+ directory: Optional[str] = None,
1072
+ hide_progress_bar: bool = False, # noqa: ARG002
1073
+ ) -> str:
1074
+ filename = f"aggregated_instance_usage_{start_date}_{end_date}.zip"
1075
+ if directory:
1076
+ filepath = os.path.join(directory, filename)
1077
+ else:
1078
+ filepath = filename
1079
+
1080
+ return filepath