qwak-core 0.1.37__py3-none-any.whl → 0.5.19__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.

Potentially problematic release.


This version of qwak-core might be problematic. Click here for more details.

Files changed (778) hide show
  1. _qwak_proto/jfml/hosting_gateway/v1/build_upload_url_pb2.py +29 -0
  2. _qwak_proto/jfml/hosting_gateway/v1/build_upload_url_pb2.pyi +70 -0
  3. _qwak_proto/jfml/hosting_gateway/v1/build_upload_url_pb2_grpc.py +4 -0
  4. _qwak_proto/jfml/hosting_gateway/v1/hosting_gateway_service_pb2.py +32 -0
  5. _qwak_proto/jfml/hosting_gateway/v1/hosting_gateway_service_pb2.pyi +48 -0
  6. _qwak_proto/jfml/hosting_gateway/v1/hosting_gateway_service_pb2_grpc.py +67 -0
  7. _qwak_proto/qwak/administration/account/v1/account_pb2.py +29 -60
  8. _qwak_proto/qwak/administration/account/v1/account_pb2.pyi +120 -2
  9. _qwak_proto/qwak/administration/account/v1/account_service_pb2.py +67 -0
  10. _qwak_proto/qwak/administration/account/v1/account_service_pb2.pyi +345 -0
  11. _qwak_proto/qwak/administration/account/v1/account_service_pb2_grpc.py +338 -0
  12. _qwak_proto/qwak/administration/account/v1/jfrog_tenant_details_pb2.py +49 -0
  13. _qwak_proto/qwak/administration/account/v1/jfrog_tenant_details_pb2.pyi +209 -0
  14. _qwak_proto/qwak/administration/account/v1/jfrog_tenant_details_pb2_grpc.py +4 -0
  15. _qwak_proto/qwak/administration/account/v1/personalization_pb2.py +8 -24
  16. _qwak_proto/qwak/administration/account/v1/preferences_pb2.py +6 -14
  17. _qwak_proto/qwak/administration/account/v1/terms_pb2.py +35 -0
  18. _qwak_proto/qwak/administration/account/v1/terms_pb2.pyi +94 -0
  19. _qwak_proto/qwak/administration/account/v1/terms_pb2_grpc.py +4 -0
  20. _qwak_proto/qwak/administration/authenticated_user/v1/authenticated_user_service_pb2.py +18 -67
  21. _qwak_proto/qwak/administration/authenticated_user/v1/credentials_pb2.py +8 -24
  22. _qwak_proto/qwak/administration/authenticated_user/v1/credentials_pb2.pyi +1 -1
  23. _qwak_proto/qwak/administration/authenticated_user/v1/details_pb2.py +14 -54
  24. _qwak_proto/qwak/administration/cluster/v2/cluster_pb2.py +62 -0
  25. _qwak_proto/qwak/administration/cluster/v2/cluster_pb2.pyi +354 -0
  26. _qwak_proto/qwak/administration/cluster/v2/cluster_pb2_grpc.py +4 -0
  27. _qwak_proto/qwak/administration/runtime_configuration/v0/container_registry_config_pb2.py +32 -0
  28. _qwak_proto/qwak/administration/runtime_configuration/v0/container_registry_config_pb2.pyi +65 -0
  29. _qwak_proto/qwak/administration/runtime_configuration/v0/container_registry_config_pb2_grpc.py +4 -0
  30. _qwak_proto/qwak/administration/runtime_configuration/v0/creds/auth_pb2.py +28 -0
  31. _qwak_proto/qwak/administration/runtime_configuration/v0/creds/auth_pb2.pyi +36 -0
  32. _qwak_proto/qwak/administration/runtime_configuration/v0/creds/auth_pb2_grpc.py +4 -0
  33. _qwak_proto/qwak/administration/runtime_configuration/v0/creds/secret_pb2.py +29 -0
  34. _qwak_proto/qwak/administration/runtime_configuration/v0/creds/secret_pb2.pyi +49 -0
  35. _qwak_proto/qwak/administration/runtime_configuration/v0/creds/secret_pb2_grpc.py +4 -0
  36. _qwak_proto/qwak/administration/runtime_configuration/v0/data_catalog_config_pb2.py +33 -0
  37. _qwak_proto/qwak/administration/runtime_configuration/v0/data_catalog_config_pb2.pyi +89 -0
  38. _qwak_proto/qwak/administration/runtime_configuration/v0/data_catalog_config_pb2_grpc.py +4 -0
  39. _qwak_proto/qwak/administration/runtime_configuration/v0/external/databricks/auth_pb2.py +34 -0
  40. _qwak_proto/qwak/administration/runtime_configuration/v0/external/databricks/auth_pb2.pyi +97 -0
  41. _qwak_proto/qwak/administration/runtime_configuration/v0/external/databricks/auth_pb2_grpc.py +4 -0
  42. _qwak_proto/qwak/administration/runtime_configuration/v0/external/elasticsearch_config_pb2.py +28 -0
  43. _qwak_proto/qwak/administration/runtime_configuration/v0/external/elasticsearch_config_pb2.pyi +39 -0
  44. _qwak_proto/qwak/administration/runtime_configuration/v0/external/elasticsearch_config_pb2_grpc.py +4 -0
  45. _qwak_proto/qwak/administration/runtime_configuration/v0/external/kafka_config_pb2.py +34 -0
  46. _qwak_proto/qwak/administration/runtime_configuration/v0/external/kafka_config_pb2.pyi +79 -0
  47. _qwak_proto/qwak/administration/runtime_configuration/v0/external/kafka_config_pb2_grpc.py +4 -0
  48. _qwak_proto/qwak/administration/runtime_configuration/v0/external/prometheus_config_pb2.py +29 -0
  49. _qwak_proto/qwak/administration/runtime_configuration/v0/external/prometheus_config_pb2.pyi +46 -0
  50. _qwak_proto/qwak/administration/runtime_configuration/v0/external/prometheus_config_pb2_grpc.py +4 -0
  51. _qwak_proto/qwak/administration/runtime_configuration/v0/external/redis_config_pb2.py +28 -0
  52. _qwak_proto/qwak/administration/runtime_configuration/v0/external/redis_config_pb2.pyi +39 -0
  53. _qwak_proto/qwak/administration/runtime_configuration/v0/external/redis_config_pb2_grpc.py +4 -0
  54. _qwak_proto/qwak/administration/runtime_configuration/v0/external/victoriametrics_config_pb2.py +28 -0
  55. _qwak_proto/qwak/administration/runtime_configuration/v0/external/victoriametrics_config_pb2.pyi +33 -0
  56. _qwak_proto/qwak/administration/runtime_configuration/v0/external/victoriametrics_config_pb2_grpc.py +4 -0
  57. _qwak_proto/qwak/administration/runtime_configuration/v0/feature_store_config_pb2.py +32 -0
  58. _qwak_proto/qwak/administration/runtime_configuration/v0/feature_store_config_pb2.pyi +66 -0
  59. _qwak_proto/qwak/administration/runtime_configuration/v0/feature_store_config_pb2_grpc.py +4 -0
  60. _qwak_proto/qwak/administration/runtime_configuration/v0/hosting/aws/auth_pb2.py +42 -0
  61. _qwak_proto/qwak/administration/runtime_configuration/v0/hosting/aws/auth_pb2.pyi +159 -0
  62. _qwak_proto/qwak/administration/runtime_configuration/v0/hosting/aws/auth_pb2_grpc.py +4 -0
  63. _qwak_proto/qwak/administration/runtime_configuration/v0/hosting/azure/auth_pb2.py +39 -0
  64. _qwak_proto/qwak/administration/runtime_configuration/v0/hosting/azure/auth_pb2.pyi +126 -0
  65. _qwak_proto/qwak/administration/runtime_configuration/v0/hosting/azure/auth_pb2_grpc.py +4 -0
  66. _qwak_proto/qwak/administration/runtime_configuration/v0/hosting_config_pb2.py +40 -0
  67. _qwak_proto/qwak/administration/runtime_configuration/v0/hosting_config_pb2.pyi +146 -0
  68. _qwak_proto/qwak/administration/runtime_configuration/v0/hosting_config_pb2_grpc.py +4 -0
  69. _qwak_proto/qwak/administration/runtime_configuration/v0/logs_storage_config_pb2.py +28 -0
  70. _qwak_proto/qwak/administration/runtime_configuration/v0/logs_storage_config_pb2.pyi +33 -0
  71. _qwak_proto/qwak/administration/runtime_configuration/v0/logs_storage_config_pb2_grpc.py +4 -0
  72. _qwak_proto/qwak/administration/runtime_configuration/v0/model_analytics_storage_config_pb2.py +28 -0
  73. _qwak_proto/qwak/administration/runtime_configuration/v0/model_analytics_storage_config_pb2.pyi +33 -0
  74. _qwak_proto/qwak/administration/runtime_configuration/v0/model_analytics_storage_config_pb2_grpc.py +4 -0
  75. _qwak_proto/qwak/administration/runtime_configuration/v0/network_config_pb2.py +36 -0
  76. _qwak_proto/qwak/administration/runtime_configuration/v0/network_config_pb2.pyi +107 -0
  77. _qwak_proto/qwak/administration/runtime_configuration/v0/network_config_pb2_grpc.py +4 -0
  78. _qwak_proto/qwak/administration/runtime_configuration/v0/object_storage_config_pb2.py +33 -0
  79. _qwak_proto/qwak/administration/runtime_configuration/v0/object_storage_config_pb2.pyi +93 -0
  80. _qwak_proto/qwak/administration/runtime_configuration/v0/object_storage_config_pb2_grpc.py +4 -0
  81. _qwak_proto/qwak/administration/runtime_configuration/v0/observability_config_pb2.py +33 -0
  82. _qwak_proto/qwak/administration/runtime_configuration/v0/observability_config_pb2.pyi +79 -0
  83. _qwak_proto/qwak/administration/runtime_configuration/v0/observability_config_pb2_grpc.py +4 -0
  84. _qwak_proto/qwak/administration/runtime_configuration/v0/runtime_config_pb2.py +36 -0
  85. _qwak_proto/qwak/administration/runtime_configuration/v0/runtime_config_pb2.pyi +72 -0
  86. _qwak_proto/qwak/administration/runtime_configuration/v0/runtime_config_pb2_grpc.py +4 -0
  87. _qwak_proto/qwak/administration/runtime_configuration/v0/sql_engine_config_pb2.py +33 -0
  88. _qwak_proto/qwak/administration/runtime_configuration/v0/sql_engine_config_pb2.pyi +83 -0
  89. _qwak_proto/qwak/administration/runtime_configuration/v0/sql_engine_config_pb2_grpc.py +4 -0
  90. _qwak_proto/qwak/administration/v0/authentication/authentication_service_pb2.py +14 -47
  91. _qwak_proto/qwak/administration/v0/environments/configuration_pb2.py +23 -55
  92. _qwak_proto/qwak/administration/v0/environments/configuration_pb2.pyi +103 -7
  93. _qwak_proto/qwak/administration/v0/environments/environment_pb2.py +15 -33
  94. _qwak_proto/qwak/administration/v0/environments/environment_pb2.pyi +50 -2
  95. _qwak_proto/qwak/administration/v0/environments/environment_service_pb2.py +36 -158
  96. _qwak_proto/qwak/administration/v0/environments/personalization_pb2.py +8 -24
  97. _qwak_proto/qwak/administration/v0/users/user_pb2.py +18 -71
  98. _qwak_proto/qwak/admiral/secret/v0/secret_pb2.py +53 -0
  99. _qwak_proto/qwak/admiral/secret/v0/secret_pb2.pyi +256 -0
  100. _qwak_proto/qwak/admiral/secret/v0/secret_pb2_grpc.py +4 -0
  101. _qwak_proto/qwak/admiral/secret/v0/secret_service_pb2.py +40 -0
  102. _qwak_proto/qwak/admiral/secret/v0/secret_service_pb2.pyi +93 -0
  103. _qwak_proto/qwak/admiral/secret/v0/secret_service_pb2_grpc.py +135 -0
  104. _qwak_proto/qwak/admiral/secret/v0/system_secret_service_pb2.py +40 -0
  105. _qwak_proto/qwak/admiral/secret/v0/system_secret_service_pb2.pyi +101 -0
  106. _qwak_proto/qwak/admiral/secret/v0/system_secret_service_pb2_grpc.py +135 -0
  107. _qwak_proto/qwak/admiral/user_application_instance/v0/user_application_instance_pb2.py +39 -105
  108. _qwak_proto/qwak/admiral/user_application_instance/v0/user_application_instance_pb2.pyi +131 -3
  109. _qwak_proto/qwak/admiral/user_application_instance/v0/user_application_instance_service_pb2.py +22 -87
  110. _qwak_proto/qwak/analytics/analytics_pb2.py +28 -123
  111. _qwak_proto/qwak/analytics/analytics_pb2.pyi +5 -1
  112. _qwak_proto/qwak/analytics/analytics_service_pb2.py +48 -149
  113. _qwak_proto/qwak/analytics/analytics_service_pb2.pyi +87 -0
  114. _qwak_proto/qwak/analytics/analytics_service_pb2_grpc.py +101 -0
  115. _qwak_proto/qwak/artifactory_settings/artifactory_settings_pb2.py +29 -0
  116. _qwak_proto/qwak/artifactory_settings/artifactory_settings_pb2.pyi +57 -0
  117. _qwak_proto/qwak/artifactory_settings/artifactory_settings_pb2_grpc.py +4 -0
  118. _qwak_proto/qwak/audience/v1/audience_api_pb2.py +30 -127
  119. _qwak_proto/qwak/audience/v1/audience_pb2.py +27 -114
  120. _qwak_proto/qwak/audience/v1/audience_pb2.pyi +5 -1
  121. _qwak_proto/qwak/auto_scaling/v1/auto_scaling_pb2.py +18 -79
  122. _qwak_proto/qwak/auto_scaling/v1/auto_scaling_service_pb2.py +10 -27
  123. _qwak_proto/qwak/automation/v1/action_pb2.py +42 -164
  124. _qwak_proto/qwak/automation/v1/action_pb2.pyi +82 -7
  125. _qwak_proto/qwak/automation/v1/auto_scaling_pb2.py +19 -77
  126. _qwak_proto/qwak/automation/v1/auto_scaling_pb2.pyi +6 -0
  127. _qwak_proto/qwak/automation/v1/automation_execution_pb2.py +12 -43
  128. _qwak_proto/qwak/automation/v1/automation_management_service_pb2.py +56 -258
  129. _qwak_proto/qwak/automation/v1/automation_pb2.py +11 -35
  130. _qwak_proto/qwak/automation/v1/automation_pb2.pyi +8 -1
  131. _qwak_proto/qwak/automation/v1/common_pb2.py +11 -33
  132. _qwak_proto/qwak/automation/v1/common_pb2.pyi +6 -0
  133. _qwak_proto/qwak/automation/v1/notification_pb2.py +16 -68
  134. _qwak_proto/qwak/automation/v1/trigger_pb2.py +14 -54
  135. _qwak_proto/qwak/batch_job/v1/batch_job_events_pb2.py +27 -116
  136. _qwak_proto/qwak/batch_job/v1/batch_job_events_pb2.pyi +6 -1
  137. _qwak_proto/qwak/batch_job/v1/batch_job_resources_pb2.py +9 -26
  138. _qwak_proto/qwak/batch_job/v1/batch_job_resources_pb2.pyi +2 -0
  139. _qwak_proto/qwak/batch_job/v1/batch_job_service_pb2.py +121 -502
  140. _qwak_proto/qwak/batch_job/v1/batch_job_service_pb2.pyi +111 -4
  141. _qwak_proto/qwak/batch_job/v1/batch_job_service_pb2_grpc.py +67 -0
  142. _qwak_proto/qwak/build/v1/build_api_pb2.py +98 -278
  143. _qwak_proto/qwak/build/v1/build_api_pb2.pyi +220 -0
  144. _qwak_proto/qwak/build/v1/build_api_pb2_grpc.py +198 -0
  145. _qwak_proto/qwak/build/v1/build_pb2.py +115 -417
  146. _qwak_proto/qwak/build/v1/build_pb2.pyi +294 -5
  147. _qwak_proto/qwak/build_settings/build_settings_api_pb2.py +40 -0
  148. _qwak_proto/qwak/build_settings/build_settings_api_pb2.pyi +106 -0
  149. _qwak_proto/qwak/build_settings/build_settings_api_pb2_grpc.py +132 -0
  150. _qwak_proto/qwak/build_settings/build_settings_pb2.py +39 -0
  151. _qwak_proto/qwak/build_settings/build_settings_pb2.pyi +148 -0
  152. _qwak_proto/qwak/build_settings/build_settings_pb2_grpc.py +4 -0
  153. _qwak_proto/qwak/builds/build_pb2.py +46 -200
  154. _qwak_proto/qwak/builds/build_pb2.pyi +111 -5
  155. _qwak_proto/qwak/builds/build_url_pb2.py +27 -54
  156. _qwak_proto/qwak/builds/build_url_pb2.pyi +131 -2
  157. _qwak_proto/qwak/builds/build_values_pb2.py +82 -0
  158. _qwak_proto/qwak/builds/build_values_pb2.pyi +559 -0
  159. _qwak_proto/qwak/builds/build_values_pb2_grpc.py +4 -0
  160. _qwak_proto/qwak/builds/builds_orchestrator_service_pb2.py +93 -168
  161. _qwak_proto/qwak/builds/builds_orchestrator_service_pb2.pyi +342 -3
  162. _qwak_proto/qwak/builds/builds_orchestrator_service_pb2_grpc.py +166 -0
  163. _qwak_proto/qwak/builds/builds_pb2.py +87 -528
  164. _qwak_proto/qwak/builds/builds_pb2.pyi +5 -192
  165. _qwak_proto/qwak/builds/builds_pb2_grpc.py +0 -233
  166. _qwak_proto/qwak/builds/internal_builds_orchestrator_service_pb2.py +12 -37
  167. _qwak_proto/qwak/data_versioning/data_versioning_pb2.py +9 -15
  168. _qwak_proto/qwak/data_versioning/data_versioning_pb2.pyi +21 -0
  169. _qwak_proto/qwak/data_versioning/data_versioning_service_pb2.py +15 -48
  170. _qwak_proto/qwak/data_versioning/data_versioning_service_pb2.pyi +12 -1
  171. _qwak_proto/qwak/deployment/alert_pb2.py +25 -108
  172. _qwak_proto/qwak/deployment/alert_pb2.pyi +2 -0
  173. _qwak_proto/qwak/deployment/alert_service_pb2.py +30 -127
  174. _qwak_proto/qwak/deployment/deployment_messages_pb2.py +6 -14
  175. _qwak_proto/qwak/deployment/deployment_pb2.py +127 -578
  176. _qwak_proto/qwak/deployment/deployment_pb2.pyi +51 -8
  177. _qwak_proto/qwak/deployment/deployment_service_pb2.py +91 -400
  178. _qwak_proto/qwak/deployment/deployment_service_pb2.pyi +30 -0
  179. _qwak_proto/qwak/deployment/deployment_service_pb2_grpc.py +34 -0
  180. _qwak_proto/qwak/ecosystem/jfrog/v0/token_pb2.py +72 -0
  181. _qwak_proto/qwak/ecosystem/jfrog/v0/token_pb2.pyi +489 -0
  182. _qwak_proto/qwak/ecosystem/jfrog/v0/token_pb2_grpc.py +4 -0
  183. _qwak_proto/qwak/ecosystem/jfrog/v0/token_service_pb2.py +44 -0
  184. _qwak_proto/qwak/ecosystem/jfrog/v0/token_service_pb2.pyi +144 -0
  185. _qwak_proto/qwak/ecosystem/jfrog/v0/token_service_pb2_grpc.py +169 -0
  186. _qwak_proto/qwak/ecosystem/v0/auth_pb2.py +28 -0
  187. _qwak_proto/qwak/ecosystem/v0/auth_pb2.pyi +37 -0
  188. _qwak_proto/qwak/ecosystem/v0/auth_pb2_grpc.py +4 -0
  189. _qwak_proto/qwak/ecosystem/v0/azure_credentials_pb2.py +37 -0
  190. _qwak_proto/qwak/ecosystem/v0/azure_credentials_pb2.pyi +117 -0
  191. _qwak_proto/qwak/ecosystem/v0/azure_credentials_pb2_grpc.py +4 -0
  192. _qwak_proto/qwak/ecosystem/v0/credentials_pb2.py +13 -26
  193. _qwak_proto/qwak/ecosystem/v0/credentials_pb2.pyi +33 -3
  194. _qwak_proto/qwak/ecosystem/v0/ecosystem_pb2.py +34 -140
  195. _qwak_proto/qwak/ecosystem/v0/ecosystem_pb2.pyi +45 -7
  196. _qwak_proto/qwak/ecosystem/v0/ecosystem_runtime_service_pb2.py +54 -229
  197. _qwak_proto/qwak/ecosystem/v0/ecosystem_runtime_service_pb2.pyi +22 -3
  198. _qwak_proto/qwak/execution/v1/backfill_pb2.py +18 -74
  199. _qwak_proto/qwak/execution/v1/batch_pb2.py +10 -34
  200. _qwak_proto/qwak/execution/v1/deletion_pb2.py +33 -0
  201. _qwak_proto/qwak/execution/v1/deletion_pb2.pyi +67 -0
  202. _qwak_proto/qwak/execution/v1/deletion_pb2_grpc.py +4 -0
  203. _qwak_proto/qwak/execution/v1/execution_pb2.py +20 -60
  204. _qwak_proto/qwak/execution/v1/execution_pb2.pyi +61 -4
  205. _qwak_proto/qwak/execution/v1/execution_service_pb2.py +70 -108
  206. _qwak_proto/qwak/execution/v1/execution_service_pb2.pyi +306 -0
  207. _qwak_proto/qwak/execution/v1/execution_service_pb2_grpc.py +304 -2
  208. _qwak_proto/qwak/execution/v1/internal/deployment/platform_details_pb2.py +27 -0
  209. _qwak_proto/qwak/execution/v1/internal/deployment/platform_details_pb2.pyi +29 -0
  210. _qwak_proto/qwak/execution/v1/internal/deployment/platform_details_pb2_grpc.py +4 -0
  211. _qwak_proto/qwak/execution/v1/jobs/job_pb2.py +19 -67
  212. _qwak_proto/qwak/execution/v1/jobs/job_pb2.pyi +33 -2
  213. _qwak_proto/qwak/execution/v1/jobs/job_service_pb2.py +56 -88
  214. _qwak_proto/qwak/execution/v1/jobs/job_service_pb2.pyi +311 -0
  215. _qwak_proto/qwak/execution/v1/jobs/job_service_pb2_grpc.py +231 -0
  216. _qwak_proto/qwak/execution/v1/jobs/reports/report_pb2.py +21 -75
  217. _qwak_proto/qwak/execution/v1/jobs/reports/report_pb2.pyi +29 -2
  218. _qwak_proto/qwak/execution/v1/state/execution_state_pb2.py +6 -14
  219. _qwak_proto/qwak/execution/v1/state/execution_state_service_pb2.py +31 -108
  220. _qwak_proto/qwak/execution/v1/state/execution_state_service_pb2.pyi +30 -0
  221. _qwak_proto/qwak/execution/v1/state/execution_state_service_pb2_grpc.py +34 -0
  222. _qwak_proto/qwak/execution/v1/state/featureset_state_pb2.py +6 -14
  223. _qwak_proto/qwak/execution/v1/state/spark_execution_state_pb2.py +14 -68
  224. _qwak_proto/qwak/execution/v1/streaming_aggregation_pb2.py +42 -0
  225. _qwak_proto/qwak/execution/v1/streaming_aggregation_pb2.pyi +165 -0
  226. _qwak_proto/qwak/execution/v1/streaming_aggregation_pb2_grpc.py +4 -0
  227. _qwak_proto/qwak/execution/v1/streaming_pb2.py +33 -0
  228. _qwak_proto/qwak/execution/v1/streaming_pb2.pyi +79 -0
  229. _qwak_proto/qwak/execution/v1/streaming_pb2_grpc.py +4 -0
  230. _qwak_proto/qwak/feature_store/entities/entity_pb2.py +16 -57
  231. _qwak_proto/qwak/feature_store/entities/entity_service_pb2.py +30 -127
  232. _qwak_proto/qwak/feature_store/features/aggregation_pb2.py +38 -175
  233. _qwak_proto/qwak/feature_store/features/deployment_pb2.py +36 -167
  234. _qwak_proto/qwak/feature_store/features/deployment_service_pb2.py +10 -27
  235. _qwak_proto/qwak/feature_store/features/execution_pb2.py +14 -56
  236. _qwak_proto/qwak/feature_store/features/feature_set_attribute_pb2.py +28 -0
  237. _qwak_proto/qwak/feature_store/features/feature_set_attribute_pb2.pyi +33 -0
  238. _qwak_proto/qwak/feature_store/features/feature_set_attribute_pb2_grpc.py +4 -0
  239. _qwak_proto/qwak/feature_store/features/feature_set_pb2.py +49 -106
  240. _qwak_proto/qwak/feature_store/features/feature_set_pb2.pyi +154 -8
  241. _qwak_proto/qwak/feature_store/features/feature_set_service_pb2.py +101 -349
  242. _qwak_proto/qwak/feature_store/features/feature_set_service_pb2.pyi +160 -0
  243. _qwak_proto/qwak/feature_store/features/feature_set_service_pb2_grpc.py +170 -0
  244. _qwak_proto/qwak/feature_store/features/feature_set_state_pb2.py +38 -181
  245. _qwak_proto/qwak/feature_store/features/feature_set_state_service_pb2.py +26 -107
  246. _qwak_proto/qwak/feature_store/features/feature_set_types_pb2.py +84 -298
  247. _qwak_proto/qwak/feature_store/features/feature_set_types_pb2.pyi +123 -7
  248. _qwak_proto/qwak/feature_store/features/monitoring_pb2.py +10 -34
  249. _qwak_proto/qwak/feature_store/features/real_time_feature_extractor_pb2.py +32 -143
  250. _qwak_proto/qwak/feature_store/jobs/job_pb2.py +12 -46
  251. _qwak_proto/qwak/feature_store/jobs/job_service_pb2.py +30 -127
  252. _qwak_proto/qwak/feature_store/jobs/v1/job_pb2.py +13 -36
  253. _qwak_proto/qwak/feature_store/jobs/v1/job_pb2.pyi +19 -0
  254. _qwak_proto/qwak/feature_store/jobs/v1/job_service_pb2.py +44 -148
  255. _qwak_proto/qwak/feature_store/jobs/v1/job_service_pb2.pyi +64 -0
  256. _qwak_proto/qwak/feature_store/jobs/v1/job_service_pb2_grpc.py +67 -0
  257. _qwak_proto/qwak/feature_store/platform/platform_details_pb2.py +30 -0
  258. _qwak_proto/qwak/feature_store/platform/platform_details_pb2.pyi +54 -0
  259. _qwak_proto/qwak/feature_store/platform/platform_details_pb2_grpc.py +4 -0
  260. _qwak_proto/qwak/feature_store/reports/report_pb2.py +14 -53
  261. _qwak_proto/qwak/feature_store/repository/common/platform_pb2.py +31 -0
  262. _qwak_proto/qwak/feature_store/repository/common/platform_pb2.pyi +70 -0
  263. _qwak_proto/qwak/feature_store/repository/common/platform_pb2_grpc.py +4 -0
  264. _qwak_proto/qwak/feature_store/serving/management_pb2.py +36 -0
  265. _qwak_proto/qwak/feature_store/serving/management_pb2.pyi +72 -0
  266. _qwak_proto/qwak/feature_store/serving/management_pb2_grpc.py +101 -0
  267. _qwak_proto/qwak/feature_store/serving/metadata_pb2.py +13 -35
  268. _qwak_proto/qwak/feature_store/serving/metadata_pb2.pyi +27 -0
  269. _qwak_proto/qwak/feature_store/serving/serving_pb2.py +50 -222
  270. _qwak_proto/qwak/feature_store/serving/v1/value_pb2.py +8 -24
  271. _qwak_proto/qwak/feature_store/sinks/sink_pb2.py +36 -0
  272. _qwak_proto/qwak/feature_store/sinks/sink_pb2.pyi +137 -0
  273. _qwak_proto/qwak/feature_store/sinks/sink_pb2_grpc.py +4 -0
  274. _qwak_proto/qwak/feature_store/sources/batch_pb2.py +80 -175
  275. _qwak_proto/qwak/feature_store/sources/batch_pb2.pyi +461 -13
  276. _qwak_proto/qwak/feature_store/sources/data_source_attribute_pb2.py +28 -0
  277. _qwak_proto/qwak/feature_store/sources/data_source_attribute_pb2.pyi +33 -0
  278. _qwak_proto/qwak/feature_store/sources/data_source_attribute_pb2_grpc.py +4 -0
  279. _qwak_proto/qwak/feature_store/sources/data_source_pb2.py +21 -55
  280. _qwak_proto/qwak/feature_store/sources/data_source_pb2.pyi +39 -4
  281. _qwak_proto/qwak/feature_store/sources/data_source_service_pb2.py +41 -148
  282. _qwak_proto/qwak/feature_store/sources/data_source_service_pb2.pyi +25 -0
  283. _qwak_proto/qwak/feature_store/sources/data_source_service_pb2_grpc.py +34 -0
  284. _qwak_proto/qwak/feature_store/sources/streaming_pb2.py +34 -146
  285. _qwak_proto/qwak/feature_store/v1/common/jfrog_artifact/jfrog_artifact_pb2.py +27 -0
  286. _qwak_proto/qwak/feature_store/v1/common/jfrog_artifact/jfrog_artifact_pb2.pyi +30 -0
  287. _qwak_proto/qwak/feature_store/v1/common/jfrog_artifact/jfrog_artifact_pb2_grpc.py +4 -0
  288. _qwak_proto/qwak/feature_store/v1/common/source_code/source_code_pb2.py +32 -0
  289. _qwak_proto/qwak/feature_store/v1/common/source_code/source_code_pb2.pyi +77 -0
  290. _qwak_proto/qwak/feature_store/v1/common/source_code/source_code_pb2_grpc.py +4 -0
  291. _qwak_proto/qwak/feature_store/v1/internal/data_source/data_source_service_pb2.py +39 -0
  292. _qwak_proto/qwak/feature_store/v1/internal/data_source/data_source_service_pb2.pyi +99 -0
  293. _qwak_proto/qwak/feature_store/v1/internal/data_source/data_source_service_pb2_grpc.py +99 -0
  294. _qwak_proto/qwak/feature_store/v1/internal/featureset/featureset_token_service_pb2.py +31 -0
  295. _qwak_proto/qwak/feature_store/v1/internal/featureset/featureset_token_service_pb2.pyi +46 -0
  296. _qwak_proto/qwak/feature_store/v1/internal/featureset/featureset_token_service_pb2_grpc.py +66 -0
  297. _qwak_proto/qwak/features_operator/v1/features_operator_pb2.py +14 -54
  298. _qwak_proto/qwak/features_operator/v1/features_operator_service_pb2.py +14 -47
  299. _qwak_proto/qwak/features_operator/v2/features_operator_pb2.py +16 -64
  300. _qwak_proto/qwak/features_operator/v2/features_operator_service_pb2.py +12 -37
  301. _qwak_proto/qwak/features_operator/v3/features_operator_async_service_pb2.py +26 -107
  302. _qwak_proto/qwak/features_operator/v3/features_operator_pb2.py +16 -64
  303. _qwak_proto/qwak/file_versioning/file_versioning_pb2.py +11 -24
  304. _qwak_proto/qwak/file_versioning/file_versioning_pb2.pyi +21 -0
  305. _qwak_proto/qwak/file_versioning/file_versioning_service_pb2.py +15 -48
  306. _qwak_proto/qwak/file_versioning/file_versioning_service_pb2.pyi +12 -1
  307. _qwak_proto/qwak/fitness_service/constructs_pb2.py +23 -93
  308. _qwak_proto/qwak/fitness_service/constructs_pb2.pyi +59 -1
  309. _qwak_proto/qwak/fitness_service/fitness_pb2.py +7 -34
  310. _qwak_proto/qwak/fitness_service/fitness_pb2.pyi +0 -77
  311. _qwak_proto/qwak/fitness_service/status_pb2.py +17 -107
  312. _qwak_proto/qwak/fitness_service/status_pb2.pyi +1 -117
  313. _qwak_proto/qwak/inference/feedback/feedback_pb2.py +28 -96
  314. _qwak_proto/qwak/instance_template/instance_template_pb2.py +13 -41
  315. _qwak_proto/qwak/instance_template/instance_template_pb2.pyi +13 -1
  316. _qwak_proto/qwak/instance_template/instance_template_service_pb2.py +14 -47
  317. _qwak_proto/qwak/integration/hugging_face_integration_pb2.py +37 -0
  318. _qwak_proto/qwak/integration/hugging_face_integration_pb2.pyi +106 -0
  319. _qwak_proto/qwak/integration/hugging_face_integration_pb2_grpc.py +4 -0
  320. _qwak_proto/qwak/integration/integration_pb2.py +55 -0
  321. _qwak_proto/qwak/integration/integration_pb2.pyi +357 -0
  322. _qwak_proto/qwak/integration/integration_pb2_grpc.py +4 -0
  323. _qwak_proto/qwak/integration/integration_service_pb2.py +56 -0
  324. _qwak_proto/qwak/integration/integration_service_pb2.pyi +234 -0
  325. _qwak_proto/qwak/integration/integration_service_pb2_grpc.py +271 -0
  326. _qwak_proto/qwak/integration/open_a_i_integration_pb2.py +37 -0
  327. _qwak_proto/qwak/integration/open_a_i_integration_pb2.pyi +109 -0
  328. _qwak_proto/qwak/integration/open_a_i_integration_pb2_grpc.py +4 -0
  329. _qwak_proto/qwak/integration/opsgenie_integration_pb2.py +43 -0
  330. _qwak_proto/qwak/integration/opsgenie_integration_pb2.pyi +168 -0
  331. _qwak_proto/qwak/integration/opsgenie_integration_pb2_grpc.py +4 -0
  332. _qwak_proto/qwak/integration/pagerduty_integration_pb2.py +47 -0
  333. _qwak_proto/qwak/integration/pagerduty_integration_pb2.pyi +195 -0
  334. _qwak_proto/qwak/integration/pagerduty_integration_pb2_grpc.py +4 -0
  335. _qwak_proto/qwak/integration/slack_app_integration_pb2.py +47 -0
  336. _qwak_proto/qwak/integration/slack_app_integration_pb2.pyi +198 -0
  337. _qwak_proto/qwak/integration/slack_app_integration_pb2_grpc.py +4 -0
  338. _qwak_proto/qwak/kube_deployment_captain/alert_pb2.py +22 -97
  339. _qwak_proto/qwak/kube_deployment_captain/alerting_pb2.py +12 -44
  340. _qwak_proto/qwak/kube_deployment_captain/batch_job_pb2.py +76 -249
  341. _qwak_proto/qwak/kube_deployment_captain/batch_job_pb2.pyi +283 -6
  342. _qwak_proto/qwak/kube_deployment_captain/deployment_pb2.py +45 -161
  343. _qwak_proto/qwak/kube_deployment_captain/deployment_pb2.pyi +52 -1
  344. _qwak_proto/qwak/kube_deployment_captain/feature_set_deployment_pb2.py +33 -145
  345. _qwak_proto/qwak/kube_deployment_captain/feature_set_deployment_pb2.pyi +6 -2
  346. _qwak_proto/qwak/kube_deployment_captain/kube_deployment_captain_service_pb2.py +111 -510
  347. _qwak_proto/qwak/kube_deployment_captain/kube_deployment_captain_service_pb2.pyi +24 -1
  348. _qwak_proto/qwak/kube_deployment_captain/kube_deployment_captain_service_pb2_grpc.py +34 -0
  349. _qwak_proto/qwak/kube_deployment_captain/traffic_mapping_pb2.py +8 -24
  350. _qwak_proto/qwak/logging/log_filter_pb2.py +12 -44
  351. _qwak_proto/qwak/logging/log_line_pb2.py +8 -25
  352. _qwak_proto/qwak/logging/log_reader_service_pb2.py +10 -27
  353. _qwak_proto/qwak/logging/log_source_pb2.py +30 -134
  354. _qwak_proto/qwak/model_descriptor/open_ai_descriptor_pb2.py +40 -0
  355. _qwak_proto/qwak/model_descriptor/open_ai_descriptor_pb2.pyi +215 -0
  356. _qwak_proto/qwak/model_descriptor/open_ai_descriptor_pb2_grpc.py +4 -0
  357. _qwak_proto/qwak/model_group/model_group_pb2.py +47 -0
  358. _qwak_proto/qwak/model_group/model_group_pb2.pyi +192 -0
  359. _qwak_proto/qwak/model_group/model_group_pb2_grpc.py +169 -0
  360. _qwak_proto/qwak/model_group/model_group_repository_details_pb2.py +43 -0
  361. _qwak_proto/qwak/model_group/model_group_repository_details_pb2.pyi +172 -0
  362. _qwak_proto/qwak/model_group/model_group_repository_details_pb2_grpc.py +4 -0
  363. _qwak_proto/qwak/models/models_pb2.py +101 -356
  364. _qwak_proto/qwak/models/models_pb2.pyi +221 -6
  365. _qwak_proto/qwak/models/models_pb2_grpc.py +68 -0
  366. _qwak_proto/qwak/models/models_query_pb2.py +37 -0
  367. _qwak_proto/qwak/models/models_query_pb2.pyi +157 -0
  368. _qwak_proto/qwak/models/models_query_pb2_grpc.py +4 -0
  369. _qwak_proto/qwak/monitoring/v0/alerting_channel_management_service_pb2.py +30 -127
  370. _qwak_proto/qwak/monitoring/v0/alerting_channel_pb2.py +34 -152
  371. _qwak_proto/qwak/monitoring/v0/alerting_channel_sync_service_pb2.py +14 -47
  372. _qwak_proto/qwak/offline/serving/v1/feature_values_pb2.py +27 -0
  373. _qwak_proto/qwak/offline/serving/v1/feature_values_pb2.pyi +37 -0
  374. _qwak_proto/qwak/offline/serving/v1/feature_values_pb2_grpc.py +4 -0
  375. _qwak_proto/qwak/offline/serving/v1/offline_serving_async_service_pb2.py +55 -0
  376. _qwak_proto/qwak/offline/serving/v1/offline_serving_async_service_pb2.pyi +279 -0
  377. _qwak_proto/qwak/offline/serving/v1/offline_serving_async_service_pb2_grpc.py +165 -0
  378. _qwak_proto/qwak/offline/serving/v1/options_pb2.py +27 -0
  379. _qwak_proto/qwak/offline/serving/v1/options_pb2.pyi +30 -0
  380. _qwak_proto/qwak/offline/serving/v1/options_pb2_grpc.py +4 -0
  381. _qwak_proto/qwak/offline/serving/v1/population_pb2.py +35 -0
  382. _qwak_proto/qwak/offline/serving/v1/population_pb2.pyi +99 -0
  383. _qwak_proto/qwak/offline/serving/v1/population_pb2_grpc.py +4 -0
  384. _qwak_proto/qwak/projects/jfrog_project_spec_pb2.py +27 -0
  385. _qwak_proto/qwak/projects/jfrog_project_spec_pb2.pyi +32 -0
  386. _qwak_proto/qwak/projects/jfrog_project_spec_pb2_grpc.py +4 -0
  387. _qwak_proto/qwak/projects/projects_pb2.py +51 -142
  388. _qwak_proto/qwak/projects/projects_pb2.pyi +149 -3
  389. _qwak_proto/qwak/prompt/v1/prompt/prompt_manager_service_pb2.py +77 -0
  390. _qwak_proto/qwak/prompt/v1/prompt/prompt_manager_service_pb2.pyi +417 -0
  391. _qwak_proto/qwak/prompt/v1/prompt/prompt_manager_service_pb2_grpc.py +441 -0
  392. _qwak_proto/qwak/prompt/v1/prompt/prompt_pb2.py +69 -0
  393. _qwak_proto/qwak/prompt/v1/prompt/prompt_pb2.pyi +415 -0
  394. _qwak_proto/qwak/prompt/v1/prompt/prompt_pb2_grpc.py +4 -0
  395. _qwak_proto/qwak/secret_service/secret_service_pb2.py +18 -67
  396. _qwak_proto/qwak/secret_service/secret_service_pb2.pyi +1 -1
  397. _qwak_proto/qwak/self_service/account/v0/account_membership_pb2.py +30 -65
  398. _qwak_proto/qwak/self_service/account/v0/account_membership_pb2.pyi +99 -2
  399. _qwak_proto/qwak/self_service/account/v0/account_membership_service_pb2.py +51 -208
  400. _qwak_proto/qwak/self_service/account/v0/account_membership_service_pb2.pyi +28 -0
  401. _qwak_proto/qwak/self_service/account/v0/account_membership_service_pb2_grpc.py +34 -0
  402. _qwak_proto/qwak/self_service/account/v0/account_status_pb2.py +44 -0
  403. _qwak_proto/qwak/self_service/account/v0/account_status_pb2.pyi +172 -0
  404. _qwak_proto/qwak/self_service/account/v0/account_status_pb2_grpc.py +4 -0
  405. _qwak_proto/qwak/self_service/account/v0/managing_account_pb2.py +60 -0
  406. _qwak_proto/qwak/self_service/account/v0/managing_account_pb2.pyi +317 -0
  407. _qwak_proto/qwak/self_service/account/v0/managing_account_pb2_grpc.py +4 -0
  408. _qwak_proto/qwak/self_service/account/v0/managing_account_service_pb2.py +45 -0
  409. _qwak_proto/qwak/self_service/account/v0/managing_account_service_pb2.pyi +136 -0
  410. _qwak_proto/qwak/self_service/account/v0/managing_account_service_pb2_grpc.py +169 -0
  411. _qwak_proto/qwak/self_service/user/v1/api_key_pb2.py +6 -14
  412. _qwak_proto/qwak/self_service/user/v1/user_pb2.py +6 -14
  413. _qwak_proto/qwak/self_service/user/v1/user_service_pb2.py +30 -121
  414. _qwak_proto/qwak/service_discovery/service_discovery_location_pb2.py +33 -0
  415. _qwak_proto/qwak/service_discovery/service_discovery_location_pb2.pyi +73 -0
  416. _qwak_proto/qwak/service_discovery/service_discovery_location_pb2_grpc.py +4 -0
  417. _qwak_proto/qwak/service_discovery/service_discovery_location_service_pb2.py +32 -0
  418. _qwak_proto/qwak/service_discovery/service_discovery_location_service_pb2.pyi +41 -0
  419. _qwak_proto/qwak/service_discovery/service_discovery_location_service_pb2_grpc.py +231 -0
  420. _qwak_proto/qwak/traffic/v1/traffic_api_pb2.py +23 -88
  421. _qwak_proto/qwak/traffic/v1/traffic_api_pb2.pyi +13 -2
  422. _qwak_proto/qwak/traffic/v1/traffic_pb2.py +27 -114
  423. _qwak_proto/qwak/traffic/v1/traffic_pb2.pyi +5 -1
  424. _qwak_proto/qwak/user_application/common/v0/resources_pb2.py +31 -132
  425. _qwak_proto/qwak/user_application/common/v0/resources_pb2.pyi +54 -0
  426. _qwak_proto/qwak/user_application/v0/user_application_pb2.py +15 -39
  427. _qwak_proto/qwak/user_application/v0/user_application_pb2.pyi +16 -0
  428. _qwak_proto/qwak/vectors/v1/collection/collection_pb2.py +25 -104
  429. _qwak_proto/qwak/vectors/v1/collection/collection_pb2.pyi +17 -1
  430. _qwak_proto/qwak/vectors/v1/collection/collection_service_pb2.py +38 -167
  431. _qwak_proto/qwak/vectors/v1/collection/event/collection_event_pb2.py +7 -15
  432. _qwak_proto/qwak/vectors/v1/collection/event/collection_event_pb2.pyi +5 -1
  433. _qwak_proto/qwak/vectors/v1/filters_pb2.py +30 -134
  434. _qwak_proto/qwak/vectors/v1/vector_pb2.py +17 -45
  435. _qwak_proto/qwak/vectors/v1/vector_pb2.pyi +25 -2
  436. _qwak_proto/qwak/vectors/v1/vector_service_pb2.py +31 -108
  437. _qwak_proto/qwak/vectors/v1/vector_service_pb2.pyi +30 -7
  438. _qwak_proto/qwak/workspace/workspace_pb2.py +23 -108
  439. _qwak_proto/qwak/workspace/workspace_pb2.pyi +10 -2
  440. _qwak_proto/qwak/workspace/workspace_service_pb2.py +63 -248
  441. _qwak_proto/qwak/workspace/workspace_service_pb2.pyi +56 -0
  442. _qwak_proto/qwak/workspace/workspace_service_pb2_grpc.py +66 -0
  443. qwak/__init__.py +2 -3
  444. qwak/automations/automation_executions.py +14 -10
  445. qwak/automations/automations.py +33 -23
  446. qwak/automations/build_and_deploy_action.py +147 -28
  447. qwak/automations/common.py +6 -0
  448. qwak/clients/administration/eco_system/client.py +2 -2
  449. qwak/clients/administration/eco_system/eco_system_utils.py +15 -0
  450. qwak/clients/administration/environment/client.py +16 -0
  451. qwak/clients/analytics/client.py +28 -3
  452. qwak/clients/batch_job_management/client.py +94 -3
  453. qwak/clients/batch_job_management/executions_config.py +18 -0
  454. qwak/clients/build_orchestrator/build_model_request_getter.py +3 -0
  455. qwak/clients/build_orchestrator/client.py +155 -12
  456. qwak/clients/data_versioning/client.py +19 -1
  457. qwak/clients/data_versioning/data_tag_filter.py +32 -0
  458. qwak/clients/deployment/client.py +14 -0
  459. qwak/clients/feature_store/execution_management_client.py +28 -0
  460. qwak/clients/feature_store/management_client.py +203 -146
  461. qwak/clients/feature_store/offline_serving_client.py +251 -0
  462. qwak/clients/feature_store/operator_client.py +21 -4
  463. qwak/clients/file_versioning/client.py +19 -1
  464. qwak/clients/file_versioning/file_tag_filter.py +32 -0
  465. qwak/clients/instance_template/client.py +11 -10
  466. qwak/clients/integration_management/integration_manager_client.py +34 -0
  467. qwak/clients/integration_management/integration_utils.py +27 -0
  468. qwak/clients/integration_management/openai/openai_system_secret.py +56 -0
  469. qwak/clients/kube_deployment_captain/client.py +3 -1
  470. qwak/clients/location_discovery/__init__.py +1 -0
  471. qwak/clients/location_discovery/client.py +73 -0
  472. qwak/clients/logging_client/client.py +13 -18
  473. qwak/clients/model_management/client.py +7 -2
  474. qwak/clients/project/client.py +7 -2
  475. qwak/clients/prompt_manager/__init__.py +0 -0
  476. qwak/clients/prompt_manager/model_descriptor_mapper.py +183 -0
  477. qwak/clients/prompt_manager/prompt_manager_client.py +167 -0
  478. qwak/clients/prompt_manager/prompt_proto_mapper.py +236 -0
  479. qwak/clients/secret_service/client.py +8 -3
  480. qwak/clients/system_secret/__init__.py +0 -0
  481. qwak/clients/system_secret/system_secret_client.py +30 -0
  482. qwak/clients/vector_store/management_client.py +2 -0
  483. qwak/clients/vector_store/serving_client.py +64 -18
  484. qwak/clients/workspace_manager/client.py +15 -0
  485. qwak/exceptions/__init__.py +7 -0
  486. qwak/exceptions/qwak_decode_exception.py +7 -0
  487. qwak/exceptions/qwak_exception.py +2 -1
  488. qwak/exceptions/qwak_external_exception.py +11 -0
  489. qwak/exceptions/qwak_general_build_exception.py +13 -0
  490. qwak/exceptions/qwak_grpc_address_exception.py +9 -0
  491. qwak/exceptions/qwak_load_configuration_exception.py +2 -0
  492. qwak/exceptions/qwak_remote_build_failed.py +5 -0
  493. qwak/exceptions/qwak_suggestion_exception.py +27 -0
  494. qwak/feature_store/_common/artifact_utils.py +59 -0
  495. qwak/feature_store/_common/feature_set_utils.py +142 -19
  496. qwak/feature_store/_common/functions.py +0 -43
  497. qwak/feature_store/_common/packaging.py +262 -0
  498. qwak/feature_store/_common/source_code_spec.py +108 -0
  499. qwak/feature_store/_common/source_code_spec_factory.py +104 -0
  500. qwak/feature_store/_common/value.py +10 -0
  501. qwak/feature_store/data_sources/__init__.py +53 -17
  502. qwak/feature_store/data_sources/attributes.py +23 -0
  503. qwak/feature_store/data_sources/base.py +125 -0
  504. qwak/feature_store/data_sources/batch/__init__.py +0 -0
  505. qwak/feature_store/data_sources/batch/_batch.py +9 -0
  506. qwak/feature_store/data_sources/{batch_sources → batch}/_jdbc.py +2 -1
  507. qwak/feature_store/data_sources/batch/athena.py +260 -0
  508. qwak/feature_store/data_sources/{batch_sources → batch}/big_query.py +5 -5
  509. qwak/feature_store/data_sources/batch/clickhouse.py +60 -0
  510. qwak/feature_store/data_sources/{batch_sources → batch}/csv.py +9 -5
  511. qwak/feature_store/data_sources/{batch_sources → batch}/elastic_search.py +5 -5
  512. qwak/feature_store/data_sources/batch/filesystem/__init__.py +0 -0
  513. qwak/feature_store/data_sources/{batch_sources/filesystem_config.py → batch/filesystem/aws.py} +30 -38
  514. qwak/feature_store/data_sources/batch/filesystem/base_config.py +13 -0
  515. qwak/feature_store/data_sources/batch/filesystem/gcp.py +50 -0
  516. qwak/feature_store/data_sources/batch/filesystem/utils.py +51 -0
  517. qwak/feature_store/data_sources/{batch_sources → batch}/mongodb.py +6 -5
  518. qwak/feature_store/data_sources/{batch_sources → batch}/mysql.py +5 -7
  519. qwak/feature_store/data_sources/{batch_sources → batch}/parquet.py +10 -7
  520. qwak/feature_store/data_sources/{batch_sources → batch}/postgres.py +5 -7
  521. qwak/feature_store/data_sources/{batch_sources → batch}/redshift.py +6 -7
  522. qwak/feature_store/data_sources/{batch_sources → batch}/snowflake.py +39 -13
  523. qwak/feature_store/data_sources/batch/unity_catalog.py +107 -0
  524. qwak/feature_store/data_sources/{batch_sources → batch}/vertica.py +6 -5
  525. qwak/feature_store/data_sources/source_authentication.py +33 -0
  526. qwak/feature_store/data_sources/streaming/__init__.py +0 -0
  527. qwak/feature_store/data_sources/streaming/_streaming.py +9 -0
  528. qwak/feature_store/data_sources/streaming/kafka/__init__.py +25 -0
  529. qwak/feature_store/data_sources/streaming/kafka/authentication.py +120 -0
  530. qwak/feature_store/data_sources/streaming/kafka/deserialization.py +109 -0
  531. qwak/feature_store/data_sources/streaming/kafka/kafka.py +120 -0
  532. qwak/feature_store/data_sources/time_partition_columns.py +166 -0
  533. qwak/feature_store/entities/entity.py +17 -4
  534. qwak/feature_store/execution/backfill.py +8 -2
  535. qwak/feature_store/execution/streaming_backfill.py +48 -0
  536. qwak/feature_store/feature_sets/_utils/_featureset_utils.py +45 -0
  537. qwak/feature_store/feature_sets/backfill.py +13 -0
  538. qwak/feature_store/feature_sets/base_feature_set.py +148 -0
  539. qwak/feature_store/feature_sets/batch.py +142 -151
  540. qwak/feature_store/feature_sets/execution_spec.py +6 -0
  541. qwak/feature_store/feature_sets/metadata.py +51 -1
  542. qwak/feature_store/feature_sets/streaming.py +655 -0
  543. qwak/feature_store/feature_sets/streaming_backfill.py +223 -0
  544. qwak/feature_store/feature_sets/transformations/__init__.py +33 -0
  545. qwak/feature_store/feature_sets/transformations/aggregations/__init__.py +0 -0
  546. qwak/feature_store/feature_sets/transformations/aggregations/aggregations.py +425 -0
  547. qwak/feature_store/feature_sets/transformations/aggregations/windows.py +70 -0
  548. qwak/feature_store/feature_sets/transformations/functions/__init__.py +10 -0
  549. qwak/feature_store/feature_sets/transformations/functions/qwak_pandas.py +64 -0
  550. qwak/feature_store/feature_sets/transformations/functions/schema.py +57 -0
  551. qwak/feature_store/feature_sets/transformations/transformations.py +451 -0
  552. qwak/feature_store/feature_sets/transformations/validations/validations_util.py +78 -0
  553. qwak/feature_store/offline/__init__.py +2 -2
  554. qwak/feature_store/offline/_offline_serving_validations.py +31 -0
  555. qwak/feature_store/offline/client_v2.py +327 -0
  556. qwak/feature_store/offline/feature_set_features.py +25 -0
  557. qwak/feature_store/online/client.py +152 -46
  558. qwak/feature_store/online/endpoint_utils.py +63 -0
  559. qwak/feature_store/sinks/__init__.py +0 -0
  560. qwak/feature_store/sinks/base.py +18 -0
  561. qwak/feature_store/sinks/kafka.py +59 -0
  562. qwak/feature_store/sinks/streaming/__init__.py +0 -0
  563. qwak/feature_store/sinks/streaming/attachment.py +30 -0
  564. qwak/feature_store/sinks/streaming/factory.py +60 -0
  565. qwak/feature_store/validations/__init__.py +0 -0
  566. qwak/feature_store/validations/validation_decorators.py +70 -0
  567. qwak/feature_store/validations/validation_options.py +77 -0
  568. qwak/feature_store/validations/validation_response.py +119 -0
  569. qwak/feature_store/validations/validator.py +114 -0
  570. qwak/inner/build_config/__init__.py +0 -0
  571. qwak/inner/build_config/build_config_v1.py +311 -0
  572. qwak/inner/build_logic/__init__.py +0 -0
  573. qwak/inner/build_logic/build_loggers/__init__.py +0 -0
  574. qwak/inner/build_logic/build_loggers/trigger_build_logger.py +51 -0
  575. qwak/inner/build_logic/constants/__init__.py +0 -0
  576. qwak/inner/build_logic/constants/dependencies.py +5 -0
  577. qwak/inner/build_logic/constants/host_resource.py +4 -0
  578. qwak/inner/build_logic/constants/messages.py +3 -0
  579. qwak/inner/build_logic/constants/temp_dir.py +1 -0
  580. qwak/inner/build_logic/constants/upload_tag.py +7 -0
  581. qwak/inner/build_logic/dependency_manager_type.py +8 -0
  582. qwak/inner/build_logic/execute_build_pipeline.py +62 -0
  583. qwak/inner/build_logic/interface/__init__.py +0 -0
  584. qwak/inner/build_logic/interface/build_logger_interface.py +28 -0
  585. qwak/inner/build_logic/interface/build_phase.py +24 -0
  586. qwak/inner/build_logic/interface/context_interface.py +66 -0
  587. qwak/inner/build_logic/interface/phase_run_handler.py +71 -0
  588. qwak/inner/build_logic/interface/step_inteface.py +26 -0
  589. qwak/inner/build_logic/interface/time_source.py +23 -0
  590. qwak/inner/build_logic/phases/__init__.py +0 -0
  591. qwak/inner/build_logic/phases/phase_010_fetch_model/__init__.py +0 -0
  592. qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_model_step.py +43 -0
  593. qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/__init__.py +0 -0
  594. qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/common.py +32 -0
  595. qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/fetch_strategy_manager.py +62 -0
  596. qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/__init__.py +0 -0
  597. qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/folder/__init__.py +0 -0
  598. qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/folder/folder_strategy.py +131 -0
  599. qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/git/__init__.py +0 -0
  600. qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/git/git_strategy.py +186 -0
  601. qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/strategy.py +48 -0
  602. qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/zip/__init__.py +0 -0
  603. qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/zip/zip_strategy.py +64 -0
  604. qwak/inner/build_logic/phases/phase_010_fetch_model/post_fetch_validation_step.py +140 -0
  605. qwak/inner/build_logic/phases/phase_010_fetch_model/pre_fetch_validation_step.py +266 -0
  606. qwak/inner/build_logic/phases/phase_010_fetch_model/set_version_step.py +33 -0
  607. qwak/inner/build_logic/phases/phase_020_remote_register_qwak_build/__init__.py +0 -0
  608. qwak/inner/build_logic/phases/phase_020_remote_register_qwak_build/cleanup_step.py +20 -0
  609. qwak/inner/build_logic/phases/phase_020_remote_register_qwak_build/start_remote_build_step.py +43 -0
  610. qwak/inner/build_logic/phases/phase_020_remote_register_qwak_build/upload_step.py +258 -0
  611. qwak/inner/build_logic/phases/phases_pipeline.py +44 -0
  612. qwak/inner/build_logic/run_handlers/__init__.py +0 -0
  613. qwak/inner/build_logic/run_handlers/programmatic_phase_run_handler.py +99 -0
  614. qwak/inner/build_logic/tools/__init__.py +0 -0
  615. qwak/inner/build_logic/tools/dependencies_tools.py +68 -0
  616. qwak/inner/build_logic/tools/files.py +237 -0
  617. qwak/inner/build_logic/tools/ignore_files.py +20 -0
  618. qwak/inner/build_logic/tools/text.py +9 -0
  619. qwak/inner/build_logic/trigger_build_context.py +10 -0
  620. qwak/inner/const.py +2 -4
  621. qwak/inner/di_configuration/__init__.py +1 -63
  622. qwak/inner/di_configuration/account.py +32 -15
  623. qwak/inner/di_configuration/config.yml +2 -0
  624. qwak/inner/di_configuration/containers.py +10 -2
  625. qwak/inner/di_configuration/dependency_wiring.py +98 -0
  626. qwak/inner/di_configuration/session.py +5 -0
  627. qwak/inner/instance_template/__init__.py +0 -0
  628. qwak/inner/instance_template/verify_template_id.py +48 -0
  629. qwak/inner/model_loggers_utils.py +10 -7
  630. qwak/inner/provider.py +6 -0
  631. qwak/inner/tool/auth.py +42 -7
  632. qwak/inner/tool/grpc/grpc_auth.py +27 -8
  633. qwak/inner/tool/grpc/grpc_tools.py +124 -4
  634. qwak/inner/tool/grpc/grpc_try_wrapping.py +139 -4
  635. qwak/inner/tool/protobuf_factory.py +45 -0
  636. qwak/inner/tool/run_config/__init__.py +2 -0
  637. qwak/inner/tool/run_config/base.py +32 -7
  638. qwak/inner/tool/run_config/utils.py +66 -1
  639. qwak/llmops/__init__.py +0 -0
  640. qwak/llmops/generation/__init__.py +0 -0
  641. qwak/llmops/generation/_steaming.py +77 -0
  642. qwak/llmops/generation/base.py +5 -0
  643. qwak/llmops/generation/chat/__init__.py +0 -0
  644. qwak/llmops/generation/chat/openai/LICENSE.txt +201 -0
  645. qwak/llmops/generation/chat/openai/types/__init__.py +0 -0
  646. qwak/llmops/generation/chat/openai/types/chat/__init__.py +0 -0
  647. qwak/llmops/generation/chat/openai/types/chat/chat_completion.py +105 -0
  648. qwak/llmops/generation/chat/openai/types/chat/chat_completion_assistant_message_param.py +65 -0
  649. qwak/llmops/generation/chat/openai/types/chat/chat_completion_chunk.py +188 -0
  650. qwak/llmops/generation/chat/openai/types/chat/chat_completion_content_part_text_param.py +28 -0
  651. qwak/llmops/generation/chat/openai/types/chat/chat_completion_function_call_option_param.py +25 -0
  652. qwak/llmops/generation/chat/openai/types/chat/chat_completion_function_message_param.py +33 -0
  653. qwak/llmops/generation/chat/openai/types/chat/chat_completion_message.py +59 -0
  654. qwak/llmops/generation/chat/openai/types/chat/chat_completion_message_param.py +34 -0
  655. qwak/llmops/generation/chat/openai/types/chat/chat_completion_message_tool_call.py +46 -0
  656. qwak/llmops/generation/chat/openai/types/chat/chat_completion_message_tool_call_param.py +44 -0
  657. qwak/llmops/generation/chat/openai/types/chat/chat_completion_named_tool_choice_param.py +32 -0
  658. qwak/llmops/generation/chat/openai/types/chat/chat_completion_role.py +20 -0
  659. qwak/llmops/generation/chat/openai/types/chat/chat_completion_system_message_param.py +35 -0
  660. qwak/llmops/generation/chat/openai/types/chat/chat_completion_token_logprob.py +71 -0
  661. qwak/llmops/generation/chat/openai/types/chat/chat_completion_tool_choice_option_param.py +28 -0
  662. qwak/llmops/generation/chat/openai/types/chat/chat_completion_tool_message_param.py +31 -0
  663. qwak/llmops/generation/chat/openai/types/chat/chat_completion_tool_param.py +29 -0
  664. qwak/llmops/generation/chat/openai/types/chat/chat_completion_user_message_param.py +35 -0
  665. qwak/llmops/generation/chat/openai/types/chat/completion_create_params.py +279 -0
  666. qwak/llmops/generation/chat/openai/types/completion_choice.py +47 -0
  667. qwak/llmops/generation/chat/openai/types/completion_create_params.py +209 -0
  668. qwak/llmops/generation/chat/openai/types/completion_usage.py +30 -0
  669. qwak/llmops/generation/chat/openai/types/model.py +35 -0
  670. qwak/llmops/generation/chat/openai/types/shared/__init__.py +3 -0
  671. qwak/llmops/generation/chat/openai/types/shared/error_object.py +27 -0
  672. qwak/llmops/generation/chat/openai/types/shared/function_definition.py +49 -0
  673. qwak/llmops/generation/chat/openai/types/shared/function_parameters.py +20 -0
  674. qwak/llmops/generation/chat/openai/types/shared_params/__init__.py +2 -0
  675. qwak/llmops/generation/chat/openai/types/shared_params/function_definition.py +49 -0
  676. qwak/llmops/generation/chat/openai/types/shared_params/function_parameters.py +22 -0
  677. qwak/llmops/generation/streaming.py +26 -0
  678. qwak/llmops/model/__init__.py +0 -0
  679. qwak/llmops/model/descriptor.py +39 -0
  680. qwak/llmops/prompt/__init__.py +0 -0
  681. qwak/llmops/prompt/base.py +133 -0
  682. qwak/llmops/prompt/chat/__init__.py +0 -0
  683. qwak/llmops/prompt/chat/message.py +24 -0
  684. qwak/llmops/prompt/chat/template.py +113 -0
  685. qwak/llmops/prompt/chat/value.py +10 -0
  686. qwak/llmops/prompt/manager.py +134 -0
  687. qwak/llmops/prompt/template.py +24 -0
  688. qwak/llmops/prompt/value.py +14 -0
  689. qwak/llmops/provider/__init__.py +0 -0
  690. qwak/llmops/provider/chat.py +42 -0
  691. qwak/llmops/provider/openai/__init__.py +0 -0
  692. qwak/llmops/provider/openai/client.py +123 -0
  693. qwak/llmops/provider/openai/provider.py +89 -0
  694. qwak/model/_entity_extraction.py +40 -46
  695. qwak/model/adapters/input_adapters/multi_input_adapter.py +17 -1
  696. qwak/model/base.py +1 -1
  697. qwak/model/decorators/api.py +3 -1
  698. qwak/model/decorators/impl/api_implementation.py +1 -0
  699. qwak/model/fs_info_mapping_retriever.py +58 -0
  700. qwak/model/schema.py +1 -1
  701. qwak/model/schema_entities.py +1 -1
  702. qwak/model/tools/__init__.py +1 -1
  703. qwak/model/tools/adapters/input_adapters/dataframe_input.py +1 -1
  704. qwak/model/tools/adapters/output.py +1 -1
  705. qwak/model/tools/run_model_locally.py +15 -3
  706. qwak/model/utils/feature_utils.py +69 -0
  707. qwak/model_loggers/artifact_logger.py +46 -9
  708. qwak/model_loggers/data_logger.py +16 -2
  709. qwak/qwak_client/batch_jobs/execution.py +49 -0
  710. qwak/qwak_client/batch_jobs/task.py +43 -0
  711. qwak/qwak_client/build_api_helpers/__init__.py +0 -0
  712. qwak/qwak_client/build_api_helpers/build_api_steps.py +53 -0
  713. qwak/qwak_client/build_api_helpers/messages.py +6 -0
  714. qwak/qwak_client/build_api_helpers/trigger_build_api.py +65 -0
  715. qwak/qwak_client/client.py +276 -24
  716. qwak/qwak_client/data_versioning/__init__.py +0 -0
  717. qwak/qwak_client/data_versioning/data_tag.py +24 -0
  718. qwak/qwak_client/deployments/deployment.py +11 -9
  719. qwak/qwak_client/file_versioning/__init__.py +0 -0
  720. qwak/qwak_client/file_versioning/file_tag.py +24 -0
  721. qwak/qwak_client/projects/project.py +4 -2
  722. qwak/tools/logger/logger.py +1 -1
  723. qwak/utils/__init__.py +0 -0
  724. qwak/utils/datetime_utils.py +18 -0
  725. qwak/utils/dict_utils.py +12 -0
  726. qwak/vector_store/client.py +8 -0
  727. qwak/vector_store/collection.py +173 -73
  728. qwak/vector_store/inference_client.py +30 -2
  729. qwak/vector_store/rest_helpers.py +13 -21
  730. qwak/vector_store/utils/filter_utils.py +4 -17
  731. qwak/vector_store/utils/upsert_utils.py +217 -0
  732. {qwak_core-0.1.37.dist-info → qwak_core-0.5.19.dist-info}/METADATA +20 -15
  733. qwak_core-0.5.19.dist-info/RECORD +1100 -0
  734. {qwak_core-0.1.37.dist-info → qwak_core-0.5.19.dist-info}/WHEEL +1 -1
  735. qwak_services_mock/mocks/authentication_service.py +5 -4
  736. qwak_services_mock/mocks/batch_job_manager_service.py +53 -6
  737. qwak_services_mock/mocks/build_orchestrator_build_api.py +18 -1
  738. qwak_services_mock/mocks/build_orchestrator_build_settings_api.py +35 -0
  739. qwak_services_mock/mocks/build_orchestrator_service_api.py +4 -0
  740. qwak_services_mock/mocks/data_versioning_service.py +26 -2
  741. qwak_services_mock/mocks/deployment_management_service.py +46 -18
  742. qwak_services_mock/mocks/ecosystem_service_api.py +0 -1
  743. qwak_services_mock/mocks/execution_management_service.py +9 -1
  744. qwak_services_mock/mocks/feature_store_data_sources_manager_api.py +98 -2
  745. qwak_services_mock/mocks/feature_store_entities_manager_api.py +46 -3
  746. qwak_services_mock/mocks/feature_store_feature_set_manager_api.py +197 -21
  747. qwak_services_mock/mocks/features_online_serving_api.py +9 -0
  748. qwak_services_mock/mocks/features_operator_v3_service.py +20 -0
  749. qwak_services_mock/mocks/features_set_state_service_api.py +0 -1
  750. qwak_services_mock/mocks/file_versioning_service.py +29 -2
  751. qwak_services_mock/mocks/fs_offline_serving_service.py +53 -0
  752. qwak_services_mock/mocks/instance_template_management_service.py +35 -1
  753. qwak_services_mock/mocks/integration_management_service.py +72 -0
  754. qwak_services_mock/mocks/location_discovery_service_api.py +104 -0
  755. qwak_services_mock/mocks/model_management_service.py +11 -5
  756. qwak_services_mock/mocks/prompt_manager_service.py +244 -0
  757. qwak_services_mock/mocks/qwak_mocks.py +20 -2
  758. qwak_services_mock/mocks/system_secret_service.py +54 -0
  759. qwak_services_mock/mocks/vector_serving_api.py +44 -8
  760. qwak_services_mock/mocks/workspace_manager_service_mock.py +24 -8
  761. qwak_services_mock/services_mock.py +78 -12
  762. _qwak_proto/qwak/fitness_service/fitness_service_pb2.py +0 -110
  763. _qwak_proto/qwak/fitness_service/fitness_service_pb2.pyi +0 -121
  764. _qwak_proto/qwak/fitness_service/fitness_service_pb2_grpc.py +0 -169
  765. qwak/clients/build_management/__init__.py +0 -1
  766. qwak/clients/build_management/client.py +0 -114
  767. qwak/feature_store/_common/featureset_asterisk_handler.py +0 -115
  768. qwak/feature_store/data_sources/batch_sources/__init__.py +0 -6
  769. qwak/feature_store/data_sources/batch_sources/_batch.py +0 -86
  770. qwak/feature_store/feature_sets/transformations.py +0 -48
  771. qwak/feature_store/offline/_query_engine.py +0 -32
  772. qwak/feature_store/offline/athena/athena_query_engine.py +0 -153
  773. qwak/feature_store/offline/client.py +0 -699
  774. qwak/feature_store/validation_options.py +0 -69
  775. qwak_core-0.1.37.dist-info/RECORD +0 -682
  776. qwak_services_mock/mocks/build_management.py +0 -100
  777. {_qwak_proto → qwak/clients/integration_management}/__init__.py +0 -0
  778. /qwak/{feature_store/offline/athena → clients/integration_management/openai}/__init__.py +0 -0
