fiddler-client 1.8.3__tar.gz → 2.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {fiddler-client-1.8.3 → fiddler-client-2.0.0}/PKG-INFO +39 -9
- {fiddler-client-1.8.3 → fiddler-client-2.0.0}/PUBLIC.md +38 -8
- fiddler-client-2.0.0/fiddler/__init__.py +90 -0
- fiddler-client-2.0.0/fiddler/_version.py +1 -0
- fiddler-client-2.0.0/fiddler/api/__init__.py +7 -0
- {fiddler-client-1.8.3/fiddler/v2 → fiddler-client-2.0.0/fiddler}/api/alert_mixin.py +110 -70
- fiddler-client-2.0.0/fiddler/api/api.py +105 -0
- {fiddler-client-1.8.3/fiddler/v2 → fiddler-client-2.0.0/fiddler}/api/baseline_mixin.py +48 -16
- fiddler-client-2.0.0/fiddler/api/dataset_mixin.py +403 -0
- {fiddler-client-1.8.3/fiddler/v2 → fiddler-client-2.0.0/fiddler}/api/events_mixin.py +184 -51
- {fiddler-client-1.8.3/fiddler/v2 → fiddler-client-2.0.0/fiddler}/api/explainability_mixin.py +54 -54
- fiddler-client-2.0.0/fiddler/api/generate_schema_mixin.py +301 -0
- {fiddler-client-1.8.3/fiddler/v2 → fiddler-client-2.0.0/fiddler}/api/helpers.py +5 -5
- {fiddler-client-1.8.3/fiddler/v2 → fiddler-client-2.0.0/fiddler}/api/job_mixin.py +6 -5
- {fiddler-client-1.8.3/fiddler/v2 → fiddler-client-2.0.0/fiddler}/api/model_artifact_deploy.py +10 -6
- {fiddler-client-1.8.3/fiddler/v2 → fiddler-client-2.0.0/fiddler}/api/model_deployment_mixin.py +22 -19
- {fiddler-client-1.8.3/fiddler/v2 → fiddler-client-2.0.0/fiddler}/api/model_mixin.py +184 -96
- {fiddler-client-1.8.3/fiddler/v2 → fiddler-client-2.0.0/fiddler}/api/project_mixin.py +36 -14
- fiddler-client-2.0.0/fiddler/api/webhooks_mixin.py +121 -0
- {fiddler-client-1.8.3/fiddler/v2 → fiddler-client-2.0.0/fiddler}/constants.py +33 -0
- {fiddler-client-1.8.3 → fiddler-client-2.0.0}/fiddler/core_objects.py +153 -737
- fiddler-client-2.0.0/fiddler/exceptions.py +94 -0
- {fiddler-client-1.8.3 → fiddler-client-2.0.0}/fiddler/libs/http_client.py +58 -11
- {fiddler-client-1.8.3/fiddler/v2 → fiddler-client-2.0.0/fiddler}/schema/alert.py +27 -31
- {fiddler-client-1.8.3/fiddler/v2 → fiddler-client-2.0.0/fiddler}/schema/base.py +1 -1
- {fiddler-client-1.8.3/fiddler/v2 → fiddler-client-2.0.0/fiddler}/schema/baseline.py +3 -1
- fiddler-client-2.0.0/fiddler/schema/dataset.py +91 -0
- {fiddler-client-1.8.3/fiddler/v2 → fiddler-client-2.0.0/fiddler}/schema/events.py +2 -2
- {fiddler-client-1.8.3/fiddler/v2 → fiddler-client-2.0.0/fiddler}/schema/model.py +3 -1
- {fiddler-client-1.8.3/fiddler/v2 → fiddler-client-2.0.0/fiddler}/schema/model_deployment.py +2 -1
- {fiddler-client-1.8.3/fiddler/v2 → fiddler-client-2.0.0/fiddler}/schema/project.py +1 -1
- {fiddler-client-1.8.3/fiddler/v2 → fiddler-client-2.0.0/fiddler}/schema/server_info.py +5 -3
- fiddler-client-2.0.0/fiddler/schema/webhook.py +10 -0
- fiddler-client-2.0.0/fiddler/schemas/custom_features.py +96 -0
- fiddler-client-2.0.0/fiddler/schemas/model_schema.py +46 -0
- fiddler-client-2.0.0/fiddler/schemas/model_spec.py +30 -0
- fiddler-client-2.0.0/fiddler/schemas/model_task_params.py +23 -0
- fiddler-client-2.0.0/fiddler/schemas/xai_params.py +11 -0
- {fiddler-client-1.8.3 → fiddler-client-2.0.0}/fiddler/utils/__init__.py +6 -6
- fiddler-client-2.0.0/fiddler/utils/decorators.py +113 -0
- {fiddler-client-1.8.3 → fiddler-client-2.0.0}/fiddler/utils/formatting.py +1 -1
- {fiddler-client-1.8.3/fiddler/v2 → fiddler-client-2.0.0/fiddler}/utils/helpers.py +31 -3
- fiddler-client-1.8.3/fiddler/utils/logging.py → fiddler-client-2.0.0/fiddler/utils/logger.py +1 -1
- fiddler-client-1.8.3/fiddler/utils/pandas.py → fiddler-client-2.0.0/fiddler/utils/pandas_helper.py +39 -49
- {fiddler-client-1.8.3/fiddler/v2 → fiddler-client-2.0.0/fiddler}/utils/response_handler.py +7 -11
- fiddler-client-2.0.0/fiddler/utils/semver_version.py +530 -0
- {fiddler-client-1.8.3/fiddler → fiddler-client-2.0.0/fiddler/utils}/validator.py +3 -3
- {fiddler-client-1.8.3/fiddler/v2 → fiddler-client-2.0.0/fiddler}/validators/dataset_validator.py +16 -8
- {fiddler-client-1.8.3 → fiddler-client-2.0.0}/fiddler_client.egg-info/PKG-INFO +39 -9
- fiddler-client-2.0.0/fiddler_client.egg-info/SOURCES.txt +99 -0
- fiddler-client-2.0.0/fiddler_client.egg-info/requires.txt +9 -0
- {fiddler-client-1.8.3 → fiddler-client-2.0.0}/setup.py +3 -12
- fiddler-client-2.0.0/tests/fiddler/base.py +38 -0
- fiddler-client-2.0.0/tests/fiddler/helper.py +72 -0
- fiddler-client-2.0.0/tests/fiddler/test_add_model.py +122 -0
- fiddler-client-2.0.0/tests/fiddler/test_alert.py +1192 -0
- fiddler-client-2.0.0/tests/fiddler/test_baseline.py +296 -0
- fiddler-client-2.0.0/tests/fiddler/test_check_version_decorator.py +34 -0
- fiddler-client-2.0.0/tests/fiddler/test_custom_features.py +110 -0
- fiddler-client-2.0.0/tests/fiddler/test_dataset_api.py +183 -0
- fiddler-client-2.0.0/tests/fiddler/test_events_api.py +229 -0
- fiddler-client-2.0.0/tests/fiddler/test_exceptions.py +87 -0
- fiddler-client-2.0.0/tests/fiddler/test_explainability_apis.py +379 -0
- fiddler-client-2.0.0/tests/fiddler/test_file_upload.py +218 -0
- fiddler-client-2.0.0/tests/fiddler/test_generate_schema.py +113 -0
- fiddler-client-2.0.0/tests/fiddler/test_helpers.py +15 -0
- fiddler-client-2.0.0/tests/fiddler/test_job.py +109 -0
- fiddler-client-2.0.0/tests/fiddler/test_model.py +210 -0
- fiddler-client-2.0.0/tests/fiddler/test_project.py +194 -0
- fiddler-client-2.0.0/tests/fiddler/test_response_handler.py +94 -0
- fiddler-client-2.0.0/tests/fiddler/test_upload_dataset.py +371 -0
- fiddler-client-2.0.0/tests/fiddler/test_validations.py +21 -0
- fiddler-client-2.0.0/tests/fiddler/test_webhook.py +124 -0
- fiddler-client-2.0.0/tests/fiddler/utils/test_general_checks.py +55 -0
- fiddler-client-2.0.0/tests/fiddler/utils/test_pandas.py +202 -0
- fiddler-client-2.0.0/tests/fiddler/utils/tests_utils.py +46 -0
- fiddler-client-2.0.0/tests/test_object_inference.py +155 -0
- fiddler-client-2.0.0/tests/utils.py +11 -0
- fiddler-client-1.8.3/fiddler/__init__.py +0 -1084
- fiddler-client-1.8.3/fiddler/_version.py +0 -1
- fiddler-client-1.8.3/fiddler/api/monitoring.py +0 -292
- fiddler-client-1.8.3/fiddler/api/publish_event.py +0 -275
- fiddler-client-1.8.3/fiddler/aws_utils.py +0 -172
- fiddler-client-1.8.3/fiddler/client.py +0 -146
- fiddler-client-1.8.3/fiddler/connection.py +0 -534
- fiddler-client-1.8.3/fiddler/constants.py +0 -16
- fiddler-client-1.8.3/fiddler/dataset.py +0 -136
- fiddler-client-1.8.3/fiddler/experimental.py +0 -477
- fiddler-client-1.8.3/fiddler/fiddler_api.py +0 -1970
- fiddler-client-1.8.3/fiddler/file_processor/src/constants.py +0 -95
- fiddler-client-1.8.3/fiddler/file_processor/src/extractor.py +0 -71
- fiddler-client-1.8.3/fiddler/file_processor/src/facade.py +0 -12
- fiddler-client-1.8.3/fiddler/file_processor/src/file_workflow_executor.py +0 -21
- fiddler-client-1.8.3/fiddler/file_processor/src/processor.py +0 -313
- fiddler-client-1.8.3/fiddler/file_processor/src/utils.py +0 -53
- fiddler-client-1.8.3/fiddler/file_processor/tests/test_facade.py +0 -58
- fiddler-client-1.8.3/fiddler/file_processor/tests/test_file_processor.py +0 -125
- fiddler-client-1.8.3/fiddler/model.py +0 -407
- fiddler-client-1.8.3/fiddler/model_info_validator.py +0 -154
- fiddler-client-1.8.3/fiddler/monitoring_validator.py +0 -398
- fiddler-client-1.8.3/fiddler/project.py +0 -130
- fiddler-client-1.8.3/fiddler/utils/exceptions.py +0 -37
- fiddler-client-1.8.3/fiddler/utils/helper.py +0 -24
- fiddler-client-1.8.3/fiddler/v1_v2_compat.py +0 -467
- fiddler-client-1.8.3/fiddler/v2/__init__.py +0 -0
- fiddler-client-1.8.3/fiddler/v2/api/__init__.py +0 -0
- fiddler-client-1.8.3/fiddler/v2/api/api.py +0 -55
- fiddler-client-1.8.3/fiddler/v2/api/dataset_mixin.py +0 -310
- fiddler-client-1.8.3/fiddler/v2/schema/__init__.py +0 -0
- fiddler-client-1.8.3/fiddler/v2/schema/common.py +0 -72
- fiddler-client-1.8.3/fiddler/v2/schema/dataset.py +0 -28
- fiddler-client-1.8.3/fiddler/v2/utils/__init__.py +0 -0
- fiddler-client-1.8.3/fiddler/v2/utils/decorators.py +0 -39
- fiddler-client-1.8.3/fiddler/v2/utils/exceptions.py +0 -134
- fiddler-client-1.8.3/fiddler/v2/validators/__init__.py +0 -0
- fiddler-client-1.8.3/fiddler_client.egg-info/SOURCES.txt +0 -95
- fiddler-client-1.8.3/fiddler_client.egg-info/requires.txt +0 -18
- fiddler-client-1.8.3/tests/__init__.py +0 -0
- fiddler-client-1.8.3/tests/test_fiddler_api.py +0 -66
- {fiddler-client-1.8.3 → fiddler-client-2.0.0}/MANIFEST.in +0 -0
- {fiddler-client-1.8.3 → fiddler-client-2.0.0}/README.md +0 -0
- {fiddler-client-1.8.3/fiddler/api → fiddler-client-2.0.0/fiddler/assets}/__init__.py +0 -0
- {fiddler-client-1.8.3 → fiddler-client-2.0.0}/fiddler/assets/pg_reserved_words.py +0 -0
- {fiddler-client-1.8.3/fiddler/assets → fiddler-client-2.0.0/fiddler/libs}/__init__.py +0 -0
- {fiddler-client-1.8.3/fiddler/file_processor → fiddler-client-2.0.0/fiddler/packtools}/__init__.py +0 -0
- {fiddler-client-1.8.3 → fiddler-client-2.0.0}/fiddler/packtools/gem.py +0 -0
- {fiddler-client-1.8.3 → fiddler-client-2.0.0}/fiddler/packtools/keras_ig_helpers.py +0 -0
- {fiddler-client-1.8.3 → fiddler-client-2.0.0}/fiddler/packtools/project_attributions_helpers.py +0 -0
- {fiddler-client-1.8.3 → fiddler-client-2.0.0}/fiddler/packtools/template_model.py +0 -0
- {fiddler-client-1.8.3/fiddler/file_processor/src → fiddler-client-2.0.0/fiddler/schema}/__init__.py +0 -0
- {fiddler-client-1.8.3/fiddler/v2 → fiddler-client-2.0.0/fiddler}/schema/job.py +0 -0
- {fiddler-client-1.8.3/fiddler/v2 → fiddler-client-2.0.0/fiddler}/schema/user.py +0 -0
- {fiddler-client-1.8.3/fiddler/file_processor/tests → fiddler-client-2.0.0/fiddler/schemas}/__init__.py +0 -0
- {fiddler-client-1.8.3 → fiddler-client-2.0.0}/fiddler/utils/general_checks.py +0 -0
- {fiddler-client-1.8.3/fiddler/v2 → fiddler-client-2.0.0/fiddler}/utils/validations.py +0 -0
- {fiddler-client-1.8.3/fiddler/file_processor/tests/resources → fiddler-client-2.0.0/fiddler/validators}/__init__.py +0 -0
- {fiddler-client-1.8.3 → fiddler-client-2.0.0}/fiddler_client.egg-info/dependency_links.txt +0 -0
- {fiddler-client-1.8.3 → fiddler-client-2.0.0}/fiddler_client.egg-info/top_level.txt +0 -0
- {fiddler-client-1.8.3 → fiddler-client-2.0.0}/setup.cfg +0 -0
- {fiddler-client-1.8.3/fiddler/file_processor/tests/resources/csvs → fiddler-client-2.0.0/tests}/__init__.py +0 -0
- {fiddler-client-1.8.3/fiddler/libs → fiddler-client-2.0.0/tests/fiddler}/__init__.py +0 -0
- {fiddler-client-1.8.3/fiddler/packtools → fiddler-client-2.0.0/tests/fiddler/utils}/__init__.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: fiddler-client
|
|
3
|
-
Version:
|
|
3
|
+
Version: 2.0.0
|
|
4
4
|
Summary: Python client for Fiddler Service
|
|
5
5
|
Home-page: https://fiddler.ai
|
|
6
6
|
Author: Fiddler Labs
|
|
@@ -26,25 +26,55 @@ Description: Fiddler Client
|
|
|
26
26
|
|
|
27
27
|
Version History
|
|
28
28
|
-------------
|
|
29
|
+
|
|
30
|
+
### 2.0.0
|
|
31
|
+
- #### **Removed**
|
|
32
|
+
- Following methods are removed
|
|
33
|
+
- register_model
|
|
34
|
+
- upload_model_package
|
|
35
|
+
- update_model
|
|
36
|
+
- trigger_pre_computation
|
|
37
|
+
- _trigger_model_predictions
|
|
38
|
+
- generate_sample_events
|
|
39
|
+
- list_teams
|
|
40
|
+
- list_project_roles
|
|
41
|
+
- list_org_roles
|
|
42
|
+
- unshare_project
|
|
43
|
+
- share_project
|
|
44
|
+
- process_avro
|
|
45
|
+
- process_csv
|
|
46
|
+
- #### **New Features**
|
|
47
|
+
- Add `monitor_components` as an attribute of `CustomFeature`. Default to `False`
|
|
48
|
+
- Remove `column` as a parameter in `add_alert_rule` and `get_alert_rules` functions
|
|
49
|
+
|
|
50
|
+
### 1.8.4
|
|
51
|
+
- #### **New Features**
|
|
52
|
+
- New DeploymentType enum for MANUAL deployment
|
|
53
|
+
|
|
54
|
+
### 1.8.3
|
|
55
|
+
- ### **Modifications**
|
|
56
|
+
- New `columns` parameter in add_alert_rule and get_alert_rules to support multiple columns to be used for server version >= 23.3.0
|
|
57
|
+
- get_triggered_alerts supports `alert_value` as a float as well as a dict
|
|
58
|
+
|
|
29
59
|
### 1.8.2
|
|
30
60
|
- #### **Modifications**
|
|
31
|
-
- New `columns` parameter in add_alert_rule and get_alert_rules to support multiple columns to be used for server version >= 23.3.0
|
|
32
|
-
- get_triggered_alerts supports `alert_value` as a float as well as a dict
|
|
33
61
|
- Fixed a bug where `min` and `max` for columns of type `float` in `dataset_info` are cast into `int` after uploaded
|
|
62
|
+
|
|
34
63
|
### 1.8.1
|
|
35
64
|
- #### **Modifications**
|
|
36
|
-
- Fixed a bug wherein null string was going in request body if body wasn't specified
|
|
65
|
+
- Fixed a bug wherein null string was going in request body if body wasn't specified.
|
|
37
66
|
- Fix `categorical_target_class_details` when passed as an array
|
|
38
67
|
- Fix a bug where `fdl.ModelInputType.TEXT` were not being accepted properly
|
|
39
68
|
- Fix `categorical_target_class_details` when passed as an empty list
|
|
40
|
-
|
|
69
|
+
|
|
70
|
+
|
|
41
71
|
### 1.8.0
|
|
42
72
|
- #### **Modifications**
|
|
43
|
-
- Add new alert type -
|
|
73
|
+
- Add new alert type - `statistic` for setting alerts
|
|
44
74
|
- Add `target_class_order` as a required field of `ModelInfo` object when `model_task` is `MULTICLASS_CLASSIFICATION`,
|
|
45
75
|
`RANKING` or `BINARY_CLASSIFICATION`. Only applies for `BINARY_CLASSIFICATION` when target column is of type `CATEGORY`
|
|
46
|
-
-
|
|
47
|
-
-
|
|
76
|
+
- Add `columns` as a parameter in `add_alert_rule` and `get_alert_rules` functions
|
|
77
|
+
- Add deprecation warning for `column` as a parameter in `add_alert_rule` and `get_alert_rules` functions
|
|
48
78
|
|
|
49
79
|
### 1.7.4
|
|
50
80
|
- #### **Modification**
|
|
@@ -90,7 +120,7 @@ Description: Fiddler Client
|
|
|
90
120
|
|
|
91
121
|
### 1.5.2
|
|
92
122
|
- #### **Modifications**
|
|
93
|
-
-
|
|
123
|
+
- Add fix for self signed certificate not working by adding verify param to FiddlerApi
|
|
94
124
|
|
|
95
125
|
### 1.5.1
|
|
96
126
|
- #### **Modifications**
|
|
@@ -19,25 +19,55 @@ Documentation for the API can be found [here](https://docs.fiddler.ai/reference/
|
|
|
19
19
|
|
|
20
20
|
Version History
|
|
21
21
|
-------------
|
|
22
|
+
|
|
23
|
+
### 2.0.0
|
|
24
|
+
- #### **Removed**
|
|
25
|
+
- Following methods are removed
|
|
26
|
+
- register_model
|
|
27
|
+
- upload_model_package
|
|
28
|
+
- update_model
|
|
29
|
+
- trigger_pre_computation
|
|
30
|
+
- _trigger_model_predictions
|
|
31
|
+
- generate_sample_events
|
|
32
|
+
- list_teams
|
|
33
|
+
- list_project_roles
|
|
34
|
+
- list_org_roles
|
|
35
|
+
- unshare_project
|
|
36
|
+
- share_project
|
|
37
|
+
- process_avro
|
|
38
|
+
- process_csv
|
|
39
|
+
- #### **New Features**
|
|
40
|
+
- Add `monitor_components` as an attribute of `CustomFeature`. Default to `False`
|
|
41
|
+
- Remove `column` as a parameter in `add_alert_rule` and `get_alert_rules` functions
|
|
42
|
+
|
|
43
|
+
### 1.8.4
|
|
44
|
+
- #### **New Features**
|
|
45
|
+
- New DeploymentType enum for MANUAL deployment
|
|
46
|
+
|
|
47
|
+
### 1.8.3
|
|
48
|
+
- ### **Modifications**
|
|
49
|
+
- New `columns` parameter in add_alert_rule and get_alert_rules to support multiple columns to be used for server version >= 23.3.0
|
|
50
|
+
- get_triggered_alerts supports `alert_value` as a float as well as a dict
|
|
51
|
+
|
|
22
52
|
### 1.8.2
|
|
23
53
|
- #### **Modifications**
|
|
24
|
-
- New `columns` parameter in add_alert_rule and get_alert_rules to support multiple columns to be used for server version >= 23.3.0
|
|
25
|
-
- get_triggered_alerts supports `alert_value` as a float as well as a dict
|
|
26
54
|
- Fixed a bug where `min` and `max` for columns of type `float` in `dataset_info` are cast into `int` after uploaded
|
|
55
|
+
|
|
27
56
|
### 1.8.1
|
|
28
57
|
- #### **Modifications**
|
|
29
|
-
- Fixed a bug wherein null string was going in request body if body wasn't specified
|
|
58
|
+
- Fixed a bug wherein null string was going in request body if body wasn't specified.
|
|
30
59
|
- Fix `categorical_target_class_details` when passed as an array
|
|
31
60
|
- Fix a bug where `fdl.ModelInputType.TEXT` were not being accepted properly
|
|
32
61
|
- Fix `categorical_target_class_details` when passed as an empty list
|
|
33
|
-
|
|
62
|
+
|
|
63
|
+
|
|
34
64
|
### 1.8.0
|
|
35
65
|
- #### **Modifications**
|
|
36
|
-
- Add new alert type -
|
|
66
|
+
- Add new alert type - `statistic` for setting alerts
|
|
37
67
|
- Add `target_class_order` as a required field of `ModelInfo` object when `model_task` is `MULTICLASS_CLASSIFICATION`,
|
|
38
68
|
`RANKING` or `BINARY_CLASSIFICATION`. Only applies for `BINARY_CLASSIFICATION` when target column is of type `CATEGORY`
|
|
39
|
-
-
|
|
40
|
-
-
|
|
69
|
+
- Add `columns` as a parameter in `add_alert_rule` and `get_alert_rules` functions
|
|
70
|
+
- Add deprecation warning for `column` as a parameter in `add_alert_rule` and `get_alert_rules` functions
|
|
41
71
|
|
|
42
72
|
### 1.7.4
|
|
43
73
|
- #### **Modification**
|
|
@@ -83,7 +113,7 @@ Version History
|
|
|
83
113
|
|
|
84
114
|
### 1.5.2
|
|
85
115
|
- #### **Modifications**
|
|
86
|
-
-
|
|
116
|
+
- Add fix for self signed certificate not working by adding verify param to FiddlerApi
|
|
87
117
|
|
|
88
118
|
### 1.5.1
|
|
89
119
|
- #### **Modifications**
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Fiddler Client Module
|
|
3
|
+
=====================
|
|
4
|
+
|
|
5
|
+
A Python client for Fiddler service.
|
|
6
|
+
|
|
7
|
+
TODO: Add Licence.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from fiddler import utils
|
|
11
|
+
from fiddler._version import __version__
|
|
12
|
+
from fiddler.api import FiddlerApi, FiddlerClient
|
|
13
|
+
from fiddler.api.explainability_mixin import (
|
|
14
|
+
DatasetDataSource,
|
|
15
|
+
RowDataSource,
|
|
16
|
+
SqlSliceQueryDataSource,
|
|
17
|
+
)
|
|
18
|
+
from fiddler.constants import CSV_EXTENSION
|
|
19
|
+
from fiddler.core_objects import (
|
|
20
|
+
ArtifactStatus,
|
|
21
|
+
BaselineType,
|
|
22
|
+
BatchPublishType,
|
|
23
|
+
Column,
|
|
24
|
+
DatasetInfo,
|
|
25
|
+
DataType,
|
|
26
|
+
ExplanationMethod,
|
|
27
|
+
FiddlerPublishSchema,
|
|
28
|
+
FiddlerTimestamp,
|
|
29
|
+
ModelInfo,
|
|
30
|
+
ModelInputType,
|
|
31
|
+
ModelTask,
|
|
32
|
+
WeightingParams,
|
|
33
|
+
WindowSize,
|
|
34
|
+
)
|
|
35
|
+
from fiddler.packtools import gem
|
|
36
|
+
from fiddler.schema.alert import (
|
|
37
|
+
AlertCondition,
|
|
38
|
+
AlertType,
|
|
39
|
+
BinSize,
|
|
40
|
+
ComparePeriod,
|
|
41
|
+
CompareTo,
|
|
42
|
+
Metric,
|
|
43
|
+
Priority,
|
|
44
|
+
)
|
|
45
|
+
from fiddler.schema.model_deployment import DeploymentParams, DeploymentType
|
|
46
|
+
from fiddler.schemas.custom_features import CustomFeature, ImageEmbedding, Multivariate, TextEmbedding, VectorFeature, CustomFeatureType
|
|
47
|
+
from fiddler.utils import ColorLogger, logger
|
|
48
|
+
from fiddler.utils.validator import (
|
|
49
|
+
PackageValidator,
|
|
50
|
+
ValidationChainSettings,
|
|
51
|
+
ValidationModule,
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
logger = logger.get_logger(__name__)
|
|
55
|
+
|
|
56
|
+
SUPPORTED_API_VERSIONS = ['v2']
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
__all__ = [
|
|
60
|
+
'__version__',
|
|
61
|
+
'BatchPublishType',
|
|
62
|
+
'Column',
|
|
63
|
+
'CustomFeature',
|
|
64
|
+
'CustomFeatureType',
|
|
65
|
+
'Multivariate',
|
|
66
|
+
'VectorFeature',
|
|
67
|
+
'TextEmbedding',
|
|
68
|
+
'ImageEmbedding',
|
|
69
|
+
'ColorLogger',
|
|
70
|
+
'DatasetInfo',
|
|
71
|
+
'DataType',
|
|
72
|
+
'DeploymentParams',
|
|
73
|
+
'DeploymentType',
|
|
74
|
+
'FiddlerClient',
|
|
75
|
+
'FiddlerApi',
|
|
76
|
+
'FiddlerTimestamp',
|
|
77
|
+
'FiddlerPublishSchema',
|
|
78
|
+
'gem',
|
|
79
|
+
'ModelInfo',
|
|
80
|
+
'ModelInputType',
|
|
81
|
+
'ModelTask',
|
|
82
|
+
'WeightingParams',
|
|
83
|
+
'ExplanationMethod',
|
|
84
|
+
'PackageValidator',
|
|
85
|
+
'ValidationChainSettings',
|
|
86
|
+
'ValidationModule',
|
|
87
|
+
'utils',
|
|
88
|
+
# Exposing constants
|
|
89
|
+
'CSV_EXTENSION',
|
|
90
|
+
]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '2.0.0'
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
1
3
|
import json
|
|
2
4
|
from datetime import datetime, timedelta
|
|
3
|
-
from typing import Any, Dict, List, Optional
|
|
5
|
+
from typing import Any, Dict, List, Optional, Union
|
|
4
6
|
|
|
5
7
|
from pydantic import parse_obj_as
|
|
6
8
|
|
|
7
9
|
from fiddler.libs.http_client import RequestClient
|
|
8
|
-
from fiddler.
|
|
9
|
-
from fiddler.v2.schema.alert import (
|
|
10
|
+
from fiddler.schema.alert import (
|
|
10
11
|
AlertCondition,
|
|
11
12
|
AlertRule,
|
|
12
13
|
AlertRulePayload,
|
|
@@ -18,20 +19,21 @@ from fiddler.v2.schema.alert import (
|
|
|
18
19
|
Priority,
|
|
19
20
|
TriggeredAlerts,
|
|
20
21
|
)
|
|
21
|
-
from fiddler.
|
|
22
|
-
from fiddler.
|
|
23
|
-
from fiddler.
|
|
22
|
+
from fiddler.utils.decorators import handle_api_error_response
|
|
23
|
+
from fiddler.utils.helpers import match_semver
|
|
24
|
+
from fiddler.utils.logger import get_logger
|
|
25
|
+
from fiddler.utils.response_handler import (
|
|
24
26
|
APIResponseHandler,
|
|
25
27
|
PaginatedResponseHandler,
|
|
26
28
|
)
|
|
27
29
|
|
|
28
|
-
logger =
|
|
30
|
+
logger = get_logger(__name__)
|
|
29
31
|
|
|
30
32
|
|
|
31
33
|
class AlertMixin:
|
|
32
34
|
FILTER_ALERT_RULES_API_VERSION = '>=23.1.0'
|
|
33
35
|
GROUP_OF_COLUMNS_API_VERSION = '>=23.3.0'
|
|
34
|
-
|
|
36
|
+
RULE_V3_API_VERSION = '>=23.4.0'
|
|
35
37
|
|
|
36
38
|
client: RequestClient
|
|
37
39
|
organization_name: str
|
|
@@ -40,35 +42,37 @@ class AlertMixin:
|
|
|
40
42
|
def add_alert_rule(
|
|
41
43
|
self,
|
|
42
44
|
name: str,
|
|
43
|
-
|
|
44
|
-
model_id: str,
|
|
45
|
-
alert_type: AlertType,
|
|
46
|
-
metric: Metric,
|
|
45
|
+
metric: Union[Metric, str],
|
|
47
46
|
compare_to: CompareTo,
|
|
48
47
|
priority: Priority,
|
|
49
48
|
critical_threshold: float,
|
|
50
49
|
condition: AlertCondition,
|
|
50
|
+
project_id: str = None,
|
|
51
|
+
model_id: str = None,
|
|
51
52
|
bin_size: BinSize = BinSize.ONE_DAY,
|
|
53
|
+
alert_type: Optional[AlertType] = None,
|
|
52
54
|
baseline_id: Optional[str] = None,
|
|
53
55
|
compare_period: Optional[ComparePeriod] = None,
|
|
54
56
|
column: Optional[str] = None,
|
|
55
57
|
columns: Optional[List[str]] = None,
|
|
56
58
|
warning_threshold: Optional[float] = None,
|
|
57
|
-
notifications_config: Optional[Dict[str,
|
|
59
|
+
notifications_config: Optional[Dict[str, Any]] = None,
|
|
58
60
|
) -> AlertRule:
|
|
59
|
-
"""
|
|
61
|
+
f"""
|
|
60
62
|
To add an alert rule
|
|
63
|
+
|
|
64
|
+
:param project_id: Unique project name for which the alert rule is created
|
|
65
|
+
:param model_id: Unique model name for which the alert rule is created
|
|
61
66
|
:param project_id: Unique project name for which the alert rule is created
|
|
62
67
|
:param model_id: Unique model name for which the alert rule is created
|
|
63
68
|
:param name: Name of the Alert rule
|
|
64
|
-
:param alert_type:
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
:param metric: "metric":
|
|
69
|
+
:param alert_type: [DEPRECATED] Used only for older server versions. For {self.RULE_V3_API_VERSION} you can simply use 'metric'.
|
|
70
|
+
Selects one of the four metric types:
|
|
71
|
+
1) AlertType.PERFORMANCE
|
|
72
|
+
2) AlertType.DATA_DRIFT
|
|
73
|
+
3) AlertType.DATA_INTEGRITY
|
|
74
|
+
4) AlertType.SERVICE_METRICS
|
|
75
|
+
:param metric: can be a string or MetricType enum.
|
|
72
76
|
For service_metrics:
|
|
73
77
|
1) MetricType.TRAFFIC
|
|
74
78
|
|
|
@@ -114,12 +118,10 @@ class AlertMixin:
|
|
|
114
118
|
:param condition: Select from:
|
|
115
119
|
1) AlertCondition.LESSER
|
|
116
120
|
2) AlertCondition.GREATER
|
|
117
|
-
:param column: column name on which alert rule is to be created.
|
|
118
|
-
|
|
119
|
-
:param columns: List of column names on which alert rule is to be created. It can take ['__ANY__'] to check for all columns.
|
|
120
|
-
Supported by server version 23.3.0 onwards.
|
|
121
|
+
:param column: column name on which alert rule is to be created. Supported by server version 23.3.0 or lower.
|
|
122
|
+
:param columns: List of column names on which alert rule is to be created. It can take ['__ANY__'] to check for all columns
|
|
121
123
|
:param notifications_config: notifications config object created using helper method build_notifications_config()
|
|
122
|
-
:param baseline_id: Name of the
|
|
124
|
+
:param baseline_id: Name of the baseline, whose histogram is compared against the same derived from current data.
|
|
123
125
|
Used only when alert type is AlertType.DATA_DRIFT.
|
|
124
126
|
:return: created alert rule object
|
|
125
127
|
"""
|
|
@@ -143,6 +145,7 @@ class AlertMixin:
|
|
|
143
145
|
name=name,
|
|
144
146
|
alert_type=alert_type,
|
|
145
147
|
metric=metric,
|
|
148
|
+
metric_id=metric,
|
|
146
149
|
compare_to=compare_to,
|
|
147
150
|
compare_period=compare_period,
|
|
148
151
|
priority=priority,
|
|
@@ -150,27 +153,44 @@ class AlertMixin:
|
|
|
150
153
|
warning_threshold=warning_threshold,
|
|
151
154
|
critical_threshold=critical_threshold,
|
|
152
155
|
condition=condition,
|
|
153
|
-
time_bucket=bin_size,
|
|
156
|
+
time_bucket=bin_size.value[0],
|
|
157
|
+
bin_size=bin_size.value[1],
|
|
154
158
|
notifications=notifications_config,
|
|
155
159
|
)
|
|
156
|
-
|
|
160
|
+
|
|
161
|
+
if columns and not match_semver(
|
|
162
|
+
self.server_info.server_version, self.GROUP_OF_COLUMNS_API_VERSION
|
|
163
|
+
):
|
|
164
|
+
raise ValueError(
|
|
165
|
+
f'columns parameter works with server version {self.GROUP_OF_COLUMNS_API_VERSION}'
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
if match_semver(
|
|
169
|
+
self.server_info.server_version, self.GROUP_OF_COLUMNS_API_VERSION
|
|
170
|
+
):
|
|
157
171
|
if columns:
|
|
158
|
-
if
|
|
159
|
-
|
|
172
|
+
if match_semver(
|
|
173
|
+
self.server_info.server_version, self.RULE_V3_API_VERSION
|
|
174
|
+
):
|
|
175
|
+
alert_rule_payload.feature_names = columns
|
|
160
176
|
else:
|
|
161
177
|
# version 23.3 support columns is comma separated string
|
|
162
|
-
alert_rule_payload.feature_names=",".join(columns)
|
|
178
|
+
alert_rule_payload.feature_names = ",".join(columns)
|
|
163
179
|
elif column:
|
|
164
|
-
if
|
|
165
|
-
|
|
180
|
+
if match_semver(
|
|
181
|
+
self.server_info.server_version, self.RULE_V3_API_VERSION
|
|
182
|
+
):
|
|
183
|
+
alert_rule_payload.feature_names = [column]
|
|
166
184
|
else:
|
|
167
|
-
alert_rule_payload.feature_names=column
|
|
185
|
+
alert_rule_payload.feature_names = column
|
|
168
186
|
else:
|
|
169
187
|
# we do not support columns in server version < 23.3
|
|
170
188
|
if columns:
|
|
171
|
-
raise ValueError(
|
|
189
|
+
raise ValueError(
|
|
190
|
+
f'columns is not supported in the server version {self.server_info.server_version}. Please use column instead.'
|
|
191
|
+
)
|
|
172
192
|
if column:
|
|
173
|
-
alert_rule_payload.feature_name=column
|
|
193
|
+
alert_rule_payload.feature_name = column
|
|
174
194
|
|
|
175
195
|
request_body = alert_rule_payload.dict()
|
|
176
196
|
response = self.client.post(
|
|
@@ -203,24 +223,27 @@ class AlertMixin:
|
|
|
203
223
|
project_id: Optional[str] = None,
|
|
204
224
|
model_id: Optional[str] = None,
|
|
205
225
|
alert_type: Optional[AlertType] = None,
|
|
206
|
-
|
|
207
|
-
column: Optional[str] = None,
|
|
226
|
+
metrics: Optional[List[Metric]] = None,
|
|
208
227
|
columns: Optional[List[str]] = None,
|
|
209
228
|
baseline_id: Optional[str] = None,
|
|
210
229
|
ordering: Optional[List[str]] = None,
|
|
211
230
|
offset: int = 0,
|
|
212
231
|
limit: int = 20,
|
|
213
232
|
) -> List[AlertRule]:
|
|
214
|
-
"""
|
|
233
|
+
f"""
|
|
215
234
|
Get a list of alert rules with respect to the filtering parameters
|
|
235
|
+
|
|
236
|
+
:param project_id: Unique project name for which the alert rule is created
|
|
237
|
+
:param model_id: Unique model name for which the alert rule is created
|
|
216
238
|
:param project_id: unique project name
|
|
217
239
|
:param model_id: unique model name
|
|
218
|
-
:param alert_type:
|
|
240
|
+
:param alert_type: [DEPRECATED] Used only for older server versions. For {self.RULE_V3_API_VERSION} you can simply use 'metrics'.
|
|
241
|
+
Selects one of the four metric types:
|
|
219
242
|
1) AlertType.PERFORMANCE
|
|
220
243
|
2) AlertType.DATA_DRIFT
|
|
221
244
|
3) AlertType.DATA_INTEGRITY
|
|
222
245
|
4) AlertType.SERVICE_METRICS
|
|
223
|
-
:param
|
|
246
|
+
:param metrics: can be a list of strings or MetricTypes that specify metrics you want to retrieve.:
|
|
224
247
|
For service_metrics:
|
|
225
248
|
1) MetricType.TRAFFIC
|
|
226
249
|
|
|
@@ -243,7 +266,6 @@ class AlertMixin:
|
|
|
243
266
|
1) MetricType.RANGE_VIOLATION
|
|
244
267
|
2) MetricType.MISSING_VALUE
|
|
245
268
|
3) MetricType.TYPE_VIOLATION
|
|
246
|
-
:param column: Filter based on the column
|
|
247
269
|
:param columns: Filter based on a list of column names
|
|
248
270
|
:param limit: Number of records to be retrieved per page, also referred as page_size
|
|
249
271
|
:param offset: Pointer to the starting of the page index. offset of the first page is 0
|
|
@@ -252,19 +274,30 @@ class AlertMixin:
|
|
|
252
274
|
records from index 400 to 499.
|
|
253
275
|
:return: paginated list of alert rules for the set filters
|
|
254
276
|
"""
|
|
277
|
+
if columns and not match_semver(
|
|
278
|
+
self.server_info.server_version, self.GROUP_OF_COLUMNS_API_VERSION
|
|
279
|
+
):
|
|
280
|
+
raise ValueError(
|
|
281
|
+
f'columns parameter works with server version {self.GROUP_OF_COLUMNS_API_VERSION}'
|
|
282
|
+
)
|
|
283
|
+
|
|
255
284
|
alert_params = {
|
|
256
285
|
'organization_name': self.organization_name,
|
|
257
286
|
'offset': offset,
|
|
258
287
|
'limit': limit,
|
|
259
288
|
}
|
|
260
289
|
|
|
261
|
-
if
|
|
290
|
+
if match_semver(
|
|
262
291
|
self.server_info.server_version, self.FILTER_ALERT_RULES_API_VERSION
|
|
263
292
|
):
|
|
264
293
|
filter_by_rules = []
|
|
265
294
|
if project_id:
|
|
266
295
|
filter_by_rules.append(
|
|
267
|
-
{
|
|
296
|
+
{
|
|
297
|
+
'field': 'project_name',
|
|
298
|
+
'operator': 'equal',
|
|
299
|
+
'value': project_id,
|
|
300
|
+
}
|
|
268
301
|
)
|
|
269
302
|
|
|
270
303
|
if model_id:
|
|
@@ -272,30 +305,31 @@ class AlertMixin:
|
|
|
272
305
|
{'field': 'model_name', 'operator': 'equal', 'value': model_id}
|
|
273
306
|
)
|
|
274
307
|
|
|
275
|
-
if
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
)
|
|
308
|
+
if metrics:
|
|
309
|
+
if match_semver(
|
|
310
|
+
self.server_info.server_version, self.RULE_V3_API_VERSION
|
|
311
|
+
):
|
|
312
|
+
filter_by_rules.append(
|
|
313
|
+
{'field': 'metric_id', 'operator': 'contains', 'value': metrics}
|
|
314
|
+
)
|
|
315
|
+
else:
|
|
316
|
+
if alert_type:
|
|
317
|
+
filter_by_rules.append(
|
|
318
|
+
{
|
|
319
|
+
'field': 'alert_type',
|
|
320
|
+
'operator': 'equal',
|
|
321
|
+
'value': alert_type,
|
|
322
|
+
}
|
|
323
|
+
)
|
|
324
|
+
filter_by_rules.append(
|
|
325
|
+
{'field': 'metric', 'operator': 'equal', 'value': metrics[0]}
|
|
326
|
+
)
|
|
279
327
|
|
|
280
|
-
if
|
|
328
|
+
if columns:
|
|
281
329
|
filter_by_rules.append(
|
|
282
|
-
{'field': '
|
|
330
|
+
{'field': 'feature_names', 'operator': 'contains', 'value': columns}
|
|
283
331
|
)
|
|
284
332
|
|
|
285
|
-
if match_semvar(self.server_info.server_version, self.GROUP_OF_COLUMNS_API_VERSION):
|
|
286
|
-
if columns:
|
|
287
|
-
filter_by_rules.append({'field': 'feature_names', 'operator': 'contains', 'value': columns})
|
|
288
|
-
elif column:
|
|
289
|
-
filter_by_rules.append({'field': 'feature_names', 'operator': 'contains', 'value': [column]})
|
|
290
|
-
else:
|
|
291
|
-
# we do not support columns in server version < 23.3
|
|
292
|
-
if columns:
|
|
293
|
-
raise ValueError(f'columns is not supported in the server version {self.server_info.server_version}. Please use column instead.')
|
|
294
|
-
if column:
|
|
295
|
-
filter_by_rules.append(
|
|
296
|
-
{'field': 'feature_name', 'operator': 'equal', 'value': column}
|
|
297
|
-
)
|
|
298
|
-
|
|
299
333
|
if baseline_id:
|
|
300
334
|
filter_by_rules.append(
|
|
301
335
|
{
|
|
@@ -317,8 +351,7 @@ class AlertMixin:
|
|
|
317
351
|
'project_name': project_id,
|
|
318
352
|
'model_name': model_id,
|
|
319
353
|
'alert_type': alert_type,
|
|
320
|
-
'metric':
|
|
321
|
-
'feature_name': column,
|
|
354
|
+
'metric': metrics[0] if metrics else None,
|
|
322
355
|
'baseline_name': baseline_id,
|
|
323
356
|
'ordering': ordering,
|
|
324
357
|
}
|
|
@@ -328,7 +361,7 @@ class AlertMixin:
|
|
|
328
361
|
url='alert-configs',
|
|
329
362
|
params=alert_params,
|
|
330
363
|
)
|
|
331
|
-
|
|
364
|
+
items = PaginatedResponseHandler(response).get_pagination_items()
|
|
332
365
|
|
|
333
366
|
return parse_obj_as(List[AlertRule], items)
|
|
334
367
|
|
|
@@ -365,7 +398,7 @@ class AlertMixin:
|
|
|
365
398
|
'ordering': ordering,
|
|
366
399
|
},
|
|
367
400
|
)
|
|
368
|
-
|
|
401
|
+
items = PaginatedResponseHandler(response).get_pagination_items()
|
|
369
402
|
return parse_obj_as(List[TriggeredAlerts], items)
|
|
370
403
|
|
|
371
404
|
def build_notifications_config(
|
|
@@ -373,14 +406,20 @@ class AlertMixin:
|
|
|
373
406
|
emails: str = '',
|
|
374
407
|
pagerduty_services: str = '',
|
|
375
408
|
pagerduty_severity: str = '',
|
|
376
|
-
|
|
409
|
+
webhooks: list[str] = [],
|
|
410
|
+
) -> Dict[str, Any]:
|
|
377
411
|
"""
|
|
378
412
|
To get the notifications value to be set for alert rule
|
|
379
413
|
:param emails: Comma separated emails list
|
|
380
414
|
:param pagerduty_services: Comma separated pagerduty services list
|
|
381
415
|
:param pagerduty severity: Severity for the alerts triggered by pagerduty
|
|
416
|
+
:param webhooks: List of webhook uuids, on which we need notification
|
|
382
417
|
:return: dict with emails and pagerduty dict. If left unused, will store empty string for these values
|
|
383
418
|
"""
|
|
419
|
+
webhooks_dict: list[dict[str, str]] = [
|
|
420
|
+
{'uuid': webhook_uuid} for webhook_uuid in webhooks
|
|
421
|
+
]
|
|
422
|
+
|
|
384
423
|
return {
|
|
385
424
|
'emails': {
|
|
386
425
|
'email': emails,
|
|
@@ -389,4 +428,5 @@ class AlertMixin:
|
|
|
389
428
|
'service': pagerduty_services,
|
|
390
429
|
'severity': pagerduty_severity,
|
|
391
430
|
},
|
|
431
|
+
'webhooks': webhooks_dict,
|
|
392
432
|
}
|