fiddler-client 2.1.0.dev3__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.dev3'
1
+ __version__ = '2.1.0.dev5'
@@ -1,5 +1,5 @@
1
1
  from http import HTTPStatus
2
- from typing import List
2
+ from typing import List, Optional
3
3
 
4
4
  from pydantic import parse_obj_as
5
5
 
@@ -22,7 +22,12 @@ class CustomMetricsMixin:
22
22
 
23
23
  @handle_api_error_response
24
24
  def add_custom_metric(
25
- self, name: str, project_id: str, model_id: str, fql: str
25
+ self,
26
+ name: str,
27
+ project_id: str,
28
+ model_id: str,
29
+ definition: str,
30
+ description: Optional[str] = None,
26
31
  ) -> CustomMetric:
27
32
  """
28
33
  Add a new `Custom Metric`.
@@ -30,7 +35,8 @@ class CustomMetricsMixin:
30
35
  :params name: name of custom metric
31
36
  :params project_id: name of project
32
37
  :params model_id: name of model
33
- :params fql: The FQL expression describing the metric
38
+ :params definition: The FQL expression describing the metric
39
+ :params description: description of custom metric
34
40
 
35
41
  :returns: Created `CustomMetric` object.
36
42
  """
@@ -39,7 +45,8 @@ class CustomMetricsMixin:
39
45
  'project_name': project_id,
40
46
  'model_name': model_id,
41
47
  'name': name,
42
- 'fql': fql,
48
+ 'definition': definition,
49
+ 'description': description,
43
50
  }
