fiddler-client 2.2.0.dev3__tar.gz → 2.3.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 (152) hide show
  1. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/PKG-INFO +31 -4
  2. fiddler-client-2.2.0.dev3/fiddler_client.egg-info/PKG-INFO → fiddler-client-2.3.0/PUBLIC.md +29 -25
  3. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/__init__.py +1 -4
  4. fiddler-client-2.3.0/fiddler/_version.py +1 -0
  5. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/api/alert_mixin.py +4 -0
  6. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/api/api.py +1 -5
  7. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/api/events_mixin.py +5 -5
  8. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/api/webhooks_mixin.py +8 -7
  9. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/schema/alert.py +2 -0
  10. fiddler-client-2.3.0/fiddler3/__init__.py +39 -0
  11. fiddler-client-2.3.0/fiddler3/configs.py +5 -0
  12. fiddler-client-2.3.0/fiddler3/connection.py +117 -0
  13. fiddler-client-2.3.0/fiddler3/constants/common.py +3 -0
  14. fiddler-client-2.3.0/fiddler3/constants/job.py +13 -0
  15. fiddler-client-2.3.0/fiddler3/constants/model.py +64 -0
  16. fiddler-client-2.3.0/fiddler3/decorators.py +52 -0
  17. fiddler-client-2.3.0/fiddler3/entities/__init__.py +3 -0
  18. fiddler-client-2.3.0/fiddler3/entities/base.py +76 -0
  19. fiddler-client-2.3.0/fiddler3/entities/helpers.py +21 -0
  20. fiddler-client-2.3.0/fiddler3/entities/job.py +145 -0
  21. fiddler-client-2.3.0/fiddler3/entities/model.py +198 -0
  22. fiddler-client-2.3.0/fiddler3/entities/project.py +90 -0
  23. fiddler-client-2.3.0/fiddler3/exceptions.py +87 -0
  24. fiddler-client-2.3.0/fiddler3/libs/http_client.py +220 -0
  25. fiddler-client-2.3.0/fiddler3/libs/semver.py +489 -0
  26. fiddler-client-2.3.0/fiddler3/schemas/__init__.py +5 -0
  27. fiddler-client-2.3.0/fiddler3/schemas/base.py +8 -0
  28. fiddler-client-2.3.0/fiddler3/schemas/custom_features.py +98 -0
  29. fiddler-client-2.3.0/fiddler3/schemas/job.py +19 -0
  30. fiddler-client-2.3.0/fiddler3/schemas/model.py +48 -0
  31. {fiddler-client-2.2.0.dev3/fiddler → fiddler-client-2.3.0/fiddler3}/schemas/model_schema.py +1 -1
  32. {fiddler-client-2.2.0.dev3/fiddler → fiddler-client-2.3.0/fiddler3}/schemas/model_spec.py +1 -1
  33. {fiddler-client-2.2.0.dev3/fiddler → fiddler-client-2.3.0/fiddler3}/schemas/model_task_params.py +1 -1
  34. fiddler-client-2.3.0/fiddler3/schemas/organization.py +8 -0
  35. fiddler-client-2.3.0/fiddler3/schemas/project.py +19 -0
  36. fiddler-client-2.3.0/fiddler3/schemas/response.py +51 -0
  37. fiddler-client-2.3.0/fiddler3/schemas/server_info.py +18 -0
  38. fiddler-client-2.3.0/fiddler3/schemas/user.py +9 -0
  39. fiddler-client-2.3.0/fiddler3/tests/apis/__init__.py +0 -0
  40. fiddler-client-2.3.0/fiddler3/tests/apis/test_generate_schema.py +149 -0
  41. fiddler-client-2.3.0/fiddler3/tests/apis/test_job.py +82 -0
  42. fiddler-client-2.3.0/fiddler3/tests/apis/test_model.py +373 -0
  43. fiddler-client-2.3.0/fiddler3/tests/apis/test_project.py +221 -0
  44. fiddler-client-2.3.0/fiddler3/tests/conftest.py +30 -0
  45. fiddler-client-2.3.0/fiddler3/tests/constants.py +14 -0
  46. fiddler-client-2.3.0/fiddler3/tests/test_connection.py +41 -0
  47. fiddler-client-2.3.0/fiddler3/tests/test_utils.py +15 -0
  48. fiddler-client-2.3.0/fiddler3/tests/utils.py +14 -0
  49. fiddler-client-2.3.0/fiddler3/utils/__init__.py +0 -0
  50. fiddler-client-2.3.0/fiddler3/utils/logger.py +8 -0
  51. fiddler-client-2.2.0.dev3/fiddler/api/generate_schema_mixin.py → fiddler-client-2.3.0/fiddler3/utils/model_schema_generator.py +23 -53
  52. fiddler-client-2.3.0/fiddler3/utils/version.py +17 -0
  53. fiddler-client-2.3.0/fiddler3/version.py +1 -0
  54. fiddler-client-2.2.0.dev3/PUBLIC.md → fiddler-client-2.3.0/fiddler_client.egg-info/PKG-INFO +52 -2
  55. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler_client.egg-info/SOURCES.txt +48 -7
  56. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler_client.egg-info/requires.txt +1 -1
  57. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler_client.egg-info/top_level.txt +1 -0
  58. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/setup.py +1 -1
  59. fiddler-client-2.3.0/tests/__init__.py +0 -0
  60. fiddler-client-2.3.0/tests/fiddler/__init__.py +0 -0
  61. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/tests/fiddler/test_alert.py +33 -0
  62. fiddler-client-2.3.0/tests/fiddler/utils/__init__.py +0 -0
  63. fiddler-client-2.2.0.dev3/fiddler/_version.py +0 -1
  64. fiddler-client-2.2.0.dev3/tests/fiddler/test_generate_schema.py +0 -113
  65. fiddler-client-2.2.0.dev3/tests/fiddler/test_segments.py +0 -227
  66. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/LICENSE.txt +0 -0
  67. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/MANIFEST.in +0 -0
  68. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/README.md +0 -0
  69. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/api/__init__.py +0 -0
  70. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/api/baseline_mixin.py +0 -0
  71. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/api/custom_metrics_mixin.py +0 -0
  72. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/api/dataset_mixin.py +0 -0
  73. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/api/explainability_mixin.py +0 -0
  74. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/api/helpers.py +0 -0
  75. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/api/job_mixin.py +0 -0
  76. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/api/model_artifact_deploy.py +0 -0
  77. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/api/model_deployment_mixin.py +0 -0
  78. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/api/model_mixin.py +0 -0
  79. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/api/project_mixin.py +0 -0
  80. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/api/segments_mixin.py +0 -0
  81. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/assets/__init__.py +0 -0
  82. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/assets/pg_reserved_words.py +0 -0
  83. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/constants.py +0 -0
  84. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/core_objects.py +0 -0
  85. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/exceptions.py +0 -0
  86. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/libs/__init__.py +0 -0
  87. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/libs/http_client.py +0 -0
  88. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/packtools/__init__.py +0 -0
  89. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/packtools/gem.py +0 -0
  90. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/packtools/keras_ig_helpers.py +0 -0
  91. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/packtools/project_attributions_helpers.py +0 -0
  92. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/packtools/template_model.py +0 -0
  93. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/schema/__init__.py +0 -0
  94. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/schema/base.py +0 -0
  95. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/schema/baseline.py +0 -0
  96. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/schema/custom_metric.py +0 -0
  97. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/schema/dataset.py +0 -0
  98. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/schema/events.py +0 -0
  99. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/schema/job.py +0 -0
  100. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/schema/model.py +0 -0
  101. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/schema/model_deployment.py +0 -0
  102. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/schema/project.py +0 -0
  103. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/schema/segment.py +0 -0
  104. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/schema/server_info.py +0 -0
  105. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/schema/user.py +0 -0
  106. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/schema/webhook.py +0 -0
  107. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/schemas/__init__.py +0 -0
  108. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/schemas/custom_features.py +0 -0
  109. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/utils/__init__.py +0 -0
  110. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/utils/decorators.py +0 -0
  111. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/utils/formatting.py +0 -0
  112. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/utils/general_checks.py +0 -0
  113. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/utils/helpers.py +0 -0
  114. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/utils/logger.py +0 -0
  115. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/utils/pandas_helper.py +0 -0
  116. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/utils/response_handler.py +0 -0
  117. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/utils/semver_version.py +0 -0
  118. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/utils/validations.py +0 -0
  119. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/utils/validator.py +0 -0
  120. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/validators/__init__.py +0 -0
  121. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler/validators/dataset_validator.py +0 -0
  122. {fiddler-client-2.2.0.dev3/tests → fiddler-client-2.3.0/fiddler3/constants}/__init__.py +0 -0
  123. {fiddler-client-2.2.0.dev3/tests/fiddler → fiddler-client-2.3.0/fiddler3/libs}/__init__.py +0 -0
  124. {fiddler-client-2.2.0.dev3/fiddler → fiddler-client-2.3.0/fiddler3}/schemas/xai_params.py +0 -0
  125. {fiddler-client-2.2.0.dev3/tests/fiddler/utils → fiddler-client-2.3.0/fiddler3/tests}/__init__.py +0 -0
  126. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/fiddler_client.egg-info/dependency_links.txt +0 -0
  127. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/setup.cfg +0 -0
  128. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/tests/fiddler/base.py +0 -0
  129. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/tests/fiddler/helper.py +0 -0
  130. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/tests/fiddler/test_add_model.py +0 -0
  131. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/tests/fiddler/test_baseline.py +0 -0
  132. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/tests/fiddler/test_check_version_decorator.py +0 -0
  133. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/tests/fiddler/test_custom_features.py +0 -0
  134. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/tests/fiddler/test_custom_metrics.py +0 -0
  135. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/tests/fiddler/test_dataset_api.py +0 -0
  136. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/tests/fiddler/test_events_api.py +0 -0
  137. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/tests/fiddler/test_exceptions.py +0 -0
  138. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/tests/fiddler/test_explainability_apis.py +0 -0
  139. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/tests/fiddler/test_file_upload.py +0 -0
  140. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/tests/fiddler/test_helpers.py +0 -0
  141. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/tests/fiddler/test_job.py +0 -0
  142. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/tests/fiddler/test_model.py +0 -0
  143. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/tests/fiddler/test_project.py +0 -0
  144. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/tests/fiddler/test_response_handler.py +0 -0
  145. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/tests/fiddler/test_upload_dataset.py +0 -0
  146. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/tests/fiddler/test_validations.py +0 -0
  147. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/tests/fiddler/test_webhook.py +0 -0
  148. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/tests/fiddler/utils/test_general_checks.py +0 -0
  149. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/tests/fiddler/utils/test_pandas.py +0 -0
  150. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/tests/fiddler/utils/tests_utils.py +0 -0
  151. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/tests/test_object_inference.py +0 -0
  152. {fiddler-client-2.2.0.dev3 → fiddler-client-2.3.0}/tests/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fiddler-client
