fiddler-client 1.8.3.dev1__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.
Files changed (142) hide show
  1. {fiddler-client-1.8.3.dev1 → fiddler-client-2.0.0}/PKG-INFO +29 -6
  2. {fiddler-client-1.8.3.dev1 → fiddler-client-2.0.0}/PUBLIC.md +28 -5
  3. fiddler-client-2.0.0/fiddler/__init__.py +90 -0
  4. fiddler-client-2.0.0/fiddler/_version.py +1 -0
  5. fiddler-client-2.0.0/fiddler/api/__init__.py +7 -0
  6. {fiddler-client-1.8.3.dev1/fiddler/v2 → fiddler-client-2.0.0/fiddler}/api/alert_mixin.py +110 -70
  7. fiddler-client-2.0.0/fiddler/api/api.py +105 -0
  8. {fiddler-client-1.8.3.dev1/fiddler/v2 → fiddler-client-2.0.0/fiddler}/api/baseline_mixin.py +44 -12
  9. fiddler-client-2.0.0/fiddler/api/dataset_mixin.py +403 -0
  10. {fiddler-client-1.8.3.dev1/fiddler/v2 → fiddler-client-2.0.0/fiddler}/api/events_mixin.py +184 -51
  11. {fiddler-client-1.8.3.dev1/fiddler/v2 → fiddler-client-2.0.0/fiddler}/api/explainability_mixin.py +54 -54
  12. fiddler-client-2.0.0/fiddler/api/generate_schema_mixin.py +301 -0
  13. {fiddler-client-1.8.3.dev1/fiddler/v2 → fiddler-client-2.0.0/fiddler}/api/helpers.py +5 -5
  14. {fiddler-client-1.8.3.dev1/fiddler/v2 → fiddler-client-2.0.0/fiddler}/api/job_mixin.py +6 -5
  15. {fiddler-client-1.8.3.dev1/fiddler/v2 → fiddler-client-2.0.0/fiddler}/api/model_artifact_deploy.py +10 -6
  16. {fiddler-client-1.8.3.dev1/fiddler/v2 → fiddler-client-2.0.0/fiddler}/api/model_deployment_mixin.py +22 -19
  17. {fiddler-client-1.8.3.dev1/fiddler/v2 → fiddler-client-2.0.0/fiddler}/api/model_mixin.py +184 -96
  18. {fiddler-client-1.8.3.dev1/fiddler/v2 → fiddler-client-2.0.0/fiddler}/api/project_mixin.py +36 -14
  19. fiddler-client-2.0.0/fiddler/api/webhooks_mixin.py +121 -0
  20. {fiddler-client-1.8.3.dev1/fiddler/v2 → fiddler-client-2.0.0/fiddler}/constants.py +33 -0
  21. {fiddler-client-1.8.3.dev1 → fiddler-client-2.0.0}/fiddler/core_objects.py +153 -737
  22. fiddler-client-2.0.0/fiddler/exceptions.py +94 -0
  23. {fiddler-client-1.8.3.dev1 → fiddler-client-2.0.0}/fiddler/libs/http_client.py +58 -11
  24. {fiddler-client-1.8.3.dev1/fiddler/v2 → fiddler-client-2.0.0/fiddler}/schema/alert.py +27 -31
  25. {fiddler-client-1.8.3.dev1/fiddler/v2 → fiddler-client-2.0.0/fiddler}/schema/base.py +1 -1
  26. {fiddler-client-1.8.3.dev1/fiddler/v2 → fiddler-client-2.0.0/fiddler}/schema/baseline.py +3 -1
  27. fiddler-client-2.0.0/fiddler/schema/dataset.py +91 -0
  28. {fiddler-client-1.8.3.dev1/fiddler/v2 → fiddler-client-2.0.0/fiddler}/schema/events.py +2 -2
  29. {fiddler-client-1.8.3.dev1/fiddler/v2 → fiddler-client-2.0.0/fiddler}/schema/model.py +3 -1
  30. {fiddler-client-1.8.3.dev1/fiddler/v2 → fiddler-client-2.0.0/fiddler}/schema/model_deployment.py +1 -1
  31. {fiddler-client-1.8.3.dev1/fiddler/v2 → fiddler-client-2.0.0/fiddler}/schema/project.py +1 -1
  32. {fiddler-client-1.8.3.dev1/fiddler/v2 → fiddler-client-2.0.0/fiddler}/schema/server_info.py +5 -3
  33. fiddler-client-2.0.0/fiddler/schema/webhook.py +10 -0
  34. fiddler-client-2.0.0/fiddler/schemas/custom_features.py +96 -0
  35. fiddler-client-2.0.0/fiddler/schemas/model_schema.py +46 -0
  36. fiddler-client-2.0.0/fiddler/schemas/model_spec.py +30 -0
  37. fiddler-client-2.0.0/fiddler/schemas/model_task_params.py +23 -0
  38. fiddler-client-2.0.0/fiddler/schemas/xai_params.py +11 -0
  39. {fiddler-client-1.8.3.dev1 → fiddler-client-2.0.0}/fiddler/utils/__init__.py +6 -6
  40. fiddler-client-2.0.0/fiddler/utils/decorators.py +113 -0
  41. {fiddler-client-1.8.3.dev1 → fiddler-client-2.0.0}/fiddler/utils/formatting.py +1 -1
  42. {fiddler-client-1.8.3.dev1/fiddler/v2 → fiddler-client-2.0.0/fiddler}/utils/helpers.py +31 -3
  43. fiddler-client-1.8.3.dev1/fiddler/utils/logging.py → fiddler-client-2.0.0/fiddler/utils/logger.py +1 -1
  44. fiddler-client-1.8.3.dev1/fiddler/utils/pandas.py → fiddler-client-2.0.0/fiddler/utils/pandas_helper.py +39 -49
  45. {fiddler-client-1.8.3.dev1/fiddler/v2 → fiddler-client-2.0.0/fiddler}/utils/response_handler.py +7 -11
  46. fiddler-client-2.0.0/fiddler/utils/semver_version.py +530 -0
  47. {fiddler-client-1.8.3.dev1/fiddler → fiddler-client-2.0.0/fiddler/utils}/validator.py +3 -3
  48. {fiddler-client-1.8.3.dev1/fiddler/v2 → fiddler-client-2.0.0/fiddler}/validators/dataset_validator.py +16 -8
  49. {fiddler-client-1.8.3.dev1 → fiddler-client-2.0.0}/fiddler_client.egg-info/PKG-INFO +29 -6
  50. fiddler-client-2.0.0/fiddler_client.egg-info/SOURCES.txt +99 -0
  51. fiddler-client-2.0.0/fiddler_client.egg-info/requires.txt +9 -0
  52. {fiddler-client-1.8.3.dev1 → fiddler-client-2.0.0}/setup.py +3 -12
  53. fiddler-client-2.0.0/tests/fiddler/base.py +38 -0
  54. fiddler-client-2.0.0/tests/fiddler/helper.py +72 -0
  55. fiddler-client-2.0.0/tests/fiddler/test_add_model.py +122 -0
  56. fiddler-client-2.0.0/tests/fiddler/test_alert.py +1192 -0
  57. fiddler-client-2.0.0/tests/fiddler/test_baseline.py +296 -0
  58. fiddler-client-2.0.0/tests/fiddler/test_check_version_decorator.py +34 -0
  59. fiddler-client-2.0.0/tests/fiddler/test_custom_features.py +110 -0
  60. fiddler-client-2.0.0/tests/fiddler/test_dataset_api.py +183 -0
  61. fiddler-client-2.0.0/tests/fiddler/test_events_api.py +229 -0
  62. fiddler-client-2.0.0/tests/fiddler/test_exceptions.py +87 -0
  63. fiddler-client-2.0.0/tests/fiddler/test_explainability_apis.py +379 -0
  64. fiddler-client-2.0.0/tests/fiddler/test_file_upload.py +218 -0
  65. fiddler-client-2.0.0/tests/fiddler/test_generate_schema.py +113 -0
  66. fiddler-client-2.0.0/tests/fiddler/test_helpers.py +15 -0
  67. fiddler-client-2.0.0/tests/fiddler/test_job.py +109 -0
  68. fiddler-client-2.0.0/tests/fiddler/test_model.py +210 -0
  69. fiddler-client-2.0.0/tests/fiddler/test_project.py +194 -0
  70. fiddler-client-2.0.0/tests/fiddler/test_response_handler.py +94 -0
  71. fiddler-client-2.0.0/tests/fiddler/test_upload_dataset.py +371 -0
  72. fiddler-client-2.0.0/tests/fiddler/test_validations.py +21 -0
  73. fiddler-client-2.0.0/tests/fiddler/test_webhook.py +124 -0
  74. fiddler-client-2.0.0/tests/fiddler/utils/test_general_checks.py +55 -0
  75. fiddler-client-2.0.0/tests/fiddler/utils/test_pandas.py +202 -0
  76. fiddler-client-2.0.0/tests/fiddler/utils/tests_utils.py +46 -0
  77. fiddler-client-2.0.0/tests/test_object_inference.py +155 -0
  78. fiddler-client-2.0.0/tests/utils.py +11 -0
  79. fiddler-client-1.8.3.dev1/fiddler/__init__.py +0 -1088
  80. fiddler-client-1.8.3.dev1/fiddler/_version.py +0 -1
  81. fiddler-client-1.8.3.dev1/fiddler/api/monitoring.py +0 -292
  82. fiddler-client-1.8.3.dev1/fiddler/api/publish_event.py +0 -275
  83. fiddler-client-1.8.3.dev1/fiddler/aws_utils.py +0 -172
  84. fiddler-client-1.8.3.dev1/fiddler/client.py +0 -146
  85. fiddler-client-1.8.3.dev1/fiddler/connection.py +0 -534
  86. fiddler-client-1.8.3.dev1/fiddler/constants.py +0 -16
  87. fiddler-client-1.8.3.dev1/fiddler/dataset.py +0 -136
  88. fiddler-client-1.8.3.dev1/fiddler/experimental.py +0 -477
  89. fiddler-client-1.8.3.dev1/fiddler/fiddler_api.py +0 -1970
  90. fiddler-client-1.8.3.dev1/fiddler/file_processor/src/constants.py +0 -95
  91. fiddler-client-1.8.3.dev1/fiddler/file_processor/src/extractor.py +0 -71
  92. fiddler-client-1.8.3.dev1/fiddler/file_processor/src/facade.py +0 -12
  93. fiddler-client-1.8.3.dev1/fiddler/file_processor/src/file_workflow_executor.py +0 -21
  94. fiddler-client-1.8.3.dev1/fiddler/file_processor/src/processor.py +0 -313
  95. fiddler-client-1.8.3.dev1/fiddler/file_processor/src/utils.py +0 -53
  96. fiddler-client-1.8.3.dev1/fiddler/file_processor/tests/test_facade.py +0 -58
  97. fiddler-client-1.8.3.dev1/fiddler/file_processor/tests/test_file_processor.py +0 -125
  98. fiddler-client-1.8.3.dev1/fiddler/model.py +0 -407
  99. fiddler-client-1.8.3.dev1/fiddler/model_info_validator.py +0 -154
  100. fiddler-client-1.8.3.dev1/fiddler/monitoring_validator.py +0 -398
  101. fiddler-client-1.8.3.dev1/fiddler/project.py +0 -130
  102. fiddler-client-1.8.3.dev1/fiddler/utils/exceptions.py +0 -37
  103. fiddler-client-1.8.3.dev1/fiddler/utils/helper.py +0 -24
  104. fiddler-client-1.8.3.dev1/fiddler/v1_v2_compat.py +0 -467
  105. fiddler-client-1.8.3.dev1/fiddler/v2/__init__.py +0 -0
  106. fiddler-client-1.8.3.dev1/fiddler/v2/api/__init__.py +0 -0
  107. fiddler-client-1.8.3.dev1/fiddler/v2/api/api.py +0 -55
  108. fiddler-client-1.8.3.dev1/fiddler/v2/api/dataset_mixin.py +0 -310
  109. fiddler-client-1.8.3.dev1/fiddler/v2/schema/__init__.py +0 -0
  110. fiddler-client-1.8.3.dev1/fiddler/v2/schema/common.py +0 -72
  111. fiddler-client-1.8.3.dev1/fiddler/v2/schema/dataset.py +0 -28
  112. fiddler-client-1.8.3.dev1/fiddler/v2/utils/__init__.py +0 -0
  113. fiddler-client-1.8.3.dev1/fiddler/v2/utils/decorators.py +0 -39
  114. fiddler-client-1.8.3.dev1/fiddler/v2/utils/exceptions.py +0 -134
  115. fiddler-client-1.8.3.dev1/fiddler/v2/validators/__init__.py +0 -0
  116. fiddler-client-1.8.3.dev1/fiddler_client.egg-info/SOURCES.txt +0 -95
  117. fiddler-client-1.8.3.dev1/fiddler_client.egg-info/requires.txt +0 -18
  118. fiddler-client-1.8.3.dev1/tests/__init__.py +0 -0
  119. fiddler-client-1.8.3.dev1/tests/test_fiddler_api.py +0 -66
  120. {fiddler-client-1.8.3.dev1 → fiddler-client-2.0.0}/MANIFEST.in +0 -0
  121. {fiddler-client-1.8.3.dev1 → fiddler-client-2.0.0}/README.md +0 -0
  122. {fiddler-client-1.8.3.dev1/fiddler/api → fiddler-client-2.0.0/fiddler/assets}/__init__.py +0 -0
  123. {fiddler-client-1.8.3.dev1 → fiddler-client-2.0.0}/fiddler/assets/pg_reserved_words.py +0 -0
  124. {fiddler-client-1.8.3.dev1/fiddler/assets → fiddler-client-2.0.0/fiddler/libs}/__init__.py +0 -0
  125. {fiddler-client-1.8.3.dev1/fiddler/file_processor → fiddler-client-2.0.0/fiddler/packtools}/__init__.py +0 -0
  126. {fiddler-client-1.8.3.dev1 → fiddler-client-2.0.0}/fiddler/packtools/gem.py +0 -0
  127. {fiddler-client-1.8.3.dev1 → fiddler-client-2.0.0}/fiddler/packtools/keras_ig_helpers.py +0 -0
  128. {fiddler-client-1.8.3.dev1 → fiddler-client-2.0.0}/fiddler/packtools/project_attributions_helpers.py +0 -0
  129. {fiddler-client-1.8.3.dev1 → fiddler-client-2.0.0}/fiddler/packtools/template_model.py +0 -0
  130. {fiddler-client-1.8.3.dev1/fiddler/file_processor/src → fiddler-client-2.0.0/fiddler/schema}/__init__.py +0 -0
  131. {fiddler-client-1.8.3.dev1/fiddler/v2 → fiddler-client-2.0.0/fiddler}/schema/job.py +0 -0
  132. {fiddler-client-1.8.3.dev1/fiddler/v2 → fiddler-client-2.0.0/fiddler}/schema/user.py +0 -0
  133. {fiddler-client-1.8.3.dev1/fiddler/file_processor/tests → fiddler-client-2.0.0/fiddler/schemas}/__init__.py +0 -0
  134. {fiddler-client-1.8.3.dev1 → fiddler-client-2.0.0}/fiddler/utils/general_checks.py +0 -0
  135. {fiddler-client-1.8.3.dev1/fiddler/v2 → fiddler-client-2.0.0/fiddler}/utils/validations.py +0 -0
  136. {fiddler-client-1.8.3.dev1/fiddler/file_processor/tests/resources → fiddler-client-2.0.0/fiddler/validators}/__init__.py +0 -0
  137. {fiddler-client-1.8.3.dev1 → fiddler-client-2.0.0}/fiddler_client.egg-info/dependency_links.txt +0 -0
  138. {fiddler-client-1.8.3.dev1 → fiddler-client-2.0.0}/fiddler_client.egg-info/top_level.txt +0 -0
  139. {fiddler-client-1.8.3.dev1 → fiddler-client-2.0.0}/setup.cfg +0 -0
  140. {fiddler-client-1.8.3.dev1/fiddler/file_processor/tests/resources/csvs → fiddler-client-2.0.0/tests}/__init__.py +0 -0
  141. {fiddler-client-1.8.3.dev1/fiddler/libs → fiddler-client-2.0.0/tests/fiddler}/__init__.py +0 -0
  142. {fiddler-client-1.8.3.dev1/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: 1.8.3.dev1
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,6 +26,27 @@ 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
+
29
50
  ### 1.8.4
30
51
  - #### **New Features**
31
52
  - New DeploymentType enum for MANUAL deployment
@@ -38,20 +59,22 @@ Description: Fiddler Client
38
59
  ### 1.8.2
39
60
  - #### **Modifications**
40
61
  - Fixed a bug where `min` and `max` for columns of type `float` in `dataset_info` are cast into `int` after uploaded
62
+
41
63
  ### 1.8.1
42
64
  - #### **Modifications**
43
- - 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.
44
66
  - Fix `categorical_target_class_details` when passed as an array
45
67
  - Fix a bug where `fdl.ModelInputType.TEXT` were not being accepted properly
46
68
  - Fix `categorical_target_class_details` when passed as an empty list
47
69
 
70
+
48
71
  ### 1.8.0
49
72
  - #### **Modifications**
50
- - Add new alert type - `statistic` for setting alerts
73
+ - Add new alert type - `statistic` for setting alerts
51
74
  - Add `target_class_order` as a required field of `ModelInfo` object when `model_task` is `MULTICLASS_CLASSIFICATION`,
52
75
  `RANKING` or `BINARY_CLASSIFICATION`. Only applies for `BINARY_CLASSIFICATION` when target column is of type `CATEGORY`
53
- - CURRENT_DATA_TYPE_VERSION increased to v1
54
- - removed type conversion of possible_values
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
55
78
 
56
79
  ### 1.7.4
57
80
  - #### **Modification**
@@ -97,7 +120,7 @@ Description: Fiddler Client
97
120
 
98
121
  ### 1.5.2
99
122
  - #### **Modifications**
100
- - Adds fix for self signed certificate not working by adding verify param to FiddlerApi
123
+ - Add fix for self signed certificate not working by adding verify param to FiddlerApi
101
124
 
102
125
  ### 1.5.1
103
126
  - #### **Modifications**
@@ -19,6 +19,27 @@ 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
+
22
43
  ### 1.8.4
23
44
  - #### **New Features**
24
45
  - New DeploymentType enum for MANUAL deployment
@@ -31,20 +52,22 @@ Version History
31
52
  ### 1.8.2
32
53
  - #### **Modifications**
33
54
  - Fixed a bug where `min` and `max` for columns of type `float` in `dataset_info` are cast into `int` after uploaded
55
+
34
56
  ### 1.8.1
35
57
  - #### **Modifications**
36
- - 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.
37
59
  - Fix `categorical_target_class_details` when passed as an array
38
60
  - Fix a bug where `fdl.ModelInputType.TEXT` were not being accepted properly
39
61
  - Fix `categorical_target_class_details` when passed as an empty list
40
62
 
63
+
41
64
  ### 1.8.0
42
65
  - #### **Modifications**
43
- - Add new alert type - `statistic` for setting alerts
66
+ - Add new alert type - `statistic` for setting alerts
44
67
  - Add `target_class_order` as a required field of `ModelInfo` object when `model_task` is `MULTICLASS_CLASSIFICATION`,
45
68
  `RANKING` or `BINARY_CLASSIFICATION`. Only applies for `BINARY_CLASSIFICATION` when target column is of type `CATEGORY`
46
- - CURRENT_DATA_TYPE_VERSION increased to v1
47
- - removed type conversion of possible_values
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
48
71
 
49
72
  ### 1.7.4
50
73
  - #### **Modification**
@@ -90,7 +113,7 @@ Version History
90
113
 
91
114
  ### 1.5.2
92
115
  - #### **Modifications**
93
- - Adds fix for self signed certificate not working by adding verify param to FiddlerApi
116
+ - Add fix for self signed certificate not working by adding verify param to FiddlerApi
94
117
 
95
118
  ### 1.5.1
96
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'
@@ -0,0 +1,7 @@
1
+ from fiddler.api.api import FiddlerApi, FiddlerClient
2
+
3
+ __all__ = [
4
+ 'FiddlerClient',
5
+ 'FiddlerApi',
6
+
7
+ ]
@@ -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.utils import logging
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.v2.utils.exceptions import handle_api_error_response
22
- from fiddler.v2.utils.helpers import match_semvar
23
- from fiddler.v2.utils.response_handler import (
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 = logging.getLogger(__name__)
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
- GROUP_OF_COLUMNS_LIST_API_VERSION = '>=23.4.0'
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
- project_id: str,
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, Dict[str, Any]]] = None,
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: Selects one of the four metric types:
65
- 1) AlertType.PERFORMANCE
66
- 2) AlertType.DATA_DRIFT
67
- 3) AlertType.DATA_INTEGRITY
68
- 4) AlertType.SERVICE_METRICS
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. It can take '__ANY__' to check for all columns
118
- Supported by server version 23.2.0 or lower.
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 baselne, whose histogram is compared against the same derived from current data.
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
- if match_semvar(self.server_info.server_version, self.GROUP_OF_COLUMNS_API_VERSION):
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 match_semvar(self.server_info.server_version, self.GROUP_OF_COLUMNS_LIST_API_VERSION):
159
- alert_rule_payload.feature_names=columns
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 match_semvar(self.server_info.server_version, self.GROUP_OF_COLUMNS_LIST_API_VERSION):
165
- alert_rule_payload.feature_names=[column]
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(f'columns is not supported in the server version {self.server_info.server_version}. Please use column instead.')
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
- metric: Optional[Metric] = None,
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: Selects one of the four metric types:
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 metric: "metric":
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 match_semvar(
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
- {'field': 'project_name', 'operator': 'equal', 'value': project_id}
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 alert_type:
276
- filter_by_rules.append(
277
- {'field': 'alert_type', 'operator': 'equal', 'value': alert_type}
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 metric:
328
+ if columns:
281
329
  filter_by_rules.append(
282
- {'field': 'metric', 'operator': 'equal', 'value': metric}
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': 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
- _, items = PaginatedResponseHandler(response).get_pagination_details_and_items()
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
- _, items = PaginatedResponseHandler(response).get_pagination_details_and_items()
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
- ) -> Dict[str, Dict[str, Any]]:
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
  }