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.
- _qwak_proto/jfml/hosting_gateway/v1/build_upload_url_pb2.py +29 -0
- _qwak_proto/jfml/hosting_gateway/v1/build_upload_url_pb2.pyi +70 -0
- _qwak_proto/jfml/hosting_gateway/v1/build_upload_url_pb2_grpc.py +4 -0
- _qwak_proto/jfml/hosting_gateway/v1/hosting_gateway_service_pb2.py +32 -0
- _qwak_proto/jfml/hosting_gateway/v1/hosting_gateway_service_pb2.pyi +48 -0
- _qwak_proto/jfml/hosting_gateway/v1/hosting_gateway_service_pb2_grpc.py +67 -0
- _qwak_proto/qwak/administration/account/v1/account_pb2.py +29 -60
- _qwak_proto/qwak/administration/account/v1/account_pb2.pyi +120 -2
- _qwak_proto/qwak/administration/account/v1/account_service_pb2.py +67 -0
- _qwak_proto/qwak/administration/account/v1/account_service_pb2.pyi +345 -0
- _qwak_proto/qwak/administration/account/v1/account_service_pb2_grpc.py +338 -0
- _qwak_proto/qwak/administration/account/v1/jfrog_tenant_details_pb2.py +49 -0
- _qwak_proto/qwak/administration/account/v1/jfrog_tenant_details_pb2.pyi +209 -0
- _qwak_proto/qwak/administration/account/v1/jfrog_tenant_details_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/account/v1/personalization_pb2.py +8 -24
- _qwak_proto/qwak/administration/account/v1/preferences_pb2.py +6 -14
- _qwak_proto/qwak/administration/account/v1/terms_pb2.py +35 -0
- _qwak_proto/qwak/administration/account/v1/terms_pb2.pyi +94 -0
- _qwak_proto/qwak/administration/account/v1/terms_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/authenticated_user/v1/authenticated_user_service_pb2.py +18 -67
- _qwak_proto/qwak/administration/authenticated_user/v1/credentials_pb2.py +8 -24
- _qwak_proto/qwak/administration/authenticated_user/v1/credentials_pb2.pyi +1 -1
- _qwak_proto/qwak/administration/authenticated_user/v1/details_pb2.py +14 -54
- _qwak_proto/qwak/administration/cluster/v2/cluster_pb2.py +62 -0
- _qwak_proto/qwak/administration/cluster/v2/cluster_pb2.pyi +354 -0
- _qwak_proto/qwak/administration/cluster/v2/cluster_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/container_registry_config_pb2.py +32 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/container_registry_config_pb2.pyi +65 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/container_registry_config_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/creds/auth_pb2.py +28 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/creds/auth_pb2.pyi +36 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/creds/auth_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/creds/secret_pb2.py +29 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/creds/secret_pb2.pyi +49 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/creds/secret_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/data_catalog_config_pb2.py +33 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/data_catalog_config_pb2.pyi +89 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/data_catalog_config_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/external/databricks/auth_pb2.py +34 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/external/databricks/auth_pb2.pyi +97 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/external/databricks/auth_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/external/elasticsearch_config_pb2.py +28 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/external/elasticsearch_config_pb2.pyi +39 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/external/elasticsearch_config_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/external/kafka_config_pb2.py +34 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/external/kafka_config_pb2.pyi +79 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/external/kafka_config_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/external/prometheus_config_pb2.py +29 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/external/prometheus_config_pb2.pyi +46 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/external/prometheus_config_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/external/redis_config_pb2.py +28 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/external/redis_config_pb2.pyi +39 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/external/redis_config_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/external/victoriametrics_config_pb2.py +28 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/external/victoriametrics_config_pb2.pyi +33 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/external/victoriametrics_config_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/feature_store_config_pb2.py +32 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/feature_store_config_pb2.pyi +66 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/feature_store_config_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/hosting/aws/auth_pb2.py +42 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/hosting/aws/auth_pb2.pyi +159 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/hosting/aws/auth_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/hosting/azure/auth_pb2.py +39 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/hosting/azure/auth_pb2.pyi +126 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/hosting/azure/auth_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/hosting_config_pb2.py +40 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/hosting_config_pb2.pyi +146 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/hosting_config_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/logs_storage_config_pb2.py +28 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/logs_storage_config_pb2.pyi +33 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/logs_storage_config_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/model_analytics_storage_config_pb2.py +28 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/model_analytics_storage_config_pb2.pyi +33 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/model_analytics_storage_config_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/network_config_pb2.py +36 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/network_config_pb2.pyi +107 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/network_config_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/object_storage_config_pb2.py +33 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/object_storage_config_pb2.pyi +93 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/object_storage_config_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/observability_config_pb2.py +33 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/observability_config_pb2.pyi +79 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/observability_config_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/runtime_config_pb2.py +36 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/runtime_config_pb2.pyi +72 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/runtime_config_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/sql_engine_config_pb2.py +33 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/sql_engine_config_pb2.pyi +83 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/sql_engine_config_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/v0/authentication/authentication_service_pb2.py +14 -47
- _qwak_proto/qwak/administration/v0/environments/configuration_pb2.py +23 -55
- _qwak_proto/qwak/administration/v0/environments/configuration_pb2.pyi +103 -7
- _qwak_proto/qwak/administration/v0/environments/environment_pb2.py +15 -33
- _qwak_proto/qwak/administration/v0/environments/environment_pb2.pyi +50 -2
- _qwak_proto/qwak/administration/v0/environments/environment_service_pb2.py +36 -158
- _qwak_proto/qwak/administration/v0/environments/personalization_pb2.py +8 -24
- _qwak_proto/qwak/administration/v0/users/user_pb2.py +18 -71
- _qwak_proto/qwak/admiral/secret/v0/secret_pb2.py +53 -0
- _qwak_proto/qwak/admiral/secret/v0/secret_pb2.pyi +256 -0
- _qwak_proto/qwak/admiral/secret/v0/secret_pb2_grpc.py +4 -0
- _qwak_proto/qwak/admiral/secret/v0/secret_service_pb2.py +40 -0
- _qwak_proto/qwak/admiral/secret/v0/secret_service_pb2.pyi +93 -0
- _qwak_proto/qwak/admiral/secret/v0/secret_service_pb2_grpc.py +135 -0
- _qwak_proto/qwak/admiral/secret/v0/system_secret_service_pb2.py +40 -0
- _qwak_proto/qwak/admiral/secret/v0/system_secret_service_pb2.pyi +101 -0
- _qwak_proto/qwak/admiral/secret/v0/system_secret_service_pb2_grpc.py +135 -0
- _qwak_proto/qwak/admiral/user_application_instance/v0/user_application_instance_pb2.py +39 -105
- _qwak_proto/qwak/admiral/user_application_instance/v0/user_application_instance_pb2.pyi +131 -3
- _qwak_proto/qwak/admiral/user_application_instance/v0/user_application_instance_service_pb2.py +22 -87
- _qwak_proto/qwak/analytics/analytics_pb2.py +28 -123
- _qwak_proto/qwak/analytics/analytics_pb2.pyi +5 -1
- _qwak_proto/qwak/analytics/analytics_service_pb2.py +48 -149
- _qwak_proto/qwak/analytics/analytics_service_pb2.pyi +87 -0
- _qwak_proto/qwak/analytics/analytics_service_pb2_grpc.py +101 -0
- _qwak_proto/qwak/artifactory_settings/artifactory_settings_pb2.py +29 -0
- _qwak_proto/qwak/artifactory_settings/artifactory_settings_pb2.pyi +57 -0
- _qwak_proto/qwak/artifactory_settings/artifactory_settings_pb2_grpc.py +4 -0
- _qwak_proto/qwak/audience/v1/audience_api_pb2.py +30 -127
- _qwak_proto/qwak/audience/v1/audience_pb2.py +27 -114
- _qwak_proto/qwak/audience/v1/audience_pb2.pyi +5 -1
- _qwak_proto/qwak/auto_scaling/v1/auto_scaling_pb2.py +18 -79
- _qwak_proto/qwak/auto_scaling/v1/auto_scaling_service_pb2.py +10 -27
- _qwak_proto/qwak/automation/v1/action_pb2.py +42 -164
- _qwak_proto/qwak/automation/v1/action_pb2.pyi +82 -7
- _qwak_proto/qwak/automation/v1/auto_scaling_pb2.py +19 -77
- _qwak_proto/qwak/automation/v1/auto_scaling_pb2.pyi +6 -0
- _qwak_proto/qwak/automation/v1/automation_execution_pb2.py +12 -43
- _qwak_proto/qwak/automation/v1/automation_management_service_pb2.py +56 -258
- _qwak_proto/qwak/automation/v1/automation_pb2.py +11 -35
- _qwak_proto/qwak/automation/v1/automation_pb2.pyi +8 -1
- _qwak_proto/qwak/automation/v1/common_pb2.py +11 -33
- _qwak_proto/qwak/automation/v1/common_pb2.pyi +6 -0
- _qwak_proto/qwak/automation/v1/notification_pb2.py +16 -68
- _qwak_proto/qwak/automation/v1/trigger_pb2.py +14 -54
- _qwak_proto/qwak/batch_job/v1/batch_job_events_pb2.py +27 -116
- _qwak_proto/qwak/batch_job/v1/batch_job_events_pb2.pyi +6 -1
- _qwak_proto/qwak/batch_job/v1/batch_job_resources_pb2.py +9 -26
- _qwak_proto/qwak/batch_job/v1/batch_job_resources_pb2.pyi +2 -0
- _qwak_proto/qwak/batch_job/v1/batch_job_service_pb2.py +121 -502
- _qwak_proto/qwak/batch_job/v1/batch_job_service_pb2.pyi +111 -4
- _qwak_proto/qwak/batch_job/v1/batch_job_service_pb2_grpc.py +67 -0
- _qwak_proto/qwak/build/v1/build_api_pb2.py +98 -278
- _qwak_proto/qwak/build/v1/build_api_pb2.pyi +220 -0
- _qwak_proto/qwak/build/v1/build_api_pb2_grpc.py +198 -0
- _qwak_proto/qwak/build/v1/build_pb2.py +115 -417
- _qwak_proto/qwak/build/v1/build_pb2.pyi +294 -5
- _qwak_proto/qwak/build_settings/build_settings_api_pb2.py +40 -0
- _qwak_proto/qwak/build_settings/build_settings_api_pb2.pyi +106 -0
- _qwak_proto/qwak/build_settings/build_settings_api_pb2_grpc.py +132 -0
- _qwak_proto/qwak/build_settings/build_settings_pb2.py +39 -0
- _qwak_proto/qwak/build_settings/build_settings_pb2.pyi +148 -0
- _qwak_proto/qwak/build_settings/build_settings_pb2_grpc.py +4 -0
- _qwak_proto/qwak/builds/build_pb2.py +46 -200
- _qwak_proto/qwak/builds/build_pb2.pyi +111 -5
- _qwak_proto/qwak/builds/build_url_pb2.py +27 -54
- _qwak_proto/qwak/builds/build_url_pb2.pyi +131 -2
- _qwak_proto/qwak/builds/build_values_pb2.py +82 -0
- _qwak_proto/qwak/builds/build_values_pb2.pyi +559 -0
- _qwak_proto/qwak/builds/build_values_pb2_grpc.py +4 -0
- _qwak_proto/qwak/builds/builds_orchestrator_service_pb2.py +93 -168
- _qwak_proto/qwak/builds/builds_orchestrator_service_pb2.pyi +342 -3
- _qwak_proto/qwak/builds/builds_orchestrator_service_pb2_grpc.py +166 -0
- _qwak_proto/qwak/builds/builds_pb2.py +87 -528
- _qwak_proto/qwak/builds/builds_pb2.pyi +5 -192
- _qwak_proto/qwak/builds/builds_pb2_grpc.py +0 -233
- _qwak_proto/qwak/builds/internal_builds_orchestrator_service_pb2.py +12 -37
- _qwak_proto/qwak/data_versioning/data_versioning_pb2.py +9 -15
- _qwak_proto/qwak/data_versioning/data_versioning_pb2.pyi +21 -0
- _qwak_proto/qwak/data_versioning/data_versioning_service_pb2.py +15 -48
- _qwak_proto/qwak/data_versioning/data_versioning_service_pb2.pyi +12 -1
- _qwak_proto/qwak/deployment/alert_pb2.py +25 -108
- _qwak_proto/qwak/deployment/alert_pb2.pyi +2 -0
- _qwak_proto/qwak/deployment/alert_service_pb2.py +30 -127
- _qwak_proto/qwak/deployment/deployment_messages_pb2.py +6 -14
- _qwak_proto/qwak/deployment/deployment_pb2.py +127 -578
- _qwak_proto/qwak/deployment/deployment_pb2.pyi +51 -8
- _qwak_proto/qwak/deployment/deployment_service_pb2.py +91 -400
- _qwak_proto/qwak/deployment/deployment_service_pb2.pyi +30 -0
- _qwak_proto/qwak/deployment/deployment_service_pb2_grpc.py +34 -0
- _qwak_proto/qwak/ecosystem/jfrog/v0/token_pb2.py +72 -0
- _qwak_proto/qwak/ecosystem/jfrog/v0/token_pb2.pyi +489 -0
- _qwak_proto/qwak/ecosystem/jfrog/v0/token_pb2_grpc.py +4 -0
- _qwak_proto/qwak/ecosystem/jfrog/v0/token_service_pb2.py +44 -0
- _qwak_proto/qwak/ecosystem/jfrog/v0/token_service_pb2.pyi +144 -0
- _qwak_proto/qwak/ecosystem/jfrog/v0/token_service_pb2_grpc.py +169 -0
- _qwak_proto/qwak/ecosystem/v0/auth_pb2.py +28 -0
- _qwak_proto/qwak/ecosystem/v0/auth_pb2.pyi +37 -0
- _qwak_proto/qwak/ecosystem/v0/auth_pb2_grpc.py +4 -0
- _qwak_proto/qwak/ecosystem/v0/azure_credentials_pb2.py +37 -0
- _qwak_proto/qwak/ecosystem/v0/azure_credentials_pb2.pyi +117 -0
- _qwak_proto/qwak/ecosystem/v0/azure_credentials_pb2_grpc.py +4 -0
- _qwak_proto/qwak/ecosystem/v0/credentials_pb2.py +13 -26
- _qwak_proto/qwak/ecosystem/v0/credentials_pb2.pyi +33 -3
- _qwak_proto/qwak/ecosystem/v0/ecosystem_pb2.py +34 -140
- _qwak_proto/qwak/ecosystem/v0/ecosystem_pb2.pyi +45 -7
- _qwak_proto/qwak/ecosystem/v0/ecosystem_runtime_service_pb2.py +54 -229
- _qwak_proto/qwak/ecosystem/v0/ecosystem_runtime_service_pb2.pyi +22 -3
- _qwak_proto/qwak/execution/v1/backfill_pb2.py +18 -74
- _qwak_proto/qwak/execution/v1/batch_pb2.py +10 -34
- _qwak_proto/qwak/execution/v1/deletion_pb2.py +33 -0
- _qwak_proto/qwak/execution/v1/deletion_pb2.pyi +67 -0
- _qwak_proto/qwak/execution/v1/deletion_pb2_grpc.py +4 -0
- _qwak_proto/qwak/execution/v1/execution_pb2.py +20 -60
- _qwak_proto/qwak/execution/v1/execution_pb2.pyi +61 -4
- _qwak_proto/qwak/execution/v1/execution_service_pb2.py +70 -108
- _qwak_proto/qwak/execution/v1/execution_service_pb2.pyi +306 -0
- _qwak_proto/qwak/execution/v1/execution_service_pb2_grpc.py +304 -2
- _qwak_proto/qwak/execution/v1/internal/deployment/platform_details_pb2.py +27 -0
- _qwak_proto/qwak/execution/v1/internal/deployment/platform_details_pb2.pyi +29 -0
- _qwak_proto/qwak/execution/v1/internal/deployment/platform_details_pb2_grpc.py +4 -0
- _qwak_proto/qwak/execution/v1/jobs/job_pb2.py +19 -67
- _qwak_proto/qwak/execution/v1/jobs/job_pb2.pyi +33 -2
- _qwak_proto/qwak/execution/v1/jobs/job_service_pb2.py +56 -88
- _qwak_proto/qwak/execution/v1/jobs/job_service_pb2.pyi +311 -0
- _qwak_proto/qwak/execution/v1/jobs/job_service_pb2_grpc.py +231 -0
- _qwak_proto/qwak/execution/v1/jobs/reports/report_pb2.py +21 -75
- _qwak_proto/qwak/execution/v1/jobs/reports/report_pb2.pyi +29 -2
- _qwak_proto/qwak/execution/v1/state/execution_state_pb2.py +6 -14
- _qwak_proto/qwak/execution/v1/state/execution_state_service_pb2.py +31 -108
- _qwak_proto/qwak/execution/v1/state/execution_state_service_pb2.pyi +30 -0
- _qwak_proto/qwak/execution/v1/state/execution_state_service_pb2_grpc.py +34 -0
- _qwak_proto/qwak/execution/v1/state/featureset_state_pb2.py +6 -14
- _qwak_proto/qwak/execution/v1/state/spark_execution_state_pb2.py +14 -68
- _qwak_proto/qwak/execution/v1/streaming_aggregation_pb2.py +42 -0
- _qwak_proto/qwak/execution/v1/streaming_aggregation_pb2.pyi +165 -0
- _qwak_proto/qwak/execution/v1/streaming_aggregation_pb2_grpc.py +4 -0
- _qwak_proto/qwak/execution/v1/streaming_pb2.py +33 -0
- _qwak_proto/qwak/execution/v1/streaming_pb2.pyi +79 -0
- _qwak_proto/qwak/execution/v1/streaming_pb2_grpc.py +4 -0
- _qwak_proto/qwak/feature_store/entities/entity_pb2.py +16 -57
- _qwak_proto/qwak/feature_store/entities/entity_service_pb2.py +30 -127
- _qwak_proto/qwak/feature_store/features/aggregation_pb2.py +38 -175
- _qwak_proto/qwak/feature_store/features/deployment_pb2.py +36 -167
- _qwak_proto/qwak/feature_store/features/deployment_service_pb2.py +10 -27
- _qwak_proto/qwak/feature_store/features/execution_pb2.py +14 -56
- _qwak_proto/qwak/feature_store/features/feature_set_attribute_pb2.py +28 -0
- _qwak_proto/qwak/feature_store/features/feature_set_attribute_pb2.pyi +33 -0
- _qwak_proto/qwak/feature_store/features/feature_set_attribute_pb2_grpc.py +4 -0
- _qwak_proto/qwak/feature_store/features/feature_set_pb2.py +49 -106
- _qwak_proto/qwak/feature_store/features/feature_set_pb2.pyi +154 -8
- _qwak_proto/qwak/feature_store/features/feature_set_service_pb2.py +101 -349
- _qwak_proto/qwak/feature_store/features/feature_set_service_pb2.pyi +160 -0
- _qwak_proto/qwak/feature_store/features/feature_set_service_pb2_grpc.py +170 -0
- _qwak_proto/qwak/feature_store/features/feature_set_state_pb2.py +38 -181
- _qwak_proto/qwak/feature_store/features/feature_set_state_service_pb2.py +26 -107
- _qwak_proto/qwak/feature_store/features/feature_set_types_pb2.py +84 -298
- _qwak_proto/qwak/feature_store/features/feature_set_types_pb2.pyi +123 -7
- _qwak_proto/qwak/feature_store/features/monitoring_pb2.py +10 -34
- _qwak_proto/qwak/feature_store/features/real_time_feature_extractor_pb2.py +32 -143
- _qwak_proto/qwak/feature_store/jobs/job_pb2.py +12 -46
- _qwak_proto/qwak/feature_store/jobs/job_service_pb2.py +30 -127
- _qwak_proto/qwak/feature_store/jobs/v1/job_pb2.py +13 -36
- _qwak_proto/qwak/feature_store/jobs/v1/job_pb2.pyi +19 -0
- _qwak_proto/qwak/feature_store/jobs/v1/job_service_pb2.py +44 -148
- _qwak_proto/qwak/feature_store/jobs/v1/job_service_pb2.pyi +64 -0
- _qwak_proto/qwak/feature_store/jobs/v1/job_service_pb2_grpc.py +67 -0
- _qwak_proto/qwak/feature_store/platform/platform_details_pb2.py +30 -0
- _qwak_proto/qwak/feature_store/platform/platform_details_pb2.pyi +54 -0
- _qwak_proto/qwak/feature_store/platform/platform_details_pb2_grpc.py +4 -0
- _qwak_proto/qwak/feature_store/reports/report_pb2.py +14 -53
- _qwak_proto/qwak/feature_store/repository/common/platform_pb2.py +31 -0
- _qwak_proto/qwak/feature_store/repository/common/platform_pb2.pyi +70 -0
- _qwak_proto/qwak/feature_store/repository/common/platform_pb2_grpc.py +4 -0
- _qwak_proto/qwak/feature_store/serving/management_pb2.py +36 -0
- _qwak_proto/qwak/feature_store/serving/management_pb2.pyi +72 -0
- _qwak_proto/qwak/feature_store/serving/management_pb2_grpc.py +101 -0
- _qwak_proto/qwak/feature_store/serving/metadata_pb2.py +13 -35
- _qwak_proto/qwak/feature_store/serving/metadata_pb2.pyi +27 -0
- _qwak_proto/qwak/feature_store/serving/serving_pb2.py +50 -222
- _qwak_proto/qwak/feature_store/serving/v1/value_pb2.py +8 -24
- _qwak_proto/qwak/feature_store/sinks/sink_pb2.py +36 -0
- _qwak_proto/qwak/feature_store/sinks/sink_pb2.pyi +137 -0
- _qwak_proto/qwak/feature_store/sinks/sink_pb2_grpc.py +4 -0
- _qwak_proto/qwak/feature_store/sources/batch_pb2.py +80 -175
- _qwak_proto/qwak/feature_store/sources/batch_pb2.pyi +461 -13
- _qwak_proto/qwak/feature_store/sources/data_source_attribute_pb2.py +28 -0
- _qwak_proto/qwak/feature_store/sources/data_source_attribute_pb2.pyi +33 -0
- _qwak_proto/qwak/feature_store/sources/data_source_attribute_pb2_grpc.py +4 -0
- _qwak_proto/qwak/feature_store/sources/data_source_pb2.py +21 -55
- _qwak_proto/qwak/feature_store/sources/data_source_pb2.pyi +39 -4
- _qwak_proto/qwak/feature_store/sources/data_source_service_pb2.py +41 -148
- _qwak_proto/qwak/feature_store/sources/data_source_service_pb2.pyi +25 -0
- _qwak_proto/qwak/feature_store/sources/data_source_service_pb2_grpc.py +34 -0
- _qwak_proto/qwak/feature_store/sources/streaming_pb2.py +34 -146
- _qwak_proto/qwak/feature_store/v1/common/jfrog_artifact/jfrog_artifact_pb2.py +27 -0
- _qwak_proto/qwak/feature_store/v1/common/jfrog_artifact/jfrog_artifact_pb2.pyi +30 -0
- _qwak_proto/qwak/feature_store/v1/common/jfrog_artifact/jfrog_artifact_pb2_grpc.py +4 -0
- _qwak_proto/qwak/feature_store/v1/common/source_code/source_code_pb2.py +32 -0
- _qwak_proto/qwak/feature_store/v1/common/source_code/source_code_pb2.pyi +77 -0
- _qwak_proto/qwak/feature_store/v1/common/source_code/source_code_pb2_grpc.py +4 -0
- _qwak_proto/qwak/feature_store/v1/internal/data_source/data_source_service_pb2.py +39 -0
- _qwak_proto/qwak/feature_store/v1/internal/data_source/data_source_service_pb2.pyi +99 -0
- _qwak_proto/qwak/feature_store/v1/internal/data_source/data_source_service_pb2_grpc.py +99 -0
- _qwak_proto/qwak/feature_store/v1/internal/featureset/featureset_token_service_pb2.py +31 -0
- _qwak_proto/qwak/feature_store/v1/internal/featureset/featureset_token_service_pb2.pyi +46 -0
- _qwak_proto/qwak/feature_store/v1/internal/featureset/featureset_token_service_pb2_grpc.py +66 -0
- _qwak_proto/qwak/features_operator/v1/features_operator_pb2.py +14 -54
- _qwak_proto/qwak/features_operator/v1/features_operator_service_pb2.py +14 -47
- _qwak_proto/qwak/features_operator/v2/features_operator_pb2.py +16 -64
- _qwak_proto/qwak/features_operator/v2/features_operator_service_pb2.py +12 -37
- _qwak_proto/qwak/features_operator/v3/features_operator_async_service_pb2.py +26 -107
- _qwak_proto/qwak/features_operator/v3/features_operator_pb2.py +16 -64
- _qwak_proto/qwak/file_versioning/file_versioning_pb2.py +11 -24
- _qwak_proto/qwak/file_versioning/file_versioning_pb2.pyi +21 -0
- _qwak_proto/qwak/file_versioning/file_versioning_service_pb2.py +15 -48
- _qwak_proto/qwak/file_versioning/file_versioning_service_pb2.pyi +12 -1
- _qwak_proto/qwak/fitness_service/constructs_pb2.py +23 -93
- _qwak_proto/qwak/fitness_service/constructs_pb2.pyi +59 -1
- _qwak_proto/qwak/fitness_service/fitness_pb2.py +7 -34
- _qwak_proto/qwak/fitness_service/fitness_pb2.pyi +0 -77
- _qwak_proto/qwak/fitness_service/status_pb2.py +17 -107
- _qwak_proto/qwak/fitness_service/status_pb2.pyi +1 -117
- _qwak_proto/qwak/inference/feedback/feedback_pb2.py +28 -96
- _qwak_proto/qwak/instance_template/instance_template_pb2.py +13 -41
- _qwak_proto/qwak/instance_template/instance_template_pb2.pyi +13 -1
- _qwak_proto/qwak/instance_template/instance_template_service_pb2.py +14 -47
- _qwak_proto/qwak/integration/hugging_face_integration_pb2.py +37 -0
- _qwak_proto/qwak/integration/hugging_face_integration_pb2.pyi +106 -0
- _qwak_proto/qwak/integration/hugging_face_integration_pb2_grpc.py +4 -0
- _qwak_proto/qwak/integration/integration_pb2.py +55 -0
- _qwak_proto/qwak/integration/integration_pb2.pyi +357 -0
- _qwak_proto/qwak/integration/integration_pb2_grpc.py +4 -0
- _qwak_proto/qwak/integration/integration_service_pb2.py +56 -0
- _qwak_proto/qwak/integration/integration_service_pb2.pyi +234 -0
- _qwak_proto/qwak/integration/integration_service_pb2_grpc.py +271 -0
- _qwak_proto/qwak/integration/open_a_i_integration_pb2.py +37 -0
- _qwak_proto/qwak/integration/open_a_i_integration_pb2.pyi +109 -0
- _qwak_proto/qwak/integration/open_a_i_integration_pb2_grpc.py +4 -0
- _qwak_proto/qwak/integration/opsgenie_integration_pb2.py +43 -0
- _qwak_proto/qwak/integration/opsgenie_integration_pb2.pyi +168 -0
- _qwak_proto/qwak/integration/opsgenie_integration_pb2_grpc.py +4 -0
- _qwak_proto/qwak/integration/pagerduty_integration_pb2.py +47 -0
- _qwak_proto/qwak/integration/pagerduty_integration_pb2.pyi +195 -0
- _qwak_proto/qwak/integration/pagerduty_integration_pb2_grpc.py +4 -0
- _qwak_proto/qwak/integration/slack_app_integration_pb2.py +47 -0
- _qwak_proto/qwak/integration/slack_app_integration_pb2.pyi +198 -0
- _qwak_proto/qwak/integration/slack_app_integration_pb2_grpc.py +4 -0
- _qwak_proto/qwak/kube_deployment_captain/alert_pb2.py +22 -97
- _qwak_proto/qwak/kube_deployment_captain/alerting_pb2.py +12 -44
- _qwak_proto/qwak/kube_deployment_captain/batch_job_pb2.py +76 -249
- _qwak_proto/qwak/kube_deployment_captain/batch_job_pb2.pyi +283 -6
- _qwak_proto/qwak/kube_deployment_captain/deployment_pb2.py +45 -161
- _qwak_proto/qwak/kube_deployment_captain/deployment_pb2.pyi +52 -1
- _qwak_proto/qwak/kube_deployment_captain/feature_set_deployment_pb2.py +33 -145
- _qwak_proto/qwak/kube_deployment_captain/feature_set_deployment_pb2.pyi +6 -2
- _qwak_proto/qwak/kube_deployment_captain/kube_deployment_captain_service_pb2.py +111 -510
- _qwak_proto/qwak/kube_deployment_captain/kube_deployment_captain_service_pb2.pyi +24 -1
- _qwak_proto/qwak/kube_deployment_captain/kube_deployment_captain_service_pb2_grpc.py +34 -0
- _qwak_proto/qwak/kube_deployment_captain/traffic_mapping_pb2.py +8 -24
- _qwak_proto/qwak/logging/log_filter_pb2.py +12 -44
- _qwak_proto/qwak/logging/log_line_pb2.py +8 -25
- _qwak_proto/qwak/logging/log_reader_service_pb2.py +10 -27
- _qwak_proto/qwak/logging/log_source_pb2.py +30 -134
- _qwak_proto/qwak/model_descriptor/open_ai_descriptor_pb2.py +40 -0
- _qwak_proto/qwak/model_descriptor/open_ai_descriptor_pb2.pyi +215 -0
- _qwak_proto/qwak/model_descriptor/open_ai_descriptor_pb2_grpc.py +4 -0
- _qwak_proto/qwak/model_group/model_group_pb2.py +47 -0
- _qwak_proto/qwak/model_group/model_group_pb2.pyi +192 -0
- _qwak_proto/qwak/model_group/model_group_pb2_grpc.py +169 -0
- _qwak_proto/qwak/model_group/model_group_repository_details_pb2.py +43 -0
- _qwak_proto/qwak/model_group/model_group_repository_details_pb2.pyi +172 -0
- _qwak_proto/qwak/model_group/model_group_repository_details_pb2_grpc.py +4 -0
- _qwak_proto/qwak/models/models_pb2.py +101 -356
- _qwak_proto/qwak/models/models_pb2.pyi +221 -6
- _qwak_proto/qwak/models/models_pb2_grpc.py +68 -0
- _qwak_proto/qwak/models/models_query_pb2.py +37 -0
- _qwak_proto/qwak/models/models_query_pb2.pyi +157 -0
- _qwak_proto/qwak/models/models_query_pb2_grpc.py +4 -0
- _qwak_proto/qwak/monitoring/v0/alerting_channel_management_service_pb2.py +30 -127
- _qwak_proto/qwak/monitoring/v0/alerting_channel_pb2.py +34 -152
- _qwak_proto/qwak/monitoring/v0/alerting_channel_sync_service_pb2.py +14 -47
- _qwak_proto/qwak/offline/serving/v1/feature_values_pb2.py +27 -0
- _qwak_proto/qwak/offline/serving/v1/feature_values_pb2.pyi +37 -0
- _qwak_proto/qwak/offline/serving/v1/feature_values_pb2_grpc.py +4 -0
- _qwak_proto/qwak/offline/serving/v1/offline_serving_async_service_pb2.py +55 -0
- _qwak_proto/qwak/offline/serving/v1/offline_serving_async_service_pb2.pyi +279 -0
- _qwak_proto/qwak/offline/serving/v1/offline_serving_async_service_pb2_grpc.py +165 -0
- _qwak_proto/qwak/offline/serving/v1/options_pb2.py +27 -0
- _qwak_proto/qwak/offline/serving/v1/options_pb2.pyi +30 -0
- _qwak_proto/qwak/offline/serving/v1/options_pb2_grpc.py +4 -0
- _qwak_proto/qwak/offline/serving/v1/population_pb2.py +35 -0
- _qwak_proto/qwak/offline/serving/v1/population_pb2.pyi +99 -0
- _qwak_proto/qwak/offline/serving/v1/population_pb2_grpc.py +4 -0
- _qwak_proto/qwak/projects/jfrog_project_spec_pb2.py +27 -0
- _qwak_proto/qwak/projects/jfrog_project_spec_pb2.pyi +32 -0
- _qwak_proto/qwak/projects/jfrog_project_spec_pb2_grpc.py +4 -0
- _qwak_proto/qwak/projects/projects_pb2.py +51 -142
- _qwak_proto/qwak/projects/projects_pb2.pyi +149 -3
- _qwak_proto/qwak/prompt/v1/prompt/prompt_manager_service_pb2.py +77 -0
- _qwak_proto/qwak/prompt/v1/prompt/prompt_manager_service_pb2.pyi +417 -0
- _qwak_proto/qwak/prompt/v1/prompt/prompt_manager_service_pb2_grpc.py +441 -0
- _qwak_proto/qwak/prompt/v1/prompt/prompt_pb2.py +69 -0
- _qwak_proto/qwak/prompt/v1/prompt/prompt_pb2.pyi +415 -0
- _qwak_proto/qwak/prompt/v1/prompt/prompt_pb2_grpc.py +4 -0
- _qwak_proto/qwak/secret_service/secret_service_pb2.py +18 -67
- _qwak_proto/qwak/secret_service/secret_service_pb2.pyi +1 -1
- _qwak_proto/qwak/self_service/account/v0/account_membership_pb2.py +30 -65
- _qwak_proto/qwak/self_service/account/v0/account_membership_pb2.pyi +99 -2
- _qwak_proto/qwak/self_service/account/v0/account_membership_service_pb2.py +51 -208
- _qwak_proto/qwak/self_service/account/v0/account_membership_service_pb2.pyi +28 -0
- _qwak_proto/qwak/self_service/account/v0/account_membership_service_pb2_grpc.py +34 -0
- _qwak_proto/qwak/self_service/account/v0/account_status_pb2.py +44 -0
- _qwak_proto/qwak/self_service/account/v0/account_status_pb2.pyi +172 -0
- _qwak_proto/qwak/self_service/account/v0/account_status_pb2_grpc.py +4 -0
- _qwak_proto/qwak/self_service/account/v0/managing_account_pb2.py +60 -0
- _qwak_proto/qwak/self_service/account/v0/managing_account_pb2.pyi +317 -0
- _qwak_proto/qwak/self_service/account/v0/managing_account_pb2_grpc.py +4 -0
- _qwak_proto/qwak/self_service/account/v0/managing_account_service_pb2.py +45 -0
- _qwak_proto/qwak/self_service/account/v0/managing_account_service_pb2.pyi +136 -0
- _qwak_proto/qwak/self_service/account/v0/managing_account_service_pb2_grpc.py +169 -0
- _qwak_proto/qwak/self_service/user/v1/api_key_pb2.py +6 -14
- _qwak_proto/qwak/self_service/user/v1/user_pb2.py +6 -14
- _qwak_proto/qwak/self_service/user/v1/user_service_pb2.py +30 -121
- _qwak_proto/qwak/service_discovery/service_discovery_location_pb2.py +33 -0
- _qwak_proto/qwak/service_discovery/service_discovery_location_pb2.pyi +73 -0
- _qwak_proto/qwak/service_discovery/service_discovery_location_pb2_grpc.py +4 -0
- _qwak_proto/qwak/service_discovery/service_discovery_location_service_pb2.py +32 -0
- _qwak_proto/qwak/service_discovery/service_discovery_location_service_pb2.pyi +41 -0
- _qwak_proto/qwak/service_discovery/service_discovery_location_service_pb2_grpc.py +231 -0
- _qwak_proto/qwak/traffic/v1/traffic_api_pb2.py +23 -88
- _qwak_proto/qwak/traffic/v1/traffic_api_pb2.pyi +13 -2
- _qwak_proto/qwak/traffic/v1/traffic_pb2.py +27 -114
- _qwak_proto/qwak/traffic/v1/traffic_pb2.pyi +5 -1
- _qwak_proto/qwak/user_application/common/v0/resources_pb2.py +31 -132
- _qwak_proto/qwak/user_application/common/v0/resources_pb2.pyi +54 -0
- _qwak_proto/qwak/user_application/v0/user_application_pb2.py +15 -39
- _qwak_proto/qwak/user_application/v0/user_application_pb2.pyi +16 -0
- _qwak_proto/qwak/vectors/v1/collection/collection_pb2.py +25 -104
- _qwak_proto/qwak/vectors/v1/collection/collection_pb2.pyi +17 -1
- _qwak_proto/qwak/vectors/v1/collection/collection_service_pb2.py +38 -167
- _qwak_proto/qwak/vectors/v1/collection/event/collection_event_pb2.py +7 -15
- _qwak_proto/qwak/vectors/v1/collection/event/collection_event_pb2.pyi +5 -1
- _qwak_proto/qwak/vectors/v1/filters_pb2.py +30 -134
- _qwak_proto/qwak/vectors/v1/vector_pb2.py +17 -45
- _qwak_proto/qwak/vectors/v1/vector_pb2.pyi +25 -2
- _qwak_proto/qwak/vectors/v1/vector_service_pb2.py +31 -108
- _qwak_proto/qwak/vectors/v1/vector_service_pb2.pyi +30 -7
- _qwak_proto/qwak/workspace/workspace_pb2.py +23 -108
- _qwak_proto/qwak/workspace/workspace_pb2.pyi +10 -2
- _qwak_proto/qwak/workspace/workspace_service_pb2.py +63 -248
- _qwak_proto/qwak/workspace/workspace_service_pb2.pyi +56 -0
- _qwak_proto/qwak/workspace/workspace_service_pb2_grpc.py +66 -0
- qwak/__init__.py +2 -3
- qwak/automations/automation_executions.py +14 -10
- qwak/automations/automations.py +33 -23
- qwak/automations/build_and_deploy_action.py +147 -28
- qwak/automations/common.py +6 -0
- qwak/clients/administration/eco_system/client.py +2 -2
- qwak/clients/administration/eco_system/eco_system_utils.py +15 -0
- qwak/clients/administration/environment/client.py +16 -0
- qwak/clients/analytics/client.py +28 -3
- qwak/clients/batch_job_management/client.py +94 -3
- qwak/clients/batch_job_management/executions_config.py +18 -0
- qwak/clients/build_orchestrator/build_model_request_getter.py +3 -0
- qwak/clients/build_orchestrator/client.py +155 -12
- qwak/clients/data_versioning/client.py +19 -1
- qwak/clients/data_versioning/data_tag_filter.py +32 -0
- qwak/clients/deployment/client.py +14 -0
- qwak/clients/feature_store/execution_management_client.py +28 -0
- qwak/clients/feature_store/management_client.py +203 -146
- qwak/clients/feature_store/offline_serving_client.py +251 -0
- qwak/clients/feature_store/operator_client.py +21 -4
- qwak/clients/file_versioning/client.py +19 -1
- qwak/clients/file_versioning/file_tag_filter.py +32 -0
- qwak/clients/instance_template/client.py +11 -10
- qwak/clients/integration_management/integration_manager_client.py +34 -0
- qwak/clients/integration_management/integration_utils.py +27 -0
- qwak/clients/integration_management/openai/openai_system_secret.py +56 -0
- qwak/clients/kube_deployment_captain/client.py +3 -1
- qwak/clients/location_discovery/__init__.py +1 -0
- qwak/clients/location_discovery/client.py +73 -0
- qwak/clients/logging_client/client.py +13 -18
- qwak/clients/model_management/client.py +7 -2
- qwak/clients/project/client.py +7 -2
- qwak/clients/prompt_manager/__init__.py +0 -0
- qwak/clients/prompt_manager/model_descriptor_mapper.py +183 -0
- qwak/clients/prompt_manager/prompt_manager_client.py +167 -0
- qwak/clients/prompt_manager/prompt_proto_mapper.py +236 -0
- qwak/clients/secret_service/client.py +8 -3
- qwak/clients/system_secret/__init__.py +0 -0
- qwak/clients/system_secret/system_secret_client.py +30 -0
- qwak/clients/vector_store/management_client.py +2 -0
- qwak/clients/vector_store/serving_client.py +64 -18
- qwak/clients/workspace_manager/client.py +15 -0
- qwak/exceptions/__init__.py +7 -0
- qwak/exceptions/qwak_decode_exception.py +7 -0
- qwak/exceptions/qwak_exception.py +2 -1
- qwak/exceptions/qwak_external_exception.py +11 -0
- qwak/exceptions/qwak_general_build_exception.py +13 -0
- qwak/exceptions/qwak_grpc_address_exception.py +9 -0
- qwak/exceptions/qwak_load_configuration_exception.py +2 -0
- qwak/exceptions/qwak_remote_build_failed.py +5 -0
- qwak/exceptions/qwak_suggestion_exception.py +27 -0
- qwak/feature_store/_common/artifact_utils.py +59 -0
- qwak/feature_store/_common/feature_set_utils.py +142 -19
- qwak/feature_store/_common/functions.py +0 -43
- qwak/feature_store/_common/packaging.py +262 -0
- qwak/feature_store/_common/source_code_spec.py +108 -0
- qwak/feature_store/_common/source_code_spec_factory.py +104 -0
- qwak/feature_store/_common/value.py +10 -0
- qwak/feature_store/data_sources/__init__.py +53 -17
- qwak/feature_store/data_sources/attributes.py +23 -0
- qwak/feature_store/data_sources/base.py +125 -0
- qwak/feature_store/data_sources/batch/__init__.py +0 -0
- qwak/feature_store/data_sources/batch/_batch.py +9 -0
- qwak/feature_store/data_sources/{batch_sources → batch}/_jdbc.py +2 -1
- qwak/feature_store/data_sources/batch/athena.py +260 -0
- qwak/feature_store/data_sources/{batch_sources → batch}/big_query.py +5 -5
- qwak/feature_store/data_sources/batch/clickhouse.py +60 -0
- qwak/feature_store/data_sources/{batch_sources → batch}/csv.py +9 -5
- qwak/feature_store/data_sources/{batch_sources → batch}/elastic_search.py +5 -5
- qwak/feature_store/data_sources/batch/filesystem/__init__.py +0 -0
- qwak/feature_store/data_sources/{batch_sources/filesystem_config.py → batch/filesystem/aws.py} +30 -38
- qwak/feature_store/data_sources/batch/filesystem/base_config.py +13 -0
- qwak/feature_store/data_sources/batch/filesystem/gcp.py +50 -0
- qwak/feature_store/data_sources/batch/filesystem/utils.py +51 -0
- qwak/feature_store/data_sources/{batch_sources → batch}/mongodb.py +6 -5
- qwak/feature_store/data_sources/{batch_sources → batch}/mysql.py +5 -7
- qwak/feature_store/data_sources/{batch_sources → batch}/parquet.py +10 -7
- qwak/feature_store/data_sources/{batch_sources → batch}/postgres.py +5 -7
- qwak/feature_store/data_sources/{batch_sources → batch}/redshift.py +6 -7
- qwak/feature_store/data_sources/{batch_sources → batch}/snowflake.py +39 -13
- qwak/feature_store/data_sources/batch/unity_catalog.py +107 -0
- qwak/feature_store/data_sources/{batch_sources → batch}/vertica.py +6 -5
- qwak/feature_store/data_sources/source_authentication.py +33 -0
- qwak/feature_store/data_sources/streaming/__init__.py +0 -0
- qwak/feature_store/data_sources/streaming/_streaming.py +9 -0
- qwak/feature_store/data_sources/streaming/kafka/__init__.py +25 -0
- qwak/feature_store/data_sources/streaming/kafka/authentication.py +120 -0
- qwak/feature_store/data_sources/streaming/kafka/deserialization.py +109 -0
- qwak/feature_store/data_sources/streaming/kafka/kafka.py +120 -0
- qwak/feature_store/data_sources/time_partition_columns.py +166 -0
- qwak/feature_store/entities/entity.py +17 -4
- qwak/feature_store/execution/backfill.py +8 -2
- qwak/feature_store/execution/streaming_backfill.py +48 -0
- qwak/feature_store/feature_sets/_utils/_featureset_utils.py +45 -0
- qwak/feature_store/feature_sets/backfill.py +13 -0
- qwak/feature_store/feature_sets/base_feature_set.py +148 -0
- qwak/feature_store/feature_sets/batch.py +142 -151
- qwak/feature_store/feature_sets/execution_spec.py +6 -0
- qwak/feature_store/feature_sets/metadata.py +51 -1
- qwak/feature_store/feature_sets/streaming.py +655 -0
- qwak/feature_store/feature_sets/streaming_backfill.py +223 -0
- qwak/feature_store/feature_sets/transformations/__init__.py +33 -0
- qwak/feature_store/feature_sets/transformations/aggregations/__init__.py +0 -0
- qwak/feature_store/feature_sets/transformations/aggregations/aggregations.py +425 -0
- qwak/feature_store/feature_sets/transformations/aggregations/windows.py +70 -0
- qwak/feature_store/feature_sets/transformations/functions/__init__.py +10 -0
- qwak/feature_store/feature_sets/transformations/functions/qwak_pandas.py +64 -0
- qwak/feature_store/feature_sets/transformations/functions/schema.py +57 -0
- qwak/feature_store/feature_sets/transformations/transformations.py +451 -0
- qwak/feature_store/feature_sets/transformations/validations/validations_util.py +78 -0
- qwak/feature_store/offline/__init__.py +2 -2
- qwak/feature_store/offline/_offline_serving_validations.py +31 -0
- qwak/feature_store/offline/client_v2.py +327 -0
- qwak/feature_store/offline/feature_set_features.py +25 -0
- qwak/feature_store/online/client.py +152 -46
- qwak/feature_store/online/endpoint_utils.py +63 -0
- qwak/feature_store/sinks/__init__.py +0 -0
- qwak/feature_store/sinks/base.py +18 -0
- qwak/feature_store/sinks/kafka.py +59 -0
- qwak/feature_store/sinks/streaming/__init__.py +0 -0
- qwak/feature_store/sinks/streaming/attachment.py +30 -0
- qwak/feature_store/sinks/streaming/factory.py +60 -0
- qwak/feature_store/validations/__init__.py +0 -0
- qwak/feature_store/validations/validation_decorators.py +70 -0
- qwak/feature_store/validations/validation_options.py +77 -0
- qwak/feature_store/validations/validation_response.py +119 -0
- qwak/feature_store/validations/validator.py +114 -0
- qwak/inner/build_config/__init__.py +0 -0
- qwak/inner/build_config/build_config_v1.py +311 -0
- qwak/inner/build_logic/__init__.py +0 -0
- qwak/inner/build_logic/build_loggers/__init__.py +0 -0
- qwak/inner/build_logic/build_loggers/trigger_build_logger.py +51 -0
- qwak/inner/build_logic/constants/__init__.py +0 -0
- qwak/inner/build_logic/constants/dependencies.py +5 -0
- qwak/inner/build_logic/constants/host_resource.py +4 -0
- qwak/inner/build_logic/constants/messages.py +3 -0
- qwak/inner/build_logic/constants/temp_dir.py +1 -0
- qwak/inner/build_logic/constants/upload_tag.py +7 -0
- qwak/inner/build_logic/dependency_manager_type.py +8 -0
- qwak/inner/build_logic/execute_build_pipeline.py +62 -0
- qwak/inner/build_logic/interface/__init__.py +0 -0
- qwak/inner/build_logic/interface/build_logger_interface.py +28 -0
- qwak/inner/build_logic/interface/build_phase.py +24 -0
- qwak/inner/build_logic/interface/context_interface.py +66 -0
- qwak/inner/build_logic/interface/phase_run_handler.py +71 -0
- qwak/inner/build_logic/interface/step_inteface.py +26 -0
- qwak/inner/build_logic/interface/time_source.py +23 -0
- qwak/inner/build_logic/phases/__init__.py +0 -0
- qwak/inner/build_logic/phases/phase_010_fetch_model/__init__.py +0 -0
- qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_model_step.py +43 -0
- qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/__init__.py +0 -0
- qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/common.py +32 -0
- qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/fetch_strategy_manager.py +62 -0
- qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/__init__.py +0 -0
- qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/folder/__init__.py +0 -0
- qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/folder/folder_strategy.py +131 -0
- qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/git/__init__.py +0 -0
- qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/git/git_strategy.py +186 -0
- qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/strategy.py +48 -0
- qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/zip/__init__.py +0 -0
- qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/zip/zip_strategy.py +64 -0
- qwak/inner/build_logic/phases/phase_010_fetch_model/post_fetch_validation_step.py +140 -0
- qwak/inner/build_logic/phases/phase_010_fetch_model/pre_fetch_validation_step.py +266 -0
- qwak/inner/build_logic/phases/phase_010_fetch_model/set_version_step.py +33 -0
- qwak/inner/build_logic/phases/phase_020_remote_register_qwak_build/__init__.py +0 -0
- qwak/inner/build_logic/phases/phase_020_remote_register_qwak_build/cleanup_step.py +20 -0
- qwak/inner/build_logic/phases/phase_020_remote_register_qwak_build/start_remote_build_step.py +43 -0
- qwak/inner/build_logic/phases/phase_020_remote_register_qwak_build/upload_step.py +258 -0
- qwak/inner/build_logic/phases/phases_pipeline.py +44 -0
- qwak/inner/build_logic/run_handlers/__init__.py +0 -0
- qwak/inner/build_logic/run_handlers/programmatic_phase_run_handler.py +99 -0
- qwak/inner/build_logic/tools/__init__.py +0 -0
- qwak/inner/build_logic/tools/dependencies_tools.py +68 -0
- qwak/inner/build_logic/tools/files.py +237 -0
- qwak/inner/build_logic/tools/ignore_files.py +20 -0
- qwak/inner/build_logic/tools/text.py +9 -0
- qwak/inner/build_logic/trigger_build_context.py +10 -0
- qwak/inner/const.py +2 -4
- qwak/inner/di_configuration/__init__.py +1 -63
- qwak/inner/di_configuration/account.py +32 -15
- qwak/inner/di_configuration/config.yml +2 -0
- qwak/inner/di_configuration/containers.py +10 -2
- qwak/inner/di_configuration/dependency_wiring.py +98 -0
- qwak/inner/di_configuration/session.py +5 -0
- qwak/inner/instance_template/__init__.py +0 -0
- qwak/inner/instance_template/verify_template_id.py +48 -0
- qwak/inner/model_loggers_utils.py +10 -7
- qwak/inner/provider.py +6 -0
- qwak/inner/tool/auth.py +42 -7
- qwak/inner/tool/grpc/grpc_auth.py +27 -8
- qwak/inner/tool/grpc/grpc_tools.py +124 -4
- qwak/inner/tool/grpc/grpc_try_wrapping.py +139 -4
- qwak/inner/tool/protobuf_factory.py +45 -0
- qwak/inner/tool/run_config/__init__.py +2 -0
- qwak/inner/tool/run_config/base.py +32 -7
- qwak/inner/tool/run_config/utils.py +66 -1
- qwak/llmops/__init__.py +0 -0
- qwak/llmops/generation/__init__.py +0 -0
- qwak/llmops/generation/_steaming.py +77 -0
- qwak/llmops/generation/base.py +5 -0
- qwak/llmops/generation/chat/__init__.py +0 -0
- qwak/llmops/generation/chat/openai/LICENSE.txt +201 -0
- qwak/llmops/generation/chat/openai/types/__init__.py +0 -0
- qwak/llmops/generation/chat/openai/types/chat/__init__.py +0 -0
- qwak/llmops/generation/chat/openai/types/chat/chat_completion.py +105 -0
- qwak/llmops/generation/chat/openai/types/chat/chat_completion_assistant_message_param.py +65 -0
- qwak/llmops/generation/chat/openai/types/chat/chat_completion_chunk.py +188 -0
- qwak/llmops/generation/chat/openai/types/chat/chat_completion_content_part_text_param.py +28 -0
- qwak/llmops/generation/chat/openai/types/chat/chat_completion_function_call_option_param.py +25 -0
- qwak/llmops/generation/chat/openai/types/chat/chat_completion_function_message_param.py +33 -0
- qwak/llmops/generation/chat/openai/types/chat/chat_completion_message.py +59 -0
- qwak/llmops/generation/chat/openai/types/chat/chat_completion_message_param.py +34 -0
- qwak/llmops/generation/chat/openai/types/chat/chat_completion_message_tool_call.py +46 -0
- qwak/llmops/generation/chat/openai/types/chat/chat_completion_message_tool_call_param.py +44 -0
- qwak/llmops/generation/chat/openai/types/chat/chat_completion_named_tool_choice_param.py +32 -0
- qwak/llmops/generation/chat/openai/types/chat/chat_completion_role.py +20 -0
- qwak/llmops/generation/chat/openai/types/chat/chat_completion_system_message_param.py +35 -0
- qwak/llmops/generation/chat/openai/types/chat/chat_completion_token_logprob.py +71 -0
- qwak/llmops/generation/chat/openai/types/chat/chat_completion_tool_choice_option_param.py +28 -0
- qwak/llmops/generation/chat/openai/types/chat/chat_completion_tool_message_param.py +31 -0
- qwak/llmops/generation/chat/openai/types/chat/chat_completion_tool_param.py +29 -0
- qwak/llmops/generation/chat/openai/types/chat/chat_completion_user_message_param.py +35 -0
- qwak/llmops/generation/chat/openai/types/chat/completion_create_params.py +279 -0
- qwak/llmops/generation/chat/openai/types/completion_choice.py +47 -0
- qwak/llmops/generation/chat/openai/types/completion_create_params.py +209 -0
- qwak/llmops/generation/chat/openai/types/completion_usage.py +30 -0
- qwak/llmops/generation/chat/openai/types/model.py +35 -0
- qwak/llmops/generation/chat/openai/types/shared/__init__.py +3 -0
- qwak/llmops/generation/chat/openai/types/shared/error_object.py +27 -0
- qwak/llmops/generation/chat/openai/types/shared/function_definition.py +49 -0
- qwak/llmops/generation/chat/openai/types/shared/function_parameters.py +20 -0
- qwak/llmops/generation/chat/openai/types/shared_params/__init__.py +2 -0
- qwak/llmops/generation/chat/openai/types/shared_params/function_definition.py +49 -0
- qwak/llmops/generation/chat/openai/types/shared_params/function_parameters.py +22 -0
- qwak/llmops/generation/streaming.py +26 -0
- qwak/llmops/model/__init__.py +0 -0
- qwak/llmops/model/descriptor.py +39 -0
- qwak/llmops/prompt/__init__.py +0 -0
- qwak/llmops/prompt/base.py +133 -0
- qwak/llmops/prompt/chat/__init__.py +0 -0
- qwak/llmops/prompt/chat/message.py +24 -0
- qwak/llmops/prompt/chat/template.py +113 -0
- qwak/llmops/prompt/chat/value.py +10 -0
- qwak/llmops/prompt/manager.py +134 -0
- qwak/llmops/prompt/template.py +24 -0
- qwak/llmops/prompt/value.py +14 -0
- qwak/llmops/provider/__init__.py +0 -0
- qwak/llmops/provider/chat.py +42 -0
- qwak/llmops/provider/openai/__init__.py +0 -0
- qwak/llmops/provider/openai/client.py +123 -0
- qwak/llmops/provider/openai/provider.py +89 -0
- qwak/model/_entity_extraction.py +40 -46
- qwak/model/adapters/input_adapters/multi_input_adapter.py +17 -1
- qwak/model/base.py +1 -1
- qwak/model/decorators/api.py +3 -1
- qwak/model/decorators/impl/api_implementation.py +1 -0
- qwak/model/fs_info_mapping_retriever.py +58 -0
- qwak/model/schema.py +1 -1
- qwak/model/schema_entities.py +1 -1
- qwak/model/tools/__init__.py +1 -1
- qwak/model/tools/adapters/input_adapters/dataframe_input.py +1 -1
- qwak/model/tools/adapters/output.py +1 -1
- qwak/model/tools/run_model_locally.py +15 -3
- qwak/model/utils/feature_utils.py +69 -0
- qwak/model_loggers/artifact_logger.py +46 -9
- qwak/model_loggers/data_logger.py +16 -2
- qwak/qwak_client/batch_jobs/execution.py +49 -0
- qwak/qwak_client/batch_jobs/task.py +43 -0
- qwak/qwak_client/build_api_helpers/__init__.py +0 -0
- qwak/qwak_client/build_api_helpers/build_api_steps.py +53 -0
- qwak/qwak_client/build_api_helpers/messages.py +6 -0
- qwak/qwak_client/build_api_helpers/trigger_build_api.py +65 -0
- qwak/qwak_client/client.py +276 -24
- qwak/qwak_client/data_versioning/__init__.py +0 -0
- qwak/qwak_client/data_versioning/data_tag.py +24 -0
- qwak/qwak_client/deployments/deployment.py +11 -9
- qwak/qwak_client/file_versioning/__init__.py +0 -0
- qwak/qwak_client/file_versioning/file_tag.py +24 -0
- qwak/qwak_client/projects/project.py +4 -2
- qwak/tools/logger/logger.py +1 -1
- qwak/utils/__init__.py +0 -0
- qwak/utils/datetime_utils.py +18 -0
- qwak/utils/dict_utils.py +12 -0
- qwak/vector_store/client.py +8 -0
- qwak/vector_store/collection.py +173 -73
- qwak/vector_store/inference_client.py +30 -2
- qwak/vector_store/rest_helpers.py +13 -21
- qwak/vector_store/utils/filter_utils.py +4 -17
- qwak/vector_store/utils/upsert_utils.py +217 -0
- {qwak_core-0.1.37.dist-info → qwak_core-0.5.19.dist-info}/METADATA +20 -15
- qwak_core-0.5.19.dist-info/RECORD +1100 -0
- {qwak_core-0.1.37.dist-info → qwak_core-0.5.19.dist-info}/WHEEL +1 -1
- qwak_services_mock/mocks/authentication_service.py +5 -4
- qwak_services_mock/mocks/batch_job_manager_service.py +53 -6
- qwak_services_mock/mocks/build_orchestrator_build_api.py +18 -1
- qwak_services_mock/mocks/build_orchestrator_build_settings_api.py +35 -0
- qwak_services_mock/mocks/build_orchestrator_service_api.py +4 -0
- qwak_services_mock/mocks/data_versioning_service.py +26 -2
- qwak_services_mock/mocks/deployment_management_service.py +46 -18
- qwak_services_mock/mocks/ecosystem_service_api.py +0 -1
- qwak_services_mock/mocks/execution_management_service.py +9 -1
- qwak_services_mock/mocks/feature_store_data_sources_manager_api.py +98 -2
- qwak_services_mock/mocks/feature_store_entities_manager_api.py +46 -3
- qwak_services_mock/mocks/feature_store_feature_set_manager_api.py +197 -21
- qwak_services_mock/mocks/features_online_serving_api.py +9 -0
- qwak_services_mock/mocks/features_operator_v3_service.py +20 -0
- qwak_services_mock/mocks/features_set_state_service_api.py +0 -1
- qwak_services_mock/mocks/file_versioning_service.py +29 -2
- qwak_services_mock/mocks/fs_offline_serving_service.py +53 -0
- qwak_services_mock/mocks/instance_template_management_service.py +35 -1
- qwak_services_mock/mocks/integration_management_service.py +72 -0
- qwak_services_mock/mocks/location_discovery_service_api.py +104 -0
- qwak_services_mock/mocks/model_management_service.py +11 -5
- qwak_services_mock/mocks/prompt_manager_service.py +244 -0
- qwak_services_mock/mocks/qwak_mocks.py +20 -2
- qwak_services_mock/mocks/system_secret_service.py +54 -0
- qwak_services_mock/mocks/vector_serving_api.py +44 -8
- qwak_services_mock/mocks/workspace_manager_service_mock.py +24 -8
- qwak_services_mock/services_mock.py +78 -12
- _qwak_proto/qwak/fitness_service/fitness_service_pb2.py +0 -110
- _qwak_proto/qwak/fitness_service/fitness_service_pb2.pyi +0 -121
- _qwak_proto/qwak/fitness_service/fitness_service_pb2_grpc.py +0 -169
- qwak/clients/build_management/__init__.py +0 -1
- qwak/clients/build_management/client.py +0 -114
- qwak/feature_store/_common/featureset_asterisk_handler.py +0 -115
- qwak/feature_store/data_sources/batch_sources/__init__.py +0 -6
- qwak/feature_store/data_sources/batch_sources/_batch.py +0 -86
- qwak/feature_store/feature_sets/transformations.py +0 -48
- qwak/feature_store/offline/_query_engine.py +0 -32
- qwak/feature_store/offline/athena/athena_query_engine.py +0 -153
- qwak/feature_store/offline/client.py +0 -699
- qwak/feature_store/validation_options.py +0 -69
- qwak_core-0.1.37.dist-info/RECORD +0 -682
- qwak_services_mock/mocks/build_management.py +0 -100
- {_qwak_proto → qwak/clients/integration_management}/__init__.py +0 -0
- /qwak/{feature_store/offline/athena → clients/integration_management/openai}/__init__.py +0 -0
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
from typing import List, Optional
|
|
3
|
+
|
|
4
|
+
import grpc
|
|
5
|
+
from _qwak_proto.qwak.offline.serving.v1.feature_values_pb2 import (
|
|
6
|
+
FeaturesetFeatures as ProtoFeaturesetFeatures,
|
|
7
|
+
)
|
|
8
|
+
from _qwak_proto.qwak.offline.serving.v1.offline_serving_async_service_pb2 import (
|
|
9
|
+
FeatureValuesRequestStatus as ProtoFeatureValuesRequestStatus,
|
|
10
|
+
FileFormat as ProtoFileFormat,
|
|
11
|
+
GetFeatureValuesInRangeRequest as ProtoGetFeatureValuesInRangeRequest,
|
|
12
|
+
GetFeatureValuesInRangeResponse as ProtoGetFeatureValuesInRangeResponse,
|
|
13
|
+
GetFeatureValuesRequest as ProtoGetFeatureValuesRequest,
|
|
14
|
+
GetFeatureValuesResponse as ProtoGetFeatureValuesResponse,
|
|
15
|
+
GetFeatureValuesResultRequest as ProtoGetFeatureValuesResultRequest,
|
|
16
|
+
GetFeatureValuesResultResponse as ProtoGetFeatureValuesResultResponse,
|
|
17
|
+
GetFileUploadUrlRequest as ProtoGetFileUploadUrlRequest,
|
|
18
|
+
GetFileUploadUrlResponse as ProtoGetFileUploadUrlResponse,
|
|
19
|
+
)
|
|
20
|
+
from _qwak_proto.qwak.offline.serving.v1.offline_serving_async_service_pb2_grpc import (
|
|
21
|
+
FeatureStoreOfflineServingAsyncServiceStub,
|
|
22
|
+
)
|
|
23
|
+
from _qwak_proto.qwak.offline.serving.v1.options_pb2 import (
|
|
24
|
+
OfflineServingQueryOptions as ProtoOfflineServingQueryOptions,
|
|
25
|
+
)
|
|
26
|
+
from _qwak_proto.qwak.offline.serving.v1.population_pb2 import (
|
|
27
|
+
Population as ProtoPopulation,
|
|
28
|
+
PopulationFileUploadUrlType as ProtoPopulationFileUploadUrlType,
|
|
29
|
+
TimedPopulation as ProtoTimedPopulation,
|
|
30
|
+
)
|
|
31
|
+
from google.protobuf.timestamp_pb2 import Timestamp as ProtoTimestamp
|
|
32
|
+
from qwak.clients.location_discovery import LocationDiscoveryClient
|
|
33
|
+
from qwak.inner.tool.grpc.grpc_tools import create_grpc_channel
|
|
34
|
+
from qwak.inner.tool.retry_utils import retry
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class FeatureValuesResultNotReadyException(Exception):
|
|
38
|
+
pass
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class FeatureValuesTimeoutException(Exception):
|
|
42
|
+
pass
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class FsOfflineServingClient:
|
|
46
|
+
"""
|
|
47
|
+
Querying offline features store
|
|
48
|
+
"""
|
|
49
|
+
|
|
50
|
+
def __init__(self, grpc_channel: Optional[grpc.Channel] = None):
|
|
51
|
+
self._client = self._create_client(grpc_channel)
|
|
52
|
+
|
|
53
|
+
@staticmethod
|
|
54
|
+
def _get_offline_serving_url() -> str:
|
|
55
|
+
"""
|
|
56
|
+
Fetches the offline serving service URL from the LocationDiscoveryService.
|
|
57
|
+
"""
|
|
58
|
+
return LocationDiscoveryClient().get_offline_serving().service_url
|
|
59
|
+
|
|
60
|
+
def _create_client(
|
|
61
|
+
self, grpc_channel: Optional[grpc.Channel] = None
|
|
62
|
+
) -> FeatureStoreOfflineServingAsyncServiceStub:
|
|
63
|
+
if grpc_channel:
|
|
64
|
+
return FeatureStoreOfflineServingAsyncServiceStub(grpc_channel)
|
|
65
|
+
|
|
66
|
+
channel = create_grpc_channel(
|
|
67
|
+
url=self._get_offline_serving_url(),
|
|
68
|
+
enable_ssl=True,
|
|
69
|
+
status_for_retry=(
|
|
70
|
+
grpc.StatusCode.UNAVAILABLE,
|
|
71
|
+
grpc.StatusCode.CANCELLED,
|
|
72
|
+
grpc.StatusCode.DEADLINE_EXCEEDED,
|
|
73
|
+
),
|
|
74
|
+
)
|
|
75
|
+
return FeatureStoreOfflineServingAsyncServiceStub(channel)
|
|
76
|
+
|
|
77
|
+
def get_population_file_upload_url(
|
|
78
|
+
self,
|
|
79
|
+
) -> str:
|
|
80
|
+
"""
|
|
81
|
+
Generating population file upload url
|
|
82
|
+
:return: pre-signed url to upload population data
|
|
83
|
+
"""
|
|
84
|
+
|
|
85
|
+
request: ProtoGetFileUploadUrlRequest = ProtoGetFileUploadUrlRequest(
|
|
86
|
+
population=ProtoPopulationFileUploadUrlType()
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
response: ProtoGetFileUploadUrlResponse = self._client.GetFileUploadUrl(request)
|
|
90
|
+
return response.file_upload_url
|
|
91
|
+
|
|
92
|
+
def get_feature_values(
|
|
93
|
+
self,
|
|
94
|
+
features: List[ProtoFeaturesetFeatures],
|
|
95
|
+
population: ProtoTimedPopulation,
|
|
96
|
+
result_file_format: ProtoFileFormat,
|
|
97
|
+
options: ProtoOfflineServingQueryOptions,
|
|
98
|
+
) -> str:
|
|
99
|
+
"""
|
|
100
|
+
Getting offline feature values
|
|
101
|
+
:return: Request handle id to poll for result with
|
|
102
|
+
"""
|
|
103
|
+
request: ProtoGetFeatureValuesRequest = ProtoGetFeatureValuesRequest(
|
|
104
|
+
features=features,
|
|
105
|
+
population=population,
|
|
106
|
+
result_file_format=result_file_format,
|
|
107
|
+
options=options,
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
response: ProtoGetFeatureValuesResponse = self._client.GetFeatureValues(request)
|
|
111
|
+
return response.request_id
|
|
112
|
+
|
|
113
|
+
def get_feature_values_in_range(
|
|
114
|
+
self,
|
|
115
|
+
features: ProtoFeaturesetFeatures,
|
|
116
|
+
lower_time_bound: ProtoTimestamp,
|
|
117
|
+
upper_time_bound: ProtoTimestamp,
|
|
118
|
+
result_file_format: ProtoFileFormat,
|
|
119
|
+
population: Optional[ProtoPopulation],
|
|
120
|
+
options: ProtoOfflineServingQueryOptions,
|
|
121
|
+
) -> str:
|
|
122
|
+
"""
|
|
123
|
+
Getting offline feature values
|
|
124
|
+
:return: Request handle id to poll for result with
|
|
125
|
+
"""
|
|
126
|
+
request: ProtoGetFeatureValuesInRangeRequest = (
|
|
127
|
+
ProtoGetFeatureValuesInRangeRequest(
|
|
128
|
+
features=features,
|
|
129
|
+
lower_time_bound=lower_time_bound,
|
|
130
|
+
upper_time_bound=upper_time_bound,
|
|
131
|
+
result_file_format=result_file_format,
|
|
132
|
+
population=population,
|
|
133
|
+
options=options,
|
|
134
|
+
)
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
response: ProtoGetFeatureValuesInRangeResponse = (
|
|
138
|
+
self._client.GetFeatureValuesInRange(request)
|
|
139
|
+
)
|
|
140
|
+
return response.request_id
|
|
141
|
+
|
|
142
|
+
def get_result(self, request_handle: str) -> ProtoGetFeatureValuesResultResponse:
|
|
143
|
+
request: ProtoGetFeatureValuesResultRequest = (
|
|
144
|
+
ProtoGetFeatureValuesResultRequest(request_id=request_handle)
|
|
145
|
+
)
|
|
146
|
+
|
|
147
|
+
return self._client.GetFeatureValuesResult(request)
|
|
148
|
+
|
|
149
|
+
def _inner_poll(self, request_handle: str) -> ProtoGetFeatureValuesResultResponse:
|
|
150
|
+
"""
|
|
151
|
+
This function receives request_handle amd polls for results.
|
|
152
|
+
|
|
153
|
+
Args:
|
|
154
|
+
request_handle: request_id for polling
|
|
155
|
+
|
|
156
|
+
Returns: if the request status is PENDING it throws FeatureValuesResultNotReadyException.
|
|
157
|
+
else returns the Feature Values Result
|
|
158
|
+
"""
|
|
159
|
+
response: ProtoGetFeatureValuesResultResponse = self.get_result(
|
|
160
|
+
request_handle=request_handle
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
if (
|
|
164
|
+
response.status
|
|
165
|
+
== ProtoFeatureValuesRequestStatus.FEATURE_VALUES_REQUEST_STATUS_PENDING
|
|
166
|
+
):
|
|
167
|
+
logging.info("Feature Values query is still in progress...")
|
|
168
|
+
raise FeatureValuesResultNotReadyException()
|
|
169
|
+
|
|
170
|
+
return response
|
|
171
|
+
|
|
172
|
+
def poll_for_result(
|
|
173
|
+
self,
|
|
174
|
+
request_handle: str,
|
|
175
|
+
timeout_seconds: int = 60 * 60,
|
|
176
|
+
poll_interval_seconds: int = 10,
|
|
177
|
+
) -> ProtoGetFeatureValuesResultResponse:
|
|
178
|
+
"""
|
|
179
|
+
This function receives request_handle and polls for Feature Values Result.
|
|
180
|
+
it relies on _inner_poll() to raise FeatureValuesResultNotReadyException in case the result is not ready.
|
|
181
|
+
only once the desired amount of attempts completed it raises FeatureValuesTimeoutException
|
|
182
|
+
Args:
|
|
183
|
+
request_handle: request_id
|
|
184
|
+
timeout_seconds: total number of seconds for all attempts before timeout
|
|
185
|
+
poll_interval_seconds: sleep time between attempts
|
|
186
|
+
|
|
187
|
+
Returns: Feature Values Result or raises FeatureValuesTimeoutException if attempts exceeded timeout_seconds.
|
|
188
|
+
|
|
189
|
+
"""
|
|
190
|
+
try:
|
|
191
|
+
result = retry(
|
|
192
|
+
f=self._inner_poll,
|
|
193
|
+
kwargs={"request_handle": request_handle},
|
|
194
|
+
exceptions=FeatureValuesResultNotReadyException,
|
|
195
|
+
attempts=int(timeout_seconds / poll_interval_seconds) + 1,
|
|
196
|
+
delay=poll_interval_seconds,
|
|
197
|
+
)
|
|
198
|
+
except FeatureValuesResultNotReadyException:
|
|
199
|
+
raise FeatureValuesTimeoutException(
|
|
200
|
+
f"Feature values query timed out. Qwak limits query execution time to {int(timeout_seconds / 60)} minutes"
|
|
201
|
+
)
|
|
202
|
+
|
|
203
|
+
return result
|
|
204
|
+
|
|
205
|
+
def get_feature_values_blocking(
|
|
206
|
+
self,
|
|
207
|
+
features: List[ProtoFeaturesetFeatures],
|
|
208
|
+
population: ProtoTimedPopulation,
|
|
209
|
+
result_file_format: ProtoFileFormat,
|
|
210
|
+
options: ProtoOfflineServingQueryOptions,
|
|
211
|
+
timeout_seconds: int = 60 * 60,
|
|
212
|
+
poll_interval_seconds: int = 10,
|
|
213
|
+
) -> ProtoGetFeatureValuesResultResponse:
|
|
214
|
+
request_handle: str = self.get_feature_values(
|
|
215
|
+
features=features,
|
|
216
|
+
population=population,
|
|
217
|
+
result_file_format=result_file_format,
|
|
218
|
+
options=options,
|
|
219
|
+
)
|
|
220
|
+
|
|
221
|
+
return self.poll_for_result(
|
|
222
|
+
request_handle=request_handle,
|
|
223
|
+
timeout_seconds=timeout_seconds,
|
|
224
|
+
poll_interval_seconds=poll_interval_seconds,
|
|
225
|
+
)
|
|
226
|
+
|
|
227
|
+
def get_feature_values_in_range_blocking(
|
|
228
|
+
self,
|
|
229
|
+
features: ProtoFeaturesetFeatures,
|
|
230
|
+
lower_time_bound: ProtoTimestamp,
|
|
231
|
+
upper_time_bound: ProtoTimestamp,
|
|
232
|
+
result_file_format: ProtoFileFormat,
|
|
233
|
+
options: ProtoOfflineServingQueryOptions,
|
|
234
|
+
population: Optional[ProtoPopulation] = None,
|
|
235
|
+
timeout_seconds: int = 60 * 60,
|
|
236
|
+
poll_interval_seconds: int = 10,
|
|
237
|
+
) -> ProtoGetFeatureValuesResultResponse:
|
|
238
|
+
request_handle: str = self.get_feature_values_in_range(
|
|
239
|
+
features=features,
|
|
240
|
+
lower_time_bound=lower_time_bound,
|
|
241
|
+
upper_time_bound=upper_time_bound,
|
|
242
|
+
population=population,
|
|
243
|
+
result_file_format=result_file_format,
|
|
244
|
+
options=options,
|
|
245
|
+
)
|
|
246
|
+
|
|
247
|
+
return self.poll_for_result(
|
|
248
|
+
request_handle=request_handle,
|
|
249
|
+
timeout_seconds=timeout_seconds,
|
|
250
|
+
poll_interval_seconds=poll_interval_seconds,
|
|
251
|
+
)
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
from pathlib import Path
|
|
2
1
|
from typing import Optional
|
|
3
2
|
|
|
4
3
|
from _qwak_proto.qwak.feature_store.features.feature_set_pb2 import FeatureSetSpec
|
|
@@ -20,6 +19,7 @@ from _qwak_proto.qwak.features_operator.v3.features_operator_pb2 import (
|
|
|
20
19
|
)
|
|
21
20
|
from dependency_injector.wiring import Provide
|
|
22
21
|
from qwak.inner.di_configuration import QwakContainer
|
|
22
|
+
from qwak.inner.tool.grpc.grpc_try_wrapping import grpc_try_catch_wrapper
|
|
23
23
|
from qwak.inner.tool.retry_utils import retry
|
|
24
24
|
|
|
25
25
|
|
|
@@ -39,6 +39,9 @@ class FeaturesOperatorClient:
|
|
|
39
39
|
def __init__(self, grpc_channel=Provide[QwakContainer.core_grpc_channel]):
|
|
40
40
|
self._v3_client = FeaturesOperatorAsyncServiceStub(grpc_channel)
|
|
41
41
|
|
|
42
|
+
@grpc_try_catch_wrapper(
|
|
43
|
+
"Failed to validate DataSource", reraise_non_grpc_error_original_exception=True
|
|
44
|
+
)
|
|
42
45
|
def validate_data_source(
|
|
43
46
|
self,
|
|
44
47
|
data_source_spec: DataSourceSpec,
|
|
@@ -57,10 +60,13 @@ class FeaturesOperatorClient:
|
|
|
57
60
|
response: ValidationResponse = self._v3_client.ValidateDataSource(request)
|
|
58
61
|
return response.request_id
|
|
59
62
|
|
|
63
|
+
@grpc_try_catch_wrapper(
|
|
64
|
+
"Failed to validate FeatureSet", reraise_non_grpc_error_original_exception=True
|
|
65
|
+
)
|
|
60
66
|
def validate_featureset(
|
|
61
67
|
self,
|
|
62
68
|
featureset_spec: FeatureSetSpec,
|
|
63
|
-
resource_path: Optional[
|
|
69
|
+
resource_path: Optional[str] = None,
|
|
64
70
|
num_samples: int = 10,
|
|
65
71
|
validation_options: Optional[FeatureSetValidationOptions] = None,
|
|
66
72
|
) -> str:
|
|
@@ -68,7 +74,6 @@ class FeaturesOperatorClient:
|
|
|
68
74
|
Validates and fetches a sample from the featureset
|
|
69
75
|
:return: Request handle id to poll for result with
|
|
70
76
|
"""
|
|
71
|
-
resource_path = str(resource_path) if resource_path is not None else None
|
|
72
77
|
request: ValidateFeatureSetRequest = ValidateFeatureSetRequest(
|
|
73
78
|
feature_set_spec=featureset_spec,
|
|
74
79
|
num_samples=num_samples,
|
|
@@ -79,7 +84,15 @@ class FeaturesOperatorClient:
|
|
|
79
84
|
response: ValidationResponse = self._v3_client.ValidateFeatureSet(request)
|
|
80
85
|
return response.request_id
|
|
81
86
|
|
|
87
|
+
@grpc_try_catch_wrapper(
|
|
88
|
+
"Failed to fetch validation result",
|
|
89
|
+
reraise_non_grpc_error_original_exception=True,
|
|
90
|
+
)
|
|
82
91
|
def get_result(self, request_handle: str) -> GetValidationResultResponse:
|
|
92
|
+
"""
|
|
93
|
+
Try to fetch the validation result using the given request handle.
|
|
94
|
+
:return: the validation result
|
|
95
|
+
"""
|
|
83
96
|
request: GetValidationResultRequest = GetValidationResultRequest(
|
|
84
97
|
request_id=request_handle
|
|
85
98
|
)
|
|
@@ -106,6 +119,10 @@ class FeaturesOperatorClient:
|
|
|
106
119
|
timeout_seconds: int = 5 * 60,
|
|
107
120
|
poll_interval_seconds: int = 3,
|
|
108
121
|
) -> GetValidationResultResponse:
|
|
122
|
+
"""
|
|
123
|
+
Retry wrapper on 'get_result' method that polls for the validation result
|
|
124
|
+
:return: the validation result
|
|
125
|
+
"""
|
|
109
126
|
try:
|
|
110
127
|
result = retry(
|
|
111
128
|
f=self._inner_poll,
|
|
@@ -144,7 +161,7 @@ class FeaturesOperatorClient:
|
|
|
144
161
|
def validate_featureset_blocking(
|
|
145
162
|
self,
|
|
146
163
|
featureset_spec: FeatureSetSpec,
|
|
147
|
-
resource_path: Optional[
|
|
164
|
+
resource_path: Optional[str] = None,
|
|
148
165
|
num_samples: int = 10,
|
|
149
166
|
timeout_seconds: int = 5 * 60,
|
|
150
167
|
poll_interval_seconds: int = 3,
|
|
@@ -2,8 +2,12 @@ from pathlib import Path
|
|
|
2
2
|
from typing import Optional
|
|
3
3
|
|
|
4
4
|
import grpc
|
|
5
|
-
from _qwak_proto.qwak.file_versioning.file_versioning_pb2 import
|
|
5
|
+
from _qwak_proto.qwak.file_versioning.file_versioning_pb2 import (
|
|
6
|
+
FileTagFilter,
|
|
7
|
+
FileTagSpec,
|
|
8
|
+
)
|
|
6
9
|
from _qwak_proto.qwak.file_versioning.file_versioning_service_pb2 import (
|
|
10
|
+
GetModelFileTagsRequest,
|
|
7
11
|
RegisterFileTagRequest,
|
|
8
12
|
)
|
|
9
13
|
from _qwak_proto.qwak.file_versioning.file_versioning_service_pb2_grpc import (
|
|
@@ -56,3 +60,17 @@ class FileVersioningManagementClient:
|
|
|
56
60
|
)
|
|
57
61
|
else:
|
|
58
62
|
raise e
|
|
63
|
+
|
|
64
|
+
def get_model_file_tags(
|
|
65
|
+
self, model_id: str, build_id: str, file_tag_filter: FileTagFilter = None
|
|
66
|
+
):
|
|
67
|
+
try:
|
|
68
|
+
return self._file_management_service.GetModelFileTags(
|
|
69
|
+
GetModelFileTagsRequest(
|
|
70
|
+
model_id=model_id, build_id=build_id, filter=file_tag_filter
|
|
71
|
+
)
|
|
72
|
+
)
|
|
73
|
+
except grpc.RpcError as e:
|
|
74
|
+
raise QwakException(
|
|
75
|
+
f"Failed to list model file tags, error is {e.details()}"
|
|
76
|
+
)
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
from dataclasses import dataclass, field
|
|
2
|
+
from enum import Enum
|
|
3
|
+
|
|
4
|
+
from _qwak_proto.qwak.file_versioning.file_versioning_pb2 import (
|
|
5
|
+
FileTagFilter as FileTagFilterProto,
|
|
6
|
+
)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class FileTagFilerType(Enum):
|
|
10
|
+
FILE_TAG_FILTER_TYPE_INVALID = 0
|
|
11
|
+
FILE_TAG_FILTER_TYPE_CONTAINS = 1
|
|
12
|
+
FILE_TAG_FILTER_TYPE_PREFIX = 2
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@dataclass
|
|
16
|
+
class FileTagFilter:
|
|
17
|
+
value: str = field(default=None)
|
|
18
|
+
type: FileTagFilerType = field(
|
|
19
|
+
default=FileTagFilerType.FILE_TAG_FILTER_TYPE_INVALID
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
def to_proto(self):
|
|
23
|
+
if self.type is FileTagFilerType.FILE_TAG_FILTER_TYPE_CONTAINS:
|
|
24
|
+
return FileTagFilterProto(
|
|
25
|
+
tag_contains=self.value,
|
|
26
|
+
)
|
|
27
|
+
elif self.type is FileTagFilerType.FILE_TAG_FILTER_TYPE_PREFIX:
|
|
28
|
+
return FileTagFilterProto(
|
|
29
|
+
tag_prefix=self.value,
|
|
30
|
+
)
|
|
31
|
+
else:
|
|
32
|
+
return None
|
|
@@ -39,29 +39,30 @@ class InstanceTemplateManagementClient:
|
|
|
39
39
|
)
|
|
40
40
|
return result.instance_template
|
|
41
41
|
except grpc.RpcError as e:
|
|
42
|
-
print(e)
|
|
43
42
|
raise QwakException(
|
|
44
|
-
GET_INSTANCE_TEMPLATE_ERROR_FORMAT.format(
|
|
43
|
+
GET_INSTANCE_TEMPLATE_ERROR_FORMAT.format(
|
|
44
|
+
e=e.details(), error_code=e.code()
|
|
45
|
+
)
|
|
45
46
|
)
|
|
46
47
|
except Exception as e:
|
|
47
|
-
print(e)
|
|
48
48
|
raise QwakException(GET_INSTANCE_TEMPLATE_ERROR_FORMAT.format(e=e))
|
|
49
49
|
|
|
50
50
|
def list_instance_templates(self) -> List[InstanceTemplateSpec]:
|
|
51
51
|
try:
|
|
52
|
-
result: ListInstanceTemplatesResponse =
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
52
|
+
result: ListInstanceTemplatesResponse = (
|
|
53
|
+
self._instance_template_service.ListInstanceTemplates(
|
|
54
|
+
ListInstanceTemplatesRequest(
|
|
55
|
+
optional_instance_filter=InstanceFilter(
|
|
56
|
+
instance_type_filter=InstanceTypeFilter.INSTANCE_TYPE_FILTER_ALL
|
|
57
|
+
)
|
|
56
58
|
)
|
|
57
59
|
)
|
|
58
60
|
)
|
|
59
61
|
return list(result.instance_template_list)
|
|
60
62
|
except grpc.RpcError as e:
|
|
61
|
-
print(e)
|
|
62
63
|
raise QwakException(
|
|
63
|
-
GET_INSTANCE_TEMPLATE_ERROR_FORMAT.format(e=e.details())
|
|
64
|
+
GET_INSTANCE_TEMPLATE_ERROR_FORMAT.format(e=e.details()),
|
|
65
|
+
status_code=e.code(),
|
|
64
66
|
)
|
|
65
67
|
except Exception as e:
|
|
66
|
-
print(e)
|
|
67
68
|
raise QwakException(GET_INSTANCE_TEMPLATE_ERROR_FORMAT.format(e=e))
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
from typing import List
|
|
2
|
+
|
|
3
|
+
from _qwak_proto.qwak.integration.integration_pb2 import Integration
|
|
4
|
+
from _qwak_proto.qwak.integration.integration_service_pb2 import (
|
|
5
|
+
GetIntegrationRequest,
|
|
6
|
+
GetIntegrationResponse,
|
|
7
|
+
ListIntegrationRequest,
|
|
8
|
+
ListIntegrationsResponse,
|
|
9
|
+
)
|
|
10
|
+
from _qwak_proto.qwak.integration.integration_service_pb2_grpc import (
|
|
11
|
+
IntegrationManagementServiceStub,
|
|
12
|
+
)
|
|
13
|
+
from dependency_injector.wiring import Provide, inject
|
|
14
|
+
from qwak.inner.di_configuration import QwakContainer
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class IntegrationManagerClient:
|
|
18
|
+
@inject
|
|
19
|
+
def __init__(self, grpc_channel=Provide[QwakContainer.core_grpc_channel]):
|
|
20
|
+
self._grpc_client: IntegrationManagementServiceStub = (
|
|
21
|
+
IntegrationManagementServiceStub(grpc_channel)
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
def list_integrations(self) -> List[Integration]:
|
|
25
|
+
response: ListIntegrationsResponse = self._grpc_client.ListIntegrations(
|
|
26
|
+
ListIntegrationRequest()
|
|
27
|
+
)
|
|
28
|
+
return response.integrations
|
|
29
|
+
|
|
30
|
+
def get_by_id(self, integration_id: str) -> Integration:
|
|
31
|
+
response: GetIntegrationResponse = self._grpc_client.GetIntegration(
|
|
32
|
+
GetIntegrationRequest(integration_id=integration_id)
|
|
33
|
+
)
|
|
34
|
+
return response.integration
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
from typing import List
|
|
2
|
+
|
|
3
|
+
from _qwak_proto.qwak.integration.integration_pb2 import Integration
|
|
4
|
+
from qwak.clients.integration_management.integration_manager_client import (
|
|
5
|
+
IntegrationManagerClient,
|
|
6
|
+
)
|
|
7
|
+
from qwak.clients.integration_management.openai.openai_system_secret import (
|
|
8
|
+
OpenAIApiKeySystemSecret,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class IntegrationUtils:
|
|
13
|
+
def __init__(self):
|
|
14
|
+
self._client: IntegrationManagerClient = IntegrationManagerClient()
|
|
15
|
+
|
|
16
|
+
def get_openai_api_keys(self) -> List[OpenAIApiKeySystemSecret]:
|
|
17
|
+
all_integrations: List[Integration] = self._client.list_integrations()
|
|
18
|
+
|
|
19
|
+
openai_integration: List[Integration] = [
|
|
20
|
+
i for i in all_integrations if i.WhichOneof("type") == "openai_integration"
|
|
21
|
+
]
|
|
22
|
+
|
|
23
|
+
openai_secrets: List[OpenAIApiKeySystemSecret] = [
|
|
24
|
+
OpenAIApiKeySystemSecret.from_proto(proto=o) for o in openai_integration
|
|
25
|
+
]
|
|
26
|
+
|
|
27
|
+
return [s for s in openai_secrets if s is not None]
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
from base64 import b64decode
|
|
2
|
+
from dataclasses import dataclass
|
|
3
|
+
from typing import Optional
|
|
4
|
+
|
|
5
|
+
from _qwak_proto.qwak.admiral.secret.v0.secret_pb2 import SystemSecretValue
|
|
6
|
+
from _qwak_proto.qwak.integration.integration_pb2 import Integration
|
|
7
|
+
from _qwak_proto.qwak.integration.open_a_i_integration_pb2 import (
|
|
8
|
+
OpenAIApiKeySystemSecretDescriptor,
|
|
9
|
+
OpenAIIntegration,
|
|
10
|
+
)
|
|
11
|
+
from qwak.clients.administration.eco_system.eco_system_utils import EcosystemUtils
|
|
12
|
+
from qwak.clients.system_secret.system_secret_client import SystemSecretClient
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@dataclass
|
|
16
|
+
class OpenAIApiKeySystemSecret:
|
|
17
|
+
integration_id: str
|
|
18
|
+
integration_name: str
|
|
19
|
+
secret_name: str
|
|
20
|
+
secret_key: str
|
|
21
|
+
|
|
22
|
+
@classmethod
|
|
23
|
+
def from_proto(cls, proto: Integration) -> Optional["OpenAIApiKeySystemSecret"]:
|
|
24
|
+
if proto.WhichOneof("type") != "openai_integration":
|
|
25
|
+
raise ValueError(f"Got wrong type of integration: {proto}")
|
|
26
|
+
openai_integration: OpenAIIntegration = proto.openai_integration
|
|
27
|
+
|
|
28
|
+
if (
|
|
29
|
+
openai_integration.WhichOneof("auth")
|
|
30
|
+
!= "openai_api_key_system_secret_descriptor"
|
|
31
|
+
):
|
|
32
|
+
return None
|
|
33
|
+
|
|
34
|
+
system_secret: OpenAIApiKeySystemSecretDescriptor = (
|
|
35
|
+
openai_integration.openai_api_key_system_secret_descriptor
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
return cls(
|
|
39
|
+
integration_id=proto.integration_id,
|
|
40
|
+
integration_name=proto.name,
|
|
41
|
+
secret_name=system_secret.secret_name,
|
|
42
|
+
secret_key=system_secret.api_key_secret_key,
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
def get_api_key(self) -> str:
|
|
46
|
+
system_secret_client = SystemSecretClient()
|
|
47
|
+
default_environment_id: str = EcosystemUtils().get_default_environment_id()
|
|
48
|
+
system_secret: SystemSecretValue = system_secret_client.get_system_secret(
|
|
49
|
+
name=self.secret_name, env_id=default_environment_id
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
if system_secret.WhichOneof("value") != "opaque_pair":
|
|
53
|
+
raise ValueError("Got unsupported system secret value type")
|
|
54
|
+
|
|
55
|
+
encoded_api_key: str = system_secret.opaque_pair.pairs.get(key=self.secret_key)
|
|
56
|
+
return b64decode(encoded_api_key).decode("utf-8")
|
|
@@ -176,7 +176,9 @@ class KubeDeploymentClient:
|
|
|
176
176
|
job_run_id: int,
|
|
177
177
|
) -> DeployStreamingAggregationCompactionResponse:
|
|
178
178
|
try:
|
|
179
|
-
streaming_aggregation_compaction_deploy_request:
|
|
179
|
+
streaming_aggregation_compaction_deploy_request: (
|
|
180
|
+
DeployStreamingAggregationCompactionRequest
|
|
181
|
+
) = DeployStreamingAggregationCompactionRequest(
|
|
180
182
|
feature_set_deployment=FeatureSetDeployment(
|
|
181
183
|
featureset_name=feature_set_name,
|
|
182
184
|
featureset_id=feature_set_id,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from .client import LocationDiscoveryClient
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
from typing import Callable
|
|
2
|
+
|
|
3
|
+
import grpc
|
|
4
|
+
from _qwak_proto.qwak.service_discovery.service_discovery_location_pb2 import (
|
|
5
|
+
ServiceLocationDescriptor,
|
|
6
|
+
)
|
|
7
|
+
from _qwak_proto.qwak.service_discovery.service_discovery_location_service_pb2 import (
|
|
8
|
+
GetServingUrlRequest as ProtoGetServingUrlRequest,
|
|
9
|
+
GetServingUrlRequestResponse as ProtoGetServingUrlRequestResponse,
|
|
10
|
+
)
|
|
11
|
+
from _qwak_proto.qwak.service_discovery.service_discovery_location_service_pb2_grpc import (
|
|
12
|
+
LocationDiscoveryServiceStub,
|
|
13
|
+
)
|
|
14
|
+
from dependency_injector.wiring import Provide
|
|
15
|
+
from qwak.exceptions import QwakException
|
|
16
|
+
from qwak.inner.di_configuration import QwakContainer
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class LocationDiscoveryClient:
|
|
20
|
+
"""
|
|
21
|
+
Client for querying service locations from the LocationDiscoveryService.
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
def __init__(self, grpc_channel=Provide[QwakContainer.core_grpc_channel]):
|
|
25
|
+
self._service = LocationDiscoveryServiceStub(grpc_channel)
|
|
26
|
+
|
|
27
|
+
@staticmethod
|
|
28
|
+
def _get_location(
|
|
29
|
+
method: Callable[
|
|
30
|
+
[ProtoGetServingUrlRequest], ProtoGetServingUrlRequestResponse
|
|
31
|
+
],
|
|
32
|
+
) -> ServiceLocationDescriptor:
|
|
33
|
+
"""
|
|
34
|
+
Calls a specific RPC and extracts the service location descriptor.
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
method: The gRPC method to call.
|
|
38
|
+
|
|
39
|
+
Returns:
|
|
40
|
+
ServiceLocationDescriptor: Contains service_url and location metadata.
|
|
41
|
+
"""
|
|
42
|
+
try:
|
|
43
|
+
request = ProtoGetServingUrlRequest()
|
|
44
|
+
response = method(request)
|
|
45
|
+
return response.location
|
|
46
|
+
except grpc.RpcError as e:
|
|
47
|
+
raise QwakException(
|
|
48
|
+
f"Failed to retrieve service location. Error is: {e.details()}"
|
|
49
|
+
) from e
|
|
50
|
+
|
|
51
|
+
def get_offline_serving(self) -> ServiceLocationDescriptor:
|
|
52
|
+
"""Fetches the offline serving service location."""
|
|
53
|
+
return self._get_location(self._service.GetOfflineServingUrl)
|
|
54
|
+
|
|
55
|
+
def get_distribution_manager(self) -> ServiceLocationDescriptor:
|
|
56
|
+
"""Fetches the distribution manager service location."""
|
|
57
|
+
return self._get_location(self._service.GetDistributionManagerUrl)
|
|
58
|
+
|
|
59
|
+
def get_analytics_engine(self) -> ServiceLocationDescriptor:
|
|
60
|
+
"""Fetches the analytics engine service location."""
|
|
61
|
+
return self._get_location(self._service.GetAnalyticsEngineUrl)
|
|
62
|
+
|
|
63
|
+
def get_metrics_gateway(self) -> ServiceLocationDescriptor:
|
|
64
|
+
"""Fetches the metrics gateway service location."""
|
|
65
|
+
return self._get_location(self._service.GetMetricsGatewayUrl)
|
|
66
|
+
|
|
67
|
+
def get_features_operator(self) -> ServiceLocationDescriptor:
|
|
68
|
+
"""Fetches the features operator service location."""
|
|
69
|
+
return self._get_location(self._service.GetFeaturesOperatorUrl)
|
|
70
|
+
|
|
71
|
+
def get_hosting_gateway(self) -> ServiceLocationDescriptor:
|
|
72
|
+
"""Fetches the hosting gateway service location."""
|
|
73
|
+
return self._get_location(self._service.GetHostingGatewayUrl)
|