fiddler-client 3.11.0__tar.gz → 3.12.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-3.11.0/fiddler_client.egg-info → fiddler_client-3.12.0}/PKG-INFO +21 -26
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/PUBLIC.md +8 -9
- fiddler_client-3.12.0/fiddler/VERSION +1 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/connection.py +3 -3
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/decorators.py +3 -3
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/entities/alert_rule.py +3 -3
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/entities/baseline.py +2 -2
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/entities/custom_expression.py +1 -1
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/entities/dataset.py +1 -1
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/entities/events.py +102 -14
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/entities/model.py +179 -49
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/entities/model_artifact.py +1 -1
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/entities/project.py +1 -1
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/entities/surrogate.py +1 -1
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/entities/webhook.py +1 -1
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/entities/xai.py +69 -19
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/packtools/project_attributions_helpers.py +25 -25
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/schemas/alert_record.py +5 -5
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/schemas/alert_rule.py +13 -13
- fiddler_client-3.12.0/fiddler/schemas/base.py +9 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/schemas/baseline.py +6 -6
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/schemas/custom_expression.py +1 -1
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/schemas/custom_features.py +23 -20
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/schemas/dataset.py +1 -1
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/schemas/file.py +1 -1
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/schemas/job.py +3 -3
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/schemas/model.py +7 -7
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/schemas/model_deployment.py +8 -8
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/schemas/model_schema.py +1 -4
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/schemas/model_spec.py +8 -3
- fiddler_client-3.12.0/fiddler/schemas/server_info.py +23 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/schemas/user.py +1 -1
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/schemas/webhook.py +1 -1
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/schemas/xai.py +8 -8
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/schemas/xai_params.py +1 -1
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/tests/apis/test_alert_rule.py +7 -7
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/tests/apis/test_baseline.py +2 -2
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/tests/apis/test_custom_metric.py +2 -2
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/tests/apis/test_dataset.py +2 -2
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/tests/apis/test_events.py +137 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/tests/apis/test_model.py +162 -9
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/tests/apis/test_project.py +3 -3
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/tests/apis/test_segment.py +2 -2
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/tests/apis/test_webhook.py +2 -2
- fiddler_client-3.12.0/fiddler/tests/artifact_test_dir/package.py +17 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/tests/test_sagemaker_auth.py +9 -9
- {fiddler_client-3.11.0 → fiddler_client-3.12.0/fiddler_client.egg-info}/PKG-INFO +21 -26
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler_client.egg-info/SOURCES.txt +2 -2
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler_client.egg-info/requires.txt +4 -5
- fiddler_client-3.12.0/pyproject.toml +87 -0
- fiddler_client-3.11.0/MANIFEST.in +0 -2
- fiddler_client-3.11.0/fiddler/VERSION +0 -1
- fiddler_client-3.11.0/fiddler/schemas/base.py +0 -8
- fiddler_client-3.11.0/fiddler/schemas/server_info.py +0 -18
- fiddler_client-3.11.0/setup.py +0 -47
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/LICENSE.txt +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/README.md +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/__init__.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/configs.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/constants/__init__.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/constants/alert_rule.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/constants/baseline.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/constants/common.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/constants/dataset.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/constants/events.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/constants/job.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/constants/model.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/constants/model_deployment.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/constants/xai.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/entities/__init__.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/entities/alert_record.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/entities/base.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/entities/file.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/entities/job.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/entities/model_deployment.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/entities/organization.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/entities/user.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/exceptions.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/libs/__init__.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/libs/aws.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/libs/http_client.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/libs/json_encoder.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/libs/semver.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/packtools/__init__.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/packtools/gem.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/packtools/keras_ig_helpers.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/packtools/template_model.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/schemas/__init__.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/schemas/events.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/schemas/filter_query.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/schemas/model_task_params.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/schemas/organization.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/schemas/project.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/schemas/response.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/tests/__init__.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/tests/apis/__init__.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/tests/apis/test_alert_record.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/tests/apis/test_files.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/tests/apis/test_generate_model.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/tests/apis/test_job.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/tests/apis/test_mixin.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/tests/apis/test_model_artifact.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/tests/apis/test_model_deployment.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/tests/apis/test_model_surrogate.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/tests/apis/test_xai.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/tests/conftest.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/tests/constants.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/tests/test_connection.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/tests/test_json_encoder.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/tests/test_logger.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/tests/test_utils.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/tests/utils.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/utils/__init__.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/utils/column_generator.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/utils/decorators.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/utils/helpers.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/utils/logger.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/utils/model_generator.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/utils/validations.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/utils/version.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler/version.py +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler_client.egg-info/dependency_links.txt +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/fiddler_client.egg-info/top_level.txt +0 -0
- {fiddler_client-3.11.0 → fiddler_client-3.12.0}/setup.cfg +0 -0
|
@@ -1,35 +1,31 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fiddler-client
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.12.0
|
|
4
4
|
Summary: Python client for Fiddler Platform
|
|
5
|
-
Home-page: https://fiddler.ai
|
|
6
5
|
Author: Fiddler Labs
|
|
6
|
+
License-Expression: Apache-2.0
|
|
7
|
+
Project-URL: Homepage, https://fiddler.ai
|
|
7
8
|
Classifier: Programming Language :: Python :: 3
|
|
8
|
-
Classifier:
|
|
9
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
10
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
9
14
|
Classifier: Operating System :: OS Independent
|
|
10
|
-
Requires-Python: >=3.10
|
|
15
|
+
Requires-Python: >=3.10
|
|
11
16
|
Description-Content-Type: text/markdown
|
|
12
17
|
License-File: LICENSE.txt
|
|
13
|
-
Requires-Dist: pip>=21.0
|
|
14
18
|
Requires-Dist: requests<3
|
|
15
19
|
Requires-Dist: requests-toolbelt
|
|
16
|
-
Requires-Dist: pydantic>=
|
|
17
|
-
Requires-Dist: deprecated
|
|
20
|
+
Requires-Dist: pydantic>=2.0
|
|
21
|
+
Requires-Dist: deprecated>=1.2.18
|
|
18
22
|
Requires-Dist: tqdm
|
|
19
23
|
Requires-Dist: simplejson>=3.17.0
|
|
20
24
|
Requires-Dist: pyyaml
|
|
21
25
|
Requires-Dist: typing-extensions<5,>=4.6.0
|
|
22
|
-
Requires-Dist: pandas>=1.
|
|
23
|
-
Requires-Dist: pyarrow>=
|
|
24
|
-
Dynamic: author
|
|
25
|
-
Dynamic: classifier
|
|
26
|
-
Dynamic: description
|
|
27
|
-
Dynamic: description-content-type
|
|
28
|
-
Dynamic: home-page
|
|
26
|
+
Requires-Dist: pandas>=2.1.0
|
|
27
|
+
Requires-Dist: pyarrow>=17.0.0
|
|
29
28
|
Dynamic: license-file
|
|
30
|
-
Dynamic: requires-dist
|
|
31
|
-
Dynamic: requires-python
|
|
32
|
-
Dynamic: summary
|
|
33
29
|
|
|
34
30
|
# fiddler-client
|
|
35
31
|
|
|
@@ -62,7 +58,7 @@ pip install fiddler-client
|
|
|
62
58
|
|
|
63
59
|
## Requirements
|
|
64
60
|
|
|
65
|
-
- Python 3.
|
|
61
|
+
- Python 3.10 or higher
|
|
66
62
|
- pip 19.0 or higher (latest release preferred)
|
|
67
63
|
|
|
68
64
|
## Quick Start
|
|
@@ -84,11 +80,10 @@ for project in fdl.Project.list():
|
|
|
84
80
|
## Documentation
|
|
85
81
|
|
|
86
82
|
* 📚 [Complete Documentation](https://docs.fiddler.ai/)
|
|
87
|
-
* 🚀 [Getting Started with LLMs](https://docs.fiddler.ai/
|
|
88
|
-
|
|
89
|
-
*
|
|
90
|
-
|
|
91
|
-
* 📖 [API Reference](https://docs.fiddler.ai/reference/about-the-fiddler-client)
|
|
83
|
+
* 🚀 [Getting Started with LLMs](https://docs.fiddler.ai/getting-started/llm-monitoring)
|
|
84
|
+
* 🚀 [Getting Started with ML](https://docs.fiddler.ai/getting-started/ml-observability)
|
|
85
|
+
* 🤖 [Getting Started with Agentic Monitoring](https://docs.fiddler.ai/getting-started/agentic-monitoring)
|
|
86
|
+
* 📖 [API Reference](https://docs.fiddler.ai/api/fiddler-python-client-sdk/python-client)
|
|
92
87
|
* 💡 [Example Notebooks](https://github.com/fiddler-labs/fiddler-examples)
|
|
93
88
|
|
|
94
89
|
## Example Notebooks
|
|
@@ -103,12 +98,12 @@ Check out our [GitHub repository](https://github.com/fiddler-labs/fiddler-exampl
|
|
|
103
98
|
|
|
104
99
|
## Version History
|
|
105
100
|
|
|
106
|
-
See our [release notes](https://docs.fiddler.ai/
|
|
101
|
+
See our [release notes](https://docs.fiddler.ai/changelog/release-notes/python-sdk) for detailed version history.
|
|
107
102
|
|
|
108
103
|
## Support
|
|
109
104
|
|
|
110
|
-
- 📧 Email: [support@fiddler.ai](support@fiddler.ai)
|
|
111
|
-
- 💬 Community: [Join our Slack](https://www.fiddler.ai/
|
|
105
|
+
- 📧 Email: [support@fiddler.ai](mailto:support@fiddler.ai)
|
|
106
|
+
- 💬 Community: [Join our Slack](https://www.fiddler.ai/slackinvite)
|
|
112
107
|
|
|
113
108
|
## License
|
|
114
109
|
|
|
@@ -29,7 +29,7 @@ pip install fiddler-client
|
|
|
29
29
|
|
|
30
30
|
## Requirements
|
|
31
31
|
|
|
32
|
-
- Python 3.
|
|
32
|
+
- Python 3.10 or higher
|
|
33
33
|
- pip 19.0 or higher (latest release preferred)
|
|
34
34
|
|
|
35
35
|
## Quick Start
|
|
@@ -51,11 +51,10 @@ for project in fdl.Project.list():
|
|
|
51
51
|
## Documentation
|
|
52
52
|
|
|
53
53
|
* 📚 [Complete Documentation](https://docs.fiddler.ai/)
|
|
54
|
-
* 🚀 [Getting Started with LLMs](https://docs.fiddler.ai/
|
|
55
|
-
|
|
56
|
-
*
|
|
57
|
-
|
|
58
|
-
* 📖 [API Reference](https://docs.fiddler.ai/reference/about-the-fiddler-client)
|
|
54
|
+
* 🚀 [Getting Started with LLMs](https://docs.fiddler.ai/getting-started/llm-monitoring)
|
|
55
|
+
* 🚀 [Getting Started with ML](https://docs.fiddler.ai/getting-started/ml-observability)
|
|
56
|
+
* 🤖 [Getting Started with Agentic Monitoring](https://docs.fiddler.ai/getting-started/agentic-monitoring)
|
|
57
|
+
* 📖 [API Reference](https://docs.fiddler.ai/api/fiddler-python-client-sdk/python-client)
|
|
59
58
|
* 💡 [Example Notebooks](https://github.com/fiddler-labs/fiddler-examples)
|
|
60
59
|
|
|
61
60
|
## Example Notebooks
|
|
@@ -70,12 +69,12 @@ Check out our [GitHub repository](https://github.com/fiddler-labs/fiddler-exampl
|
|
|
70
69
|
|
|
71
70
|
## Version History
|
|
72
71
|
|
|
73
|
-
See our [release notes](https://docs.fiddler.ai/
|
|
72
|
+
See our [release notes](https://docs.fiddler.ai/changelog/release-notes/python-sdk) for detailed version history.
|
|
74
73
|
|
|
75
74
|
## Support
|
|
76
75
|
|
|
77
|
-
- 📧 Email: [support@fiddler.ai](support@fiddler.ai)
|
|
78
|
-
- 💬 Community: [Join our Slack](https://www.fiddler.ai/
|
|
76
|
+
- 📧 Email: [support@fiddler.ai](mailto:support@fiddler.ai)
|
|
77
|
+
- 💬 Community: [Join our Slack](https://www.fiddler.ai/slackinvite)
|
|
79
78
|
|
|
80
79
|
## License
|
|
81
80
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.12.0
|
|
@@ -36,7 +36,7 @@ class Connection:
|
|
|
36
36
|
|
|
37
37
|
Attributes:
|
|
38
38
|
url: Base URL of the Fiddler platform instance
|
|
39
|
-
token:
|
|
39
|
+
token: API key obtained from the Fiddler UI Credentials tab (named ``token`` for backward compatibility)
|
|
40
40
|
proxies: Optional proxy configuration for HTTP requests
|
|
41
41
|
timeout: HTTP request timeout settings
|
|
42
42
|
verify: Whether to verify SSL/TLS certificates
|
|
@@ -87,7 +87,7 @@ class Connection:
|
|
|
87
87
|
|
|
88
88
|
Args:
|
|
89
89
|
url: The base URL to your Fiddler platform instance
|
|
90
|
-
token:
|
|
90
|
+
token: API key obtained from the Fiddler UI Credentials tab
|
|
91
91
|
proxies: Dictionary mapping protocol to proxy URL for HTTP requests
|
|
92
92
|
timeout: HTTP request timeout settings (float or tuple of connect/read timeouts)
|
|
93
93
|
verify: Whether to verify server's TLS certificate (default: True)
|
|
@@ -346,7 +346,7 @@ def init( # pylint: disable=too-many-arguments
|
|
|
346
346
|
|
|
347
347
|
Args:
|
|
348
348
|
url: The base URL to your Fiddler platform instance
|
|
349
|
-
token:
|
|
349
|
+
token: API key obtained from the Fiddler UI Credentials tab
|
|
350
350
|
proxies: Dictionary mapping protocol to proxy URL for HTTP requests
|
|
351
351
|
timeout: HTTP request timeout settings (float or tuple of connect/read timeouts)
|
|
352
352
|
verify: Whether to verify server's TLS certificate (default: True)
|
|
@@ -3,7 +3,7 @@ from functools import wraps
|
|
|
3
3
|
from http import HTTPStatus
|
|
4
4
|
from typing import Any, Callable, TypeVar, cast
|
|
5
5
|
|
|
6
|
-
import pydantic
|
|
6
|
+
import pydantic
|
|
7
7
|
import requests
|
|
8
8
|
|
|
9
9
|
from fiddler.exceptions import ApiError, Conflict, HttpError, NotFound, Unsupported
|
|
@@ -26,7 +26,7 @@ def handle_api_error(func: _WrappedFuncType) -> _WrappedFuncType: # noqa: C901
|
|
|
26
26
|
# This often is premature use of `json()`. Calling code should
|
|
27
27
|
# first check the response for the expected status code, and only
|
|
28
28
|
# then attempt JSON-deserialization.
|
|
29
|
-
raise HttpError(message=f'Invalid JSON response - {e.doc}')
|
|
29
|
+
raise HttpError(message=f'Invalid JSON response - {e.doc}')
|
|
30
30
|
except requests.HTTPError as http_exc:
|
|
31
31
|
# Note(JP): when we're here it means we got an HTTP response.
|
|
32
32
|
# That's how this exception is documented.
|
|
@@ -57,7 +57,7 @@ def handle_api_error(func: _WrappedFuncType) -> _WrappedFuncType: # noqa: C901
|
|
|
57
57
|
try:
|
|
58
58
|
# https://github.com/fiddler-labs/fiddler/issues/9314
|
|
59
59
|
error_resp = ErrorResponse(**http_exc.response.json())
|
|
60
|
-
except pydantic.
|
|
60
|
+
except pydantic.ValidationError:
|
|
61
61
|
# We couldn't turn the HTTP error response into an object
|
|
62
62
|
# satisfying model='ErrorResponse'. Now, instead of exposing
|
|
63
63
|
# this to users as a pydantic.ValidationError (which is kinda
|
|
@@ -73,7 +73,7 @@ from datetime import datetime
|
|
|
73
73
|
from typing import Any, Iterator
|
|
74
74
|
from uuid import UUID
|
|
75
75
|
|
|
76
|
-
from pydantic
|
|
76
|
+
from pydantic import ValidationError
|
|
77
77
|
|
|
78
78
|
from fiddler.constants.alert_rule import (
|
|
79
79
|
AlertCondition,
|
|
@@ -457,7 +457,7 @@ class AlertRule(
|
|
|
457
457
|
)
|
|
458
458
|
|
|
459
459
|
_filter = QueryCondition(rules=rules)
|
|
460
|
-
params: dict[str, Any] = {'filter': _filter.
|
|
460
|
+
params: dict[str, Any] = {'filter': _filter.model_dump_json()}
|
|
461
461
|
|
|
462
462
|
if ordering:
|
|
463
463
|
params['ordering'] = ','.join(ordering)
|
|
@@ -568,7 +568,7 @@ class AlertRule(
|
|
|
568
568
|
pagerduty_services=pagerduty_services,
|
|
569
569
|
pagerduty_severity=pagerduty_severity,
|
|
570
570
|
webhooks=webhooks,
|
|
571
|
-
).
|
|
571
|
+
).model_dump(exclude_none=True)
|
|
572
572
|
except ValidationError as e:
|
|
573
573
|
logger.exception('Invalid input: The format of input is not correct')
|
|
574
574
|
raise e
|
|
@@ -356,7 +356,7 @@ class Baseline(BaseEntity, ModelCompactMixin, ProjectCompactMixin, DatasetCompac
|
|
|
356
356
|
|
|
357
357
|
response = cls._client().get(
|
|
358
358
|
url=cls._get_url(),
|
|
359
|
-
params={'filter': _filter.
|
|
359
|
+
params={'filter': _filter.model_dump_json()},
|
|
360
360
|
)
|
|
361
361
|
if response.json()['data']['total'] == 0:
|
|
362
362
|
raise_not_found('Baseline not found for the given identifier')
|
|
@@ -389,7 +389,7 @@ class Baseline(BaseEntity, ModelCompactMixin, ProjectCompactMixin, DatasetCompac
|
|
|
389
389
|
)
|
|
390
390
|
|
|
391
391
|
_filter = QueryCondition(rules=rules)
|
|
392
|
-
params: dict[str, Any] = {'filter': _filter.
|
|
392
|
+
params: dict[str, Any] = {'filter': _filter.model_dump_json()}
|
|
393
393
|
|
|
394
394
|
url = f'/v3/models/{model_id}/baselines'
|
|
395
395
|
for baseline in cls._paginate(url=url, params=params):
|
|
@@ -284,7 +284,7 @@ class Dataset(BaseEntity, ProjectCompactMixin):
|
|
|
284
284
|
|
|
285
285
|
response = cls._client().get(
|
|
286
286
|
url=cls._get_url(),
|
|
287
|
-
params={'filter': _filter.
|
|
287
|
+
params={'filter': _filter.model_dump_json()},
|
|
288
288
|
)
|
|
289
289
|
|
|
290
290
|
if response.json()['data']['total'] == 0:
|
|
@@ -3,8 +3,9 @@ from __future__ import annotations
|
|
|
3
3
|
import logging
|
|
4
4
|
import os
|
|
5
5
|
import tempfile
|
|
6
|
+
import warnings
|
|
6
7
|
from pathlib import Path
|
|
7
|
-
from typing import Any
|
|
8
|
+
from typing import Any
|
|
8
9
|
from uuid import UUID
|
|
9
10
|
|
|
10
11
|
import pandas as pd
|
|
@@ -43,7 +44,11 @@ class EventPublisher(ConnectionMixin):
|
|
|
43
44
|
update: bool = False,
|
|
44
45
|
) -> list[UUID] | Job:
|
|
45
46
|
"""
|
|
46
|
-
Publish Pre-production or Production data
|
|
47
|
+
Publish Pre-production or Production data.
|
|
48
|
+
|
|
49
|
+
.. deprecated::
|
|
50
|
+
Use :meth:`publish_stream` for streaming events (list of dicts)
|
|
51
|
+
or :meth:`publish_batch` for batch publishing (file path or DataFrame).
|
|
47
52
|
|
|
48
53
|
:param source: one of:
|
|
49
54
|
Path or str path: path for data file.
|
|
@@ -55,29 +60,112 @@ class EventPublisher(ConnectionMixin):
|
|
|
55
60
|
|
|
56
61
|
:return: list[UUID] for list of dicts source and Job object for file path or dataframe source.
|
|
57
62
|
"""
|
|
63
|
+
warnings.warn(
|
|
64
|
+
'publish() is deprecated. Use publish_stream() for streaming events '
|
|
65
|
+
'(list of dicts) or publish_batch() for batch publishing '
|
|
66
|
+
'(file path or DataFrame).',
|
|
67
|
+
DeprecationWarning,
|
|
68
|
+
stacklevel=2,
|
|
69
|
+
)
|
|
58
70
|
|
|
59
|
-
|
|
71
|
+
if isinstance(source, list):
|
|
72
|
+
return self._publish_stream(
|
|
73
|
+
source=source,
|
|
74
|
+
environment=environment,
|
|
75
|
+
dataset_name=dataset_name,
|
|
76
|
+
update=update,
|
|
77
|
+
)
|
|
60
78
|
|
|
61
|
-
return
|
|
79
|
+
return self._publish_batch(
|
|
62
80
|
source=source,
|
|
63
81
|
environment=environment,
|
|
64
82
|
dataset_name=dataset_name,
|
|
65
83
|
update=update,
|
|
66
84
|
)
|
|
67
85
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
86
|
+
@handle_api_error
|
|
87
|
+
def publish_stream(
|
|
88
|
+
self,
|
|
89
|
+
events: list[dict[str, Any]],
|
|
90
|
+
environment: EnvType = EnvType.PRODUCTION,
|
|
91
|
+
dataset_name: str | None = None,
|
|
92
|
+
update: bool = False,
|
|
93
|
+
) -> list[UUID]:
|
|
94
|
+
"""
|
|
95
|
+
Publish events via streaming.
|
|
96
|
+
|
|
97
|
+
Sends events synchronously to Fiddler. Events are written to an
|
|
98
|
+
in-memory queue and asynchronously persisted.
|
|
73
99
|
|
|
100
|
+
:param events: List of event dicts matching the model schema.
|
|
101
|
+
:param environment: Either EnvType.PRE_PRODUCTION or EnvType.PRODUCTION
|
|
102
|
+
:param dataset_name: Name of the dataset. Not supported for EnvType.PRODUCTION
|
|
103
|
+
:param update: flag indicating if the events are updates to previously published rows
|
|
104
|
+
|
|
105
|
+
:return: list[UUID] of published event IDs.
|
|
106
|
+
"""
|
|
107
|
+
return self._publish_stream(
|
|
108
|
+
source=events,
|
|
109
|
+
environment=environment,
|
|
110
|
+
dataset_name=dataset_name,
|
|
111
|
+
update=update,
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
@handle_api_error
|
|
115
|
+
def publish_batch(
|
|
116
|
+
self,
|
|
117
|
+
source: str | Path | pd.DataFrame,
|
|
118
|
+
environment: EnvType = EnvType.PRODUCTION,
|
|
119
|
+
dataset_name: str | None = None,
|
|
120
|
+
update: bool = False,
|
|
121
|
+
) -> Job:
|
|
122
|
+
"""
|
|
123
|
+
Publish data via batch upload.
|
|
124
|
+
|
|
125
|
+
Uploads data as a file and kicks off an asynchronous server-side job.
|
|
126
|
+
Use the returned Job object to track progress.
|
|
127
|
+
|
|
128
|
+
:param source: One of:
|
|
129
|
+
- str or Path: path to a CSV or Parquet file.
|
|
130
|
+
- pd.DataFrame: events dataframe (converted to Parquet/CSV internally).
|
|
131
|
+
:param environment: Either EnvType.PRE_PRODUCTION or EnvType.PRODUCTION
|
|
132
|
+
:param dataset_name: Name of the dataset. Not supported for EnvType.PRODUCTION
|
|
133
|
+
:param update: flag indicating if the events are updates to previously published rows
|
|
134
|
+
|
|
135
|
+
:return: Job object for tracking the async upload.
|
|
136
|
+
"""
|
|
137
|
+
return self._publish_batch(
|
|
138
|
+
source=source,
|
|
139
|
+
environment=environment,
|
|
140
|
+
dataset_name=dataset_name,
|
|
141
|
+
update=update,
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
def _publish_batch(
|
|
145
|
+
self,
|
|
146
|
+
source: str | Path | pd.DataFrame,
|
|
147
|
+
environment: EnvType = EnvType.PRODUCTION,
|
|
148
|
+
dataset_name: str | None = None,
|
|
149
|
+
update: bool = False,
|
|
150
|
+
) -> Job:
|
|
151
|
+
"""Internal dispatch for batch publishing."""
|
|
74
152
|
if isinstance(source, pd.DataFrame):
|
|
75
|
-
return self._publish_df
|
|
153
|
+
return self._publish_df(
|
|
154
|
+
source=source,
|
|
155
|
+
environment=environment,
|
|
156
|
+
dataset_name=dataset_name,
|
|
157
|
+
update=update,
|
|
158
|
+
)
|
|
76
159
|
|
|
77
|
-
if isinstance(source,
|
|
78
|
-
return self.
|
|
160
|
+
if isinstance(source, (str, Path)):
|
|
161
|
+
return self._publish_file(
|
|
162
|
+
source=source,
|
|
163
|
+
environment=environment,
|
|
164
|
+
dataset_name=dataset_name,
|
|
165
|
+
update=update,
|
|
166
|
+
)
|
|
79
167
|
|
|
80
|
-
raise ValueError(f'Unsupported source - {type(source)}')
|
|
168
|
+
raise ValueError(f'Unsupported batch source type - {type(source)}')
|
|
81
169
|
|
|
82
170
|
def _publish_df(
|
|
83
171
|
self,
|
|
@@ -188,7 +276,7 @@ class EventPublisher(ConnectionMixin):
|
|
|
188
276
|
return method(
|
|
189
277
|
url='/v3/events',
|
|
190
278
|
data={
|
|
191
|
-
'source': source.
|
|
279
|
+
'source': source.model_dump(),
|
|
192
280
|
'model_id': self.model_id,
|
|
193
281
|
'env_type': environment,
|
|
194
282
|
'env_name': dataset_name,
|