fiddler-client 3.0.0.dev14__tar.gz → 3.0.0.dev16__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.dev14/fiddler_client.egg-info → fiddler-client-3.0.0.dev16}/PKG-INFO +1 -1
- fiddler-client-3.0.0.dev16/fiddler/VERSION +1 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/entities/alert_rule.py +5 -1
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/entities/events.py +51 -16
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/schemas/alert_rule.py +3 -2
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/schemas/custom_expression.py +7 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/schemas/custom_features.py +29 -29
- fiddler-client-3.0.0.dev16/fiddler/schemas/model_spec.py +32 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/apis/test_alert_rule.py +44 -37
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16/fiddler_client.egg-info}/PKG-INFO +1 -1
- fiddler-client-3.0.0.dev14/fiddler/VERSION +0 -1
- fiddler-client-3.0.0.dev14/fiddler/schemas/model_spec.py +0 -30
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/LICENSE.txt +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/MANIFEST.in +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/PUBLIC.md +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/README.md +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/__init__.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/configs.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/connection.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/constants/__init__.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/constants/alert_rule.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/constants/baseline.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/constants/common.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/constants/dataset.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/constants/events.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/constants/job.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/constants/model.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/constants/model_deployment.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/constants/xai.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/decorators.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/entities/__init__.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/entities/alert_record.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/entities/base.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/entities/baseline.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/entities/custom_expression.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/entities/dataset.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/entities/file.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/entities/job.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/entities/model.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/entities/model_artifact.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/entities/model_deployment.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/entities/organization.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/entities/project.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/entities/surrogate.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/entities/user.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/entities/webhook.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/entities/xai.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/exceptions.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/libs/__init__.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/libs/http_client.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/libs/json_encoder.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/libs/semver.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/packtools/__init__.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/packtools/gem.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/packtools/keras_ig_helpers.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/packtools/project_attributions_helpers.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/packtools/template_model.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/schemas/__init__.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/schemas/alert_record.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/schemas/base.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/schemas/baseline.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/schemas/dataset.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/schemas/events.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/schemas/file.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/schemas/filter_query.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/schemas/job.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/schemas/model.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/schemas/model_deployment.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/schemas/model_schema.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/schemas/model_task_params.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/schemas/organization.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/schemas/project.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/schemas/response.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/schemas/server_info.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/schemas/user.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/schemas/webhook.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/schemas/xai.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/schemas/xai_params.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/__init__.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/apis/__init__.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/apis/test_alert_record.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/apis/test_baseline.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/apis/test_custom_metric.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/apis/test_dataset.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/apis/test_events.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/apis/test_files.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/apis/test_generate_model.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/apis/test_job.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/apis/test_mixin.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/apis/test_model.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/apis/test_model_artifact.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/apis/test_model_deployment.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/apis/test_model_surrogate.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/apis/test_project.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/apis/test_segment.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/apis/test_webhook.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/apis/test_xai.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/conftest.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/constants.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/test_connection.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/test_json_encoder.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/test_logger.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/test_utils.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/utils.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/utils/__init__.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/utils/helpers.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/utils/logger.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/utils/model_generator.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/utils/validations.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/utils/version.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/version.py +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler_client.egg-info/SOURCES.txt +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler_client.egg-info/dependency_links.txt +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler_client.egg-info/requires.txt +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler_client.egg-info/top_level.txt +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/setup.cfg +0 -0
- {fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/setup.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.0.0.dev16
|
|
@@ -34,6 +34,7 @@ class AlertRule(
|
|
|
34
34
|
warning_threshold: float | None = None,
|
|
35
35
|
columns: list[str] | None = None,
|
|
36
36
|
baseline_id: UUID | str | None = None,
|
|
37
|
+
segment_id: UUID | str | None = None,
|
|
37
38
|
compare_bin_delta: int | None = None,
|
|
38
39
|
) -> None:
|
|
39
40
|
"""Construct a alert rule instance."""
|
|
@@ -49,6 +50,7 @@ class AlertRule(
|
|
|
49
50
|
self.critical_threshold = critical_threshold
|
|
50
51
|
self.condition = condition
|
|
51
52
|
self.bin_size = bin_size
|
|
53
|
+
self.segment_id = segment_id
|
|
52
54
|
|
|
53
55
|
self.id: UUID | None = None
|
|
54
56
|
self.project_id: UUID | None = None
|
|
@@ -84,7 +86,8 @@ class AlertRule(
|
|
|
84
86
|
critical_threshold=resp_obj.critical_threshold,
|
|
85
87
|
warning_threshold=resp_obj.warning_threshold,
|
|
86
88
|
columns=resp_obj.columns,
|
|
87
|
-
baseline_id=resp_obj.
|
|
89
|
+
baseline_id=resp_obj.baseline.id if resp_obj.baseline else None,
|
|
90
|
+
segment_id=resp_obj.segment.id if resp_obj.segment else None,
|
|
88
91
|
compare_bin_delta=resp_obj.compare_bin_delta,
|
|
89
92
|
)
|
|
90
93
|
|
|
@@ -210,6 +213,7 @@ class AlertRule(
|
|
|
210
213
|
'compare_to': self.compare_to,
|
|
211
214
|
'condition': self.condition,
|
|
212
215
|
'bin_size': self.bin_size,
|
|
216
|
+
'segment_id': self.segment_id,
|
|
213
217
|
'critical_threshold': self.critical_threshold,
|
|
214
218
|
'warning_threshold': self.warning_threshold,
|
|
215
219
|
'feature_names': self.columns,
|
|
@@ -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'])
|
|
@@ -7,6 +7,7 @@ from pydantic import Field
|
|
|
7
7
|
from fiddler.constants.alert_rule import AlertCondition, BinSize, CompareTo, Priority
|
|
8
8
|
from fiddler.schemas.base import BaseModel
|
|
9
9
|
from fiddler.schemas.baseline import BaselineCompactResp
|
|
10
|
+
from fiddler.schemas.custom_expression import SegmentCompactResp
|
|
10
11
|
from fiddler.schemas.model import ModelCompactResp
|
|
11
12
|
from fiddler.schemas.project import ProjectCompactResp
|
|
12
13
|
|
|
@@ -17,14 +18,14 @@ class AlertRuleResp(BaseModel):
|
|
|
17
18
|
model: ModelCompactResp
|
|
18
19
|
project: ProjectCompactResp
|
|
19
20
|
baseline: Optional[BaselineCompactResp]
|
|
21
|
+
segment: Optional[SegmentCompactResp]
|
|
20
22
|
priority: Union[str, Priority]
|
|
21
23
|
compare_to: Union[str, CompareTo]
|
|
22
24
|
metric_id: Union[str, UUID]
|
|
23
25
|
critical_threshold: float
|
|
24
26
|
condition: Union[str, AlertCondition]
|
|
25
27
|
bin_size: Union[str, BinSize]
|
|
26
|
-
columns: Optional[List[str]]
|
|
27
|
-
baseline_id: Optional[UUID]
|
|
28
|
+
columns: Optional[List[str]] = Field(alias='feature_names')
|
|
28
29
|
compare_bin_delta: Optional[int]
|
|
29
30
|
warning_threshold: Optional[float]
|
|
30
31
|
|
{fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/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,24 +81,32 @@ 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
108
|
tf_idf: Optional[Dict[str, List]] = None
|
|
98
109
|
|
|
99
|
-
@validator('source_column')
|
|
100
|
-
def validate_source_column(cls, value: str) -> str: # noqa: N805
|
|
101
|
-
if value is None:
|
|
102
|
-
raise ValueError('source_column must be specified')
|
|
103
|
-
return value
|
|
104
|
-
|
|
105
110
|
@validator('n_tags')
|
|
106
111
|
def validate_n_tags(cls, value: int) -> int: # noqa: N805
|
|
107
112
|
if value < 0:
|
|
@@ -110,13 +115,8 @@ class TextEmbedding(VectorFeature):
|
|
|
110
115
|
|
|
111
116
|
|
|
112
117
|
class ImageEmbedding(VectorFeature):
|
|
113
|
-
type:
|
|
114
|
-
|
|
115
|
-
@validator('source_column')
|
|
116
|
-
def validate_source_column(cls, value: str) -> str: # noqa: N805
|
|
117
|
-
if value is None:
|
|
118
|
-
raise ValueError('source_column must be specified')
|
|
119
|
-
return value
|
|
118
|
+
type: Literal['FROM_IMAGE_EMBEDDING'] = CustomFeatureType.FROM_IMAGE_EMBEDDING.value # type: ignore
|
|
119
|
+
source_column: str
|
|
120
120
|
|
|
121
121
|
|
|
122
122
|
class Enrichment(CustomFeature):
|
|
@@ -135,7 +135,7 @@ class Enrichment(CustomFeature):
|
|
|
135
135
|
"""
|
|
136
136
|
|
|
137
137
|
# Setting the feature type to ENRICHMENT
|
|
138
|
-
type:
|
|
138
|
+
type: Literal['ENRICHMENT'] = CustomFeatureType.ENRICHMENT.value
|
|
139
139
|
|
|
140
140
|
# List of input column names used to generate the enrichment
|
|
141
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"""
|
{fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/apis/test_alert_rule.py
RENAMED
|
@@ -28,54 +28,61 @@ from fiddler.utils.logger import set_logging
|
|
|
28
28
|
|
|
29
29
|
API_RESPONSE_200 = {
|
|
30
30
|
'data': {
|
|
31
|
-
'
|
|
32
|
-
'id': 620,
|
|
33
|
-
'created_at': '2023-11-28T08:04:12.651937+00:00',
|
|
31
|
+
'id': 794,
|
|
34
32
|
'organization_name': 'mainbuild',
|
|
35
|
-
'
|
|
36
|
-
'
|
|
37
|
-
'
|
|
38
|
-
'
|
|
39
|
-
'
|
|
40
|
-
'
|
|
41
|
-
'
|
|
42
|
-
'
|
|
33
|
+
'project_name': PROJECT_NAME,
|
|
34
|
+
'model_id': 285,
|
|
35
|
+
'name': 'test_rule',
|
|
36
|
+
'metric': 'jsd',
|
|
37
|
+
'metric_id': 'jsd',
|
|
38
|
+
'metric_display_name': 'Jensen-Shannon Distance',
|
|
39
|
+
'alert_type': 'drift',
|
|
40
|
+
'alert_type_display_name': 'Data Drift',
|
|
41
|
+
'priority': 'MEDIUM',
|
|
43
42
|
'baseline_name': BASELINE_NAME,
|
|
44
|
-
'
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
43
|
+
'feature_names': ['creditscore'],
|
|
44
|
+
'time_bucket': 3600000,
|
|
45
|
+
'category': None,
|
|
46
|
+
'bin_size': 'Hour',
|
|
47
|
+
'compare_to': 'raw_value',
|
|
48
48
|
'condition': 'greater',
|
|
49
|
-
'
|
|
50
|
-
'
|
|
51
|
-
'
|
|
52
|
-
'name': 'Age Missing 1 Hr',
|
|
53
|
-
'model_name': MODEL_NAME,
|
|
54
|
-
'model': {
|
|
55
|
-
'id': MODEL_ID,
|
|
56
|
-
'name': MODEL_NAME,
|
|
57
|
-
},
|
|
49
|
+
'compare_period': None,
|
|
50
|
+
'warning_threshold': 1.0,
|
|
51
|
+
'critical_threshold': 2.3,
|
|
58
52
|
'is_active': True,
|
|
59
53
|
'created_by': 'admin@fiddler.ai',
|
|
60
|
-
'
|
|
61
|
-
'
|
|
62
|
-
'
|
|
63
|
-
'
|
|
64
|
-
|
|
65
|
-
'
|
|
54
|
+
'created_at': '2024-04-23T10:34:14.321895+00:00',
|
|
55
|
+
'last_updated': '2024-04-23T10:34:14.323554+00:00',
|
|
56
|
+
'model_name': 'bank_churn',
|
|
57
|
+
'enable_notification': True,
|
|
58
|
+
'segment': {
|
|
59
|
+
'id': '1c9b551a-808b-4ef0-b67b-e788eaf1e6de',
|
|
60
|
+
'organization_name': 'mainbuild',
|
|
61
|
+
'project_name': 'nick_test_project_11',
|
|
62
|
+
'model_name': 'bank_churn',
|
|
63
|
+
'name': 'xyzab',
|
|
64
|
+
'definition': 'Age > 10',
|
|
65
|
+
'description': 'meh',
|
|
66
|
+
'created_at': '2024-04-23T10:31:52.181550+00:00',
|
|
67
|
+
'created_by': {
|
|
68
|
+
'id': 1,
|
|
69
|
+
'full_name': 'Fiddler Administrator',
|
|
70
|
+
'email': 'admin@fiddler.ai',
|
|
71
|
+
},
|
|
66
72
|
},
|
|
67
|
-
'
|
|
68
|
-
'
|
|
69
|
-
'
|
|
70
|
-
'
|
|
73
|
+
'project': {'id': PROJECT_ID, 'name': PROJECT_NAME},
|
|
74
|
+
'model': {'id': MODEL_ID, 'name': MODEL_NAME, 'version': 'v1'},
|
|
75
|
+
'baseline': {'id': BASELINE_ID, 'name': BASELINE_NAME},
|
|
76
|
+
'compare_bin_delta': None,
|
|
77
|
+
'uuid': ALERT_RULE_ID,
|
|
71
78
|
'notifications': {
|
|
72
|
-
'emails': {'alert_config_uuid': ALERT_RULE_ID, 'email': 'admin@fiddler.ai'},
|
|
73
79
|
'pagerduty': {
|
|
74
|
-
'severity': '',
|
|
75
80
|
'alert_config_uuid': ALERT_RULE_ID,
|
|
76
81
|
'service': '',
|
|
82
|
+
'severity': '',
|
|
77
83
|
},
|
|
78
|
-
'
|
|
84
|
+
'emails': {'email': ''},
|
|
85
|
+
'webhooks': [],
|
|
79
86
|
},
|
|
80
87
|
},
|
|
81
88
|
'api_version': '2.0',
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
3.0.0.dev14
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
from typing import List
|
|
2
|
-
|
|
3
|
-
from pydantic import BaseModel
|
|
4
|
-
|
|
5
|
-
from fiddler.schemas.custom_features import CustomFeature
|
|
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] = []
|
|
15
|
-
"""Feature columns"""
|
|
16
|
-
|
|
17
|
-
outputs: List[str] = []
|
|
18
|
-
"""Prediction columns"""
|
|
19
|
-
|
|
20
|
-
targets: List[str] = []
|
|
21
|
-
"""Label columns"""
|
|
22
|
-
|
|
23
|
-
decisions: List[str] = []
|
|
24
|
-
"""Decisions columns"""
|
|
25
|
-
|
|
26
|
-
metadata: List[str] = []
|
|
27
|
-
"""Metadata columns"""
|
|
28
|
-
|
|
29
|
-
custom_features: List[CustomFeature] = []
|
|
30
|
-
"""Custom feature definitions"""
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/constants/model_deployment.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/entities/custom_expression.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/entities/model_artifact.py
RENAMED
|
File without changes
|
{fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/entities/model_deployment.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/packtools/keras_ig_helpers.py
RENAMED
|
File without changes
|
|
File without changes
|
{fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/packtools/template_model.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/schemas/model_deployment.py
RENAMED
|
File without changes
|
|
File without changes
|
{fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/schemas/model_task_params.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/apis/test_alert_record.py
RENAMED
|
File without changes
|
{fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/apis/test_baseline.py
RENAMED
|
File without changes
|
{fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/apis/test_custom_metric.py
RENAMED
|
File without changes
|
{fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/apis/test_dataset.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/apis/test_generate_model.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/apis/test_model_artifact.py
RENAMED
|
File without changes
|
|
File without changes
|
{fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/apis/test_model_surrogate.py
RENAMED
|
File without changes
|
{fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/apis/test_project.py
RENAMED
|
File without changes
|
{fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/apis/test_segment.py
RENAMED
|
File without changes
|
{fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/apis/test_webhook.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler/tests/test_json_encoder.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler_client.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler_client.egg-info/requires.txt
RENAMED
|
File without changes
|
{fiddler-client-3.0.0.dev14 → fiddler-client-3.0.0.dev16}/fiddler_client.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|