fiddler-client 3.1.0.dev2__py3-none-any.whl → 3.1.0.dev3__py3-none-any.whl

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/VERSION CHANGED
@@ -1 +1 @@
1
- 3.1.0.dev2
1
+ 3.1.0.dev3
fiddler/__init__.py CHANGED
@@ -61,6 +61,7 @@ from fiddler.schemas.xai import ( # noqa
61
61
  SqlSliceQueryDataSource,
62
62
  )
63
63
  from fiddler.schemas.xai_params import XaiParams # noqa
64
+ from fiddler.utils.helpers import group_by # noqa
64
65
  from fiddler.utils.logger import set_logging # noqa
65
66
  from fiddler.version import __version__ # noqa
66
67
 
@@ -141,4 +142,5 @@ __all__ = [
141
142
  'ApiError',
142
143
  # Utilities
143
144
  'set_logging',
145
+ 'group_by',
144
146
  ]
@@ -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.baseline_id,
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
- with tempfile.NamedTemporaryFile(suffix='.csv') as temp_file:
64
- source.to_csv(temp_file.name, index=False)
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
- elif isinstance(source, list):
73
- return self._publish_stream(source=source, update=update)
74
-
75
- raise ValueError(f'Unsupported source - {type(source)}')
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=EnvType.PRODUCTION,
87
- dataset_name=None,
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/entities/model.py CHANGED
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import builtins
4
- import copy
5
4
  import typing
6
5
  from dataclasses import dataclass
7
6
  from datetime import datetime
@@ -33,6 +32,7 @@ from fiddler.schemas.model_spec import ModelSpec
33
32
  from fiddler.schemas.model_task_params import ModelTaskParams
34
33
  from fiddler.schemas.xai_params import XaiParams
35
34
  from fiddler.utils.helpers import raise_not_found
35
+ from fiddler.utils.logger import get_logger
36
36
  from fiddler.utils.model_generator import ModelGenerator
37
37
 
38
38
  if typing.TYPE_CHECKING:
@@ -40,6 +40,9 @@ if typing.TYPE_CHECKING:
40
40
  from fiddler.entities.dataset import Dataset
41
41
 
42
42
 
