fiddler-client 2.1.0.dev4__py3-none-any.whl → 2.1.0.dev5__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.py CHANGED
@@ -1 +1 @@
1
- __version__ = '2.1.0.dev4'
1
+ __version__ = '2.1.0.dev5'
@@ -2,7 +2,7 @@ from collections import namedtuple
2
2
  from typing import Any, Dict, List, NamedTuple, Optional, Union
3
3
 
4
4
  import pandas as pd
5
- from pydantic import BaseModel
5
+ from pydantic import BaseModel, Field
6
6
 
7
7
  from fiddler.libs.http_client import RequestClient
8
8
  from fiddler.utils.decorators import handle_api_error_response
@@ -15,7 +15,7 @@ logger = get_logger(__name__)
15
15
 
16
16
  class DatasetDataSource(BaseModel):
17
17
  source_type = 'DATASET'
18
- dataset_name: str
18
+ dataset_name: str = Field(alias='dataset_id')
19
19
  source: Optional[str]
20
20
  num_samples: Optional[int]
21
21
 
@@ -34,7 +34,7 @@ class RowDataSource(BaseModel):
34
34
  class EventIdDataSource(BaseModel):
35
35
  source_type = 'EVENT_ID'
36
36
  event_id: str
37
- dataset_name: str
37
+ dataset_name: str = Field(alias='dataset_id')
38
38
 
39
39
 
40
40
  class ExplainabilityMixin:
fiddler/exceptions.py CHANGED
@@ -23,7 +23,7 @@ class AsyncJobFailed(Exception):
23
23
  class ErrorResponseHandler:
24
24
  def __init__(self, http_error: HTTPError) -> None:
25
25
  self.http_error = http_error
