fiddler-client 3.1.0.dev3__tar.gz → 3.2.0.dev1__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.1.0.dev3/fiddler_client.egg-info → fiddler_client-3.2.0.dev1}/PKG-INFO +1 -2
- fiddler_client-3.2.0.dev1/fiddler/VERSION +1 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/entities/alert_rule.py +19 -17
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/entities/model.py +5 -5
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/entities/model_deployment.py +5 -1
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/packtools/template_model.py +3 -2
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/schemas/alert_rule.py +17 -9
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/tests/apis/test_alert_rule.py +97 -53
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/tests/apis/test_model.py +6 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/tests/apis/test_model_deployment.py +35 -1
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1/fiddler_client.egg-info}/PKG-INFO +1 -2
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler_client.egg-info/requires.txt +0 -1
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/setup.py +0 -1
- fiddler-client-3.1.0.dev3/fiddler/VERSION +0 -1
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/LICENSE.txt +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/MANIFEST.in +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/PUBLIC.md +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/README.md +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/__init__.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/configs.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/connection.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/constants/__init__.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/constants/alert_rule.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/constants/baseline.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/constants/common.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/constants/dataset.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/constants/events.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/constants/job.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/constants/model.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/constants/model_deployment.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/constants/xai.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/decorators.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/entities/__init__.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/entities/alert_record.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/entities/base.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/entities/baseline.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/entities/custom_expression.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/entities/dataset.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/entities/events.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/entities/file.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/entities/job.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/entities/model_artifact.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/entities/organization.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/entities/project.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/entities/surrogate.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/entities/user.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/entities/webhook.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/entities/xai.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/exceptions.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/libs/__init__.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/libs/http_client.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/libs/json_encoder.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/libs/semver.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/packtools/__init__.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/packtools/gem.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/packtools/keras_ig_helpers.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/packtools/project_attributions_helpers.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/schemas/__init__.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/schemas/alert_record.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/schemas/base.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/schemas/baseline.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/schemas/custom_expression.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/schemas/custom_features.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/schemas/dataset.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/schemas/events.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/schemas/file.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/schemas/filter_query.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/schemas/job.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/schemas/model.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/schemas/model_deployment.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/schemas/model_schema.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/schemas/model_spec.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/schemas/model_task_params.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/schemas/organization.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/schemas/project.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/schemas/response.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/schemas/server_info.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/schemas/user.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/schemas/webhook.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/schemas/xai.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/schemas/xai_params.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/tests/__init__.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/tests/apis/__init__.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/tests/apis/test_alert_record.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/tests/apis/test_baseline.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/tests/apis/test_custom_metric.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/tests/apis/test_dataset.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/tests/apis/test_events.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/tests/apis/test_files.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/tests/apis/test_generate_model.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/tests/apis/test_job.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/tests/apis/test_mixin.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/tests/apis/test_model_artifact.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/tests/apis/test_model_surrogate.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/tests/apis/test_project.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/tests/apis/test_segment.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/tests/apis/test_webhook.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/tests/apis/test_xai.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/tests/conftest.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/tests/constants.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/tests/test_connection.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/tests/test_json_encoder.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/tests/test_logger.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/tests/test_utils.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/tests/utils.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/utils/__init__.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/utils/helpers.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/utils/logger.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/utils/model_generator.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/utils/validations.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/utils/version.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/version.py +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler_client.egg-info/SOURCES.txt +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler_client.egg-info/dependency_links.txt +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler_client.egg-info/top_level.txt +0 -0
- {fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: fiddler-client
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.2.0.dev1
|
|
4
4
|
Summary: Python client for Fiddler Platform
|
|
5
5
|
Home-page: https://fiddler.ai
|
|
6
6
|
Author: Fiddler Labs
|
|
@@ -20,7 +20,6 @@ Requires-Dist: tqdm
|
|
|
20
20
|
Requires-Dist: simplejson>=3.17.0
|
|
21
21
|
Requires-Dist: pyarrow>=7.0.0
|
|
22
22
|
Requires-Dist: pyyaml
|
|
23
|
-
Requires-Dist: typing-extensions<=4.5.0
|
|
24
23
|
|
|
25
24
|
Fiddler Client
|
|
26
25
|
=============
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.2.0.dev1
|
|
@@ -8,8 +8,8 @@ from uuid import UUID
|
|
|
8
8
|
from fiddler.constants.alert_rule import AlertCondition, BinSize, CompareTo, Priority
|
|
9
9
|
from fiddler.decorators import handle_api_error
|
|
10
10
|
from fiddler.entities.base import BaseEntity
|
|
11
|
-
from fiddler.entities.baseline import
|
|
12
|
-
from fiddler.entities.model import
|
|
11
|
+
from fiddler.entities.baseline import BaselineCompactMixin
|
|
12
|
+
from fiddler.entities.model import ModelCompactMixin
|
|
13
13
|
from fiddler.entities.project import ProjectCompactMixin
|
|
14
14
|
from fiddler.schemas.alert_rule import AlertRuleResp, NotificationConfig
|
|
15
15
|
from fiddler.schemas.filter_query import OperatorType, QueryCondition, QueryRule
|
|
@@ -63,6 +63,12 @@ class AlertRule(
|
|
|
63
63
|
|
|
64
64
|
@staticmethod
|
|
65
65
|
def _get_url(id_: UUID | str | None = None) -> str:
|
|
66
|
+
"""Get model resource/item url."""
|
|
67
|
+
url = '/v3/alert-rules'
|
|
68
|
+
return url if not id_ else f'{url}/{id_}'
|
|
69
|
+
|
|
70
|
+
@staticmethod
|
|
71
|
+
def _get_url_v2(id_: UUID | str | None = None) -> str:
|
|
66
72
|
"""Get model resource/item url."""
|
|
67
73
|
url = '/v2/alert-configs'
|
|
68
74
|
return url if not id_ else f'{url}/{id_}'
|
|
@@ -78,7 +84,7 @@ class AlertRule(
|
|
|
78
84
|
instance = cls(
|
|
79
85
|
name=resp_obj.name,
|
|
80
86
|
model_id=resp_obj.model.id,
|
|
81
|
-
metric_id=resp_obj.
|
|
87
|
+
metric_id=resp_obj.metric.id,
|
|
82
88
|
priority=resp_obj.priority,
|
|
83
89
|
compare_to=resp_obj.compare_to,
|
|
84
90
|
condition=resp_obj.condition,
|
|
@@ -113,11 +119,11 @@ class AlertRule(
|
|
|
113
119
|
# Reset properties
|
|
114
120
|
self.model_id = resp_obj.model.id
|
|
115
121
|
self.project_id = resp_obj.project.id
|
|
122
|
+
self.metric_id = resp_obj.metric.id
|
|
116
123
|
|
|
117
124
|
# Add remaining fields
|
|
118
125
|
fields = [
|
|
119
126
|
'id',
|
|
120
|
-
'metric_id',
|
|
121
127
|
'created_at',
|
|
122
128
|
'updated_at',
|
|
123
129
|
]
|
|
@@ -179,7 +185,9 @@ class AlertRule(
|
|
|
179
185
|
if columns:
|
|
180
186
|
for column in columns:
|
|
181
187
|
rules.append(
|
|
182
|
-
QueryRule(
|
|
188
|
+
QueryRule(
|
|
189
|
+
field='feature_names', operator=OperatorType.ANY, value=column
|
|
190
|
+
)
|
|
183
191
|
)
|
|
184
192
|
|
|
185
193
|
_filter = QueryCondition(rules=rules)
|
|
@@ -188,7 +196,6 @@ class AlertRule(
|
|
|
188
196
|
if ordering:
|
|
189
197
|
params['ordering'] = ','.join(ordering)
|
|
190
198
|
|
|
191
|
-
params['organization_name'] = cls.get_organization_name()
|
|
192
199
|
for rule in cls._paginate(url=cls._get_url(), params=params):
|
|
193
200
|
yield cls._from_dict(data=rule)
|
|
194
201
|
|
|
@@ -202,12 +209,9 @@ class AlertRule(
|
|
|
202
209
|
@handle_api_error
|
|
203
210
|
def create(self) -> AlertRule:
|
|
204
211
|
"""Create a new alert rule."""
|
|
205
|
-
model = Model.get(self.model_id)
|
|
206
212
|
payload: dict[str, Any] = {
|
|
207
213
|
'name': self.name,
|
|
208
|
-
'
|
|
209
|
-
'model_name': model.name,
|
|
210
|
-
'project_name': model.project.name,
|
|
214
|
+
'model_id': self.model_id,
|
|
211
215
|
'metric_id': self.metric_id,
|
|
212
216
|
'priority': self.priority,
|
|
213
217
|
'compare_to': self.compare_to,
|
|
@@ -218,11 +222,9 @@ class AlertRule(
|
|
|
218
222
|
'warning_threshold': self.warning_threshold,
|
|
219
223
|
'feature_names': self.columns,
|
|
220
224
|
'compare_bin_delta': self.compare_bin_delta,
|
|
221
|
-
'notifications': self._get_notifications_dict(),
|
|
222
225
|
}
|
|
223
226
|
if self.baseline_id:
|
|
224
|
-
|
|
225
|
-
payload['baseline_name'] = baseline.name
|
|
227
|
+
payload['baseline_id'] = self.baseline_id
|
|
226
228
|
|
|
227
229
|
response = self._client().post(
|
|
228
230
|
url=self._get_url(),
|
|
@@ -236,7 +238,7 @@ class AlertRule(
|
|
|
236
238
|
def enable_notifications(self) -> None:
|
|
237
239
|
"""Enable notifications for an alert rule"""
|
|
238
240
|
self._client().patch(
|
|
239
|
-
url=self.
|
|
241
|
+
url=self._get_url_v2(id_=self.id), data={'enable_notification': True}
|
|
240
242
|
)
|
|
241
243
|
logger.info(
|
|
242
244
|
'Notifications have been enabled for alert rule with id: %s', self.id
|
|
@@ -246,7 +248,7 @@ class AlertRule(
|
|
|
246
248
|
def disable_notifications(self) -> None:
|
|
247
249
|
"""Disable notifications for an alert rule"""
|
|
248
250
|
self._client().patch(
|
|
249
|
-
url=self.
|
|
251
|
+
url=self._get_url_v2(id_=self.id), data={'enable_notification': False}
|
|
250
252
|
)
|
|
251
253
|
logger.info(
|
|
252
254
|
'Notifications have been disabled for alert rule with id: %s', self.id
|
|
@@ -277,7 +279,7 @@ class AlertRule(
|
|
|
277
279
|
webhooks=webhooks,
|
|
278
280
|
)
|
|
279
281
|
response = self._client().patch(
|
|
280
|
-
url=self.
|
|
282
|
+
url=self._get_url_v2(id_=self.id),
|
|
281
283
|
data={'notifications': notifications},
|
|
282
284
|
)
|
|
283
285
|
|
|
@@ -293,7 +295,7 @@ class AlertRule(
|
|
|
293
295
|
:return: NotificationConfig object
|
|
294
296
|
"""
|
|
295
297
|
|
|
296
|
-
response = self._client().get(url=self.
|
|
298
|
+
response = self._client().get(url=self._get_url_v2(id_=self.id))
|
|
297
299
|
|
|
298
300
|
return self._get_notifications_from_dict(
|
|
299
301
|
response.json()['data']['notifications']
|
|
@@ -2,6 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import builtins
|
|
4
4
|
import typing
|
|
5
|
+
from copy import deepcopy
|
|
5
6
|
from dataclasses import dataclass
|
|
6
7
|
from datetime import datetime
|
|
7
8
|
from functools import cached_property
|
|
@@ -39,7 +40,6 @@ if typing.TYPE_CHECKING:
|
|
|
39
40
|
from fiddler.entities.baseline import Baseline
|
|
40
41
|
from fiddler.entities.dataset import Dataset
|
|
41
42
|
|
|
42
|
-
|
|
43
43
|
logger = get_logger(__name__)
|
|
44
44
|
|
|
45
45
|
|
|
@@ -327,17 +327,17 @@ class Model(
|
|
|
327
327
|
return Model(
|
|
328
328
|
name=self.name,
|
|
329
329
|
project_id=self.project_id,
|
|
330
|
-
schema=self.schema,
|
|
331
|
-
spec=self.spec,
|
|
330
|
+
schema=deepcopy(self.schema),
|
|
331
|
+
spec=deepcopy(self.spec),
|
|
332
332
|
version=version if version else self.version,
|
|
333
333
|
input_type=self.input_type,
|
|
334
334
|
task=self.task,
|
|
335
|
-
task_params=self.task_params,
|
|
335
|
+
task_params=deepcopy(self.task_params),
|
|
336
336
|
description=self.description,
|
|
337
337
|
event_id_col=self.event_id_col,
|
|
338
338
|
event_ts_col=self.event_ts_col,
|
|
339
339
|
event_ts_format=self.event_ts_format,
|
|
340
|
-
xai_params=self.xai_params,
|
|
340
|
+
xai_params=deepcopy(self.xai_params),
|
|
341
341
|
)
|
|
342
342
|
|
|
343
343
|
@property
|
{fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/entities/model_deployment.py
RENAMED
|
@@ -6,7 +6,9 @@ from uuid import UUID
|
|
|
6
6
|
|
|
7
7
|
from fiddler.decorators import handle_api_error
|
|
8
8
|
from fiddler.entities.base import BaseEntity
|
|
9
|
+
from fiddler.entities.job import Job
|
|
9
10
|
from fiddler.entities.project import ProjectCompactMixin
|
|
11
|
+
from fiddler.schemas.job import JobCompactResp
|
|
10
12
|
from fiddler.schemas.model_deployment import ModelDeploymentResponse
|
|
11
13
|
from fiddler.utils.logger import get_logger
|
|
12
14
|
|
|
@@ -94,7 +96,7 @@ class ModelDeployment(
|
|
|
94
96
|
self._resp = resp_obj
|
|
95
97
|
|
|
96
98
|
@handle_api_error
|
|
97
|
-
def update(self) ->
|
|
99
|
+
def update(self) -> Job:
|
|
98
100
|
"""Update an existing model deployment."""
|
|
99
101
|
payload: dict[str, Any] = {'active': self.active}
|
|
100
102
|
if self.replicas is not None:
|
|
@@ -108,6 +110,8 @@ class ModelDeployment(
|
|
|
108
110
|
url=self._get_url(model_id=self.model_id), data=payload
|
|
109
111
|
)
|
|
110
112
|
self._refresh_from_response(response=response)
|
|
113
|
+
job_compact = JobCompactResp(**response.json()['data']['job'])
|
|
114
|
+
return Job.get(id_=job_compact.id)
|
|
111
115
|
|
|
112
116
|
@classmethod
|
|
113
117
|
def of(cls, model_id: UUID | str) -> ModelDeployment:
|
|
@@ -36,7 +36,8 @@ class TemplateKerasTF2Model:
|
|
|
36
36
|
:param hybrid: Boolean value for hybrid data type (for example matrices). Default to False.
|
|
37
37
|
"""
|
|
38
38
|
import tensorflow as tf
|
|
39
|
-
|
|
39
|
+
|
|
40
|
+
from fiddler.packtools.keras_ig_helpers import ComputeGradientsKerasTF2
|
|
40
41
|
|
|
41
42
|
embedding_names = embedding_names or []
|
|
42
43
|
batch_input_shape_list = batch_input_shape_list or []
|
|
@@ -197,7 +198,7 @@ class TemplateTreeShap:
|
|
|
197
198
|
:return: explanations_by_output and extras_by_output: two dictionaries with keys the output columns and values
|
|
198
199
|
the corresponding explanations and extra information necessary
|
|
199
200
|
"""
|
|
200
|
-
from packtools.project_attributions_helpers import TreeShapAttributions
|
|
201
|
+
from fiddler.packtools.project_attributions_helpers import TreeShapAttributions
|
|
201
202
|
|
|
202
203
|
if explanation_name != self.tree_shap_explanations:
|
|
203
204
|
raise NotImplementedError(
|
|
@@ -12,25 +12,33 @@ from fiddler.schemas.model import ModelCompactResp
|
|
|
12
12
|
from fiddler.schemas.project import ProjectCompactResp
|
|
13
13
|
|
|
14
14
|
|
|
15
|
+
class MetricResp(BaseModel):
|
|
16
|
+
id: Union[str, UUID]
|
|
17
|
+
display_name: str
|
|
18
|
+
type: str
|
|
19
|
+
type_display_name: str
|
|
20
|
+
|
|
21
|
+
|
|
15
22
|
class AlertRuleResp(BaseModel):
|
|
16
|
-
id: UUID
|
|
23
|
+
id: UUID
|
|
17
24
|
name: str
|
|
18
|
-
model: ModelCompactResp
|
|
19
|
-
project: ProjectCompactResp
|
|
20
|
-
baseline: Optional[BaselineCompactResp]
|
|
21
|
-
segment: Optional[SegmentCompactResp]
|
|
22
25
|
priority: Union[str, Priority]
|
|
23
26
|
compare_to: Union[str, CompareTo]
|
|
24
|
-
metric_id: Union[str, UUID]
|
|
25
|
-
critical_threshold: float
|
|
26
27
|
condition: Union[str, AlertCondition]
|
|
28
|
+
compare_bin_delta: Optional[int]
|
|
27
29
|
bin_size: Union[str, BinSize]
|
|
28
30
|
columns: Optional[List[str]] = Field(alias='feature_names')
|
|
29
|
-
|
|
31
|
+
critical_threshold: float
|
|
30
32
|
warning_threshold: Optional[float]
|
|
31
33
|
|
|
32
34
|
created_at: datetime
|
|
33
|
-
updated_at: datetime
|
|
35
|
+
updated_at: datetime
|
|
36
|
+
|
|
37
|
+
metric: MetricResp
|
|
38
|
+
model: ModelCompactResp
|
|
39
|
+
project: ProjectCompactResp
|
|
40
|
+
baseline: Optional[BaselineCompactResp]
|
|
41
|
+
segment: Optional[SegmentCompactResp]
|
|
34
42
|
|
|
35
43
|
|
|
36
44
|
class NotificationConfig(BaseModel):
|
{fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/tests/apis/test_alert_rule.py
RENAMED
|
@@ -27,6 +27,51 @@ from fiddler.tests.constants import (
|
|
|
27
27
|
from fiddler.utils.logger import set_logging
|
|
28
28
|
|
|
29
29
|
API_RESPONSE_200 = {
|
|
30
|
+
'data': {
|
|
31
|
+
'id': ALERT_RULE_ID,
|
|
32
|
+
'model': {'id': MODEL_ID, 'name': MODEL_NAME, 'version': 'v1'},
|
|
33
|
+
'project': {'id': PROJECT_ID, 'name': PROJECT_NAME},
|
|
34
|
+
'organization': {
|
|
35
|
+
'id': 'e03d6f02-6efa-4eb1-b828-7ea9d2a083d0',
|
|
36
|
+
'name': 'scale154',
|
|
37
|
+
},
|
|
38
|
+
'baseline': None,
|
|
39
|
+
'segment': None,
|
|
40
|
+
'version': 'rule_v3',
|
|
41
|
+
'name': 'skdfvbj',
|
|
42
|
+
'priority': 'HIGH',
|
|
43
|
+
'feature_names': ['gender'],
|
|
44
|
+
'bin_size': 'Hour',
|
|
45
|
+
'compare_to': 'raw_value',
|
|
46
|
+
'condition': 'greater',
|
|
47
|
+
'warning_threshold': 1.0,
|
|
48
|
+
'critical_threshold': 2.0,
|
|
49
|
+
'updated_at': '2024-04-17T12:42:15.672909+00:00',
|
|
50
|
+
'enable_notification': True,
|
|
51
|
+
'compare_bin_delta': 0,
|
|
52
|
+
'created_at': '2024-04-17T12:42:15.672909+00:00',
|
|
53
|
+
'created_by': {
|
|
54
|
+
'id': '287949c2-13f8-49fc-a559-55b2e6f36e9b',
|
|
55
|
+
'full_name': 'Fiddler Administrator',
|
|
56
|
+
'email': 'admin@fiddler.ai',
|
|
57
|
+
},
|
|
58
|
+
'updated_by': {
|
|
59
|
+
'id': '287949c2-13f8-49fc-a559-55b2e6f36e9b',
|
|
60
|
+
'full_name': 'Fiddler Administrator',
|
|
61
|
+
'email': 'admin@fiddler.ai',
|
|
62
|
+
},
|
|
63
|
+
'metric': {
|
|
64
|
+
'id': 'null_violation_percentage',
|
|
65
|
+
'display_name': '% Missing Value Violation',
|
|
66
|
+
'type': 'data_integrity',
|
|
67
|
+
'type_display_name': 'Data Integrity',
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
'api_version': '3.0',
|
|
71
|
+
'kind': 'NORMAL',
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
API_RESPONSE_200_V2 = {
|
|
30
75
|
'data': {
|
|
31
76
|
'id': 794,
|
|
32
77
|
'organization_name': 'mainbuild',
|
|
@@ -89,6 +134,7 @@ API_RESPONSE_200 = {
|
|
|
89
134
|
'kind': 'NORMAL',
|
|
90
135
|
}
|
|
91
136
|
|
|
137
|
+
|
|
92
138
|
API_RESPONSE_404 = {
|
|
93
139
|
'error': {
|
|
94
140
|
'code': 404,
|
|
@@ -116,46 +162,44 @@ LIST_API_RESPONSE = {
|
|
|
116
162
|
'items': [
|
|
117
163
|
API_RESPONSE_200['data'],
|
|
118
164
|
{
|
|
119
|
-
'
|
|
120
|
-
'
|
|
121
|
-
'
|
|
122
|
-
'
|
|
123
|
-
|
|
124
|
-
|
|
165
|
+
'id': '3431b746-d18f-4aed-99ea-2da8d5b46fb6',
|
|
166
|
+
'model': {'id': MODEL_ID, 'name': MODEL_NAME, 'version': 'v1'},
|
|
167
|
+
'project': {'id': PROJECT_ID, 'name': PROJECT_NAME},
|
|
168
|
+
'organization': {
|
|
169
|
+
'id': 'e03d6f02-6efa-4eb1-b828-7ea9d2a083d0',
|
|
170
|
+
'name': 'scale154',
|
|
171
|
+
},
|
|
172
|
+
'baseline': {'id': BASELINE_ID, 'name': BASELINE_NAME},
|
|
173
|
+
'segment': None,
|
|
174
|
+
'version': 'rule_v3',
|
|
175
|
+
'name': 'sfdvsefv',
|
|
176
|
+
'priority': 'HIGH',
|
|
177
|
+
'feature_names': ['numofproducts'],
|
|
125
178
|
'bin_size': 'Hour',
|
|
179
|
+
'compare_to': 'raw_value',
|
|
180
|
+
'condition': 'greater',
|
|
181
|
+
'warning_threshold': 1e-05,
|
|
182
|
+
'critical_threshold': 0.001,
|
|
183
|
+
'updated_at': '2024-04-17T12:43:23.871997+00:00',
|
|
126
184
|
'enable_notification': True,
|
|
127
|
-
'
|
|
128
|
-
'
|
|
129
|
-
'
|
|
130
|
-
'id':
|
|
131
|
-
'
|
|
185
|
+
'compare_bin_delta': 0,
|
|
186
|
+
'created_at': '2024-04-17T12:43:23.871997+00:00',
|
|
187
|
+
'created_by': {
|
|
188
|
+
'id': '287949c2-13f8-49fc-a559-55b2e6f36e9b',
|
|
189
|
+
'full_name': 'Fiddler Administrator',
|
|
190
|
+
'email': 'admin@fiddler.ai',
|
|
132
191
|
},
|
|
133
|
-
'
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
'id': BASELINE_ID,
|
|
138
|
-
'name': BASELINE_NAME,
|
|
192
|
+
'updated_by': {
|
|
193
|
+
'id': '287949c2-13f8-49fc-a559-55b2e6f36e9b',
|
|
194
|
+
'full_name': 'Fiddler Administrator',
|
|
195
|
+
'email': 'admin@fiddler.ai',
|
|
139
196
|
},
|
|
140
|
-
'
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
'alert_type': 'service_metrics',
|
|
146
|
-
'time_bucket': 3600000,
|
|
147
|
-
'alert_type_display_name': 'Traffic',
|
|
148
|
-
'compare_period': 5,
|
|
149
|
-
'compare_to': 'time_period',
|
|
150
|
-
'uuid': '42eb6d51-dc5c-4e04-82aa-440b2d840704',
|
|
151
|
-
'id': 618,
|
|
152
|
-
'feature_names': None,
|
|
153
|
-
'model_name': MODEL_NAME,
|
|
154
|
-
'model': {
|
|
155
|
-
'id': MODEL_ID,
|
|
156
|
-
'name': MODEL_NAME,
|
|
197
|
+
'metric': {
|
|
198
|
+
'id': 'jsd',
|
|
199
|
+
'display_name': 'Jensen-Shannon Distance',
|
|
200
|
+
'type': 'drift',
|
|
201
|
+
'type_display_name': 'Data Drift',
|
|
157
202
|
},
|
|
158
|
-
'last_updated': '2023-11-28T08:04:10.918587+00:00',
|
|
159
203
|
},
|
|
160
204
|
],
|
|
161
205
|
}
|
|
@@ -177,7 +221,7 @@ LIST_API_RESPONSE_EMPTY = {
|
|
|
177
221
|
@responses.activate
|
|
178
222
|
def test_get_alert_rule_success() -> None:
|
|
179
223
|
responses.get(
|
|
180
|
-
url=f'{URL}/
|
|
224
|
+
url=f'{URL}/v3/alert-rules/{ALERT_RULE_ID}',
|
|
181
225
|
json=API_RESPONSE_200,
|
|
182
226
|
)
|
|
183
227
|
|
|
@@ -189,7 +233,7 @@ def test_get_alert_rule_success() -> None:
|
|
|
189
233
|
@responses.activate
|
|
190
234
|
def test_get_alert_rule_not_found() -> None:
|
|
191
235
|
responses.get(
|
|
192
|
-
url=f'{URL}/
|
|
236
|
+
url=f'{URL}/v3/alert-rules/{ALERT_RULE_ID}',
|
|
193
237
|
json=API_RESPONSE_404,
|
|
194
238
|
status=HTTPStatus.NOT_FOUND,
|
|
195
239
|
)
|
|
@@ -201,7 +245,7 @@ def test_get_alert_rule_not_found() -> None:
|
|
|
201
245
|
@responses.activate
|
|
202
246
|
def test_alert_rule_list_success() -> None:
|
|
203
247
|
responses.get(
|
|
204
|
-
url=f'{URL}/
|
|
248
|
+
url=f'{URL}/v3/alert-rules',
|
|
205
249
|
json=LIST_API_RESPONSE,
|
|
206
250
|
)
|
|
207
251
|
for rule in AlertRule.list(model_id=MODEL_ID):
|
|
@@ -212,7 +256,7 @@ def test_alert_rule_list_success() -> None:
|
|
|
212
256
|
def test_alert_rule_list_empty() -> None:
|
|
213
257
|
|
|
214
258
|
responses.get(
|
|
215
|
-
url=f'{URL}/
|
|
259
|
+
url=f'{URL}/v3/alert-rules',
|
|
216
260
|
json=LIST_API_RESPONSE_EMPTY,
|
|
217
261
|
)
|
|
218
262
|
|
|
@@ -222,13 +266,13 @@ def test_alert_rule_list_empty() -> None:
|
|
|
222
266
|
@responses.activate
|
|
223
267
|
def test_delete_alert_rule() -> None:
|
|
224
268
|
responses.get(
|
|
225
|
-
url=f'{URL}/
|
|
269
|
+
url=f'{URL}/v3/alert-rules/{ALERT_RULE_ID}',
|
|
226
270
|
json=API_RESPONSE_200,
|
|
227
271
|
)
|
|
228
272
|
rule = AlertRule.get(id_=ALERT_RULE_ID)
|
|
229
273
|
|
|
230
274
|
responses.delete(
|
|
231
|
-
url=f'{URL}/
|
|
275
|
+
url=f'{URL}/v3/alert-rules/{ALERT_RULE_ID}',
|
|
232
276
|
)
|
|
233
277
|
|
|
234
278
|
rule.delete()
|
|
@@ -237,13 +281,13 @@ def test_delete_alert_rule() -> None:
|
|
|
237
281
|
@responses.activate
|
|
238
282
|
def test_delete_alert_rule_not_found() -> None:
|
|
239
283
|
responses.get(
|
|
240
|
-
url=f'{URL}/
|
|
284
|
+
url=f'{URL}/v3/alert-rules/{ALERT_RULE_ID}',
|
|
241
285
|
json=API_RESPONSE_200,
|
|
242
286
|
)
|
|
243
287
|
rule = AlertRule.get(id_=ALERT_RULE_ID)
|
|
244
288
|
|
|
245
289
|
responses.delete(
|
|
246
|
-
url=f'{URL}/
|
|
290
|
+
url=f'{URL}/v3/alert-rules/{ALERT_RULE_ID}',
|
|
247
291
|
json=API_RESPONSE_404,
|
|
248
292
|
status=HTTPStatus.NOT_FOUND,
|
|
249
293
|
)
|
|
@@ -263,7 +307,7 @@ def test_add_alert_rule_success() -> None:
|
|
|
263
307
|
json=BASELINE_API_RESPONSE_200,
|
|
264
308
|
)
|
|
265
309
|
responses.post(
|
|
266
|
-
url=f'{URL}/
|
|
310
|
+
url=f'{URL}/v3/alert-rules',
|
|
267
311
|
json=API_RESPONSE_200,
|
|
268
312
|
)
|
|
269
313
|
alert_rule = AlertRule(
|
|
@@ -288,7 +332,7 @@ def test_add_alert_rule_success() -> None:
|
|
|
288
332
|
@responses.activate
|
|
289
333
|
def test_enable_notifications(caplog) -> None:
|
|
290
334
|
responses.get(
|
|
291
|
-
url=f'{URL}/
|
|
335
|
+
url=f'{URL}/v3/alert-rules/{ALERT_RULE_ID}',
|
|
292
336
|
json=API_RESPONSE_200,
|
|
293
337
|
)
|
|
294
338
|
|
|
@@ -296,7 +340,7 @@ def test_enable_notifications(caplog) -> None:
|
|
|
296
340
|
|
|
297
341
|
resp = responses.patch(
|
|
298
342
|
url=f'{URL}/v2/alert-configs/{ALERT_RULE_ID}',
|
|
299
|
-
json=
|
|
343
|
+
json=API_RESPONSE_200_V2,
|
|
300
344
|
)
|
|
301
345
|
set_logging(logging.INFO)
|
|
302
346
|
|
|
@@ -311,7 +355,7 @@ def test_enable_notifications(caplog) -> None:
|
|
|
311
355
|
@responses.activate
|
|
312
356
|
def test_disable_notifications(caplog) -> None:
|
|
313
357
|
responses.get(
|
|
314
|
-
url=f'{URL}/
|
|
358
|
+
url=f'{URL}/v3/alert-rules/{ALERT_RULE_ID}',
|
|
315
359
|
json=API_RESPONSE_200,
|
|
316
360
|
)
|
|
317
361
|
|
|
@@ -321,7 +365,7 @@ def test_disable_notifications(caplog) -> None:
|
|
|
321
365
|
|
|
322
366
|
resp = responses.patch(
|
|
323
367
|
url=f'{URL}/v2/alert-configs/{ALERT_RULE_ID}',
|
|
324
|
-
json=
|
|
368
|
+
json=API_RESPONSE_200_V2,
|
|
325
369
|
)
|
|
326
370
|
|
|
327
371
|
set_logging(logging.INFO)
|
|
@@ -336,12 +380,12 @@ def test_disable_notifications(caplog) -> None:
|
|
|
336
380
|
@responses.activate
|
|
337
381
|
def test_set_notifications() -> None:
|
|
338
382
|
responses.get(
|
|
339
|
-
url=f'{URL}/
|
|
383
|
+
url=f'{URL}/v3/alert-rules/{ALERT_RULE_ID}',
|
|
340
384
|
json=API_RESPONSE_200,
|
|
341
385
|
)
|
|
342
386
|
|
|
343
387
|
alert_rule = AlertRule.get(id_=ALERT_RULE_ID)
|
|
344
|
-
|
|
388
|
+
API_RESPONSE_200_V2['data']['notifications'] = {
|
|
345
389
|
'webhooks': [
|
|
346
390
|
{'uuid': 'e20bf4cc-d2cf-4540-baef-d96913b14f1b'},
|
|
347
391
|
{'uuid': '6e796fda-0111-4a72-82cd-f0f219e903e1'},
|
|
@@ -358,7 +402,7 @@ def test_set_notifications() -> None:
|
|
|
358
402
|
}
|
|
359
403
|
responses.patch(
|
|
360
404
|
url=f'{URL}/v2/alert-configs/{ALERT_RULE_ID}',
|
|
361
|
-
json=
|
|
405
|
+
json=API_RESPONSE_200_V2,
|
|
362
406
|
)
|
|
363
407
|
notifications = alert_rule.set_notification_config(
|
|
364
408
|
emails=['nikhil@fiddler.ai', 'admin@fiddler.ai'],
|
|
@@ -381,14 +425,14 @@ def test_set_notifications() -> None:
|
|
|
381
425
|
@responses.activate
|
|
382
426
|
def test_get_notifications() -> None:
|
|
383
427
|
responses.get(
|
|
384
|
-
url=f'{URL}/
|
|
428
|
+
url=f'{URL}/v3/alert-rules/{ALERT_RULE_ID}',
|
|
385
429
|
json=API_RESPONSE_200,
|
|
386
430
|
)
|
|
387
431
|
|
|
388
432
|
alert_rule = AlertRule.get(id_=ALERT_RULE_ID)
|
|
389
433
|
responses.get(
|
|
390
434
|
url=f'{URL}/v2/alert-configs/{ALERT_RULE_ID}',
|
|
391
|
-
json=
|
|
435
|
+
json=API_RESPONSE_200_V2,
|
|
392
436
|
)
|
|
393
437
|
notifications = alert_rule.get_notification_config()
|
|
394
438
|
assert notifications == NotificationConfig(
|
|
@@ -672,3 +672,9 @@ def test_model_duplicate() -> None:
|
|
|
672
672
|
model_copy = model.duplicate(version=new_version)
|
|
673
673
|
assert model_copy.id is None
|
|
674
674
|
assert model_copy.version == new_version
|
|
675
|
+
|
|
676
|
+
# Update new version
|
|
677
|
+
assert model.schema['CreditScore'].max == 850
|
|
678
|
+
model_copy.schema['CreditScore'].max = 900
|
|
679
|
+
assert model.schema['CreditScore'].max == 850
|
|
680
|
+
assert model_copy.schema['CreditScore'].max == 900
|
{fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/tests/apis/test_model_deployment.py
RENAMED
|
@@ -3,9 +3,12 @@ from http import HTTPStatus
|
|
|
3
3
|
import pytest
|
|
4
4
|
import responses
|
|
5
5
|
|
|
6
|
+
from fiddler.entities.job import Job
|
|
6
7
|
from fiddler.entities.model_deployment import ModelDeployment
|
|
7
8
|
from fiddler.exceptions import NotFound
|
|
8
9
|
from fiddler.tests.constants import (
|
|
10
|
+
JOB_ID,
|
|
11
|
+
JOB_NAME,
|
|
9
12
|
MODEL_DEPLOYMENT_ID,
|
|
10
13
|
MODEL_ID,
|
|
11
14
|
MODEL_NAME,
|
|
@@ -50,6 +53,7 @@ API_RESPONSE_200 = {
|
|
|
50
53
|
'full_name': USER_NAME,
|
|
51
54
|
'email': USER_EMAIL,
|
|
52
55
|
},
|
|
56
|
+
'job': {'id': JOB_ID, 'name': 'Deploy artifact model - manual'},
|
|
53
57
|
},
|
|
54
58
|
}
|
|
55
59
|
|
|
@@ -67,6 +71,31 @@ API_RESPONSE_404 = {
|
|
|
67
71
|
}
|
|
68
72
|
}
|
|
69
73
|
|
|
74
|
+
JOB_API_RESPONSE_200 = {
|
|
75
|
+
'api_version': '3.0',
|
|
76
|
+
'kind': 'NORMAL',
|
|
77
|
+
'data': {
|
|
78
|
+
'name': JOB_NAME,
|
|
79
|
+
'info': {
|
|
80
|
+
'resource_type': 'MODEL',
|
|
81
|
+
'resource_name': 'bank_churn',
|
|
82
|
+
'project_name': 'bank_churn',
|
|
83
|
+
},
|
|
84
|
+
'id': JOB_ID,
|
|
85
|
+
'status': 'SUCCESS',
|
|
86
|
+
'progress': 100,
|
|
87
|
+
'error_message': None,
|
|
88
|
+
'error_reason': None,
|
|
89
|
+
'extras': {
|
|
90
|
+
'e36d1cf2-766f-4705-8269-b6f93bf1ca14': {
|
|
91
|
+
'status': 'SUCCESS',
|
|
92
|
+
'result': {'result': 'Success'},
|
|
93
|
+
'error_message': None,
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
}
|
|
98
|
+
|
|
70
99
|
|
|
71
100
|
@responses.activate
|
|
72
101
|
def test_update_model_deployment_success() -> None:
|
|
@@ -79,8 +108,13 @@ def test_update_model_deployment_success() -> None:
|
|
|
79
108
|
model_deployment.cpu = 300
|
|
80
109
|
model_deployment.active = True
|
|
81
110
|
|
|
82
|
-
|
|
111
|
+
responses.get(
|
|
112
|
+
url=f'{URL}/v3/jobs/{JOB_ID}',
|
|
113
|
+
json=JOB_API_RESPONSE_200,
|
|
114
|
+
)
|
|
115
|
+
job = model_deployment.update()
|
|
83
116
|
assert isinstance(model_deployment, ModelDeployment)
|
|
117
|
+
assert isinstance(job, Job)
|
|
84
118
|
assert model_deployment.cpu == 300
|
|
85
119
|
assert model_deployment.active
|
|
86
120
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: fiddler-client
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.2.0.dev1
|
|
4
4
|
Summary: Python client for Fiddler Platform
|
|
5
5
|
Home-page: https://fiddler.ai
|
|
6
6
|
Author: Fiddler Labs
|
|
@@ -20,7 +20,6 @@ Requires-Dist: tqdm
|
|
|
20
20
|
Requires-Dist: simplejson>=3.17.0
|
|
21
21
|
Requires-Dist: pyarrow>=7.0.0
|
|
22
22
|
Requires-Dist: pyyaml
|
|
23
|
-
Requires-Dist: typing-extensions<=4.5.0
|
|
24
23
|
|
|
25
24
|
Fiddler Client
|
|
26
25
|
=============
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
3.1.0.dev3
|
|
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.1.0.dev3 → fiddler_client-3.2.0.dev1}/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.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/entities/custom_expression.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/packtools/keras_ig_helpers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/schemas/custom_expression.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.1.0.dev3 → fiddler_client-3.2.0.dev1}/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.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/tests/apis/test_alert_record.py
RENAMED
|
File without changes
|
|
File without changes
|
{fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/tests/apis/test_custom_metric.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/tests/apis/test_generate_model.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/tests/apis/test_model_artifact.py
RENAMED
|
File without changes
|
{fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler/tests/apis/test_model_surrogate.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler_client.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{fiddler-client-3.1.0.dev3 → fiddler_client-3.2.0.dev1}/fiddler_client.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|