qwak-sdk 0.5.102__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 (328) hide show
  1. qwak_sdk/__init__.py +9 -0
  2. qwak_sdk/cli.py +79 -0
  3. qwak_sdk/commands/__init__.py +0 -0
  4. qwak_sdk/commands/_logic/__init__.py +0 -0
  5. qwak_sdk/commands/_logic/tools.py +6 -0
  6. qwak_sdk/commands/admin/__init__.py +0 -0
  7. qwak_sdk/commands/admin/admin_commands_group.py +17 -0
  8. qwak_sdk/commands/admin/apikeys/__init__.py +0 -0
  9. qwak_sdk/commands/admin/apikeys/api_keys_commands_group.py +17 -0
  10. qwak_sdk/commands/admin/apikeys/generate/__init__.py +0 -0
  11. qwak_sdk/commands/admin/apikeys/generate/_logic.py +21 -0
  12. qwak_sdk/commands/admin/apikeys/generate/ui.py +45 -0
  13. qwak_sdk/commands/admin/apikeys/revoke/__init__.py +0 -0
  14. qwak_sdk/commands/admin/apikeys/revoke/_logic.py +22 -0
  15. qwak_sdk/commands/admin/apikeys/revoke/ui.py +31 -0
  16. qwak_sdk/commands/alerts/__init__.py +0 -0
  17. qwak_sdk/commands/alerts/alerts_commnad_group.py +18 -0
  18. qwak_sdk/commands/alerts/delete/__init__.py +0 -0
  19. qwak_sdk/commands/alerts/delete/_logic.py +5 -0
  20. qwak_sdk/commands/alerts/delete/ui.py +10 -0
  21. qwak_sdk/commands/alerts/list/__init__.py +0 -0
  22. qwak_sdk/commands/alerts/list/_logic.py +23 -0
  23. qwak_sdk/commands/alerts/list/ui.py +17 -0
  24. qwak_sdk/commands/alerts/register/__init__.py +0 -0
  25. qwak_sdk/commands/alerts/register/_logic.py +72 -0
  26. qwak_sdk/commands/alerts/register/ui.py +30 -0
  27. qwak_sdk/commands/audience/__init__.py +0 -0
  28. qwak_sdk/commands/audience/_logic/__init__.py +0 -0
  29. qwak_sdk/commands/audience/_logic/config/__init__.py +0 -0
  30. qwak_sdk/commands/audience/_logic/config/config_base.py +15 -0
  31. qwak_sdk/commands/audience/_logic/config/parser.py +30 -0
  32. qwak_sdk/commands/audience/_logic/config/v1/__init__.py +0 -0
  33. qwak_sdk/commands/audience/_logic/config/v1/audience_config.py +26 -0
  34. qwak_sdk/commands/audience/_logic/config/v1/conditions_config.py +59 -0
  35. qwak_sdk/commands/audience/_logic/config/v1/config_v1.py +23 -0
  36. qwak_sdk/commands/audience/_logic/config/v1/route_config.py +15 -0
  37. qwak_sdk/commands/audience/_logic/config/v1/spec.py +9 -0
  38. qwak_sdk/commands/audience/audience_api_dump.py +86 -0
  39. qwak_sdk/commands/audience/audience_commands_group.py +30 -0
  40. qwak_sdk/commands/audience/create/__init__.py +0 -0
  41. qwak_sdk/commands/audience/create/logic.py +41 -0
  42. qwak_sdk/commands/audience/create/ui.py +21 -0
  43. qwak_sdk/commands/audience/delete/__init__.py +0 -0
  44. qwak_sdk/commands/audience/delete/logic.py +13 -0
  45. qwak_sdk/commands/audience/delete/ui.py +17 -0
  46. qwak_sdk/commands/audience/get/__init__.py +0 -0
  47. qwak_sdk/commands/audience/get/logic.py +14 -0
  48. qwak_sdk/commands/audience/get/ui.py +25 -0
  49. qwak_sdk/commands/audience/list/__init__.py +0 -0
  50. qwak_sdk/commands/audience/list/logic.py +16 -0
  51. qwak_sdk/commands/audience/list/ui.py +26 -0
  52. qwak_sdk/commands/audience/update/__init__.py +0 -0
  53. qwak_sdk/commands/audience/update/logic.py +37 -0
  54. qwak_sdk/commands/audience/update/ui.py +26 -0
  55. qwak_sdk/commands/auto_scalling/__init__.py +0 -0
  56. qwak_sdk/commands/auto_scalling/_logic/__init__.py +0 -0
  57. qwak_sdk/commands/auto_scalling/_logic/config/__init__.py +3 -0
  58. qwak_sdk/commands/auto_scalling/_logic/config/config.py +152 -0
  59. qwak_sdk/commands/auto_scalling/_logic/config/parser.py +21 -0
  60. qwak_sdk/commands/auto_scalling/attach/__init__.py +0 -0
  61. qwak_sdk/commands/auto_scalling/attach/_logic.py +43 -0
  62. qwak_sdk/commands/auto_scalling/attach/ui.py +21 -0
  63. qwak_sdk/commands/auto_scalling/autoscaling_commands_group.py +15 -0
  64. qwak_sdk/commands/automations/__init__.py +0 -0
  65. qwak_sdk/commands/automations/automations_commands_group.py +30 -0
  66. qwak_sdk/commands/automations/delete/__init__.py +0 -0
  67. qwak_sdk/commands/automations/delete/_logic.py +6 -0
  68. qwak_sdk/commands/automations/delete/ui.py +23 -0
  69. qwak_sdk/commands/automations/executions/__init__.py +0 -0
  70. qwak_sdk/commands/automations/executions/executions_commands_group.py +14 -0
  71. qwak_sdk/commands/automations/executions/list/__init__.py +0 -0
  72. qwak_sdk/commands/automations/executions/list/_logic.py +8 -0
  73. qwak_sdk/commands/automations/executions/list/ui.py +25 -0
  74. qwak_sdk/commands/automations/list/__init__.py +0 -0
  75. qwak_sdk/commands/automations/list/_logic.py +36 -0
  76. qwak_sdk/commands/automations/list/ui.py +21 -0
  77. qwak_sdk/commands/automations/register/__init__.py +0 -0
  78. qwak_sdk/commands/automations/register/_logic.py +43 -0
  79. qwak_sdk/commands/automations/register/ui.py +44 -0
  80. qwak_sdk/commands/feature_store/__init__.py +0 -0
  81. qwak_sdk/commands/feature_store/backfill/__init__.py +0 -0
  82. qwak_sdk/commands/feature_store/backfill/_logic.py +140 -0
  83. qwak_sdk/commands/feature_store/backfill/streaming/__init__.py +0 -0
  84. qwak_sdk/commands/feature_store/backfill/streaming/_logic.py +50 -0
  85. qwak_sdk/commands/feature_store/backfill/streaming/ui.py +67 -0
  86. qwak_sdk/commands/feature_store/backfill/ui.py +146 -0
  87. qwak_sdk/commands/feature_store/delete/__init__.py +0 -0
  88. qwak_sdk/commands/feature_store/delete/_logic.py +104 -0
  89. qwak_sdk/commands/feature_store/delete/ui.py +40 -0
  90. qwak_sdk/commands/feature_store/execution/__init__.py +0 -0
  91. qwak_sdk/commands/feature_store/execution/ui.py +19 -0
  92. qwak_sdk/commands/feature_store/feature_store_command_group.py +29 -0
  93. qwak_sdk/commands/feature_store/list/__init__.py +0 -0
  94. qwak_sdk/commands/feature_store/list/ui.py +140 -0
  95. qwak_sdk/commands/feature_store/pause/__init__.py +0 -0
  96. qwak_sdk/commands/feature_store/pause/ui.py +18 -0
  97. qwak_sdk/commands/feature_store/register/__init__.py +0 -0
  98. qwak_sdk/commands/feature_store/register/_logic.py +367 -0
  99. qwak_sdk/commands/feature_store/register/ui.py +111 -0
  100. qwak_sdk/commands/feature_store/resume/__init__.py +0 -0
  101. qwak_sdk/commands/feature_store/resume/ui.py +18 -0
  102. qwak_sdk/commands/feature_store/trigger/__init__.py +0 -0
  103. qwak_sdk/commands/feature_store/trigger/ui.py +39 -0
  104. qwak_sdk/commands/models/__init__.py +0 -0
  105. qwak_sdk/commands/models/build/__init__.py +0 -0
  106. qwak_sdk/commands/models/build/_logic/__init__.py +0 -0
  107. qwak_sdk/commands/models/build/_logic/build_steps.py +42 -0
  108. qwak_sdk/commands/models/build/_logic/client_logs/__init__.py +0 -0
  109. qwak_sdk/commands/models/build/_logic/client_logs/cli_phase_run_handler.py +123 -0
  110. qwak_sdk/commands/models/build/_logic/client_logs/cli_trigger_build_logger.py +19 -0
  111. qwak_sdk/commands/models/build/_logic/client_logs/logger.py +88 -0
  112. qwak_sdk/commands/models/build/_logic/client_logs/messages.py +36 -0
  113. qwak_sdk/commands/models/build/_logic/client_logs/spinner.py +14 -0
  114. qwak_sdk/commands/models/build/_logic/client_logs/trigger_build_logger.py +54 -0
  115. qwak_sdk/commands/models/build/_logic/client_logs/utils.py +12 -0
  116. qwak_sdk/commands/models/build/_logic/phase/__init__.py +0 -0
  117. qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/__init__.py +20 -0
  118. qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/get_sdk_version_step.py +14 -0
  119. qwak_sdk/commands/models/build/_logic/phase/b_remote_register_qwak_build/__init__.py +16 -0
  120. qwak_sdk/commands/models/build/_logic/phase/c_deploy/__init__.py +6 -0
  121. qwak_sdk/commands/models/build/_logic/phase/c_deploy/build_polling_status.py +55 -0
  122. qwak_sdk/commands/models/build/_logic/phase/c_deploy/deploy_build.py +61 -0
  123. qwak_sdk/commands/models/build/_logic/util/__init__.py +0 -0
  124. qwak_sdk/commands/models/build/_logic/util/protobuf_factory.py +45 -0
  125. qwak_sdk/commands/models/build/_logic/util/step_decorator.py +60 -0
  126. qwak_sdk/commands/models/build/_logic/util/text.py +9 -0
  127. qwak_sdk/commands/models/build/_logic/wait_until_finished.py +27 -0
  128. qwak_sdk/commands/models/build/ui.py +337 -0
  129. qwak_sdk/commands/models/builds/__init__.py +0 -0
  130. qwak_sdk/commands/models/builds/builds_commands_group.py +16 -0
  131. qwak_sdk/commands/models/builds/cancel/__init__.py +0 -0
  132. qwak_sdk/commands/models/builds/cancel/_logic.py +5 -0
  133. qwak_sdk/commands/models/builds/cancel/ui.py +15 -0
  134. qwak_sdk/commands/models/builds/logs/__init__.py +0 -0
  135. qwak_sdk/commands/models/builds/logs/ui.py +35 -0
  136. qwak_sdk/commands/models/builds/status/__init__.py +0 -0
  137. qwak_sdk/commands/models/builds/status/_logic.py +6 -0
  138. qwak_sdk/commands/models/builds/status/ui.py +39 -0
  139. qwak_sdk/commands/models/create/__init__.py +0 -0
  140. qwak_sdk/commands/models/create/_logic.py +36 -0
  141. qwak_sdk/commands/models/create/ui.py +43 -0
  142. qwak_sdk/commands/models/delete/__init__.py +0 -0
  143. qwak_sdk/commands/models/delete/_logic.py +5 -0
  144. qwak_sdk/commands/models/delete/ui.py +25 -0
  145. qwak_sdk/commands/models/deployments/__init__.py +0 -0
  146. qwak_sdk/commands/models/deployments/deploy/__init__.py +0 -0
  147. qwak_sdk/commands/models/deployments/deploy/_logic/__init__.py +0 -0
  148. qwak_sdk/commands/models/deployments/deploy/_logic/advance_deployment_options_handler.py +31 -0
  149. qwak_sdk/commands/models/deployments/deploy/_logic/base_deploy_executor.py +68 -0
  150. qwak_sdk/commands/models/deployments/deploy/_logic/deploy_config.py +261 -0
  151. qwak_sdk/commands/models/deployments/deploy/_logic/deployment.py +405 -0
  152. qwak_sdk/commands/models/deployments/deploy/_logic/deployment_message_helpers.py +114 -0
  153. qwak_sdk/commands/models/deployments/deploy/_logic/deployment_response_handler.py +156 -0
  154. qwak_sdk/commands/models/deployments/deploy/_logic/deployment_size_mapper.py +96 -0
  155. qwak_sdk/commands/models/deployments/deploy/_logic/get_latest_successful_build.py +28 -0
  156. qwak_sdk/commands/models/deployments/deploy/_logic/local_deployment.py +193 -0
  157. qwak_sdk/commands/models/deployments/deploy/batch/__init__.py +0 -0
  158. qwak_sdk/commands/models/deployments/deploy/batch/_logic/__init__.py +0 -0
  159. qwak_sdk/commands/models/deployments/deploy/batch/_logic/advanced_deployment_mapper.py +15 -0
  160. qwak_sdk/commands/models/deployments/deploy/batch/_logic/deploy_executor.py +24 -0
  161. qwak_sdk/commands/models/deployments/deploy/batch/ui.py +126 -0
  162. qwak_sdk/commands/models/deployments/deploy/deploy_commands_group.py +19 -0
  163. qwak_sdk/commands/models/deployments/deploy/realtime/__init__.py +0 -0
  164. qwak_sdk/commands/models/deployments/deploy/realtime/_logic/__init__.py +0 -0
  165. qwak_sdk/commands/models/deployments/deploy/realtime/_logic/advanced_deployment_mapper.py +21 -0
  166. qwak_sdk/commands/models/deployments/deploy/realtime/_logic/deploy_executor.py +24 -0
  167. qwak_sdk/commands/models/deployments/deploy/realtime/_logic/serving_strategy_mapper.py +75 -0
  168. qwak_sdk/commands/models/deployments/deploy/realtime/ui.py +209 -0
  169. qwak_sdk/commands/models/deployments/deploy/streaming/__init__.py +0 -0
  170. qwak_sdk/commands/models/deployments/deploy/streaming/_logic/__init__.py +0 -0
  171. qwak_sdk/commands/models/deployments/deploy/streaming/_logic/deploy_executor.py +24 -0
  172. qwak_sdk/commands/models/deployments/deploy/streaming/_logic/serving_strategy_mapper.py +38 -0
  173. qwak_sdk/commands/models/deployments/deploy/streaming/ui.py +213 -0
  174. qwak_sdk/commands/models/deployments/undeploy/__init__.py +0 -0
  175. qwak_sdk/commands/models/deployments/undeploy/_logic/__init__.py +0 -0
  176. qwak_sdk/commands/models/deployments/undeploy/_logic/request_undeploy.py +249 -0
  177. qwak_sdk/commands/models/deployments/undeploy/ui.py +72 -0
  178. qwak_sdk/commands/models/describe/__init__.py +0 -0
  179. qwak_sdk/commands/models/describe/_logic.py +169 -0
  180. qwak_sdk/commands/models/describe/ui.py +35 -0
  181. qwak_sdk/commands/models/executions/__init__.py +0 -0
  182. qwak_sdk/commands/models/executions/cancel/__init__.py +0 -0
  183. qwak_sdk/commands/models/executions/cancel/_logic.py +9 -0
  184. qwak_sdk/commands/models/executions/cancel/ui.py +27 -0
  185. qwak_sdk/commands/models/executions/execution_commands_group.py +24 -0
  186. qwak_sdk/commands/models/executions/report/__init__.py +0 -0
  187. qwak_sdk/commands/models/executions/report/_logic.py +14 -0
  188. qwak_sdk/commands/models/executions/report/ui.py +43 -0
  189. qwak_sdk/commands/models/executions/start/__init__.py +0 -0
  190. qwak_sdk/commands/models/executions/start/_logic.py +81 -0
  191. qwak_sdk/commands/models/executions/start/ui.py +208 -0
  192. qwak_sdk/commands/models/executions/status/__init__.py +0 -0
  193. qwak_sdk/commands/models/executions/status/_logic.py +13 -0
  194. qwak_sdk/commands/models/executions/status/ui.py +27 -0
  195. qwak_sdk/commands/models/init/__init__.py +0 -0
  196. qwak_sdk/commands/models/init/_logic/__init__.py +0 -0
  197. qwak_sdk/commands/models/init/_logic/initialize_model_structure.py +40 -0
  198. qwak_sdk/commands/models/init/_logic/template/__init__.py +0 -0
  199. qwak_sdk/commands/models/init/_logic/template/churn/__init__.py +0 -0
  200. qwak_sdk/commands/models/init/_logic/template/churn/cookiecutter.json +3 -0
  201. qwak_sdk/commands/models/init/_logic/template/churn/{{cookiecutter.model_directory}}/__init__.py +0 -0
  202. qwak_sdk/commands/models/init/_logic/template/churn/{{cookiecutter.model_directory}}/main/__init__.py +5 -0
  203. qwak_sdk/commands/models/init/_logic/template/churn/{{cookiecutter.model_directory}}/main/conda.yml +10 -0
  204. qwak_sdk/commands/models/init/_logic/template/churn/{{cookiecutter.model_directory}}/main/data.csv +1001 -0
  205. qwak_sdk/commands/models/init/_logic/template/churn/{{cookiecutter.model_directory}}/main/model.py +95 -0
  206. qwak_sdk/commands/models/init/_logic/template/churn/{{cookiecutter.model_directory}}/tests/__init__.py +0 -0
  207. qwak_sdk/commands/models/init/_logic/template/churn/{{cookiecutter.model_directory}}/tests/it/__init__.py +0 -0
  208. qwak_sdk/commands/models/init/_logic/template/churn/{{cookiecutter.model_directory}}/tests/it/test_churn.py +32 -0
  209. qwak_sdk/commands/models/init/_logic/template/credit_risk/__init__.py +0 -0
  210. qwak_sdk/commands/models/init/_logic/template/credit_risk/cookiecutter.json +3 -0
  211. qwak_sdk/commands/models/init/_logic/template/credit_risk/{{cookiecutter.model_directory}}/__init__.py +0 -0
  212. qwak_sdk/commands/models/init/_logic/template/credit_risk/{{cookiecutter.model_directory}}/main/__init__.py +5 -0
  213. qwak_sdk/commands/models/init/_logic/template/credit_risk/{{cookiecutter.model_directory}}/main/conda.yml +11 -0
  214. qwak_sdk/commands/models/init/_logic/template/credit_risk/{{cookiecutter.model_directory}}/main/data.csv +1001 -0
  215. qwak_sdk/commands/models/init/_logic/template/credit_risk/{{cookiecutter.model_directory}}/main/model.py +108 -0
  216. qwak_sdk/commands/models/init/_logic/template/general/__init__.py +0 -0
  217. qwak_sdk/commands/models/init/_logic/template/general/cookiecutter.json +6 -0
  218. qwak_sdk/commands/models/init/_logic/template/general/{{cookiecutter.model_directory}}/__init__.py +0 -0
  219. qwak_sdk/commands/models/init/_logic/template/general/{{cookiecutter.model_directory}}/{{cookiecutter.main_directory}}/__init__.py +5 -0
  220. qwak_sdk/commands/models/init/_logic/template/general/{{cookiecutter.model_directory}}/{{cookiecutter.main_directory}}/conda.yml +8 -0
  221. qwak_sdk/commands/models/init/_logic/template/general/{{cookiecutter.model_directory}}/{{cookiecutter.main_directory}}/model.py +66 -0
  222. qwak_sdk/commands/models/init/_logic/template/general/{{cookiecutter.model_directory}}/{{cookiecutter.test_directory}}/__init__.py +0 -0
  223. qwak_sdk/commands/models/init/_logic/template/general/{{cookiecutter.model_directory}}/{{cookiecutter.test_directory}}/test_qwak_model.py +5 -0
  224. qwak_sdk/commands/models/init/_logic/template/titanic/__init__.py +0 -0
  225. qwak_sdk/commands/models/init/_logic/template/titanic/cookiecutter.json +3 -0
  226. qwak_sdk/commands/models/init/_logic/template/titanic/{{cookiecutter.model_directory}}/__init__.py +0 -0
  227. qwak_sdk/commands/models/init/_logic/template/titanic/{{cookiecutter.model_directory}}/main/__init__.py +5 -0
  228. qwak_sdk/commands/models/init/_logic/template/titanic/{{cookiecutter.model_directory}}/main/conda.yml +11 -0
  229. qwak_sdk/commands/models/init/_logic/template/titanic/{{cookiecutter.model_directory}}/main/model.py +98 -0
  230. qwak_sdk/commands/models/init/_logic/template/titanic/{{cookiecutter.model_directory}}/tests/__init__.py +0 -0
  231. qwak_sdk/commands/models/init/_logic/template/titanic/{{cookiecutter.model_directory}}/tests/it/__init__.py +0 -0
  232. qwak_sdk/commands/models/init/_logic/template/titanic/{{cookiecutter.model_directory}}/tests/it/test_titanic.py +24 -0
  233. qwak_sdk/commands/models/init/_logic/template/titanic_poetry/__init__.py +0 -0
  234. qwak_sdk/commands/models/init/_logic/template/titanic_poetry/cookiecutter.json +3 -0
  235. qwak_sdk/commands/models/init/_logic/template/titanic_poetry/{{cookiecutter.model_directory}}/__init__.py +0 -0
  236. qwak_sdk/commands/models/init/_logic/template/titanic_poetry/{{cookiecutter.model_directory}}/main/__init__.py +5 -0
  237. qwak_sdk/commands/models/init/_logic/template/titanic_poetry/{{cookiecutter.model_directory}}/main/model.py +98 -0
  238. qwak_sdk/commands/models/init/_logic/template/titanic_poetry/{{cookiecutter.model_directory}}/main/pyproject.toml +20 -0
  239. qwak_sdk/commands/models/init/_logic/template/titanic_poetry/{{cookiecutter.model_directory}}/tests/__init__.py +0 -0
  240. qwak_sdk/commands/models/init/_logic/template/titanic_poetry/{{cookiecutter.model_directory}}/tests/it/__init__.py +0 -0
  241. qwak_sdk/commands/models/init/_logic/template/titanic_poetry/{{cookiecutter.model_directory}}/tests/it/test_titanic.py +25 -0
  242. qwak_sdk/commands/models/init/ui.py +61 -0
  243. qwak_sdk/commands/models/list/__init__.py +0 -0
  244. qwak_sdk/commands/models/list/_logic.py +5 -0
  245. qwak_sdk/commands/models/list/ui.py +40 -0
  246. qwak_sdk/commands/models/list_models/__init__.py +0 -0
  247. qwak_sdk/commands/models/list_models/_logic.py +5 -0
  248. qwak_sdk/commands/models/list_models/ui.py +60 -0
  249. qwak_sdk/commands/models/metadata/__init__.py +0 -0
  250. qwak_sdk/commands/models/metadata/_logic.py +5 -0
  251. qwak_sdk/commands/models/metadata/ui.py +60 -0
  252. qwak_sdk/commands/models/models_command_group.py +44 -0
  253. qwak_sdk/commands/models/runtime/__init__.py +0 -0
  254. qwak_sdk/commands/models/runtime/logs/__init__.py +0 -0
  255. qwak_sdk/commands/models/runtime/logs/ui.py +63 -0
  256. qwak_sdk/commands/models/runtime/runtime_commands_group.py +17 -0
  257. qwak_sdk/commands/models/runtime/update/__init__.py +0 -0
  258. qwak_sdk/commands/models/runtime/update/_logic.py +9 -0
  259. qwak_sdk/commands/models/runtime/update/ui.py +15 -0
  260. qwak_sdk/commands/projects/__init__.py +0 -0
  261. qwak_sdk/commands/projects/create/__init__.py +0 -0
  262. qwak_sdk/commands/projects/create/_logic.py +9 -0
  263. qwak_sdk/commands/projects/create/ui.py +68 -0
  264. qwak_sdk/commands/projects/delete/__init__.py +0 -0
  265. qwak_sdk/commands/projects/delete/_logic.py +6 -0
  266. qwak_sdk/commands/projects/delete/ui.py +24 -0
  267. qwak_sdk/commands/projects/list/__init__.py +0 -0
  268. qwak_sdk/commands/projects/list/_logic.py +6 -0
  269. qwak_sdk/commands/projects/list/ui.py +45 -0
  270. qwak_sdk/commands/projects/projects_command_group.py +19 -0
  271. qwak_sdk/commands/secrets/__init__.py +0 -0
  272. qwak_sdk/commands/secrets/delete/__init__.py +0 -0
  273. qwak_sdk/commands/secrets/delete/_logic.py +5 -0
  274. qwak_sdk/commands/secrets/delete/ui.py +21 -0
  275. qwak_sdk/commands/secrets/get/__init__.py +0 -0
  276. qwak_sdk/commands/secrets/get/_logic.py +5 -0
  277. qwak_sdk/commands/secrets/get/ui.py +17 -0
  278. qwak_sdk/commands/secrets/secrets_commands_group.py +19 -0
  279. qwak_sdk/commands/secrets/set/__init__.py +0 -0
  280. qwak_sdk/commands/secrets/set/_logic.py +5 -0
  281. qwak_sdk/commands/secrets/set/ui.py +16 -0
  282. qwak_sdk/commands/ui_tools.py +18 -0
  283. qwak_sdk/commands/workspaces/__init__.py +0 -0
  284. qwak_sdk/commands/workspaces/_logic/__init__.py +0 -0
  285. qwak_sdk/commands/workspaces/_logic/tools.py +44 -0
  286. qwak_sdk/commands/workspaces/_logic/workspace_validations.py +41 -0
  287. qwak_sdk/commands/workspaces/config/__init__.py +0 -0
  288. qwak_sdk/commands/workspaces/config/workspace_config.py +35 -0
  289. qwak_sdk/commands/workspaces/create/__init__.py +0 -0
  290. qwak_sdk/commands/workspaces/create/_logic.py +54 -0
  291. qwak_sdk/commands/workspaces/create/ui.py +48 -0
  292. qwak_sdk/commands/workspaces/delete/__init__.py +0 -0
  293. qwak_sdk/commands/workspaces/delete/_logic.py +30 -0
  294. qwak_sdk/commands/workspaces/delete/ui.py +23 -0
  295. qwak_sdk/commands/workspaces/start/__init__.py +0 -0
  296. qwak_sdk/commands/workspaces/start/_logic.py +30 -0
  297. qwak_sdk/commands/workspaces/start/ui.py +23 -0
  298. qwak_sdk/commands/workspaces/stop/__init__.py +0 -0
  299. qwak_sdk/commands/workspaces/stop/_logic.py +30 -0
  300. qwak_sdk/commands/workspaces/stop/ui.py +23 -0
  301. qwak_sdk/commands/workspaces/update/__init__.py +0 -0
  302. qwak_sdk/commands/workspaces/update/_logic.py +82 -0
  303. qwak_sdk/commands/workspaces/update/ui.py +57 -0
  304. qwak_sdk/commands/workspaces/workspaces_commands_group.py +23 -0
  305. qwak_sdk/exceptions/__init__.py +11 -0
  306. qwak_sdk/exceptions/qwak_command_exception.py +2 -0
  307. qwak_sdk/exceptions/qwak_deploy_new_build_failed.py +5 -0
  308. qwak_sdk/exceptions/qwak_resource_not_found.py +2 -0
  309. qwak_sdk/inner/__init__.py +0 -0
  310. qwak_sdk/inner/file_registry.py +98 -0
  311. qwak_sdk/inner/tools/__init__.py +0 -0
  312. qwak_sdk/inner/tools/cli_tools.py +220 -0
  313. qwak_sdk/inner/tools/config_handler.py +27 -0
  314. qwak_sdk/inner/tools/dataclasses_utils.py +21 -0
  315. qwak_sdk/inner/tools/logger/__init__.py +3 -0
  316. qwak_sdk/inner/tools/logger/logger.py +269 -0
  317. qwak_sdk/inner/tools/logger/logging.yml +79 -0
  318. qwak_sdk/inner/tools/tracking.py +47 -0
  319. qwak_sdk/main.py +9 -0
  320. qwak_sdk/tools/__init__.py +0 -0
  321. qwak_sdk/tools/colors.py +13 -0
  322. qwak_sdk/tools/files.py +63 -0
  323. qwak_sdk/tools/log_handling.py +159 -0
  324. qwak_sdk/tools/utils.py +42 -0
  325. qwak_sdk-0.5.102.dist-info/METADATA +51 -0
  326. qwak_sdk-0.5.102.dist-info/RECORD +328 -0
  327. qwak_sdk-0.5.102.dist-info/WHEEL +4 -0
  328. qwak_sdk-0.5.102.dist-info/entry_points.txt +3 -0