43
+ logger = get_logger(__name__)
44
+
45
+
43
46
  class Model(
44
47
  BaseEntity,
45
48
  CreatedByMixin,
@@ -307,7 +310,9 @@ class Model(
307
310
  params = {'filter': _filter.json()}
308
311
 
309
312
  for model in cls._paginate(url=cls._get_url(), params=params):
310
- yield ModelCompact(id=model['id'], name=model['name'])
313
+ yield ModelCompact(
314
+ id=model['id'], name=model['name'], version=model['version']
315
+ )
311
316
 
312
317
  def duplicate(self, version: str | None = None) -> Model:
313
318
  """
@@ -319,13 +324,21 @@ class Model(
319
324
  :param version: Version name for the new instance
320
325
  :return: Model instance
321
326
  """
322
- self_copy = copy.deepcopy(self)
323
- self_copy.id = None
324
-
325
- if version:
326
- self_copy.version = version
327
-
328
- return self_copy
327
+ return Model(
328
+ name=self.name,
329
+ project_id=self.project_id,
330
+ schema=self.schema,
331
+ spec=self.spec,
332
+ version=version if version else self.version,
333
+ input_type=self.input_type,
334
+ task=self.task,
335
+ task_params=self.task_params,
336
+ description=self.description,
337
+ event_id_col=self.event_id_col,
338
+ event_ts_col=self.event_ts_col,
339
+ event_ts_format=self.event_ts_format,
340
+ xai_params=self.xai_params,
341
+ )
329
342
 
330
343
  @property
331
344
  def datasets(self) -> Iterator[Dataset]:
@@ -456,7 +469,7 @@ class Model(
456
469
  :return: list[UUID] for list of dicts or dataframe source and Job object for
457
470
  file path source.
458
471
  """
459
-
472
+ logger.info('Model[%s/%s] - Publishing events', self.name, self.version)
460
473
  return self._event_publisher.publish(
461
474
  source=source,
462
475
  environment=environment,
@@ -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.schemas.filter_query import OperatorType, QueryCondition, QueryRule
9
10
  from fiddler.schemas.webhook import WebhookProvider, WebhookResp
11
+ from fiddler.utils.helpers import raise_not_found
10
12
 
11
13
 
12
14
  class Webhook(BaseEntity):
@@ -81,6 +83,22 @@ class Webhook(BaseEntity):
81
83
  response = cls._client().get(url=cls._get_url(id_))
82
84
  return cls._from_response(response=response)
83
85
 
86
+ @classmethod
87
+ @handle_api_error
88
+ def from_name(cls, name: str) -> Webhook:
89
+ """Get the webhook instance using webhook name"""
90
+ _filter = QueryCondition(
91
+ rules=[QueryRule(field='name', operator=OperatorType.EQUAL, value=name)]
92
+ )
93
+
94
+ response = cls._client().get(
95
+ url=cls._get_url(), params={'filter': _filter.json()}
96
+ )
97
+ if response.json()['data']['total'] == 0:
98
+ raise_not_found('Webhook not found for the given identifier')
99
+
100
+ return cls._from_dict(data=response.json()['data']['items'][0])
101
+
84
102
  @classmethod
85
103
  @handle_api_error
86
104
  def list(cls) -> Iterator[Webhook]:
@@ -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
 
@@ -29,3 +29,10 @@ class CustomMetricResp(CustomExpressionResp):
29
29
 
30
30
  class SegmentResp(CustomExpressionResp):
31
31
  """Segment response object"""
32
+
33
+
34
+ class SegmentCompactResp(BaseModel):
35
+ """Segment compact response object"""
36
+
37
+ id: UUID
38
+ name: str
@@ -28,54 +28,61 @@ from fiddler.utils.logger import set_logging
28
28
 
29
29
  API_RESPONSE_200 = {
30
30
  'data': {
31
- 'feature_names': ['age'],
32
- 'id': 620,
33
- 'created_at': '2023-11-28T08:04:12.651937+00:00',
31
+ 'id': 794,
34
32
  'organization_name': 'mainbuild',
35
- 'compare_period': None,
36
- 'time_bucket': 3600000,
37
- 'alert_type': 'data_integrity',
38
- 'metric_display_name': 'Missing Value Violation',
39
- 'enable_notification': True,
40
- 'last_updated': '2023-11-28T08:04:12.653346+00:00',
41
- 'alert_type_display_name': 'Data Integrity',
42
- 'critical_threshold': 0.0,
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
- 'baseline': {
45
- 'id': BASELINE_ID,
46
- 'name': BASELINE_NAME,
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
- 'uuid': ALERT_RULE_ID,
50
- 'segment': None,
51
- 'warning_threshold': None,
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
- 'bin_size': 'Hour',
61
- 'category': None,
62
- 'project_name': PROJECT_NAME,
63
- 'project': {
64
- 'id': PROJECT_ID,
65
- 'name': PROJECT_NAME,
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
- 'metric': 'null_violation_count',
68
- 'metric_id': 'null_violation_count',
69
- 'compare_to': 'raw_value',
70
- 'priority': 'HIGH',
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
- 'webhooks': [{'uuid': 'e20bf4cc-d2cf-4540-baef-d96913b14f1b'}],
84
+ 'emails': {'email': ''},
85
+ 'webhooks': [],
79
86
  },
80
87
  },
81
88
  'api_version': '2.0',
@@ -471,6 +471,7 @@ def test_model_list_success() -> None:
471
471
  models = Model.list(project_id=PROJECT_ID)
472
472
  for model in models:
473
473
  assert isinstance(model, ModelCompact)
474
+ assert model.version is not None
474
475
 
475
476
 
476
477
  @responses.activate
@@ -654,12 +655,18 @@ def test_model_duplicate() -> None:
654
655
  model = Model.get(id_=MODEL_ID)
655
656
 
656
657
  assert model.id == UUID(MODEL_ID)
658
+ assert model._event_publisher.model_id == model.id
657
659
 
658
660
  # Without version parameter
659
661
  model_copy = model.duplicate()
662
+
660
663
  assert model_copy.id is None
661
664
  assert model_copy.version == model.version
662
665
 
666
+ with pytest.raises(AssertionError):
667
+ # since id is None
668
+ _ = model_copy._event_publisher
669
+
663
670
  # With version parameter
664
671
  new_version = 'v2'
665
672
  model_copy = model.duplicate(version=new_version)
@@ -48,6 +48,29 @@ API_RESPONSE_404 = {
48
48
  'kind': 'ERROR',
49
49
  }
50
50
 
51
+ API_RESPONSE_FROM_NAME = {
52
+ 'data': {
53
+ 'page_size': 100,
54
+ 'total': 1,
55
+ 'item_count': 1,
56
+ 'page_count': 1,
57
+ 'page_index': 1,
58
+ 'offset': 0,
59
+ 'items': [
60
+ {
61
+ 'id': 1,
62
+ 'uuid': WEBHOOK_ID,
63
+ 'name': WEBHOOK_NAME,
64
+ 'url': WEBHOOK_URL,
65
+ 'provider': WEBHOOK_PROVIDER,
66
+ 'created_at': '2024-04-30T13:38:08.408013+00:00',
67
+ 'updated_at': '2024-04-30T13:38:08.408013+00:00',
68
+ 'organization_name': ORG_NAME,
69
+ }
70
+ ],
71
+ }
72
+ }
73
+
51
74
  LIST_API_RESPONSE = {
52
75
  'data': {
53
76
  'page_size': 100,
@@ -124,6 +147,40 @@ def test_get_webhook_not_found() -> None:
124
147
  Webhook.get(id_=webhook_id)
125
148
 
126
149
 
150
+ @responses.activate
151
+ def test_webhook_from_name_success() -> None:
152
+ params = {
153
+ 'filter': '{"condition": "AND", "rules": [{"field": "name", "operator": "equal", "value": "test_webhook_config_name"}]}'
154
+ }
155
+ responses.get(
156
+ url=f'{URL}/v2/webhooks',
157
+ json=API_RESPONSE_FROM_NAME,
158
+ match=[responses.matchers.query_param_matcher(params)],
159
+ )
160
+ webhook = Webhook.from_name(name=WEBHOOK_NAME)
161
+ assert isinstance(webhook, Webhook)
162
+
163
+
164
+ @responses.activate
165
+ def test_webhook_from_name_not_found() -> None:
166
+ resp = API_RESPONSE_FROM_NAME.copy()
167
+ resp['data']['total'] = 0
168
+ resp['data']['item_count'] = 0
169
+ resp['data']['items'] = []
170
+
171
+ params = {
172
+ 'filter': '{"condition": "AND", "rules": [{"field": "name", "operator": "equal", "value": "test_webhook_config_name"}]}'
173
+ }
174
+ responses.get(
175
+ url=f'{URL}/v2/webhooks',
176
+ json=resp,
177
+ match=[responses.matchers.query_param_matcher(params)],
178
+ )
179
+
180
+ with pytest.raises(NotFound):
181
+ Webhook.from_name(name=WEBHOOK_NAME)
182
+
183
+
127
184
  @responses.activate
128
185
  def test_webhook_list_success() -> None:
129
186
  responses.get(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fiddler-client
3
- Version: 3.1.0.dev2
3
+ Version: 3.1.0.dev3
4
4
  Summary: Python client for Fiddler Platform
5
5
  Home-page: https://fiddler.ai
6
6
  Author: Fiddler Labs
@@ -20,6 +20,7 @@ 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
23
24
 
24
25
  Fiddler Client
25
26
  =============
@@ -1,5 +1,5 @@
1
- fiddler/VERSION,sha256=WD4o9JNY0sUSbj2lyaWkw1u_ZLCHeKFmWEpL-GcrgSI,11
2
- fiddler/__init__.py,sha256=U9g19CmjOoli4bMAcD_LD-qTmFFBG3uCCIFm34vcTac,3757
1
+ fiddler/VERSION,sha256=COl5ot3H1wOsfwqBS7TuuGAXeD5AkQaAtVST0oeXMy4,11
2
+ fiddler/__init__.py,sha256=BfKccyHmcEVThtxSPYLBqn5pOtE0EJ9f_y1_bf3suHg,3824
3
3
  fiddler/configs.py,sha256=ZimSo0Gk7j1BFkjDHdRdycrGZ8oh-7G5TBXYiOh1HvU,217
4
4
  fiddler/connection.py,sha256=fLdSXpu5dwoK-h4Vtc9nbdKENOJ7jfEmrnDhVAtChck,5677
5
5
  fiddler/decorators.py,sha256=tWZliQQeUGwY0rU52FO9JXuOBueQXVEJywEbrgUEw1U,1820
@@ -17,22 +17,22 @@ fiddler/constants/model_deployment.py,sha256=SfagLKVD7tK1QmYQFJLDrA4-6FaSeNF6tik
17
17
  fiddler/constants/xai.py,sha256=GR8VguB6FTfMJZ291FIbfDsY4S9BGOft3VxNW5jMf90,214
18
18
  fiddler/entities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
19
  fiddler/entities/alert_record.py,sha256=RcDACWDNpntkiId-JpkLQvVeIbuaZAzn6AWl2zYIh9A,3564
20
- fiddler/entities/alert_rule.py,sha256=kLrK1U96gzN8I5G-hTTMmrIA0TywHVt-kb7CipgqjqE,11569
20
+ fiddler/entities/alert_rule.py,sha256=SxHTLA3lbF6RedkROLrlt-C360VNzuP_Pv9zVbqUeF4,11800
21
21
  fiddler/entities/base.py,sha256=YCTLt1ta8UbD7u-5BW7v_ocA4S7LevEncI5XPS_SB60,2106
22
22
  fiddler/entities/baseline.py,sha256=k3D-K8WC5MkHDILyejRaH1v9jdCIymT96McDBOVQ9A0,7907
23
23
  fiddler/entities/custom_expression.py,sha256=SdS61JiI0gOxWwHAGxkHh1vqS5XsRtyeNSDs5E-Sg2U,6568
24
24
  fiddler/entities/dataset.py,sha256=kwD1pZMG6DQGIjejU7A2KUUBRgOi0o1qbbUX-PSlnGg,4399
25
- fiddler/entities/events.py,sha256=SGA4GFmEzS9U7osodTNslfyoXhJe0j_GgyGmgkCXluk,4291
25
+ fiddler/entities/events.py,sha256=_orqFyg0m5tBREa21f36ZaX_4kKEtpA2Hsff0d__Uw0,5383
26
26
  fiddler/entities/file.py,sha256=dk8ISfjy0--F2eF23Ae8vGiEZmJW6e9LMqNmKfrY2mE,4710
27
27
  fiddler/entities/job.py,sha256=Feiqo6ns4bRcp2uaV-kuGYAKs90-aYXvzqqi1yLivYE,5220
28
- fiddler/entities/model.py,sha256=NS_pTF2XyfsSVPbcttf3E1b1-BCwbGlvm5GOJNu_Oxw,18613
28
+ fiddler/entities/model.py,sha256=jPaIUEctB0LpS56X_T_rX0PERRZiH8wSaY3b-Gj9pLA,19206
29
29
  fiddler/entities/model_artifact.py,sha256=Y7o1mFs-nVDz7HI9mVBu9ICwkqGD_QbT3q6vf8KKesk,5520
30
30
  fiddler/entities/model_deployment.py,sha256=mxEsMYiUO-m9X1ND7UuJ1b3LgEcyvOM5PMEmRvOuftk,3769
31
31
  fiddler/entities/organization.py,sha256=XvUAdBUOYXzdmblxIs4hi0mAg45NtAwy5DBaMiqi47o,1074
32
32
  fiddler/entities/project.py,sha256=G5omjjKHEjvhenMvW-R0bYwrkRVHixIOhTPZb1pS7FI,4631
33
33
  fiddler/entities/surrogate.py,sha256=94RkJmv8uwNhRL8PaliuiRv-R0EXDMKJTimE9boXKwQ,3077
34
34
  fiddler/entities/user.py,sha256=ev_Xx9QHAdEHYzNDafzQihXOcD8ME5XkpKgc8MiqCnw,1243
35
- fiddler/entities/webhook.py,sha256=I-mcl92Tg2-oUUqNMOeDPBe0XawVYhNcTGXHBway7_A,3798
35
+ fiddler/entities/webhook.py,sha256=BhwV-05EaFtOATbnlPWUaGeziRSewBPSNSGsYFbIRfc,4514
36
36
  fiddler/entities/xai.py,sha256=tJ5HQnaV_svR7do1secIIIvQ0ckJMnW0xjoThn8Cz6s,20250
37
37
  fiddler/libs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
38
  fiddler/libs/http_client.py,sha256=bl2V-q66NoPHm950CiDqOoF-kCPztYWUYNy9hVUsbqg,6027
@@ -45,10 +45,10 @@ fiddler/packtools/project_attributions_helpers.py,sha256=K-xpsKfwRS5GOMYwTmXY-J3
45
45
  fiddler/packtools/template_model.py,sha256=x_ECfGak3uGrxHIf-FvsXqDkYFjrpa6T28qe2pwppdk,10467
46
46
  fiddler/schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
47
47
  fiddler/schemas/alert_record.py,sha256=Edfe264zUwqF856tMblN85CsEa_wn9oZCoLruvsNAbo,668
48
- fiddler/schemas/alert_rule.py,sha256=-V0AibEImrfcEZfJ4J_Ed5SuZISOGsk-nIoVlX5mOOg,1222
48
+ fiddler/schemas/alert_rule.py,sha256=_rNeKdii0d2q6CXPzKvpGIJwffu3jq9SqqtwTvgfafQ,1328
49
49
  fiddler/schemas/base.py,sha256=upzAmneEz169h_w-UDH_tY0Abo7DeK68YOZ5qVwIMa8,189
50
50
  fiddler/schemas/baseline.py,sha256=tBQji1GLYt0ZYgEK6ZTmXxk5nUYTI6oxMmSjNXnRfWw,933
51
- fiddler/schemas/custom_expression.py,sha256=6Y4Q89HIOjUwVS9u9-wMAXvcPMmtQ7puLEkx27Gr-wY,844
51
+ fiddler/schemas/custom_expression.py,sha256=LGHht3LB0HGghEfy808VnaF3nIQVGZjhf__f1CcLRoU,953
52
52
  fiddler/schemas/custom_features.py,sha256=U33Rlyt9TxNqEQ2_3aQTgvlIuI2_QPg-6YnQBzJuyoE,5531
53
53
  fiddler/schemas/dataset.py,sha256=rGmpMrMfPLSs9d3_sxDTjrKqWp-o-bCe9pf_nlYyHfw,657
54
54
  fiddler/schemas/events.py,sha256=dH6SGPBO_rgGZetIhSo4Fq0L1pTU7TEKR7zW7gg3fnI,409
@@ -78,7 +78,7 @@ fiddler/tests/test_utils.py,sha256=AF6y7UfboEkCa-nNw0aF30SdHC7yW2Hh78J4H_4s78k,3
78
78
  fiddler/tests/utils.py,sha256=FEDbASW4pYZktdEK2FLnIDyZCwBzpb60m6EzkvOkwSc,335
79
79
  fiddler/tests/apis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
80
  fiddler/tests/apis/test_alert_record.py,sha256=_0EBRDn87TqTiO1KYEHKQQVtVZjj4lYjbt8Ix-RRTSg,3118
81
- fiddler/tests/apis/test_alert_rule.py,sha256=3fmcxiGXOokMqFRWo5w4CL4m0k6rCnG17ZRfj1wlZ04,11231
81
+ fiddler/tests/apis/test_alert_rule.py,sha256=raVWKNB4YnKYmn-BKALbnaRmGxb8WNcm-BVAuPDgaQA,11593
82
82
  fiddler/tests/apis/test_baseline.py,sha256=R_vvbZdSenpYMSydurENJrE_uNWE3sJR9sHJksfU_Jk,7494
83
83
  fiddler/tests/apis/test_custom_metric.py,sha256=QlNa80M9PxqaqzW-3nCtH5kKLRHYu2iqFDautBusbos,8208
84
84
  fiddler/tests/apis/test_dataset.py,sha256=1Xc9Ng91fLMc2C6dpKfse42fQ0anza3ZOKOD1TqCvTQ,4636
@@ -87,13 +87,13 @@ fiddler/tests/apis/test_files.py,sha256=-BisPck7bHMSW3N40ffdQJe027Qe3079tjTlU2OI
87
87
  fiddler/tests/apis/test_generate_model.py,sha256=J8foDsZIUoHJyzLODQM57jw8OFVD81jc67RIubq-CVs,5089
88
88
  fiddler/tests/apis/test_job.py,sha256=GlJXhxK60q9u5QJ6ToLrw4y1G3M0DzAAR2u-JDbk3D0,1891
89
89
  fiddler/tests/apis/test_mixin.py,sha256=RhA2pY1MXrqxNQG8ujVLvTMBT4iZBwa6Y3Nk0TRfI1o,2517
90
- fiddler/tests/apis/test_model.py,sha256=AL4BdP8vZjRLkh0XESFKjLzg5gVG-vxhnyE6adku6tA,18346
90
+ fiddler/tests/apis/test_model.py,sha256=gd1VejEn_vVdv7WsyMbpRnm3s1I9kWYVkVvEdX3E_Co,18551
91
91
  fiddler/tests/apis/test_model_artifact.py,sha256=oQVasstDc41EesAzN39wCTZi7KtpeQdVcGcLxERjmw0,5635
92
92
  fiddler/tests/apis/test_model_deployment.py,sha256=AWGdbepFrU3qT17XAZC68n8LlXh7OKNqSwg3_ug9G5I,2441
93
93
  fiddler/tests/apis/test_model_surrogate.py,sha256=h3OPgD1-_n6gTd0YH_hDcBBRjBfXv1xUsZxNWUU69KQ,4443
94
94
  fiddler/tests/apis/test_project.py,sha256=IEYT3imD4dZJg-OT888G4jQJ_AxxHN5_VkCHcmwUnGA,6015
95
95
  fiddler/tests/apis/test_segment.py,sha256=hQiXpZEKLJrnlRBLLMsP3jph8H8K7AEUw17sMK6BuF8,7804
96
- fiddler/tests/apis/test_webhook.py,sha256=DTaEI9r2lossAaXb3b1CX4C8L3bYAzZmLIWH8VeauUs,6440
96
+ fiddler/tests/apis/test_webhook.py,sha256=Tf6bggAFeUA0a9TKTjJ34dM_UM_l6_Q-5N9utyuieeE,8099
97
97
  fiddler/tests/apis/test_xai.py,sha256=mV-bcu6Tkw_wM4nCc9Uf6OXU38Hz0gX3eiVMCLGAsbQ,28590
98
98
  fiddler/utils/__init__.py,sha256=ooAJR6_tVaF6UKZriz5ynZPj8IeCzaDIPKV23F-e4Fk,53
99
99
  fiddler/utils/helpers.py,sha256=Xl_T_se9SOeMTmVJAOVzzmkekUsmpFMlAb2KvPCWfTw,2908
@@ -101,8 +101,8 @@ fiddler/utils/logger.py,sha256=FdJ3LkS9dbRjWsw5oJmNNsd7q0XRVEIvx5-TWys7L0k,669
101
101
  fiddler/utils/model_generator.py,sha256=TwQMQDpy-0gcq6HyL68s37N-sk_nGPq33mmppK6i7hI,2203
102
102
  fiddler/utils/validations.py,sha256=i8NtgrpCsitq6BPa5lygpKDh07oaOXu7PAlCIcMvqzY,408
103
103
  fiddler/utils/version.py,sha256=iC8Ry7UFl9EJW_xU1WbzO_l4yK6V7eQ6U5exB3xT864,531
104
- fiddler_client-3.1.0.dev2.dist-info/LICENSE.txt,sha256=w8-LUAb_VLBWSsCNmih0pAqLIicJfGu8OJXpDjkIg_o,559
105
- fiddler_client-3.1.0.dev2.dist-info/METADATA,sha256=5DHmXRtXAVN1tadTh3bHPQf0s4l00jTzcJjaEHZlBDA,1556
106
- fiddler_client-3.1.0.dev2.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
107
- fiddler_client-3.1.0.dev2.dist-info/top_level.txt,sha256=ndC6LqvKmrTTs8czRlBOYdYgSqZbHuMf0zHt_HWpzzk,8
108
- fiddler_client-3.1.0.dev2.dist-info/RECORD,,
104
+ fiddler_client-3.1.0.dev3.dist-info/LICENSE.txt,sha256=w8-LUAb_VLBWSsCNmih0pAqLIicJfGu8OJXpDjkIg_o,559
105
+ fiddler_client-3.1.0.dev3.dist-info/METADATA,sha256=wiE7w2yr801JRXXZD4KDw2sUtMFE2Qw2bpXkRlFq8Ug,1597
106
+ fiddler_client-3.1.0.dev3.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
107
+ fiddler_client-3.1.0.dev3.dist-info/top_level.txt,sha256=ndC6LqvKmrTTs8czRlBOYdYgSqZbHuMf0zHt_HWpzzk,8
108
+ fiddler_client-3.1.0.dev3.dist-info/RECORD,,