fiddler-client 3.0.0.dev13__tar.gz → 3.0.0.dev15__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.0.0.dev15/PKG-INFO +45 -0
- fiddler-client-3.0.0.dev15/PUBLIC.md +22 -0
- fiddler-client-3.0.0.dev15/fiddler/VERSION +1 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/events.py +51 -16
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/custom_features.py +30 -29
- fiddler-client-3.0.0.dev15/fiddler/schemas/model_spec.py +32 -0
- fiddler-client-3.0.0.dev15/fiddler_client.egg-info/PKG-INFO +45 -0
- fiddler-client-3.0.0.dev13/PKG-INFO +0 -538
- fiddler-client-3.0.0.dev13/PUBLIC.md +0 -515
- fiddler-client-3.0.0.dev13/fiddler/VERSION +0 -1
- fiddler-client-3.0.0.dev13/fiddler/schemas/model_spec.py +0 -30
- fiddler-client-3.0.0.dev13/fiddler_client.egg-info/PKG-INFO +0 -538
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/LICENSE.txt +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/MANIFEST.in +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/README.md +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/__init__.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/configs.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/connection.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/constants/__init__.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/constants/alert_rule.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/constants/baseline.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/constants/common.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/constants/dataset.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/constants/events.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/constants/job.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/constants/model.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/constants/model_deployment.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/constants/xai.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/decorators.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/__init__.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/alert_record.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/alert_rule.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/base.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/baseline.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/custom_expression.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/dataset.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/file.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/job.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/model.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/model_artifact.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/model_deployment.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/organization.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/project.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/surrogate.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/user.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/webhook.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/xai.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/exceptions.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/libs/__init__.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/libs/http_client.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/libs/json_encoder.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/libs/semver.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/packtools/__init__.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/packtools/gem.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/packtools/keras_ig_helpers.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/packtools/project_attributions_helpers.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/packtools/template_model.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/__init__.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/alert_record.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/alert_rule.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/base.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/baseline.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/custom_expression.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/dataset.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/events.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/file.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/filter_query.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/job.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/model.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/model_deployment.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/model_schema.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/model_task_params.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/organization.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/project.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/response.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/server_info.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/user.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/webhook.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/xai.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/xai_params.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/__init__.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/__init__.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/test_alert_record.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/test_alert_rule.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/test_baseline.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/test_custom_metric.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/test_dataset.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/test_events.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/test_files.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/test_generate_model.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/test_job.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/test_mixin.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/test_model.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/test_model_artifact.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/test_model_deployment.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/test_model_surrogate.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/test_project.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/test_segment.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/test_webhook.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/test_xai.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/conftest.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/constants.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/test_connection.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/test_json_encoder.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/test_logger.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/test_utils.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/utils.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/utils/__init__.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/utils/helpers.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/utils/logger.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/utils/model_generator.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/utils/validations.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/utils/version.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/version.py +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler_client.egg-info/SOURCES.txt +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler_client.egg-info/dependency_links.txt +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler_client.egg-info/requires.txt +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler_client.egg-info/top_level.txt +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/setup.cfg +0 -0
- {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/setup.py +0 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: fiddler-client
|
|
3
|
+
Version: 3.0.0.dev15
|
|
4
|
+
Summary: Python client for Fiddler Platform
|
|
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.8.0
|
|
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<2,>=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
|
+
Fiddler Client
|
|
25
|
+
=============
|
|
26
|
+
|
|
27
|
+
Python client for interacting with Fiddler. Provides a user-friendly interface to our REST API and enables event
|
|
28
|
+
publishing for use with our monitoring features.
|
|
29
|
+
|
|
30
|
+
Requirements
|
|
31
|
+
------------
|
|
32
|
+
Requires Python >= Python-3.6.3 and pip >= 19.0
|
|
33
|
+
|
|
34
|
+
Installation
|
|
35
|
+
------------
|
|
36
|
+
|
|
37
|
+
$ pip3 install fiddler-client
|
|
38
|
+
|
|
39
|
+
API Example Usage
|
|
40
|
+
-------------
|
|
41
|
+
Documentation for the API can be found [here](https://docs.fiddler.ai/reference/about-the-fiddler-client). For examples of interacting with our APIs, please check out our [Quick Start Guide](https://docs.fiddler.ai/docs/quick-start) as well as the notebooks found on our [Examples Github](https://github.com/fiddler-labs/fiddler-examples).
|
|
42
|
+
|
|
43
|
+
Version History
|
|
44
|
+
-------------
|
|
45
|
+
Version history is available on [Fiddler documentation page](https://docs.fiddler.ai/page/python-client-version-history).
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
Fiddler Client
|
|
2
|
+
=============
|
|
3
|
+
|
|
4
|
+
Python client for interacting with Fiddler. Provides a user-friendly interface to our REST API and enables event
|
|
5
|
+
publishing for use with our monitoring features.
|
|
6
|
+
|
|
7
|
+
Requirements
|
|
8
|
+
------------
|
|
9
|
+
Requires Python >= Python-3.6.3 and pip >= 19.0
|
|
10
|
+
|
|
11
|
+
Installation
|
|
12
|
+
------------
|
|
13
|
+
|
|
14
|
+
$ pip3 install fiddler-client
|
|
15
|
+
|
|
16
|
+
API Example Usage
|
|
17
|
+
-------------
|
|
18
|
+
Documentation for the API can be found [here](https://docs.fiddler.ai/reference/about-the-fiddler-client). For examples of interacting with our APIs, please check out our [Quick Start Guide](https://docs.fiddler.ai/docs/quick-start) as well as the notebooks found on our [Examples Github](https://github.com/fiddler-labs/fiddler-examples).
|
|
19
|
+
|
|
20
|
+
Version History
|
|
21
|
+
-------------
|
|
22
|
+
Version history is available on [Fiddler documentation page](https://docs.fiddler.ai/page/python-client-version-history).
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.0.0.dev15
|
|
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import tempfile
|
|
4
4
|
from pathlib import Path
|
|
5
|
-
from typing import Any
|
|
5
|
+
from typing import Any, Callable
|
|
6
6
|
from uuid import UUID
|
|
7
7
|
|
|
8
8
|
import pandas as pd
|
|
@@ -17,6 +17,9 @@ from fiddler.entities.job import Job
|
|
|
17
17
|
from fiddler.schemas.dataset import EnvType
|
|
18
18
|
from fiddler.schemas.events import EventsSource, FileSource
|
|
19
19
|
from fiddler.schemas.job import JobCompactResp
|
|
20
|
+
from fiddler.utils.logger import get_logger
|
|
21
|
+
|
|
22
|
+
logger = get_logger(__name__)
|
|
20
23
|
|
|
21
24
|
|
|
22
25
|
class EventPublisher(ConnectionMixin):
|
|
@@ -51,40 +54,72 @@ class EventPublisher(ConnectionMixin):
|
|
|
51
54
|
|
|
52
55
|
:return: list[UUID] for list of dicts source and Job object for file path or dataframe source.
|
|
53
56
|
"""
|
|
57
|
+
|
|
58
|
+
publish_method = self._get_publish_method(source=source)
|
|
59
|
+
|
|
60
|
+
return publish_method(
|
|
61
|
+
source=source,
|
|
62
|
+
environment=environment,
|
|
63
|
+
dataset_name=dataset_name,
|
|
64
|
+
update=update,
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
def _get_publish_method(
|
|
68
|
+
self, source: list[dict[str, Any]] | str | Path | pd.DataFrame
|
|
69
|
+
) -> Callable:
|
|
54
70
|
if isinstance(source, (str, Path)):
|
|
55
|
-
return self._publish_file
|
|
56
|
-
source=source,
|
|
57
|
-
environment=environment,
|
|
58
|
-
dataset_name=dataset_name,
|
|
59
|
-
update=update,
|
|
60
|
-
)
|
|
71
|
+
return self._publish_file
|
|
61
72
|
|
|
62
73
|
if isinstance(source, pd.DataFrame):
|
|
63
|
-
|
|
64
|
-
|
|
74
|
+
return self._publish_df
|
|
75
|
+
|
|
76
|
+
if isinstance(source, list):
|
|
77
|
+
return self._publish_stream
|
|
78
|
+
|
|
79
|
+
raise ValueError(f'Unsupported source - {type(source)}')
|
|
80
|
+
|
|
81
|
+
def _publish_df(
|
|
82
|
+
self,
|
|
83
|
+
source: pd.DataFrame,
|
|
84
|
+
environment: EnvType,
|
|
85
|
+
dataset_name: str | None = None,
|
|
86
|
+
update: bool = False,
|
|
87
|
+
) -> Job:
|
|
88
|
+
with tempfile.NamedTemporaryFile(suffix='.parquet') as temp_file:
|
|
89
|
+
try:
|
|
90
|
+
source.to_parquet(temp_file.name, index=False)
|
|
65
91
|
return self._publish_file(
|
|
66
92
|
source=temp_file.name,
|
|
67
93
|
environment=environment,
|
|
68
94
|
dataset_name=dataset_name,
|
|
69
95
|
update=update,
|
|
70
96
|
)
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
97
|
+
except Exception:
|
|
98
|
+
logger.warning(
|
|
99
|
+
'Failed to convert input dataframe to parquet format. Retrying as a CSV file.'
|
|
100
|
+
)
|
|
101
|
+
with tempfile.NamedTemporaryFile(suffix='.csv') as temp_file:
|
|
102
|
+
source.to_csv(temp_file.name, index=False)
|
|
103
|
+
return self._publish_file(
|
|
104
|
+
source=temp_file.name,
|
|
105
|
+
environment=environment,
|
|
106
|
+
dataset_name=dataset_name,
|
|
107
|
+
update=update,
|
|
108
|
+
)
|
|
76
109
|
|
|
77
110
|
def _publish_stream(
|
|
78
111
|
self,
|
|
79
112
|
source: list[dict[str, Any]],
|
|
113
|
+
environment: EnvType = EnvType.PRODUCTION,
|
|
114
|
+
dataset_name: str | None = None,
|
|
80
115
|
update: bool = False,
|
|
81
116
|
) -> list[UUID]:
|
|
82
117
|
event_ids = []
|
|
83
118
|
for i in tqdm(range(0, len(source), self.STREAM_LIMIT)):
|
|
84
119
|
response = self._publish_call(
|
|
85
120
|
source=EventsSource(events=source[i : i + self.STREAM_LIMIT]),
|
|
86
|
-
environment=
|
|
87
|
-
dataset_name=
|
|
121
|
+
environment=environment,
|
|
122
|
+
dataset_name=dataset_name,
|
|
88
123
|
update=update,
|
|
89
124
|
)
|
|
90
125
|
event_ids.extend(response.json()['data']['event_ids'])
|
{fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/custom_features.py
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import Any, Dict, List, Optional, Type, TypeVar
|
|
1
|
+
from typing import Any, Dict, List, Optional, Type, TypeVar, Literal
|
|
2
2
|
|
|
3
3
|
from pydantic import BaseModel, validator
|
|
4
4
|
|
|
@@ -10,18 +10,12 @@ CustomFeatureTypeVar = TypeVar('CustomFeatureTypeVar', bound='CustomFeature')
|
|
|
10
10
|
|
|
11
11
|
class CustomFeature(BaseModel):
|
|
12
12
|
name: str
|
|
13
|
-
type:
|
|
14
|
-
n_clusters: Optional[int] = DEFAULT_NUM_CLUSTERS
|
|
15
|
-
centroids: Optional[List] = None
|
|
16
|
-
|
|
17
|
-
@validator('n_clusters')
|
|
18
|
-
def validate_n_clusters(cls, value: int) -> int: # noqa: N805
|
|
19
|
-
if value < 0:
|
|
20
|
-
raise ValueError('n_clusters must be greater than 0')
|
|
21
|
-
return value
|
|
13
|
+
type: Any
|
|
22
14
|
|
|
23
15
|
class Config:
|
|
24
16
|
allow_mutation = False
|
|
17
|
+
use_enum_values = True
|
|
18
|
+
discriminator = 'type'
|
|
25
19
|
|
|
26
20
|
@classmethod
|
|
27
21
|
def from_columns(
|
|
@@ -53,12 +47,13 @@ class CustomFeature(BaseModel):
|
|
|
53
47
|
return_dict: Dict[str, Any] = {
|
|
54
48
|
'name': self.name,
|
|
55
49
|
'type': self.type.value,
|
|
56
|
-
'n_clusters': self.n_clusters,
|
|
57
50
|
}
|
|
58
51
|
if isinstance(self, Multivariate):
|
|
59
52
|
return_dict['columns'] = self.columns
|
|
53
|
+
return_dict['n_clusters'] = self.n_clusters
|
|
60
54
|
elif isinstance(self, VectorFeature):
|
|
61
55
|
return_dict['column'] = self.column
|
|
56
|
+
return_dict['n_clusters'] = self.n_clusters
|
|
62
57
|
if isinstance(self, (ImageEmbedding, TextEmbedding)):
|
|
63
58
|
return_dict['source_column'] = self.source_column
|
|
64
59
|
if isinstance(self, TextEmbedding):
|
|
@@ -74,7 +69,9 @@ class CustomFeature(BaseModel):
|
|
|
74
69
|
|
|
75
70
|
|
|
76
71
|
class Multivariate(CustomFeature):
|
|
77
|
-
type:
|
|
72
|
+
type: Literal['FROM_COLUMNS'] = CustomFeatureType.FROM_COLUMNS.value
|
|
73
|
+
n_clusters: Optional[int] = DEFAULT_NUM_CLUSTERS
|
|
74
|
+
centroids: Optional[List] = None
|
|
78
75
|
columns: List[str]
|
|
79
76
|
monitor_components: bool = False
|
|
80
77
|
|
|
@@ -84,22 +81,31 @@ class Multivariate(CustomFeature):
|
|
|
84
81
|
raise ValueError('Multivariate columns must be greater than 1')
|
|
85
82
|
return value
|
|
86
83
|
|
|
84
|
+
@validator('n_clusters')
|
|
85
|
+
def validate_n_clusters(cls, value: int) -> int: # noqa: N805
|
|
86
|
+
if value < 0:
|
|
87
|
+
raise ValueError('n_clusters must be greater than 0')
|
|
88
|
+
return value
|
|
89
|
+
|
|
87
90
|
|
|
88
91
|
class VectorFeature(CustomFeature):
|
|
89
|
-
type:
|
|
90
|
-
|
|
92
|
+
type: Literal['FROM_VECTOR'] = CustomFeatureType.FROM_VECTOR.value
|
|
93
|
+
n_clusters: Optional[int] = DEFAULT_NUM_CLUSTERS
|
|
94
|
+
centroids: Optional[List] = None
|
|
91
95
|
column: str
|
|
92
96
|
|
|
97
|
+
@validator('n_clusters')
|
|
98
|
+
def validate_n_clusters(cls, value: int) -> int: # noqa: N805
|
|
99
|
+
if value < 0:
|
|
100
|
+
raise ValueError('n_clusters must be greater than 0')
|
|
101
|
+
return value
|
|
102
|
+
|
|
93
103
|
|
|
94
104
|
class TextEmbedding(VectorFeature):
|
|
95
|
-
type:
|
|
105
|
+
type: Literal['FROM_TEXT_EMBEDDING'] = CustomFeatureType.FROM_TEXT_EMBEDDING.value # type: ignore
|
|
106
|
+
source_column: str
|
|
96
107
|
n_tags: Optional[int] = DEFAULT_NUM_TAGS
|
|
97
|
-
|
|
98
|
-
@validator('source_column')
|
|
99
|
-
def validate_source_column(cls, value: str) -> str: # noqa: N805
|
|
100
|
-
if value is None:
|
|
101
|
-
raise ValueError('source_column must be specified')
|
|
102
|
-
return value
|
|
108
|
+
tf_idf: Optional[Dict[str, List]] = None
|
|
103
109
|
|
|
104
110
|
@validator('n_tags')
|
|
105
111
|
def validate_n_tags(cls, value: int) -> int: # noqa: N805
|
|
@@ -109,13 +115,8 @@ class TextEmbedding(VectorFeature):
|
|
|
109
115
|
|
|
110
116
|
|
|
111
117
|
class ImageEmbedding(VectorFeature):
|
|
112
|
-
type:
|
|
113
|
-
|
|
114
|
-
@validator('source_column')
|
|
115
|
-
def validate_source_column(cls, value: str) -> str: # noqa: N805
|
|
116
|
-
if value is None:
|
|
117
|
-
raise ValueError('source_column must be specified')
|
|
118
|
-
return value
|
|
118
|
+
type: Literal['FROM_IMAGE_EMBEDDING'] = CustomFeatureType.FROM_IMAGE_EMBEDDING.value # type: ignore
|
|
119
|
+
source_column: str
|
|
119
120
|
|
|
120
121
|
|
|
121
122
|
class Enrichment(CustomFeature):
|
|
@@ -134,7 +135,7 @@ class Enrichment(CustomFeature):
|
|
|
134
135
|
"""
|
|
135
136
|
|
|
136
137
|
# Setting the feature type to ENRICHMENT
|
|
137
|
-
type:
|
|
138
|
+
type: Literal['ENRICHMENT'] = CustomFeatureType.ENRICHMENT.value
|
|
138
139
|
|
|
139
140
|
# List of input column names used to generate the enrichment
|
|
140
141
|
columns: List[str]
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
from typing import List, Union
|
|
2
|
+
|
|
3
|
+
from pydantic import BaseModel, Field
|
|
4
|
+
|
|
5
|
+
from fiddler.schemas.custom_features import Multivariate, VectorFeature, TextEmbedding, ImageEmbedding, Enrichment
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class ModelSpec(BaseModel):
|
|
9
|
+
"""Model spec defines how model columns are used along with model task"""
|
|
10
|
+
|
|
11
|
+
schema_version: int = 1
|
|
12
|
+
"""Schema version"""
|
|
13
|
+
|
|
14
|
+
inputs: List[str] = Field(default_factory=list)
|
|
15
|
+
"""Feature columns"""
|
|
16
|
+
|
|
17
|
+
outputs: List[str] = Field(default_factory=list)
|
|
18
|
+
"""Prediction columns"""
|
|
19
|
+
|
|
20
|
+
targets: List[str] = Field(default_factory=list)
|
|
21
|
+
"""Label columns"""
|
|
22
|
+
|
|
23
|
+
decisions: List[str] = Field(default_factory=list)
|
|
24
|
+
"""Decisions columns"""
|
|
25
|
+
|
|
26
|
+
metadata: List[str] = Field(default_factory=list)
|
|
27
|
+
"""Metadata columns"""
|
|
28
|
+
|
|
29
|
+
custom_features: List[Union[Multivariate, VectorFeature, TextEmbedding, ImageEmbedding, Enrichment]] = Field(
|
|
30
|
+
default_factory=list
|
|
31
|
+
)
|
|
32
|
+
"""Custom feature definitions"""
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: fiddler-client
|
|
3
|
+
Version: 3.0.0.dev15
|
|
4
|
+
Summary: Python client for Fiddler Platform
|
|
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.8.0
|
|
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<2,>=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
|
+
Fiddler Client
|
|
25
|
+
=============
|
|
26
|
+
|
|
27
|
+
Python client for interacting with Fiddler. Provides a user-friendly interface to our REST API and enables event
|
|
28
|
+
publishing for use with our monitoring features.
|
|
29
|
+
|
|
30
|
+
Requirements
|
|
31
|
+
------------
|
|
32
|
+
Requires Python >= Python-3.6.3 and pip >= 19.0
|
|
33
|
+
|
|
34
|
+
Installation
|
|
35
|
+
------------
|
|
36
|
+
|
|
37
|
+
$ pip3 install fiddler-client
|
|
38
|
+
|
|
39
|
+
API Example Usage
|
|
40
|
+
-------------
|
|
41
|
+
Documentation for the API can be found [here](https://docs.fiddler.ai/reference/about-the-fiddler-client). For examples of interacting with our APIs, please check out our [Quick Start Guide](https://docs.fiddler.ai/docs/quick-start) as well as the notebooks found on our [Examples Github](https://github.com/fiddler-labs/fiddler-examples).
|
|
42
|
+
|
|
43
|
+
Version History
|
|
44
|
+
-------------
|
|
45
|
+
Version history is available on [Fiddler documentation page](https://docs.fiddler.ai/page/python-client-version-history).
|