44
51
  response = self.client.post(
45
52
  url='custom-metrics',
@@ -51,7 +58,7 @@ class CustomMetricsMixin:
51
58
  return CustomMetric.parse_obj(attrs)
52
59
 
53
60
  @handle_api_error_response
54
- def delete_custom_metric(self, metric_id: str = None) -> None:
61
+ def delete_custom_metric(self, metric_id: str) -> None:
55
62
  """
56
63
  Delete a custom metric
57
64
 
@@ -95,3 +102,15 @@ class CustomMetricsMixin:
95
102
  )
96
103
  items = PaginatedResponseHandler(response).get_pagination_items()
97
104
  return parse_obj_as(List[CustomMetric], items)
105
+
106
+ @handle_api_error_response
107
+ def get_custom_metric(self, metric_id: str) -> CustomMetric:
108
+ """
109
+ Get a `CustomMetric` object.
110
+
111
+ :params metric_id: id of the custom metric
112
+
113
+ :returns: a `CustomMetric` object
114
+ """
115
+ response = self.client.get(url=f'custom-metrics/{metric_id}')
116
+ return CustomMetric.deserialize(APIResponseHandler(response))
@@ -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,4 +1,8 @@
1
+ from typing import Optional
2
+
1
3
  from fiddler.schema.base import BaseDataSchema
4
+ from fiddler.schema.user import UserCompact
5
+ from datetime import datetime
2
6
 
3
7
 
4
8
  class CustomMetric(BaseDataSchema):
@@ -7,4 +11,8 @@ class CustomMetric(BaseDataSchema):
7
11
  project_name: str
8
12
  organization_name: str
9
13
  name: str
10
- fql: str
14
+ definition: str
15
+ description: Optional[str]
16
+ created_at: Optional[datetime]
17
+ created_by: Optional[UserCompact]
18
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fiddler-client
3
- Version: 2.1.0.dev3
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
@@ -48,6 +48,9 @@ Version History
48
48
  - #### **New Features**
49
49
  - Introduce Model Tasks `NOT_SET` and `LLM`
50
50
  - Relax Target / Output specification for model tasks `NOT_SET` and `LLM`
51
+ - Support custom metrics
52
+ - #### **Modifications**
53
+ - `DatasetDataSource` and `EventIdDataSource` will take `dataset_id` instead of `dataset_name`
51
54
 
52
55
  ### 2.0.4
53
56
  - #### **Modifications**
@@ -1,16 +1,16 @@
1
1
  fiddler/__init__.py,sha256=N0S2NzC1P0Dl7SE9IRRzJpSDvyyqT9Pmlk2SaW24NGc,2018
2
- fiddler/_version.py,sha256=9EHEScNheGlrVxkru1Ps6aAsAj18JJ68S6FijrN4FgM,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
9
9
  fiddler/api/baseline_mixin.py,sha256=2DKur2oIrn0TNTQPbpwSMyC1WOzhScHXWwX8QK8ubig,6810
10
- fiddler/api/custom_metrics_mixin.py,sha256=S5TIg4BW-CZecYbJDKyMS3EuPJj9edG3aype5TF-bHE,2861
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
@@ -32,7 +32,7 @@ fiddler/schema/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
32
  fiddler/schema/alert.py,sha256=aC96q5nDBVuR4nqPbWSgQ0nLRgGLtyCmnGerbLwfsFE,5230
33
33
  fiddler/schema/base.py,sha256=VvuBEGZ_AMVQhT6AlkV7kMlOQcwsMbLIjvX0_cyMcQQ,359
34
34
  fiddler/schema/baseline.py,sha256=h8SyR32L1AMo2DrcwgEOqWN-U538-XFngjAtQQfMklI,487
35
- fiddler/schema/custom_metric.py,sha256=u-RNI33YB6lWR8arQ1yO7Bw_5sw72sVkZkQvLscORUc,187
35
+ fiddler/schema/custom_metric.py,sha256=bLoOVoF6nRMLLv5cekTTalGXHm1KOZRzNMpYp7c81gs,402
36
36
  fiddler/schema/dataset.py,sha256=JVeLXyqlEgiqYVX7fVkk0bLzXSRkKSTuoAsK3tnvR-s,3259
37
37
  fiddler/schema/events.py,sha256=QvCuXWH-quT-MVzMU8-CvQM2rRgNcvGAof4v_RiiqZk,879
38
38
  fiddler/schema/job.py,sha256=mDQ3ZevsFT2ZW1wri9BeQSiB7G4ZyoA_3tzuoBvl5ow,157
@@ -72,11 +72,11 @@ tests/fiddler/test_alert.py,sha256=vM8MRsTsV9zovFiUYN2pXwEcH453EN2HHIoGV_i7cx4,5
72
72
  tests/fiddler/test_baseline.py,sha256=V7VFg2hqAC98cdZCsoqcNcKouDlQdHMdpifqcwJyYOM,10077
73
73
  tests/fiddler/test_check_version_decorator.py,sha256=MGcrIX7nscVpIYy1thuLrSvsXBC6KDXfdsHCEST5Xnw,906
74
74
  tests/fiddler/test_custom_features.py,sha256=yjz-5Aq_Ey7FoDJiIzugLPcbh_5QdazE6trwpT38rEw,3028
75
- tests/fiddler/test_custom_metrics.py,sha256=aXS0jLkO3MT-DUw040-iJjfZkLthSNr3orpIiQOvpXw,5039
75
+ tests/fiddler/test_custom_metrics.py,sha256=txNS-RTltdAublF0xWhkS_YOgdu-C6AxRKubFpYR8ds,8103
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.dev3.dist-info/LICENSE.txt,sha256=w8-LUAb_VLBWSsCNmih0pAqLIicJfGu8OJXpDjkIg_o,559
95
- fiddler_client-2.1.0.dev3.dist-info/METADATA,sha256=Xv7KDGfkgG8f8u_VpcNmsGVQf24AwALnT4MkHEy6l8M,18848
96
- fiddler_client-2.1.0.dev3.dist-info/WHEEL,sha256=g4nMs7d-Xl9-xC9XovUrsDHGXt-FT0E17Yqo92DEfvY,92
97
- fiddler_client-2.1.0.dev3.dist-info/top_level.txt,sha256=GdJimrE4Q9O20-dA6QljDHm5KBrlz25oQTdbMHu41So,14
98
- fiddler_client-2.1.0.dev3.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,,
@@ -27,17 +27,32 @@ class TestCustomMetric(BaseTestCase):
27
27
  "project_name": "bank_churn",
28
28
  "name": "tp_0.8",
29
29
  "model_name": "churn_classifier",
30
- "fql": "sum(age)",
30
+ "definition": "sum(age)",
31
31
  "id": "fbba0596-1d49-4159-a5ea-e1c2f57c9c32",
32
- "organization_name": "test_organization"
32
+ "organization_name": "test_organization",
33
+ "description": "test description",
34
+ "extra_field_from_future": "should_not_break",
35
+ "created_at": "2021-03-03T18:30:00.000Z",
36
+ "created_by": {
37
+ "id": "1",
38
+ "full_name": "test user",
39
+ "email": "testuser@fiddler.ai"
40
+ }
33
41
  },
34
42
  {
35
43
  "project_name": "bank_churn",
36
44
  "name": "tp_0.6",
37
45
  "model_name": "churn_classifier",
38
- "fql": "sum(credit_score)",
46
+ "definition": "sum(credit_score)",
39
47
  "id": "3a352397-a89a-495d-a095-440f1d21a58a",
40
- "organization_name": "test_organization"
48
+ "organization_name": "test_organization",
49
+ "description": "test description",
50
+ "created_at": "2021-03-03T18:30:00.000Z",
51
+ "created_by": {
52
+ "id": "2",
53
+ "full_name": "test user",
54
+ "email": "testuser@fiddler.ai"
55
+ }
41
56
  }
42
57
  ]
43
58
  },
@@ -65,18 +80,32 @@ class TestCustomMetric(BaseTestCase):
65
80
  CustomMetric(
66
81
  id='fbba0596-1d49-4159-a5ea-e1c2f57c9c32',
67
82
  name='tp_0.8',
68
- fql='sum(age)',
83
+ definition='sum(age)',
69
84
  organization_name='test_organization',
70
85
  project_name='bank_churn',
71
86
  model_name='churn_classifier',
87
+ description='test description',
88
+ created_at='2021-03-03T18:30:00.000Z',
89
+ created_by={
90
+ "id": "1",
91
+ "full_name": "test user",
92
+ "email": "testuser@fiddler.ai"
93
+ }
72
94
  ),
73
95
  CustomMetric(
74
96
  id='3a352397-a89a-495d-a095-440f1d21a58a',
75
97
  name='tp_0.6',
76
- fql='sum(credit_score)',
98
+ definition='sum(credit_score)',
77
99
  organization_name='test_organization',
78
100
  project_name='bank_churn',
79
101
  model_name='churn_classifier',
102
+ description='test description',
103
+ created_at='2021-03-03T18:30:00.000Z',
104
+ created_by={
105
+ "id": "2",
106
+ "full_name": "test user",
107
+ "email": "testuser@fiddler.ai"
108
+ }
80
109
  ),
81
110
  ]
82
111
 
@@ -95,17 +124,19 @@ class TestCustomMetric(BaseTestCase):
95
124
 
96
125
  custom_metric = self.client.add_custom_metric(
97
126
  name='my custom',
98
- fql='sum(age)',
127
+ definition='sum(age)',
99
128
  project_id='bank_churn',
100
129
  model_id='churn_classifier',
130
+ description='test description',
101
131
  )
102
132
  assert custom_metric == CustomMetric(
103
133
  id='fbba0596-1d49-4159-a5ea-e1c2f57c9c32',
104
134
  name='my custom',
105
- fql='sum(age)',
135
+ definition='sum(age)',
106
136
  organization_name='test_organization',
107
137
  project_name='bank_churn',
108
138
  model_name='churn_classifier',
139
+ description='test description',
109
140
  )
110
141
 
111
142
  def test_add_custom_metric_error(self):
@@ -131,7 +162,7 @@ class TestCustomMetric(BaseTestCase):
131
162
  with self.assertRaises(BadRequest) as context:
132
163
  self.client.add_custom_metric(
133
164
  name='my custom',
134
- fql='sum(unknown)',
165
+ definition='sum(unknown)',
135
166
  project_id='bank_churn',
136
167
  model_id='churn_classifier',
137
168
  )
@@ -140,6 +171,50 @@ class TestCustomMetric(BaseTestCase):
140
171
  "Column unknown not found in model churn_classifier"
141
172
  )
142
173
 
174
+ def test_get_custom_metric(self):
175
+ uuid = 'fbba0596-1d49-4159-a5ea-e1c2f57c9c32'
176
+ response = {
177
+ "data": {
178
+ "project_name": "bank_churn",
179
+ "name": "tp_0.8",
180
+ "model_name": "churn_classifier",
181
+ "definition": "sum(age)",
182
+ "id": "fbba0596-1d49-4159-a5ea-e1c2f57c9c32",
183
+ "organization_name": "test_organization",
184
+ "description": "test description",
185
+ "extra_field_from_future": "should_not_break",
186
+ "created_at": "2021-03-03T18:30:00.000Z",
187
+ "created_by": {
188
+ "id": "1",
189
+ "full_name": "test user",
190
+ "email": "testuser@fiddler.ai"
191
+ }
192
+ },
193
+ "api_version": "2.0",
194
+ "kind": "NORMAL"
195
+ }
196
+ url = self._get_url(uuid)
197
+
198
+ self.requests_mock.get(url, json=response)
199
+ cm = self.client.get_custom_metric(
200
+ metric_id='fbba0596-1d49-4159-a5ea-e1c2f57c9c32'
201
+ )
202
+ assert cm == CustomMetric(
203
+ id='fbba0596-1d49-4159-a5ea-e1c2f57c9c32',
204
+ name='tp_0.8',
205
+ definition='sum(age)',
206
+ organization_name='test_organization',
207
+ project_name='bank_churn',
208
+ model_name='churn_classifier',
209
+ description='test description',
210
+ created_at='2021-03-03T18:30:00.000Z',
211
+ created_by={
212
+ "id": "1",
213
+ "full_name": "test user",
214
+ "email": "testuser@fiddler.ai"
215
+ }
216
+ )
217
+
143
218
  def test_delete_custom_metric(self):
144
219
  uuid = 'fbba0596-1d49-4159-a5ea-e1c2f57c9c32'
145
220
  url = self._get_url(uuid)
@@ -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,