26
- self.response = http_error.response
26
+ self.response = getattr(http_error, 'response')
27
27
  self.ErrorResponse = namedtuple( # type: ignore
28
28
  'ErrorResponse', ['status_code', 'error_code', 'message', 'errors']
29
29
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fiddler-client
3
- Version: 2.1.0.dev4
3
+ Version: 2.1.0.dev5
4
4
  Summary: Python client for Fiddler Service
5
5
  Home-page: https://fiddler.ai
6
6
  Author: Fiddler Labs
@@ -49,6 +49,8 @@ Version History
49
49
  - Introduce Model Tasks `NOT_SET` and `LLM`
50
50
  - Relax Target / Output specification for model tasks `NOT_SET` and `LLM`
51
51
  - Support custom metrics
52
+ - #### **Modifications**
53
+ - `DatasetDataSource` and `EventIdDataSource` will take `dataset_id` instead of `dataset_name`
52
54
 
53
55
  ### 2.0.4
54
56
  - #### **Modifications**
@@ -1,8 +1,8 @@
1
1
  fiddler/__init__.py,sha256=N0S2NzC1P0Dl7SE9IRRzJpSDvyyqT9Pmlk2SaW24NGc,2018
2
- fiddler/_version.py,sha256=RShHDU6VmHiby-18I-reafFfkORbcfCW2afHTL4C6MY,27
2
+ fiddler/_version.py,sha256=KQAc7KU-mJvztNT933s927lrNsCxny7RGtGEb4R-foc,27
3
3
  fiddler/constants.py,sha256=kXJX771B9UoQKh-umPnPfDXGeCRdC8TmTAi40hSK0Cs,1886
4
4
  fiddler/core_objects.py,sha256=Qe8wxak6tfn9rpIb7jdN5tXYpUJs_sJHPMGf9cDg6MU,114079
5
- fiddler/exceptions.py,sha256=vjdZ0v51NAy_pPcj_MaD4o5y-lUToHeids-waTfZb8k,2557
5
+ fiddler/exceptions.py,sha256=L4AQd6PAgHI0c8Jx5_x7ZZcb7tlBK5pCkEoXJAxL-xU,2569
6
6
  fiddler/api/__init__.py,sha256=Na9WlUxg8FmKHBzzVJ-CzlYNm7-LClVH5f313SqJx4A,108
7
7
  fiddler/api/alert_mixin.py,sha256=lBc08-wcvF3bO_XdcVSXqmgR9i54UtKwUCn56brokCw,17873
8
8
  fiddler/api/api.py,sha256=pR5eE7Vq5OWGom8MZmZkkU2bmVOznJ45jiB4pwnXd6g,3506
@@ -10,7 +10,7 @@ fiddler/api/baseline_mixin.py,sha256=2DKur2oIrn0TNTQPbpwSMyC1WOzhScHXWwX8QK8ubig
10
10
  fiddler/api/custom_metrics_mixin.py,sha256=7fpZx_4jSzhELbU1TYyvgDqP8NUMg62NWqlgRwKjkDQ,3459
11
11
  fiddler/api/dataset_mixin.py,sha256=cN5GfOTX5uOKzmvxHj-uLuv049EI_BQqhJ6uw1VX-7o,15319
12
12
  fiddler/api/events_mixin.py,sha256=RiKwS-EDE0SJKS-rgYd13Bav1wStyM0r29FA0WHi48I,22009
13
- fiddler/api/explainability_mixin.py,sha256=W2GLDfSYaxe06VS9_ZGQmPfFzkwPcWtrt5JIyJ23ZxY,15405
13
+ fiddler/api/explainability_mixin.py,sha256=cyf8Jv37v-BS2T6s5PfnrxR1eoXBKDj_YEx2TlJWB3g,15468
14
14
  fiddler/api/generate_schema_mixin.py,sha256=90tv_Ca1DqBKZvT9HZcAiLWWAIUK2KgZIQLrx_4RDaE,9840
15
15
  fiddler/api/helpers.py,sha256=VV__rmT6gIDFBgobeTW42mUj4ZSICm1V7saWWFIYeAs,4752
16
16
  fiddler/api/job_mixin.py,sha256=xOJnABpX-UFqCmjArpsQey60L-vM4Mxe7BZ5OXfGFYs,4506
@@ -76,7 +76,7 @@ tests/fiddler/test_custom_metrics.py,sha256=txNS-RTltdAublF0xWhkS_YOgdu-C6AxRKub
76
76
  tests/fiddler/test_dataset_api.py,sha256=XrSsyhJubBUKEjl6qHSDBE9_-VnHOCgiL0Mq12IZav0,6306
77
77
  tests/fiddler/test_events_api.py,sha256=l41OGatQzNCc95qvLXOpcQ0r7IPRw-N1Uw_bEkRZhf0,11770
78
78
  tests/fiddler/test_exceptions.py,sha256=3dUe85gqf8MVxEM_9D1wrNRU8jvmu1-ja36jaDKgOQk,2801
79
- tests/fiddler/test_explainability_apis.py,sha256=nq_3kUZQeFstPlhvvzVoodyianqR2XiboqX5AR-rNcU,15073
79
+ tests/fiddler/test_explainability_apis.py,sha256=3n4Em8V4bT8R4pXQoCcUJy8DjovoqkAEisuBPV-_Cgg,16148
80
80
  tests/fiddler/test_file_upload.py,sha256=TBy0gLfu2sfbqcvx_rrgNF0I4keqkBTReG2EkVIei_Y,7611
81
81
  tests/fiddler/test_generate_schema.py,sha256=aXSqB905JO2D1pzbA_39Hp126WQ6wfLtmrTw6kyBRgI,3256
82
82
  tests/fiddler/test_helpers.py,sha256=moCqxTvwWBNr2l73ZZKgmCSklX6_2bidVI6-gdQspfU,820
@@ -91,8 +91,8 @@ tests/fiddler/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
91
91
  tests/fiddler/utils/test_general_checks.py,sha256=kxG8n4UdBWXBGchA0SvV7o4t28a7YAc8viorEBpzzcE,1451
92
92
  tests/fiddler/utils/test_pandas.py,sha256=ihNRe9mCteqeV70o-zWEf62fJHL3qE8nDIijYlUEHv4,8825
93
93
  tests/fiddler/utils/tests_utils.py,sha256=kPmMoOlaSIWw6Gk7QnAnn8QJvEyqtd2Rz32kS6RGEc8,1800
94
- fiddler_client-2.1.0.dev4.dist-info/LICENSE.txt,sha256=w8-LUAb_VLBWSsCNmih0pAqLIicJfGu8OJXpDjkIg_o,559
95
- fiddler_client-2.1.0.dev4.dist-info/METADATA,sha256=BSvVWbPFKm9zuQkffazhM26k4SjqfeX5jMfxuhKJ2zQ,18875
96
- fiddler_client-2.1.0.dev4.dist-info/WHEEL,sha256=g4nMs7d-Xl9-xC9XovUrsDHGXt-FT0E17Yqo92DEfvY,92
97
- fiddler_client-2.1.0.dev4.dist-info/top_level.txt,sha256=GdJimrE4Q9O20-dA6QljDHm5KBrlz25oQTdbMHu41So,14
98
- fiddler_client-2.1.0.dev4.dist-info/RECORD,,
94
+ fiddler_client-2.1.0.dev5.dist-info/LICENSE.txt,sha256=w8-LUAb_VLBWSsCNmih0pAqLIicJfGu8OJXpDjkIg_o,559
95
+ fiddler_client-2.1.0.dev5.dist-info/METADATA,sha256=zy-FDLMThSf4nOsdYV6lcDz2jBA6N867oxRI8kD7Jd0,18998
96
+ fiddler_client-2.1.0.dev5.dist-info/WHEEL,sha256=g4nMs7d-Xl9-xC9XovUrsDHGXt-FT0E17Yqo92DEfvY,92
97
+ fiddler_client-2.1.0.dev5.dist-info/top_level.txt,sha256=GdJimrE4Q9O20-dA6QljDHm5KBrlz25oQTdbMHu41So,14
98
+ fiddler_client-2.1.0.dev5.dist-info/RECORD,,
@@ -2,9 +2,11 @@ import json
2
2
  import unittest
3
3
 
4
4
  import pandas as pd
5
+ import pytest
5
6
 
6
7
  from fiddler.api.explainability_mixin import (
7
8
  DatasetDataSource,
9
+ EventIdDataSource,
8
10
  RowDataSource,
9
11
  SqlSliceQueryDataSource,
10
12
  )
@@ -19,6 +21,16 @@ class TestExplainabilityApis(BaseTestCase):
19
21
  self._dataset_name = 'test_dataset'
20
22
  self._model_name = 'test_model'
21
23
 
24
+ def test_pydantic_models(self):
25
+ dataset_source = DatasetDataSource(dataset_id='test_dataset')
26
+ assert dataset_source.dataset_name == 'test_dataset'
27
+ assert dataset_source.source_type == 'DATASET'
28
+
29
+ event_id_ds = EventIdDataSource(event_id='event_id', dataset_id='test_dataset')
30
+ assert event_id_ds.dataset_name == 'test_dataset'
31
+ assert event_id_ds.event_id == 'event_id'
32
+ assert event_id_ds.source_type == 'EVENT_ID'
33
+
22
34
  def test_feature_importance_from_dataset(self):
23
35
  url = f'{self._url}/feature-importance'
24
36
 
@@ -29,7 +41,7 @@ class TestExplainabilityApis(BaseTestCase):
29
41
  model_id=self._model_name,
30
42
  project_id=self._project_name,
31
43
  data_source=DatasetDataSource(
32
- dataset_name='test_dataset', num_samples=None
44
+ dataset_id='test_dataset', num_samples=None
33
45
  ),
34
46
  num_refs=None,
35
47
  num_iterations=None,
@@ -95,7 +107,7 @@ class TestExplainabilityApis(BaseTestCase):
95
107
  model_id=self._model_name,
96
108
  project_id=self._project_name,
97
109
  data_source=DatasetDataSource(
98
- dataset_name='test_dataset',
110
+ dataset_id='test_dataset',
99
111
  num_samples=num_samples,
100
112
  ),
101
113
  num_iterations=num_iterations,
@@ -130,7 +142,7 @@ class TestExplainabilityApis(BaseTestCase):
130
142
  model_id=self._model_name,
131
143
  project_id=self._project_name,
132
144
  data_source=DatasetDataSource(
133
- dataset_name='test_dataset',
145
+ dataset_id='test_dataset',
134
146
  num_samples=None,
135
147
  ),
136
148
  output_columns=None,
@@ -203,7 +215,7 @@ class TestExplainabilityApis(BaseTestCase):
203
215
  model_id=self._model_name,
204
216
  project_id=self._project_name,
205
217
  data_source=DatasetDataSource(
206
- dataset_name='test_dataset',
218
+ dataset_id='test_dataset',
207
219
  num_samples=num_samples,
208
220
  ),
209
221
  output_columns=output_columns,
@@ -243,12 +255,12 @@ class TestExplainabilityApis(BaseTestCase):
243
255
  project_id=self._project_name,
244
256
  input_data_source=RowDataSource(row={'col_a': 3, 'col_b': 'x'}),
245
257
  ref_data_source=DatasetDataSource(
246
- dataset_name=self._dataset_name, source=None, num_samples=10
258
+ dataset_id=self._dataset_name, source=None, num_samples=10
247
259
  ),
248
260
  explanation_type='FIDDLER_SHAP',
249
261
  num_permutations=300,
250
262
  ci_level=0.95,
251
- top_n_class=None,
263
+ top_n_class=1,
252
264
  )