3
- Version: 2.2.0.dev3
3
+ Version: 2.3.0
4
4
  Summary: Python client for Fiddler Service
5
5
  Home-page: https://fiddler.ai
6
6
  Author: Fiddler Labs
@@ -14,7 +14,7 @@ Requires-Dist: pip>=21.0
14
14
  Requires-Dist: requests<3
15
15
  Requires-Dist: requests-toolbelt
16
16
  Requires-Dist: pandas>=1.2.5
17
- Requires-Dist: pydantic==1.9.0
17
+ Requires-Dist: pydantic<2,>=1.9.0
18
18
  Requires-Dist: deprecated==1.2.13
19
19
  Requires-Dist: tqdm
20
20
  Requires-Dist: simplejson>=3.17.0
@@ -42,10 +42,29 @@ Documentation for the API can be found [here](https://docs.fiddler.ai/reference/
42
42
 
43
43
  Version History
44
44
  -------------
45
+ ### 2.3.0
46
+ - #### **New Features**
47
+ - Added support for creating alerts on the `Frequency` metric.
48
+ - #### **Modifications**
49
+ - Relax pydantic version to allow any version between 1.9 and 2
50
+
51
+ ### 2.2.1
52
+ - #### **Modifications**
53
+ - Relax pydantic version to allow any version between 1.9 and 2
45
54
 
46
55
  ### 2.2.0
47
- - #### **New Features**
48
- - Support segments
56
+ - #### **Modifications**
57
+ - add_custom_metric() supports an optional `description` parameter
58
+ - `fql` is renamed to `definition` in add_custom_metric()
59
+ - A new get_custom_metric() function to get details about a single custom metric.
60
+
61
+ ### 2.1.2
62
+ - #### **Modifications**
63
+ - Relax pydantic version to allow any version between 1.9 and 2
64
+
65
+ ### 2.1.1
66
+ - #### **Modifications**
67
+ - Update `pyarrow` requirement to `7.0.0`.
49
68
 
50
69
  ### 2.1.0
51
70
  - #### **New Features**
@@ -56,6 +75,14 @@ Version History
56
75
  - `DatasetDataSource` and `EventIdDataSource` will take `dataset_id` instead of `dataset_name`
57
76
  - `list_baselines()` to return baseline names instead of baseline objects
58
77
 
78
+ ### 2.0.8
79
+ - #### **Modifications**
80
+ - Relax pydantic version to allow any version between 1.9 and 2
81
+
82
+ ### 2.0.7
83
+ - #### **Modifications**
84
+ - Support string metric types for alert creation, for server 23.7.
85
+
59
86
  ### 2.0.6
60
87
  - #### **Modifications**
61
88
  - Update `pyarrow` requirement to `7.0.0`.
@@ -1,26 +1,3 @@
1
- Metadata-Version: 2.1
2
- Name: fiddler-client
3
- Version: 2.2.0.dev3
4
- Summary: Python client for Fiddler Service
5
- Home-page: https://fiddler.ai
6
- Author: Fiddler Labs
7
- Classifier: Programming Language :: Python :: 3
8
- Classifier: License :: OSI Approved :: Apache Software License
9
- Classifier: Operating System :: OS Independent
10
- Requires-Python: >3.6.3
11
- Description-Content-Type: text/markdown
12
- License-File: LICENSE.txt
13
- Requires-Dist: pip>=21.0
14
- Requires-Dist: requests<3
15
- Requires-Dist: requests-toolbelt
16
- Requires-Dist: pandas>=1.2.5
17
- Requires-Dist: pydantic==1.9.0
18
- Requires-Dist: deprecated==1.2.13
19
- Requires-Dist: tqdm
20
- Requires-Dist: simplejson>=3.17.0
21
- Requires-Dist: pyarrow>=7.0.0
22
- Requires-Dist: pyyaml
23
-
24
1
  Fiddler Client
25
2
  =============
26
3
 
@@ -42,10 +19,29 @@ Documentation for the API can be found [here](https://docs.fiddler.ai/reference/
42
19
 
43
20
  Version History
44
21
  -------------
22
+ ### 2.3.0
23
+ - #### **New Features**
24
+ - Added support for creating alerts on the `Frequency` metric.
25
+ - #### **Modifications**
26
+ - Relax pydantic version to allow any version between 1.9 and 2
27
+
28
+ ### 2.2.1
29
+ - #### **Modifications**
30
+ - Relax pydantic version to allow any version between 1.9 and 2
45
31
 
46
32
  ### 2.2.0
47
- - #### **New Features**
48
- - Support segments
33
+ - #### **Modifications**
34
+ - add_custom_metric() supports an optional `description` parameter
35
+ - `fql` is renamed to `definition` in add_custom_metric()
36
+ - A new get_custom_metric() function to get details about a single custom metric.
37
+
38
+ ### 2.1.2
39
+ - #### **Modifications**
40
+ - Relax pydantic version to allow any version between 1.9 and 2
41
+
42
+ ### 2.1.1
43
+ - #### **Modifications**
44
+ - Update `pyarrow` requirement to `7.0.0`.
49
45
 
50
46
  ### 2.1.0
51
47
  - #### **New Features**
@@ -56,6 +52,14 @@ Version History
56
52
  - `DatasetDataSource` and `EventIdDataSource` will take `dataset_id` instead of `dataset_name`
57
53
  - `list_baselines()` to return baseline names instead of baseline objects
58
54
 
55
+ ### 2.0.8
56
+ - #### **Modifications**
57
+ - Relax pydantic version to allow any version between 1.9 and 2
58
+
59
+ ### 2.0.7
60
+ - #### **Modifications**
61
+ - Support string metric types for alert creation, for server 23.7.
62
+
59
63
  ### 2.0.6
60
64
  - #### **Modifications**
61
65
  - Update `pyarrow` requirement to `7.0.0`.
@@ -45,11 +45,11 @@ from fiddler.schema.alert import (
45
45
  from fiddler.schema.model_deployment import DeploymentParams, DeploymentType
46
46
  from fiddler.schemas.custom_features import (
47
47
  CustomFeature,
48
+ CustomFeatureType,
48
49
  ImageEmbedding,
49
50
  Multivariate,
50
51
  TextEmbedding,
51
52
  VectorFeature,
52
- CustomFeatureType,
53
53
  )
54
54
  from fiddler.utils import ColorLogger
55
55
  from fiddler.utils.logger import get_logger
@@ -61,9 +61,6 @@ from fiddler.utils.validator import (
61
61
 
62
62
  logger = get_logger(__name__)
63
63
 
64
- SUPPORTED_API_VERSIONS = ['v2']
65
-
66
-
67
64
  __all__ = [
68
65
  '__version__',
69
66
  'BatchPublishType',
@@ -0,0 +1 @@
1
+ __version__ = '2.3.0'
@@ -54,6 +54,7 @@ class AlertMixin:
54
54
  alert_type: Optional[AlertType] = None,
55
55
  baseline_id: Optional[str] = None,
56
56
  compare_period: Optional[ComparePeriod] = None,
57
+ category: Optional[str] = None,
57
58
  column: Optional[str] = None,
58
59
  columns: Optional[List[str]] = None,
59
60
  warning_threshold: Optional[float] = None,
@@ -146,6 +147,7 @@ class AlertMixin:
146
147
  alert_type=alert_type,
147
148
  metric=metric,
148
149
  metric_id=metric,
150
+ category=category,
149
151
  compare_to=compare_to,
150
152
  compare_period=compare_period,
151
153
  priority=priority,
@@ -156,6 +158,8 @@ class AlertMixin:
156
158
  time_bucket=bin_size.value[0],
157
159
  bin_size=bin_size.value[1],
158
160
  notifications=notifications_config,
161
+ feature_name=None,
162
+ feature_names=None,
159
163
  )
160
164
 
161
165
  if columns and not match_semver(
@@ -4,19 +4,17 @@ from urllib.parse import urljoin
4
4
  from fiddler._version import __version__
5
5
  from fiddler.api.alert_mixin import AlertMixin
6
6
  from fiddler.api.baseline_mixin import BaselineMixin
7
+ from fiddler.api.custom_metrics_mixin import CustomMetricsMixin
7
8
 
8
9
  # @todo: This is v1 implementation needs to have a proper v2 approach
9
10
  from fiddler.api.dataset_mixin import DatasetMixin
10
11
  from fiddler.api.events_mixin import EventsMixin
11
12
  from fiddler.api.explainability_mixin import ExplainabilityMixin
12
- from fiddler.api.generate_schema_mixin import GenerateSchemaMixin
13
13
  from fiddler.api.job_mixin import JobMixin
14
14
  from fiddler.api.model_deployment_mixin import ModelDeploymentMixin
15
15
  from fiddler.api.model_mixin import ModelMixin
16
16
  from fiddler.api.project_mixin import ProjectMixin
17
17
  from fiddler.api.webhooks_mixin import WebhookMixin
18
- from fiddler.api.custom_metrics_mixin import CustomMetricsMixin
19
- from fiddler.api.segments_mixin import SegmentsMixin
20
18
  from fiddler.constants import (
21
19
  CURRENT_API_VERSION,
22
20
  FIDDLER_CLIENT_VERSION_HEADER,
@@ -41,10 +39,8 @@ class FiddlerClient(
41
39
  AlertMixin,
42
40
  ExplainabilityMixin,
43
41
  ModelDeploymentMixin,
44
- GenerateSchemaMixin,
45
42
  WebhookMixin,
46
43
  CustomMetricsMixin,
47
- SegmentsMixin
48
44
  ):
49
45
  def __init__(
50
46
  self,
@@ -34,7 +34,7 @@ class EventsMixin:
34
34
  model_name: str,
35
35
  events_path: Path,
36
36
  batch_id: Optional[str] = None,
37
- events_schema: Optional[str] = None,
37
+ events_schema: Optional[dict] = None,
38
38
  id_field: Optional[str] = None,
39
39
  is_update: Optional[bool] = None,
40
40
  timestamp_field: Optional[str] = None,
@@ -181,12 +181,12 @@ class EventsMixin:
181
181
 
182
182
  # Either batch_source or events_path can be given for _publish_events_batch_from_file
183
183
  if batch_source is None and events_path is None:
184
- raise ValueError(f'`batch_source` parameter is required.')
184
+ raise ValueError('`batch_source` parameter is required.')
185
185
 
186
186
  if timestamp_format:
187
187
  if type(timestamp_format) is not FiddlerTimestamp:
188
188
  raise ValueError(
189
- f'timestamp_format format is not of type FiddlerTimestamp'
189
+ 'timestamp_format format is not of type FiddlerTimestamp'
190
190
  )
191
191
  timestamp_format = FiddlerTimestamp(timestamp_format.value)
192
192
  if type(batch_source) == pd.DataFrame and (
@@ -235,7 +235,7 @@ class EventsMixin:
235
235
  event: dict,
236
236
  event_id: Optional[str] = None,
237
237
  update_event: Optional[bool] = None,
238
- event_timestamp: Optional[int] = None,
238
+ event_timestamp: Optional[str] = None,
239
239
  timestamp_format: FiddlerTimestamp = FiddlerTimestamp.INFER,
240
240
  casting_type: Optional[bool] = False,
241
241
  dry_run: Optional[bool] = False,
@@ -263,7 +263,7 @@ class EventsMixin:
263
263
  if timestamp_format:
264
264
  if type(timestamp_format) is not FiddlerTimestamp:
265
265
  raise ValueError(
266
- f'timestamp_format format is not of type FiddlerTimestamp'
266
+ 'timestamp_format format is not of type FiddlerTimestamp'
267
267
  )
268
268
  timestamp_format = FiddlerTimestamp(timestamp_format.value)
269
269
 
@@ -1,5 +1,5 @@
1
1
  from http import HTTPStatus
2
- from typing import List
2
+ from typing import Dict, List
3
3
 
4
4
  from pydantic import parse_obj_as
5
5
 
@@ -7,10 +7,7 @@ from fiddler.libs.http_client import RequestClient
7
7
  from fiddler.schema.webhook import Webhook
8
8
  from fiddler.utils.decorators import handle_api_error_response
9
9
  from fiddler.utils.logger import get_logger
10
- from fiddler.utils.response_handler import (
11
- APIResponseHandler,
12
- PaginatedResponseHandler,
13
- )
10
+ from fiddler.utils.response_handler import APIResponseHandler, PaginatedResponseHandler
14
11
 
15
12
  logger = get_logger(__name__)
16
13
 
@@ -41,7 +38,7 @@ class WebhookMixin:
41
38
  data=request_body,
42
39
  )
43
40
  if response.status_code == HTTPStatus.OK:
44
- logger.info(f'Webhook created successfully.')
41
+ logger.info('Webhook created successfully.')
45
42
  else:
46
43
  logger.info('Webhook creation unsuccessful')
47
44
  return Webhook.deserialize(APIResponseHandler(response))
@@ -83,7 +80,11 @@ class WebhookMixin:
83
80
 
84
81
  :returns: Updated `Webhook` object.
85
82
  """
86
- request_body = Webhook(name=name, url=url, provider=provider).dict()
83
+ request_body: Dict[str, str] = {
84
+ 'name': name,
85
+ 'url': url,
86
+ 'provider': provider,
87
+ }
87
88
  response = self.client.patch(
88
89
  url=f'webhooks/{uuid}',
89
90
  data=request_body,
@@ -148,6 +148,7 @@ class AlertRulePayload(BaseDataSchema):
148
148
  metric_id: Union[Metric, str]
149
149
  feature_name: Optional[str]
150
150
  feature_names: Optional[List[str]]
151
+ category: Optional[str]
151
152
  priority: Priority
152
153
  compare_to: CompareTo
153
154
  baseline_name: Optional[str]
@@ -176,6 +177,7 @@ class AlertRule(BaseDataSchema):
176
177
  metric: str
177
178
  column: Optional[str] = Field(alias='feature_name', default=None)
178
179
  columns: Optional[List[str]] = Field(alias='feature_names', default=None)
180
+ category: Optional[str]
179
181
  baseline_name: Optional[str]
180
182
  priority: Priority
181
183
  compare_to: CompareTo
@@ -0,0 +1,39 @@
1
+ from __future__ import annotations
2
+
3
+ from fiddler3.configs import DEFAULT_CONNECTION_TIMEOUT
4
+ from fiddler3.connection import Connection
5
+ from fiddler3.entities import * # noqa
6
+ from fiddler3.exceptions import * # noqa
7
+ from fiddler3.schemas import * # noqa
8
+
9
+ # Global connection object
10
+ connection: Connection | None = None
11
+
12
+
13
+ def init(
14
+ url: str,
15
+ token: str,
16
+ proxies: dict | None = None,
17
+ timeout: int = DEFAULT_CONNECTION_TIMEOUT,
18
+ verify: bool = True,
19
+ validate: bool = True,
20
+ ) -> None:
21
+ """
22
+ Initiate Python Client Connection
23
+ :param url: URL of Fiddler Platform
24
+ :param token: Authorization token
25
+ :param proxies: Dictionary mapping protocol to the URL of the proxy
26
+ :param timeout: Seconds to wait for the server to send data before giving up
27
+ :param verify: Controls whether we verify the server’s TLS certificate
28
+ :param validate: Whether to validate the server/client version compatibility.
29
+ Some functionalities might not work if this is turned off.
30
+ """
31
+ global connection
32
+ connection = Connection(
33
+ url=url,
34
+ token=token,
35
+ proxies=proxies,
36
+ timeout=timeout,
37
+ verify=verify,
38
+ validate=validate,
39
+ )
@@ -0,0 +1,5 @@
1
+ DEFAULT_CONNECTION_TIMEOUT = 60 # In seconds
2
+ MIN_SERVER_VERSION = '23.7.0' # @TODO: Change this before 3.0 release
3
+ DEFAULT_PAGE_SIZE = 50
4
+ JOB_POLL_INTERVAL = 3
5
+ JOB_WAIT_TIMEOUT = 1800
@@ -0,0 +1,117 @@
1
+ from __future__ import annotations
2
+
3
+ from functools import cached_property
4
+ from uuid import UUID
5
+
6
+ from fiddler3.configs import DEFAULT_CONNECTION_TIMEOUT, MIN_SERVER_VERSION
7
+ from fiddler3.constants.common import CLIENT_NAME, FIDDLER_CLIENT_VERSION_HEADER
8
+ from fiddler3.decorators import handle_api_error
9
+ from fiddler3.exceptions import IncompatibleClient
10
+ from fiddler3.libs.http_client import RequestClient
11
+ from fiddler3.schemas.server_info import ServerInfo, Version
12
+ from fiddler3.utils.logger import get_logger
13
+ from fiddler3.utils.version import match_semver
14
+ from fiddler3.version import __version__
15
+
16
+ logger = get_logger(__name__)
17
+
18
+
19
+ class Connection:
20
+ def __init__(
21
+ self,
22
+ url: str,
23
+ token: str,
24
+ proxies: dict | None = None,
25
+ timeout: int = DEFAULT_CONNECTION_TIMEOUT,
26
+ verify: bool = True,
27
+ validate: bool = True,
28
+ ) -> None:
29
+ """
30
+ Initiate connection to Fiddler Platform
31
+ :param url: URL of Fiddler Platform
32
+ :param token: Authorization token
33
+ :param proxies: Dictionary mapping protocol to the URL of the proxy
34
+ :param timeout: Seconds to wait for the server to send data before giving up
35
+ :param verify: Controls whether we verify the server’s TLS certificate
36
+ :param validate: Whether to validate the server/client version compatibility.
37
+ Some functionalities might not work if this is turned off.
38
+ """
39
+
40
+ self.url = url
41
+ self.token = token
42
+ self.proxies = proxies
43
+ self.timeout = timeout
44
+ self.verify = verify
45
+
46
+ if not url:
47
+ raise ValueError('Please pass a valid url')
48
+
49
+ if not token:
50
+ raise ValueError('Please pass a valid token')
51
+
52
+ self.request_headers = {
53
+ 'Authorization': f'Bearer {token}',
54
+ FIDDLER_CLIENT_VERSION_HEADER: __version__,
55
+ }
56
+
57
+ if validate:
58
+ self._check_server_version()
59
+ self._check_version_compatibility()
60
+
61
+ @cached_property
62
+ def client(self) -> RequestClient:
63
+ """Request client instance"""
64
+ return RequestClient(
65
+ base_url=self.url,
66
+ headers=self.request_headers,
67
+ proxies=self.proxies,
68
+ verify=self.verify,
69
+ )
70
+
71
+ @cached_property
72
+ def server_info(self) -> ServerInfo:
73
+ """Server info instance"""
74
+ return self._get_server_info()
75
+
76
+ @cached_property
77
+ def server_version(self) -> Version:
78
+ """Server semver version"""
79
+ return self.server_info.server_version
80
+
81
+ @cached_property
82
+ def organization_name(self) -> str:
83
+ """Organization name"""
84
+ return self.server_info.organization.name
85
+
86
+ @cached_property
87
+ def organization_id(self) -> UUID:
88
+ """Organization id"""
89
+ return self.server_info.organization.id
90
+
91
+ @handle_api_error
92
+ def _get_server_info(self) -> ServerInfo:
93
+ """Get server info"""
94
+ response = self.client.get(
95
+ url='/v3/server-info',
96
+ )
97
+
98
+ return ServerInfo(**response.json().get('data'))
99
+
100
+ @handle_api_error
101
+ def _check_version_compatibility(self) -> None:
102
+ """Check whether Client version is compatible with Fiddler Platform version"""
103
+
104
+ self.client.get(
105
+ url='/v3/version-compatibility',
106
+ params={
107
+ 'client_version': __version__,
108
+ 'client_name': CLIENT_NAME,
109
+ },
110
+ )
111
+
112
+ def _check_server_version(self) -> None:
113
+ """Check whether Fiddler Platform version is compatible with Client version"""
114
+ if match_semver(self.server_version, f'>={MIN_SERVER_VERSION}'):
115
+ return
116
+
117
+ raise IncompatibleClient(server_version=str(self.server_version))
@@ -0,0 +1,3 @@
1
+ JSON_CONTENT_TYPE = 'application/json'
2
+ FIDDLER_CLIENT_VERSION_HEADER = 'X-Fiddler-Client-Version'
3
+ CLIENT_NAME = 'python-sdk'
@@ -0,0 +1,13 @@
1
+ import enum
2
+
3
+
4
+ @enum.unique
5
+ class JobStatus(str, enum.Enum):
6
+ """Async job status enum"""
7
+
8
+ PENDING = 'PENDING'
9
+ STARTED = 'STARTED'
10
+ SUCCESS = 'SUCCESS'
11
+ FAILURE = 'FAILURE'
12
+ RETRY = 'RETRY'
13
+ REVOKED = 'REVOKED'
@@ -0,0 +1,64 @@
1
+ from __future__ import annotations
2
+
3
+ import enum
4
+
5
+
6
+ @enum.unique
7
+ class ModelInputType(str, enum.Enum):
8
+ """Input data type used by the model"""
9
+
10
+ TABULAR = 'structured'
11
+ TEXT = 'text'
12
+ MIXED = 'mixed'
13
+
14
+
15
+ @enum.unique
16
+ class ModelTask(str, enum.Enum):
17
+ """Task the model is designed to address"""
18
+
19
+ BINARY_CLASSIFICATION = 'binary_classification'
20
+ MULTICLASS_CLASSIFICATION = 'multiclass_classification'
21
+ REGRESSION = 'regression'
22
+ RANKING = 'ranking'
23
+ LLM = 'llm'
24
+ NOT_SET = 'not_set'
25
+
26
+ def is_classification(self) -> bool:
27
+ return self in {
28
+ ModelTask.BINARY_CLASSIFICATION,
29
+ ModelTask.MULTICLASS_CLASSIFICATION,
30
+ }
31
+
32
+ def is_regression(self) -> bool:
33
+ return self == ModelTask.REGRESSION
34
+
35
+
36
+ @enum.unique
37
+ class DataType(str, enum.Enum):
38
+ """Data types supported for model columns"""
39
+
40
+ FLOAT = 'float'
41
+ INTEGER = 'int'
42
+ BOOLEAN = 'bool'
43
+ STRING = 'str'
44
+ CATEGORY = 'category'
45
+ TIMESTAMP = 'timestamp'
46
+ VECTOR = 'vector'
47
+
48
+ def is_numeric(self) -> bool:
49
+ return self in {DataType.INTEGER, DataType.FLOAT}
50
+
51
+ def is_bool_or_cat(self) -> bool:
52
+ return self in {DataType.BOOLEAN, DataType.CATEGORY}
53
+
54
+ def is_vector(self) -> bool:
55
+ return self == DataType.VECTOR
56
+
57
+
58
+ @enum.unique
59
+ class ArtifactStatus(str, enum.Enum):
60
+ """Artifact Status"""
61
+
62
+ NO_MODEL = 'no_model'
63
+ SURROGATE = 'surrogate'
64
+ USER_UPLOADED = 'user_uploaded'
@@ -0,0 +1,52 @@
1
+ from functools import wraps
2
+ from http import HTTPStatus
3
+ from typing import Any, Callable, TypeVar, cast
4
+
5
+ import requests
6
+
7
+ from fiddler3.exceptions import ApiError, Conflict, HttpError, NotFound, Unsupported
8
+ from fiddler3.schemas.response import ErrorResponse
9
+ from fiddler3.utils.logger import get_logger
10
+
11
+ logger = get_logger(__name__)
12
+
13
+ _WrappedFuncType = TypeVar( # pylint: disable=invalid-name
14
+ '_WrappedFuncType', bound=Callable[..., Any]
15
+ )
16
+
17
+
18
+ def handle_api_error(func: _WrappedFuncType) -> _WrappedFuncType:
19
+ @wraps(func)
20
+ def wrapper(*args: Any, **kwargs: Any) -> Any:
21
+ try:
22
+ return func(*args, **kwargs)
23
+ except requests.JSONDecodeError as e:
24
+ raise HttpError(message=f'Invalid JSON response - {e.doc}') # type: ignore
25
+ except requests.HTTPError as e:
26
+ logger.error(
27
+ 'HTTP request to %s failed with %s - %s',
28
+ getattr(e.request, 'url', 'unknown'),
29
+ getattr(e.response, 'status_code', 'unknown'),
30
+ getattr(e.response, 'content', 'missing'),
31
+ )
32
+
33
+ status_code = e.response.status_code or HTTPStatus.INTERNAL_SERVER_ERROR
34
+
35
+ if status_code == HTTPStatus.METHOD_NOT_ALLOWED:
36
+ raise Unsupported()
37
+
38
+ try:
39
+ error_resp = ErrorResponse(**e.response.json())
40
+ except requests.JSONDecodeError:
41
+ raise HttpError(
42
+ message=f'Invalid response content-type - {e.response.content}'
43
+ )
44
+
45
+ if status_code == HTTPStatus.CONFLICT:
46
+ raise Conflict(error_resp.error)
47
+ if status_code == HTTPStatus.NOT_FOUND:
48
+ raise NotFound(error_resp.error)
49
+
50
+ raise ApiError(error_resp.error)
51
+
52
+ return cast(_WrappedFuncType, wrapper)
@@ -0,0 +1,3 @@
1
+ from fiddler3.entities.model import Model # noqa
2
+ from fiddler3.entities.project import Project # noqa
3
+ from fiddler3.entities.job import Job # noqa