fiddler-client 3.0.2__tar.gz → 3.0.4__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.
Files changed (116) hide show
  1. {fiddler-client-3.0.2/fiddler_client.egg-info → fiddler_client-3.0.4}/PKG-INFO +1 -1
  2. fiddler_client-3.0.4/fiddler/VERSION +1 -0
  3. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/entities/model_deployment.py +5 -1
  4. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/entities/webhook.py +18 -0
  5. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/packtools/template_model.py +3 -2
  6. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/tests/apis/test_model_deployment.py +35 -1
  7. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/tests/apis/test_webhook.py +57 -0
  8. {fiddler-client-3.0.2 → fiddler_client-3.0.4/fiddler_client.egg-info}/PKG-INFO +1 -1
  9. fiddler-client-3.0.2/fiddler/VERSION +0 -1
  10. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/LICENSE.txt +0 -0
  11. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/MANIFEST.in +0 -0
  12. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/PUBLIC.md +0 -0
  13. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/README.md +0 -0
  14. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/__init__.py +0 -0
  15. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/configs.py +0 -0
  16. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/connection.py +0 -0
  17. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/constants/__init__.py +0 -0
  18. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/constants/alert_rule.py +0 -0
  19. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/constants/baseline.py +0 -0
  20. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/constants/common.py +0 -0
  21. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/constants/dataset.py +0 -0
  22. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/constants/events.py +0 -0
  23. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/constants/job.py +0 -0
  24. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/constants/model.py +0 -0
  25. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/constants/model_deployment.py +0 -0
  26. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/constants/xai.py +0 -0
  27. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/decorators.py +0 -0
  28. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/entities/__init__.py +0 -0
  29. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/entities/alert_record.py +0 -0
  30. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/entities/alert_rule.py +0 -0
  31. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/entities/base.py +0 -0
  32. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/entities/baseline.py +0 -0
  33. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/entities/custom_expression.py +0 -0
  34. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/entities/dataset.py +0 -0
  35. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/entities/events.py +0 -0
  36. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/entities/file.py +0 -0
  37. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/entities/job.py +0 -0
  38. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/entities/model.py +0 -0
  39. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/entities/model_artifact.py +0 -0
  40. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/entities/organization.py +0 -0
  41. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/entities/project.py +0 -0
  42. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/entities/surrogate.py +0 -0
  43. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/entities/user.py +0 -0
  44. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/entities/xai.py +0 -0
  45. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/exceptions.py +0 -0
  46. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/libs/__init__.py +0 -0
  47. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/libs/http_client.py +0 -0
  48. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/libs/json_encoder.py +0 -0
  49. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/libs/semver.py +0 -0
  50. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/packtools/__init__.py +0 -0
  51. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/packtools/gem.py +0 -0
  52. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/packtools/keras_ig_helpers.py +0 -0
  53. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/packtools/project_attributions_helpers.py +0 -0
  54. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/schemas/__init__.py +0 -0
  55. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/schemas/alert_record.py +0 -0
  56. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/schemas/alert_rule.py +0 -0
  57. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/schemas/base.py +0 -0
  58. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/schemas/baseline.py +0 -0
  59. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/schemas/custom_expression.py +0 -0
  60. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/schemas/custom_features.py +0 -0
  61. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/schemas/dataset.py +0 -0
  62. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/schemas/events.py +0 -0
  63. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/schemas/file.py +0 -0
  64. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/schemas/filter_query.py +0 -0
  65. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/schemas/job.py +0 -0
  66. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/schemas/model.py +0 -0
  67. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/schemas/model_deployment.py +0 -0
  68. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/schemas/model_schema.py +0 -0
  69. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/schemas/model_spec.py +0 -0
  70. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/schemas/model_task_params.py +0 -0
  71. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/schemas/organization.py +0 -0
  72. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/schemas/project.py +0 -0
  73. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/schemas/response.py +0 -0
  74. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/schemas/server_info.py +0 -0
  75. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/schemas/user.py +0 -0
  76. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/schemas/webhook.py +0 -0
  77. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/schemas/xai.py +0 -0
  78. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/schemas/xai_params.py +0 -0
  79. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/tests/__init__.py +0 -0
  80. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/tests/apis/__init__.py +0 -0
  81. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/tests/apis/test_alert_record.py +0 -0
  82. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/tests/apis/test_alert_rule.py +0 -0
  83. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/tests/apis/test_baseline.py +0 -0
  84. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/tests/apis/test_custom_metric.py +0 -0
  85. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/tests/apis/test_dataset.py +0 -0
  86. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/tests/apis/test_events.py +0 -0
  87. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/tests/apis/test_files.py +0 -0
  88. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/tests/apis/test_generate_model.py +0 -0
  89. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/tests/apis/test_job.py +0 -0
  90. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/tests/apis/test_mixin.py +0 -0
  91. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/tests/apis/test_model.py +0 -0
  92. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/tests/apis/test_model_artifact.py +0 -0
  93. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/tests/apis/test_model_surrogate.py +0 -0
  94. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/tests/apis/test_project.py +0 -0
  95. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/tests/apis/test_segment.py +0 -0
  96. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/tests/apis/test_xai.py +0 -0
  97. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/tests/conftest.py +0 -0
  98. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/tests/constants.py +0 -0
  99. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/tests/test_connection.py +0 -0
  100. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/tests/test_json_encoder.py +0 -0
  101. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/tests/test_logger.py +0 -0
  102. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/tests/test_utils.py +0 -0
  103. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/tests/utils.py +0 -0
  104. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/utils/__init__.py +0 -0
  105. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/utils/helpers.py +0 -0
  106. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/utils/logger.py +0 -0
  107. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/utils/model_generator.py +0 -0
  108. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/utils/validations.py +0 -0
  109. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/utils/version.py +0 -0
  110. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler/version.py +0 -0
  111. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler_client.egg-info/SOURCES.txt +0 -0
  112. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler_client.egg-info/dependency_links.txt +0 -0
  113. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler_client.egg-info/requires.txt +0 -0
  114. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/fiddler_client.egg-info/top_level.txt +0 -0
  115. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/setup.cfg +0 -0
  116. {fiddler-client-3.0.2 → fiddler_client-3.0.4}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fiddler-client
3
- Version: 3.0.2
3
+ Version: 3.0.4
4
4
  Summary: Python client for Fiddler Platform
5
5
  Home-page: https://fiddler.ai
6
6
  Author: Fiddler Labs
@@ -0,0 +1 @@
1
+ 3.0.4
@@ -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) -> None:
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:
@@ -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]:
@@ -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
- from packtools.keras_ig_helpers import ComputeGradientsKerasTF2
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(
@@ -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
- model_deployment.update()
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
 
@@ -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.0.2
3
+ Version: 3.0.4
4
4
  Summary: Python client for Fiddler Platform
5
5
  Home-page: https://fiddler.ai
6
6
  Author: Fiddler Labs
@@ -1 +0,0 @@
1
- 3.0.2
File without changes
File without changes
File without changes
File without changes