@@ -0,0 +1,655 @@
1
+ import collections
2
+ import functools
3
+ import inspect
4
+ from dataclasses import dataclass, field
5
+ from datetime import datetime, timezone
6
+ from typing import TYPE_CHECKING, List, Optional, Tuple, Union
7
+
8
+ from _qwak_proto.qwak.feature_store.features.execution_pb2 import (
9
+ StreamingExecutionSpec as ProtoStreamingExecutionSpec,
10
+ )
11
+ from _qwak_proto.qwak.feature_store.features.feature_set_pb2 import (
12
+ FeatureSetSpec as ProtoFeatureSetSpec,
13
+ )
14
+ from _qwak_proto.qwak.feature_store.features.feature_set_types_pb2 import (
15
+ AggregationSpec as ProtoAggregationSpec,
16
+ FeatureSetType as ProtoFeatureSetType,
17
+ StreamingAggregationFeatureSet as ProtoStreamingAggregationFeatureSet,
18
+ StreamingFeatureSetV1 as ProtoStreamingFeatureSetV1,
19
+ )
20
+ from _qwak_proto.qwak.feature_store.sources.streaming_pb2 import (
21
+ StreamingSource,
22
+ StreamingSource as ProtoStreamingSource,
23
+ )
24
+ from google.protobuf.timestamp_pb2 import Timestamp as ProtoTimestamp
25
+ from qwak.clients.feature_store import FeatureRegistryClient
26
+ from qwak.exceptions import QwakException
27
+ from qwak.feature_store._common.artifact_utils import ArtifactSpec, ArtifactsUploader
28
+ from qwak.feature_store.entities.entity import Entity
29
+ from qwak.feature_store.feature_sets._utils._featureset_utils import FeaturesetUtils
30
+ from qwak.feature_store.feature_sets.base_feature_set import BaseFeatureSet
31
+ from qwak.feature_store.feature_sets.execution_spec import ClusterTemplate
32
+ from qwak.feature_store.feature_sets.metadata import (
33
+ Metadata,
34
+ get_metadata_from_function,
35
+ set_metadata_on_function,
36
+ )
37
+ from qwak.feature_store.feature_sets.streaming_backfill import (
38
+ BackfillDataSource,
39
+ StreamingBackfill,
40
+ )
41
+ from qwak.feature_store.feature_sets.transformations import (
42
+ BaseTransformation,
43
+ PySparkTransformation,
44
+ SparkSqlTransformation,
45
+ Window,
46
+ )
47
+ from qwak.feature_store.sinks.base import BaseSink
48
+ from qwak.feature_store.sinks.streaming.factory import StreamingSinkFactory
49
+ from qwak.feature_store.validations.validation_options import (
50
+ FeatureSetValidationOptions,
51
+ )
52
+ from typeguard import typechecked
53
+
54
+ if TYPE_CHECKING:
55
+ try:
56
+ import pandas as pd
57
+ except ImportError:
58
+ pass
59
+
60
+ _OFFLINE_SCHEDULING_ATTRIBUTE = "_qwak_offline_scheduling"
61
+ _OFFLINE_CLUSTER_SPEC = "_qwak_offline_cluster_specification"
62
+ _ONLINE_TRIGGER_INTERVAL = "_qwak_online_trigger_interval"
63
+ _ONLINE_CLUSTER_SPEC = "_qwak_online_cluster_specification"
64
+ _METADATA_ = "_qwak_online_cluster_specification"
65
+
66
+
67
+ @typechecked
68
+ def feature_set(
69
+ *,
70
+ data_sources: List[str],
71
+ timestamp_column_name: str,
72
+ offline_scheduling_policy: Optional[str] = "*/30 * * * *",
73
+ online_trigger_interval: Optional[int] = 5,
74
+ name: Optional[str] = None,
75
+ entity: Optional[str] = None,
76
+ key: Optional[str] = None,
77
+ auxiliary_sinks: List[BaseSink] = [],
78
+ repository: Optional[str] = None,
79
+ backfill_max_timestamp: Optional[datetime] = None,
80
+ ):
81
+ """
82
+ Creates a streaming feature set for the specified entity using the given streaming data sources.
83
+
84
+ A streaming feature set allows for real-time updates of features from live data sources, letting ML models access
85
+ the most recent values without waiting for batch updates.
86
+
87
+ :param entity: The name of the entity for which the feature set is being created. An entity typically represents a
88
+ unique object or concept, like 'user', 'product', etc. Entity and key are mutually exclusive.
89
+ :param key: a column name in the feature set which is the key. Entity and key are mutually exclusive.
90
+ :param data_sources: A list of references to the data sources from which the feature values will be streamed.
91
+ Each data source should be capable of providing data in a streaming manner.
92
+ :param timestamp_column_name: The name of the column in the data source that contains timestamp information. This
93
+ is used to order the data chronologically and ensure that the feature values are
94
+ updated in the correct order.
95
+ :param offline_scheduling_policy: Defines the offline ingestion policy - which affects the data freshness of
96
+ the offline store. defaults to */30 * * * * (every 30 minutes)
97
+ :param online_trigger_interval: Defines the online ingestion policy - which affects the data freshness of
98
+ the online store. defaults to 5 seconds
99
+ :param name: An optional name for the feature set. If not provided, the name of the function will be used.
100
+ :param auxiliary_sinks: list of auxiliary sinks. Not supported with Aggregations
101
+ Example:
102
+
103
+ ... code-block:: python
104
+
105
+ @streaming.feature_set(
106
+ entity="users",
107
+ data_sources=["users_registration_stream"],
108
+ timestamp_column_name="reg_date"
109
+ )
110
+ def user_streaming_features():
111
+ return SparkSqlTransformation("SELECT user_id, reg_country, reg_date FROM data_source")
112
+ """
113
+
114
+ def decorator(function):
115
+ if isinstance(function, StreamingBackfill):
116
+ raise QwakException(
117
+ "Backfill can no longer be defined as a decorator on the feature set, it must be triggered after feature set creation."
118
+ )
119
+
120
+ user_transformation = function()
121
+ FeaturesetUtils.validate_base_featureset_decorator(
122
+ user_transformation=user_transformation, entity=entity, key=key
123
+ )
124
+
125
+ FeaturesetUtils.validate_streaming_featureset_decorator(
126
+ online_trigger_interval=online_trigger_interval,
127
+ offline_scheduling_policy=offline_scheduling_policy,
128
+ )
129
+
130
+ fs_name = name or function.__name__
131
+ streaming_feature_set = StreamingFeatureSet(
132
+ name=fs_name,
133
+ entity=entity if entity else None,
134
+ key=key if key else None,
135
+ repository=repository,
136
+ data_sources=data_sources,
137
+ timestamp_column_name=timestamp_column_name,
138
+ transformation=user_transformation,
139
+ metadata=get_metadata_from_function(
140
+ function, description=fs_name, display_name=fs_name
141
+ ),
142
+ online_trigger_interval=(
143
+ online_trigger_interval if online_trigger_interval else 5
144
+ ),
145
+ offline_scheduling_policy=(
146
+ offline_scheduling_policy
147
+ if offline_scheduling_policy
148
+ else "*/30 * * * *"
149
+ ),
150
+ offline_cluster_template=getattr(
151
+ function, _OFFLINE_CLUSTER_SPEC, ClusterTemplate.SMALL
152
+ ),
153
+ online_cluster_template=getattr(
154
+ function, _ONLINE_CLUSTER_SPEC, ClusterTemplate.SMALL
155
+ ),
156
+ backfill_max_timestamp=backfill_max_timestamp,
157
+ __instance_module_path__=inspect.stack()[1].filename,
158
+ auxiliary_sinks=auxiliary_sinks,
159
+ )
160
+
161
+ functools.update_wrapper(streaming_feature_set, user_transformation)
162
+ return streaming_feature_set
163
+
164
+ return decorator
165
+
166
+
167
+ @typechecked
168
+ def execution_specification(
169
+ *,
170
+ online_cluster_template: Optional[ClusterTemplate] = None,
171
+ offline_cluster_template: Optional[ClusterTemplate] = None,
172
+ ):
173
+ """
174
+ Set the execution specification of the cluster running the feature set
175
+
176
+ :param online_cluster_template: Predefined template sizes
177
+ :param offline_cluster_template: Predefined template sizes
178
+
179
+ Cluster template example:
180
+
181
+ ... code-block:: python
182
+ @streaming.feature_set(entity="users", data_sources=["streaming_users_source"])
183
+ @streaming.execution_specification(
184
+ offline_cluster_template=ClusterTemplate.MEDIUM,
185
+ online_cluster_template=ClusterTemplate.MEDIUM)
186
+ def user_streaming_features():
187
+ return SparkSqlTransformation("SELECT user_id, age, timestamp FROM streaming_users_source"
188
+ """
189
+
190
+ def decorator(user_transformation):
191
+ setattr(user_transformation, _ONLINE_CLUSTER_SPEC, online_cluster_template)
192
+
193
+ setattr(user_transformation, _OFFLINE_CLUSTER_SPEC, offline_cluster_template)
194
+
195
+ return user_transformation
196
+
197
+ return decorator
198
+
199
+
200
+ @typechecked
201
+ def backfill(
202
+ *,
203
+ feature_set_name: str,
204
+ start_date: Optional[datetime],
205
+ end_date: Optional[datetime],
206
+ data_sources: Union[List[str], List[BackfillDataSource]],
207
+ backfill_cluster_template: Optional[ClusterTemplate] = ClusterTemplate.SMALL,
208
+ ):
209
+ """
210
+ Triggers a backfill execution for an existing streaming featureset. Currently available for streaming
211
+ aggregation featuresets only.
212
+
213
+ Args:
214
+ feature_set_name (str): Name of the FeatureSet to trigger a backfill for.
215
+ start_date (datetime): Backfill start date, on Streaming Aggregation Feature Sets,
216
+ needs to align with the FeatureSet tiles.
217
+ end_date (datetime): Backfill end date, on Streaming Aggregation Feature Sets,
218
+ needs to align with the FeatureSet tiles and be smaller than the Feature Set's backfill_max_timestamp.
219
+ data_sources (list[BackfillDataSource] | list[str]): A list of BackfillDataSource objects containing
220
+ batch source name and optional time range, or a list of batch source names (with no time range limits).
221
+ backfill_cluster_template (ClusterTemplate, optional): An optional cluster specification for the backfill job.
222
+ Defaults to SMALL.
223
+
224
+ Examples:
225
+ @streaming.backfill(
226
+ feature_set_name="user_streaming_agg_features",
227
+ start_date=datetime(2022,1,1,0,0,0),
228
+ end_date=datetime(2023,9,1,0,0,0),
229
+ data_sources=[BackfillDataSource(data_source_name="backfill_data_source",
230
+ start_datetime=datetime(2023,1,1,0,0,0),
231
+ end_datetime=datetime(2023,8,1,0,0,0))],
232
+ backfill_cluster_template=ClusterTemplate.SMALL
233
+ )
234
+ def backfill_transformation():
235
+ return SparkSqlTransformation("SELECT user_id, reg_country, reg_date FROM backfill_data_source")
236
+ """
237
+
238
+ def decorator(function):
239
+ if isinstance(function, StreamingFeatureSet):
240
+ raise QwakException(
241
+ "Backfill can no longer be defined as a decorator on the feature set, it must be triggered after feature set creation."
242
+ )
243
+
244
+ backfill_transformation: SparkSqlTransformation = function()
245
+
246
+ if not isinstance(backfill_transformation, SparkSqlTransformation):
247
+ raise QwakException(
248
+ "Backfill must defined on a method returning a SparkSqlTransformation"
249
+ )
250
+
251
+ streaming_backfill = StreamingBackfill(
252
+ featureset_name=feature_set_name,
253
+ start_datetime=start_date,
254
+ end_datetime=end_date,
255
+ data_sources=StreamingBackfill._get_normalized_backfill_sources_spec(
256
+ data_sources
257
+ ),
258
+ transform=backfill_transformation,
259
+ cluster_template=backfill_cluster_template,
260
+ )
261
+
262
+ functools.update_wrapper(streaming_backfill, backfill_transformation)
263
+
264
+ return streaming_backfill
265
+
266
+ return decorator
267
+
268
+
269
+ @typechecked
270
+ def metadata(
271
+ *,
272
+ owner: Optional[str] = None,
273
+ description: Optional[str] = None,
274
+ display_name: Optional[str] = None,
275
+ version_comment: Optional[str] = None,
276
+ ):
277
+ """
278
+ Sets additional user provided metadata
279
+
280
+ :param owner: feature set owner
281
+ :param description: General description of the feature set
282
+ :param display_name: Human readable name of the feature set
283
+ :param version_comment: Comment which describes the version
284
+
285
+ Example:
286
+
287
+ ... code-block:: python
288
+
289
+ @streaming.feature_set(
290
+ entity="users",
291
+ data_sources=["users_registration_stream"],
292
+ timestamp_column_name="reg_date"
293
+ )
294
+ @streaming.metadata(
295
+ owner="datainfra@qwak.com",
296
+ display_name="User Streaming Features",
297
+ description="Users feature from the Kafka topic of users registration stream",
298
+ )
299
+ def user_streaming_features():
300
+ return SparkSqlTransformation("SELECT user_id, reg_country, reg_date FROM data_source")
301
+
302
+ """
303
+
304
+ def decorator(function):
305
+ _validate_decorator_ordering(function)
306
+ set_metadata_on_function(
307
+ function=function,
308
+ owner=owner,
309
+ description=description,
310
+ display_name=display_name,
311
+ version_comment=version_comment,
312
+ )
313
+
314
+ return function
315
+
316
+ return decorator
317
+
318
+
319
+ def _validate_decorator_ordering(function):
320
+ if isinstance(function, StreamingFeatureSet):
321
+ raise ValueError(
322
+ "Wrong decorator ordering - @streaming.feature_set should be the top most decorator"
323
+ )
324
+
325
+
326
+ @dataclass
327
+ class StreamingFeatureSet(BaseFeatureSet):
328
+ timestamp_column_name: str = str()
329
+ online_trigger_interval: int = int()
330
+ offline_scheduling_policy: str = str()
331
+ transformation: Optional[BaseTransformation] = None
332
+ offline_cluster_template: Optional[ClusterTemplate] = None
333
+ online_cluster_template: Optional[ClusterTemplate] = None
334
+ metadata: Optional[Metadata] = None
335
+ backfill_max_timestamp: Optional[datetime] = None
336
+ auxiliary_sinks: List[BaseSink] = field(default_factory=lambda: [])
337
+
338
+ def __post_init__(self):
339
+ self._validate()
340
+
341
+ @classmethod
342
+ def _from_proto(cls, proto: ProtoFeatureSetSpec):
343
+ streaming_def: ProtoStreamingFeatureSetV1 = (
344
+ proto.feature_set_type.streaming_feature_set_v1
345
+ )
346
+
347
+ return cls(
348
+ name=proto.name,
349
+ repository=proto.featureset_repository_name,
350
+ entity=Entity._from_proto(proto.entity).name,
351
+ data_sources=[ds.name for ds in streaming_def.data_sources],
352
+ timestamp_column_name=streaming_def.timestamp_column_name,
353
+ online_trigger_interval=streaming_def.online_trigger_interval,
354
+ offline_scheduling_policy=streaming_def.offline_scheduling_policy,
355
+ transformation=BaseTransformation._from_proto(streaming_def.transformation),
356
+ offline_cluster_template=ClusterTemplate.from_cluster_template_number(
357
+ streaming_def.execution_spec.offline_cluster_template
358
+ ),
359
+ online_cluster_template=ClusterTemplate.from_cluster_template_number(
360
+ streaming_def.execution_spec.online_cluster_template
361
+ ),
362
+ metadata=Metadata.from_proto(proto.metadata),
363
+ auxiliary_sinks=[
364
+ StreamingSinkFactory.get_streaming_sink(proto)
365
+ for proto in streaming_def.auxiliary_sinks
366
+ ],
367
+ )
368
+
369
+ def _get_data_sources(
370
+ self, feature_registry: FeatureRegistryClient
371
+ ) -> List[ProtoStreamingSource]:
372
+ sources: List[ProtoStreamingSource] = list()
373
+
374
+ for name in self.data_sources:
375
+ ds = feature_registry.get_data_source_by_name(name)
376
+ if not ds:
377
+ raise QwakException(
378
+ f"Trying to register a featureset with a non existing data source {name}"
379
+ )
380
+ else:
381
+ sources.append(
382
+ ds.data_source.data_source_definition.data_source_spec.stream_source
383
+ )
384
+ return sources
385
+
386
+ def _to_proto(
387
+ self,
388
+ git_commit,
389
+ features,
390
+ feature_registry: FeatureRegistryClient,
391
+ artifact_url: Optional[str] = None,
392
+ **kwargs,
393
+ ) -> Tuple[ProtoFeatureSetSpec, Optional[str]]:
394
+ maybe_initial_tile_size: Optional[int] = self._validate_streaming_aggregation()
395
+
396
+ data_sources: List[StreamingSource] = self._get_data_sources(feature_registry)
397
+
398
+ if not artifact_url:
399
+ artifact: Optional[ArtifactSpec] = ArtifactsUploader.get_artifact_spec(
400
+ transformation=self.transformation,
401
+ featureset_name=self.name,
402
+ __instance_module_path__=self.__instance_module_path__,
403
+ )
404
+ if artifact:
405
+ artifact_url = ArtifactsUploader.upload(artifact)
406
+
407
+ proto_featureset_type: ProtoFeatureSetType
408
+ if maybe_initial_tile_size is None:
409
+ # row-level streaming
410
+ proto_featureset_type = self._get_streaming_featureset_proto(
411
+ artifact_url=artifact_url, streaming_sources=data_sources
412
+ )
413
+ else:
414
+ # streaming aggregation
415
+ proto_featureset_type = self._get_streaming_aggregation_featureset_proto(
416
+ artifact_url=artifact_url,
417
+ streaming_sources=data_sources,
418
+ initial_tile_size=maybe_initial_tile_size,
419
+ )
420
+
421
+ return (
422
+ ProtoFeatureSetSpec(
423
+ name=self.name,
424
+ metadata=self.metadata.to_proto(),
425
+ git_commit=git_commit,
426
+ features=features,
427
+ entity=self._get_entity_definition(feature_registry),
428
+ feature_set_type=proto_featureset_type,
429
+ featureset_repository_name=self.repository,
430
+ ),
431
+ artifact_url,
432
+ )
433
+
434
+ def _validate(self):
435
+ import croniter
436
+
437
+ super()._validate()
438
+
439
+ # verify offline_scheduling_policy was set
440
+ if not self.offline_scheduling_policy:
441
+ raise QwakException("'offline_scheduling_policy' field must be set")
442
+
443
+ # verify the cron expression is valid
444
+ if not croniter.croniter.is_valid(self.offline_scheduling_policy):
445
+ raise QwakException(
446
+ f"offline scheduling policy "
447
+ f"'{self.offline_scheduling_policy}'"
448
+ f" is not a valid cron expression"
449
+ )
450
+
451
+ # verify the online scheduling policy is valid
452
+ if self.online_trigger_interval < 0:
453
+ raise QwakException(
454
+ f"Value '{self.online_trigger_interval}'"
455
+ f" is not a legal online scheduling policy, "
456
+ f"only non-negative integers are allowed"
457
+ )
458
+
459
+ # verify timestamp_col_name was set
460
+ if not self.timestamp_column_name:
461
+ raise QwakException("'timestamp_col_name' field must be set")
462
+
463
+ is_streaming_agg = bool(self._validate_streaming_aggregation())
464
+
465
+ # if sinks were configured, make sure it's not streaming-agg
466
+ if len(self.auxiliary_sinks) > 0 and is_streaming_agg:
467
+ raise QwakException(
468
+ "Auxiliary Sinks Are not supported in Streaming Aggregation Feature Sets"
469
+ )
470
+
471
+ if self.backfill_max_timestamp and not is_streaming_agg:
472
+ raise QwakException(
473
+ "backfill_max_timestamp can only be set for Streaming Aggregation FeatureSet."
474
+ )
475
+
476
+ # Validate transformation is PySpark when multiple data sources are used
477
+ if len(self.data_sources) > 1 and not isinstance(
478
+ self.transformation, PySparkTransformation
479
+ ):
480
+ raise QwakException(
481
+ "When using multiple data sources, only `PySparkTransformation` is allowed."
482
+ )
483
+
484
+ def _validate_streaming_aggregation(self) -> Optional[int]:
485
+ if not (self.transformation.windows or self.transformation.aggregations):
486
+ # definitely not streaming aggregation
487
+ return None
488
+
489
+ # at least 1 window and/or at least 1 aggregate - so we need to verify
490
+ # it's a valid streaming aggregation definition
491
+ if not self.transformation.windows:
492
+ raise QwakException(
493
+ "When specifying aggregations, at least one time window must be defined"
494
+ )
495
+
496
+ if not self.transformation.aggregations:
497
+ raise QwakException(
498
+ "When specifying time windows, at least one aggregation must be defined"
499
+ )
500
+
501
+ (
502
+ initial_tile_size,
503
+ min_window,
504
+ ) = StreamingFeatureSet._get_default_slide_period(self.transformation.windows)
505
+
506
+ if initial_tile_size > max(10.0, (min_window / 10)):
507
+ raise QwakException(
508
+ "Windows with such different cardinality (For example years vs days) can't be in "
509
+ "the same feature set. Please separate to different feature sets."
510
+ )
511
+
512
+ # Validate no feature duplications exist
513
+
514
+ # Get feature names, with or without aliases
515
+ final_feature_names = self.transformation.get_features_names()
516
+
517
+ # Look for duplicated feature names
518
+ group_by_feature_name_to_count = collections.Counter(final_feature_names)
519
+ features_with_duplicates = [
520
+ feature
521
+ for feature, count in group_by_feature_name_to_count.items()
522
+ if count > 1
523
+ ]
524
+ if features_with_duplicates:
525
+ error_message_str = ""
526
+ for dup in features_with_duplicates:
527
+ error_message_str += (
528
+ f"{repr(dup)} feature, appears more than once in Aggregations.\n"
529
+ )
530
+ raise QwakException(error_message_str)
531
+
532
+ if not self.backfill_max_timestamp:
533
+ raise QwakException(
534
+ """
535
+ backfill_max_timestamp must be set for Streaming Aggregation FeatureSet.
536
+ Events earlier than this timestamp can only be processed by triggering backfill,
537
+ the Streaming job will not process events that are earlier than this timestamp.
538
+ """
539
+ )
540
+
541
+ self._validate_streaming_aggregation_backfill_max_timestamp()
542
+
543
+ return initial_tile_size
544
+
545
+ def _validate_streaming_aggregation_backfill_max_timestamp(self):
546
+ initial_tile_size, _ = StreamingFeatureSet._get_default_slide_period(
547
+ self.transformation.windows
548
+ )
549
+
550
+ if self.backfill_max_timestamp.timestamp() % initial_tile_size != 0:
551
+ raise QwakException(
552
+ f"Chosen backfill max timestamp is invalid,"
553
+ f" it has to be exactly dividable by slice size of {initial_tile_size} seconds."
554
+ )
555
+
556
+ @staticmethod
557
+ def _get_default_slide_period(
558
+ windows: List[Window], minimum_time_window_seconds: int = 10
559
+ ):
560
+ """
561
+ Tile size is the max between the `minimum_time_window_seconds`,
562
+ and the round down of the max window size divided by 2048.
563
+ By dividing by 2048 we promise that the max aggregation time contains
564
+ up to 2048 different tiles, which limit the amount of keys that exists in the Online Store.
565
+ :param windows:
566
+ :param minimum_time_window_seconds:
567
+ :return: tuple of tile size and the minimum window size seconds
568
+ """
569
+ time_windows_in_seconds = [w.length * w.seconds_in_time_unit for w in windows]
570
+ max_window = max(time_windows_in_seconds)
571
+ min_window = min(time_windows_in_seconds)
572
+
573
+ if min_window < minimum_time_window_seconds:
574
+ raise QwakException(
575
+ f"The minimum time window is {minimum_time_window_seconds} seconds"
576
+ )
577
+
578
+ def round(k):
579
+ return k - (k % minimum_time_window_seconds)
580
+
581
+ initial_tile_size = round(max((max_window / 2048), minimum_time_window_seconds))
582
+
583
+ return int(initial_tile_size), min_window
584
+
585
+ def get_sample(
586
+ self,
587
+ number_of_rows: int = 10,
588
+ validation_options: Optional[FeatureSetValidationOptions] = None,
589
+ ) -> "pd.DataFrame":
590
+ return super().get_sample(
591
+ number_of_rows=number_of_rows, validation_options=validation_options
592
+ )
593
+
594
+ def _get_streaming_featureset_proto(
595
+ self, artifact_url: Optional[str], streaming_sources: List[StreamingSource]
596
+ ) -> ProtoFeatureSetType:
597
+ return ProtoFeatureSetType(
598
+ streaming_feature_set_v1=ProtoStreamingFeatureSetV1(
599
+ transformation=self.transformation._to_proto(
600
+ artifact_path=artifact_url
601
+ ),
602
+ data_sources=streaming_sources,
603
+ execution_spec=ProtoStreamingExecutionSpec(
604
+ online_cluster_template=ClusterTemplate.to_proto(
605
+ self.online_cluster_template
606
+ ),
607
+ offline_cluster_template=ClusterTemplate.to_proto(
608
+ self.offline_cluster_template
609
+ ),
610
+ ),
611
+ timestamp_column_name=self.timestamp_column_name,
612
+ online_trigger_interval=self.online_trigger_interval,
613
+ offline_scheduling_policy=self.offline_scheduling_policy,
614
+ auxiliary_sinks=[
615
+ s.to_proto_streaming_sink() for s in self.auxiliary_sinks
616
+ ],
617
+ )
618
+ )
619
+
620
+ def _get_streaming_aggregation_featureset_proto(
621
+ self,
622
+ artifact_url: Optional[str],
623
+ streaming_sources: List[StreamingSource],
624
+ initial_tile_size: int,
625
+ ) -> ProtoFeatureSetType:
626
+ backfill_max_timestamp = ProtoTimestamp()
627
+ backfill_max_timestamp.FromDatetime(
628
+ self.backfill_max_timestamp.astimezone(timezone.utc)
629
+ )
630
+ return ProtoFeatureSetType(
631
+ streaming_aggregation_feature_set=ProtoStreamingAggregationFeatureSet(
632
+ transformation=self.transformation._to_proto(
633
+ artifact_path=artifact_url
634
+ ),
635
+ data_sources=streaming_sources,
636
+ execution_spec=ProtoStreamingExecutionSpec(
637
+ online_cluster_template=ClusterTemplate.to_proto(
638
+ self.online_cluster_template
639
+ ),
640
+ offline_cluster_template=ClusterTemplate.to_proto(
641
+ self.offline_cluster_template
642
+ ),
643
+ ),
644
+ timestamp_column_name=self.timestamp_column_name,
645
+ online_trigger_interval=self.online_trigger_interval,
646
+ compaction_scheduling_policy=self.offline_scheduling_policy,
647
+ aggregation_spec=ProtoAggregationSpec(
648
+ slide_seconds=initial_tile_size,
649
+ allowed_late_arrival_seconds=60 * 10,
650
+ aggregations=self.transformation._get_aggregations_proto(),
651
+ ),
652
+ backfill_spec=None,
653
+ backfill_max_timestamp=backfill_max_timestamp,
654
+ )
655
+ )