@@ -0,0 +1,81 @@
1
+ from typing import Tuple
2
+
3
+ from qwak.clients.batch_job_management import BatchJobManagerClient
4
+ from qwak.clients.batch_job_management.executions_config import ExecutionConfig
5
+ from qwak.clients.batch_job_management.results import StartExecutionResult
6
+ from qwak.clients.instance_template.client import InstanceTemplateManagementClient
7
+ from qwak.tools.logger.logger import get_qwak_logger
8
+ from qwak_inference.batch_client.instance_validation import verify_template_id
9
+
10
+ logger = get_qwak_logger()
11
+
12
+
13
+ def execute_start_execution(config: ExecutionConfig) -> Tuple[str, bool, str]:
14
+ if config.resources.instance_size:
15
+ verify_template_id(
16
+ config.resources.instance_size, InstanceTemplateManagementClient()
17
+ )
18
+ batch_job_start_response: StartExecutionResult = (
19
+ BatchJobManagerClient().start_execution(config)
20
+ )
21
+ return (
22
+ batch_job_start_response.execution_id,
23
+ batch_job_start_response.success,
24
+ batch_job_start_response.failure_message,
25
+ )
26
+
27
+
28
+ def execute_in_local_mode(kwargs):
29
+ from qwak_inference.batch_client.batch_client import BatchInferenceClient
30
+
31
+ logger.info("Executing a batch run in local file mode...")
32
+
33
+ model_id = kwargs.get("model_id")
34
+ source_folder = kwargs.get("source_folder")
35
+ destination_folder = kwargs.get("destination_folder")
36
+ input_file_type = kwargs.get("input_file_type")
37
+ output_file_type = kwargs.get("output_file_type", None)
38
+ job_timeout = kwargs.get("job_timeout", 0)
39
+ task_timeout = kwargs.get("task_timeout", 0)
40
+ executors = kwargs.get("executors", None)
41
+ cpus = kwargs.get("cpus", None)
42
+ memory = kwargs.get("memory", None)
43
+ gpus = kwargs.get("gpus", 0)
44
+ gpu_type = kwargs.get("gpu_type", None)
45
+ iam_role_arn = kwargs.get("iam_role_arn", None)
46
+ build_id = kwargs.get("build_id", None)
47
+ parameters = kwargs.get("parameters", None)
48
+ instance = kwargs.get("instance", "")
49
+
50
+ if (
51
+ not model_id
52
+ or not source_folder
53
+ or not destination_folder
54
+ or not input_file_type
55
+ ):
56
+ raise ValueError(
57
+ "model-id, source-folder, destination-folder and input-file-type are required"
58
+ )
59
+
60
+ client = BatchInferenceClient()
61
+ client.local_file_run(
62
+ model_id=model_id,
63
+ source_folder=source_folder,
64
+ destination_folder=destination_folder,
65
+ input_file_type=input_file_type,
66
+ output_file_type=output_file_type,
67
+ job_timeout=job_timeout,
68
+ task_timeout=task_timeout,
69
+ executors=executors,
70
+ cpus=cpus,
71
+ memory=memory,
72
+ gpus=gpus,
73
+ gpu_type=gpu_type,
74
+ iam_role_arn=iam_role_arn,
75
+ build_id=build_id,
76
+ parameters=parameters,
77
+ instance=instance,
78
+ )
79
+ logger.info(
80
+ "Batch run completed successfully. Results are available in the destination folder."
81
+ )
@@ -0,0 +1,208 @@
1
+ import click
2
+ from qwak.clients.batch_job_management.executions_config import (
3
+ GPU_TYPE_MAP,
4
+ INPUT_FORMATTERS_MAP,
5
+ OUTPUT_FORMATTERS_MAP,
6
+ ExecutionConfig,
7
+ )
8
+ from qwak.exceptions import QwakException
9
+ from qwak.inner.const import QwakConstants
10
+ from qwak.tools.logger.logger import get_qwak_logger
11
+ from tabulate import tabulate
12
+
13
+ from qwak_sdk.commands.models.executions.start._logic import (
14
+ execute_in_local_mode,
15
+ execute_start_execution,
16
+ )
17
+ from qwak_sdk.inner.tools.cli_tools import DeprecatedOption, QwakCommand
18
+ from qwak_sdk.inner.tools.config_handler import config_handler
19
+
20
+ logger = get_qwak_logger()
21
+
22
+
23
+ @click.command(
24
+ name="start", help="Start an execution job on a deployed model.", cls=QwakCommand
25
+ )
26
+ @click.option("--model-id", required=True, help="Model ID", type=str)
27
+ @click.option(
28
+ "--build-id",
29
+ type=str,
30
+ help="Explicit Build ID to invoke the execution against. If empty, the deployed build ID will be applied",
31
+ )
32
+ @click.option(
33
+ "--bucket",
34
+ type=str,
35
+ help="The bucket to read and write the data to/from.",
36
+ )
37
+ @click.option(
38
+ "--source-bucket",
39
+ type=str,
40
+ help="The source bucket to read the data from.",
41
+ )
42
+ @click.option(
43
+ "--source-folder",
44
+ required=True,
45
+ type=str,
46
+ help="The source folder to read the data from.",
47
+ )
48
+ @click.option(
49
+ "--destination-bucket",
50
+ type=str,
51
+ help="The destination bucket to store results on.",
52
+ )
53
+ @click.option(
54
+ "--destination-folder",
55
+ type=str,
56
+ required=True,
57
+ help="The destination folder to store results on.",
58
+ )
59
+ @click.option(
60
+ "--input-file-type",
61
+ type=click.Choice(
62
+ [fmt for fmt in INPUT_FORMATTERS_MAP.keys()], case_sensitive=False
63
+ ),
64
+ help="The input file type to read.",
65
+ )
66
+ @click.option(
67
+ "--output-file-type",
68
+ type=click.Choice(
69
+ [fmt for fmt in OUTPUT_FORMATTERS_MAP.keys()], case_sensitive=False
70
+ ),
71
+ help="The output file type to to receive.",
72
+ )
73
+ @click.option(
74
+ "--access-token-name",
75
+ type=str,
76
+ required=False,
77
+ help="The access token secret name (should be created before by using `qwak secret`).",
78
+ )
79
+ @click.option(
80
+ "--access-secret-name",
81
+ type=str,
82
+ required=False,
83
+ help="The access secret secret name (should be created before by using `qwak secret`).",
84
+ )
85
+ @click.option(
86
+ "--job-timeout",
87
+ type=int,
88
+ default=0,
89
+ help="Total inference job timeout in seconds, (e.g. 2000). Default is unlimited.",
90
+ )
91
+ @click.option(
92
+ "--file-timeout",
93
+ type=int,
94
+ default=0,
95
+ help="A single file inference timeout in seconds, (e.g. 2000). Default is unlimited.",
96
+ )
97
+ @click.option(
98
+ "--pods",
99
+ "--replicas",
100
+ type=int,
101
+ default=0,
102
+ help="Number of replicas to deploy. (concurrent files processing). Default is as deployed.",
103
+ deprecated=["--pods"],
104
+ preferred="--replicas",
105
+ cls=DeprecatedOption,
106
+ )
107
+ @click.option(
108
+ "--cpus",
109
+ type=float,
110
+ default=0,
111
+ help="Number of CPU cores, can be fraction of a core "
112
+ "(e.g. 0.4). Default is as deployed.",
113
+ )
114
+ @click.option(
115
+ "--memory",
116
+ type=int,
117
+ default=0,
118
+ help="Memory amount in Mib (e.g. 256). Default is as deployed.",
119
+ )
120
+ @click.option(
121
+ "--gpu-type",
122
+ type=click.Choice([fmt for fmt in GPU_TYPE_MAP.keys()], case_sensitive=False),
123
+ help=f"Type of GPU to use on the deployment ({', '.join([x for x in QwakConstants.GPU_TYPES])}).",
124
+ )
125
+ @click.option(
126
+ "--gpu-amount",
127
+ type=int,
128
+ help="Amount of GPU's to use on the in the batch inference.",
129
+ )
130
+ @click.option(
131
+ "-f",
132
+ "--from-file",
133
+ help="Build by run_config file, Command arguments will overwrite any run_config.",
134
+ required=False,
135
+ type=click.Path(exists=True, resolve_path=True, dir_okay=False),
136
+ )
137
+ @click.option(
138
+ "--out-conf",
139
+ help="Extract deploy conf from command arguments, the command will not run it wil only output valid yaml "
140
+ "structure",
141
+ default=False,
142
+ is_flag=True,
143
+ )
144
+ @click.option(
145
+ "-P",
146
+ "--param-list",
147
+ required=False,
148
+ metavar="NAME=VALUE",
149
+ multiple=True,
150
+ help="A parameter for the batch execution, of the form -P name=value",
151
+ )
152
+ @click.option(
153
+ "--instance",
154
+ required=False,
155
+ type=str,
156
+ help="The instance size to run batch on - 'small', 'medium', 'large', etc...",
157
+ default=None,
158
+ )
159
+ @click.option(
160
+ "--purchase-option",
161
+ required=False,
162
+ type=str,
163
+ help="The instance purchase option 'on-demand' or 'spot'",
164
+ default=None,
165
+ )
166
+ def execution_start(from_file: str, out_conf: bool, **kwargs):
167
+ if kwargs["source_folder"].startswith("file:") and kwargs[
168
+ "destination_folder"
169
+ ].startswith("file:"):
170
+ execute_in_local_mode(kwargs)
171
+ return
172
+ else:
173
+ access_token_name = kwargs.get("access_token_name", None)
174
+ access_secret_name = kwargs.get("access_secret_name", None)
175
+ if access_token_name is None or access_secret_name is None:
176
+ raise QwakException(
177
+ "Both access-token-name and access-secret-name must be provided"
178
+ )
179
+
180
+ config: ExecutionConfig = config_handler(
181
+ config=ExecutionConfig,
182
+ from_file=from_file,
183
+ out_conf=out_conf,
184
+ sections=("execution", "resources"),
185
+ **kwargs,
186
+ )
187
+ if not out_conf:
188
+ try:
189
+ execution_id, success, fail_message = execute_start_execution(config)
190
+ if success:
191
+ logger.info(
192
+ tabulate(
193
+ tabular_data=[
194
+ ["Model ID", config.execution.model_id],
195
+ ["Execution ID", execution_id],
196
+ ],
197
+ tablefmt="fancy_grid",
198
+ )
199
+ )
200
+ else:
201
+ raise QwakException(fail_message + f" {execution_id}")
202
+
203
+ logger.info(
204
+ "Execution initiated successfully, Use --status to get execution current status."
205
+ )
206
+ except Exception as e:
207
+ logger.error(f"Execution failed, Error: {e}")
208
+ raise
File without changes
@@ -0,0 +1,13 @@
1
+ from qwak.clients.batch_job_management import BatchJobManagerClient
2
+ from qwak.clients.batch_job_management.results import ExecutionStatusResult
3
+
4
+
5
+ def execute_execution_status(execution_id: str):
6
+ batch_job_status_response: ExecutionStatusResult = (
7
+ BatchJobManagerClient().get_execution_status(execution_id)
8
+ )
9
+ return (
10
+ batch_job_status_response.status,
11
+ batch_job_status_response.success,
12
+ batch_job_status_response.failure_message,
13
+ )
@@ -0,0 +1,27 @@
1
+ import click
2
+ from qwak.exceptions import QwakException
3
+ from qwak.tools.logger.logger import get_qwak_logger
4
+
5
+ from qwak_sdk.commands.models.executions.status._logic import execute_execution_status
6
+ from qwak_sdk.inner.tools.cli_tools import QwakCommand
7
+
8
+ logger = get_qwak_logger()
9
+
10
+
11
+ @click.command(name="status", help="Get the status of an execution.", cls=QwakCommand)
12
+ @click.option(
13
+ "--execution-id",
14
+ type=str,
15
+ help="The execution id.",
16
+ )
17
+ def execution_status(execution_id: str, **kwargs):
18
+ try:
19
+ job_status, success, fail_message = execute_execution_status(execution_id)
20
+ if not success:
21
+ raise QwakException(fail_message)
22
+
23
+ logger.info(f"Status is: {job_status}.")
24
+
25
+ except Exception as e:
26
+ logger.error(f"Failed to cancel execution, Error: {e}")
27
+ raise
File without changes
File without changes
@@ -0,0 +1,40 @@
1
+ from pathlib import Path
2
+
3
+ from cookiecutter import generate
4
+ from qwak.exceptions import QwakException
5
+
6
+
7
+ def initialize_model_structure(uri: str, template: str, logger, **template_args):
8
+ if Path(uri).is_file():
9
+ raise QwakException(
10
+ f"Unable to create the model directory structure - given path {uri} is an existing file"
11
+ )
12
+
13
+ if not Path(uri).is_dir():
14
+ logger.info(f"Given path {uri} doesn't exists - creating it")
15
+ Path(uri).mkdir(parents=True, exist_ok=True)
16
+
17
+ context = generate.generate_context(
18
+ context_file=(
19
+ Path(__file__).parent / "template" / template / "cookiecutter.json"
20
+ ).resolve(),
21
+ default_context=None,
22
+ extra_context={**template_args},
23
+ )
24
+
25
+ output_dir = uri + "/" + context.get("cookiecutter", {}).get("model_directory")
26
+ if Path(output_dir).exists():
27
+ raise QwakException(
28
+ f"Folder with the name {output_dir} is already exists. "
29
+ f"Please change model name or change the working path."
30
+ )
31
+ logger.info("Generating structure...")
32
+ generate.generate_files(
33
+ (Path(__file__).parent / "template" / template).resolve(),
34
+ context,
35
+ output_dir=uri,
36
+ overwrite_if_exists=False,
37
+ skip_if_file_exists=False,
38
+ )
39
+
40
+ logger.info(f"Created base model at {Path(output_dir).resolve()}")
@@ -0,0 +1,3 @@
1
+ {
2
+ "model_directory": "churn"
3
+ }
@@ -0,0 +1,5 @@
1
+ from .model import ChurnPrediction
2
+
3
+
4
+ def load_model():
5
+ return ChurnPrediction()
@@ -0,0 +1,10 @@
1
+ # name: churn-example
2
+ channels:
3
+ - defaults
4
+ - conda-forge
5
+ dependencies:
6
+ - python=3.9
7
+ - pip=22.2.2
8
+ - pandas=1.1.5
9
+ - scikit-learn=0.24.1
10
+ - catboost=0.26.1