253
265
 
254
266
  request_body = json.loads(self.requests_mock.calls[0].request.body)
@@ -265,6 +277,7 @@ class TestExplainabilityApis(BaseTestCase):
265
277
  self.assertEqual(request_body['input_data_source']['source_type'], 'ROW')
266
278
  self.assertEqual(request_body['explanation_type'], 'FIDDLER_SHAP')
267
279
  self.assertEqual(request_body['num_permutations'], 300)
280
+ self.assertEqual(request_body['top_n_class'], 1)
268
281
 
269
282
  def test_fairness(self):
270
283
  url = f'{self._url}/fairness'
@@ -276,7 +289,7 @@ class TestExplainabilityApis(BaseTestCase):
276
289
  model_id=self._model_name,
277
290
  project_id=self._project_name,
278
291
  data_source=DatasetDataSource(
279
- dataset_name=self._dataset_name, source=None, num_samples=None
292
+ dataset_id=self._dataset_name, source=None, num_samples=None
280
293
  ),
281
294
  protected_features=['Gender', 'Race'],
282
295
  positive_outcome='Churned',
@@ -334,6 +347,15 @@ class TestExplainabilityApis(BaseTestCase):
334
347
 
335
348
  mock_response = get_base_api_response_body(data=data)
336
349
  self.requests_mock.post(url, json=mock_response)
350
+
351
+ with pytest.raises(ValueError):
352
+ self.client.get_predictions(
353
+ project_id=self._project_name,
354
+ model_id=self._model_name,
355
+ input_df={},
356
+ chunk_size=10,
357
+ )
358
+
337
359
  df = pd.DataFrame([{'col1': 4, 'col2': 'xyz'}])
338
360
  self.client.get_predictions(
339
361
  project_id=self._project_name,
@@ -358,6 +380,15 @@ class TestExplainabilityApis(BaseTestCase):
358
380
 
359
381
  slice_query = 'SELECT * FROM table' # nosec
360
382
 
383
+ with pytest.raises(ValueError):
384
+ self.client.get_mutual_information(
385
+ project_id=self._project_name,
386
+ dataset_id=self._dataset_name,
387
+ query=slice_query,
388
+ column_name=1,
389
+ normalized=True,
390
+ )
391
+
361
392
  self.client.get_mutual_information(
362
393
  project_id=self._project_name,
363
394
  dataset_id=self._dataset_name,