fiddler-client 3.0.0.dev13__tar.gz → 3.0.0.dev15__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 (120) hide show
  1. fiddler-client-3.0.0.dev15/PKG-INFO +45 -0
  2. fiddler-client-3.0.0.dev15/PUBLIC.md +22 -0
  3. fiddler-client-3.0.0.dev15/fiddler/VERSION +1 -0
  4. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/events.py +51 -16
  5. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/custom_features.py +30 -29
  6. fiddler-client-3.0.0.dev15/fiddler/schemas/model_spec.py +32 -0
  7. fiddler-client-3.0.0.dev15/fiddler_client.egg-info/PKG-INFO +45 -0
  8. fiddler-client-3.0.0.dev13/PKG-INFO +0 -538
  9. fiddler-client-3.0.0.dev13/PUBLIC.md +0 -515
  10. fiddler-client-3.0.0.dev13/fiddler/VERSION +0 -1
  11. fiddler-client-3.0.0.dev13/fiddler/schemas/model_spec.py +0 -30
  12. fiddler-client-3.0.0.dev13/fiddler_client.egg-info/PKG-INFO +0 -538
  13. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/LICENSE.txt +0 -0
  14. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/MANIFEST.in +0 -0
  15. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/README.md +0 -0
  16. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/__init__.py +0 -0
  17. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/configs.py +0 -0
  18. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/connection.py +0 -0
  19. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/constants/__init__.py +0 -0
  20. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/constants/alert_rule.py +0 -0
  21. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/constants/baseline.py +0 -0
  22. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/constants/common.py +0 -0
  23. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/constants/dataset.py +0 -0
  24. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/constants/events.py +0 -0
  25. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/constants/job.py +0 -0
  26. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/constants/model.py +0 -0
  27. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/constants/model_deployment.py +0 -0
  28. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/constants/xai.py +0 -0
  29. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/decorators.py +0 -0
  30. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/__init__.py +0 -0
  31. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/alert_record.py +0 -0
  32. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/alert_rule.py +0 -0
  33. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/base.py +0 -0
  34. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/baseline.py +0 -0
  35. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/custom_expression.py +0 -0
  36. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/dataset.py +0 -0
  37. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/file.py +0 -0
  38. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/job.py +0 -0
  39. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/model.py +0 -0
  40. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/model_artifact.py +0 -0
  41. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/model_deployment.py +0 -0
  42. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/organization.py +0 -0
  43. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/project.py +0 -0
  44. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/surrogate.py +0 -0
  45. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/user.py +0 -0
  46. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/webhook.py +0 -0
  47. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/entities/xai.py +0 -0
  48. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/exceptions.py +0 -0
  49. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/libs/__init__.py +0 -0
  50. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/libs/http_client.py +0 -0
  51. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/libs/json_encoder.py +0 -0
  52. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/libs/semver.py +0 -0
  53. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/packtools/__init__.py +0 -0
  54. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/packtools/gem.py +0 -0
  55. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/packtools/keras_ig_helpers.py +0 -0
  56. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/packtools/project_attributions_helpers.py +0 -0
  57. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/packtools/template_model.py +0 -0
  58. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/__init__.py +0 -0
  59. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/alert_record.py +0 -0
  60. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/alert_rule.py +0 -0
  61. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/base.py +0 -0
  62. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/baseline.py +0 -0
  63. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/custom_expression.py +0 -0
  64. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/dataset.py +0 -0
  65. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/events.py +0 -0
  66. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/file.py +0 -0
  67. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/filter_query.py +0 -0
  68. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/job.py +0 -0
  69. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/model.py +0 -0
  70. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/model_deployment.py +0 -0
  71. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/model_schema.py +0 -0
  72. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/model_task_params.py +0 -0
  73. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/organization.py +0 -0
  74. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/project.py +0 -0
  75. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/response.py +0 -0
  76. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/server_info.py +0 -0
  77. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/user.py +0 -0
  78. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/webhook.py +0 -0
  79. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/xai.py +0 -0
  80. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/schemas/xai_params.py +0 -0
  81. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/__init__.py +0 -0
  82. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/__init__.py +0 -0
  83. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/test_alert_record.py +0 -0
  84. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/test_alert_rule.py +0 -0
  85. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/test_baseline.py +0 -0
  86. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/test_custom_metric.py +0 -0
  87. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/test_dataset.py +0 -0
  88. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/test_events.py +0 -0
  89. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/test_files.py +0 -0
  90. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/test_generate_model.py +0 -0
  91. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/test_job.py +0 -0
  92. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/test_mixin.py +0 -0
  93. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/test_model.py +0 -0
  94. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/test_model_artifact.py +0 -0
  95. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/test_model_deployment.py +0 -0
  96. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/test_model_surrogate.py +0 -0
  97. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/test_project.py +0 -0
  98. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/test_segment.py +0 -0
  99. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/test_webhook.py +0 -0
  100. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/apis/test_xai.py +0 -0
  101. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/conftest.py +0 -0
  102. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/constants.py +0 -0
  103. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/test_connection.py +0 -0
  104. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/test_json_encoder.py +0 -0
  105. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/test_logger.py +0 -0
  106. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/test_utils.py +0 -0
  107. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/tests/utils.py +0 -0
  108. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/utils/__init__.py +0 -0
  109. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/utils/helpers.py +0 -0
  110. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/utils/logger.py +0 -0
  111. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/utils/model_generator.py +0 -0
  112. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/utils/validations.py +0 -0
  113. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/utils/version.py +0 -0
  114. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler/version.py +0 -0
  115. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler_client.egg-info/SOURCES.txt +0 -0
  116. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler_client.egg-info/dependency_links.txt +0 -0
  117. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler_client.egg-info/requires.txt +0 -0
  118. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/fiddler_client.egg-info/top_level.txt +0 -0
  119. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/setup.cfg +0 -0
  120. {fiddler-client-3.0.0.dev13 → fiddler-client-3.0.0.dev15}/setup.py +0 -0
@@ -0,0 +1,45 @@
1
+ Metadata-Version: 2.1
2
+ Name: fiddler-client
3
+ Version: 3.0.0.dev15
4
+ Summary: Python client for Fiddler Platform
5
+ Home-page: https://fiddler.ai
6
+ Author: Fiddler Labs
7
+ Classifier: Programming Language :: Python :: 3
8
+ Classifier: License :: OSI Approved :: Apache Software License
9
+ Classifier: Operating System :: OS Independent
10
+ Requires-Python: >3.8.0
11
+ Description-Content-Type: text/markdown
12
+ License-File: LICENSE.txt
13
+ Requires-Dist: pip>=21.0
14
+ Requires-Dist: requests<3
15
+ Requires-Dist: requests-toolbelt
16
+ Requires-Dist: pandas>=1.2.5
17
+ Requires-Dist: pydantic<2,>=1.9.0
18
+ Requires-Dist: deprecated==1.2.13
19
+ Requires-Dist: tqdm
20
+ Requires-Dist: simplejson>=3.17.0
21
+ Requires-Dist: pyarrow>=7.0.0
22
+ Requires-Dist: pyyaml
23
+
24
+ Fiddler Client
25
+ =============
26
+
27
+ Python client for interacting with Fiddler. Provides a user-friendly interface to our REST API and enables event
28
+ publishing for use with our monitoring features.
29
+
30
+ Requirements
31
+ ------------
32
+ Requires Python >= Python-3.6.3 and pip >= 19.0
33
+
34
+ Installation
35
+ ------------
36
+
37
+ $ pip3 install fiddler-client
38
+
39
+ API Example Usage
40
+ -------------
41
+ Documentation for the API can be found [here](https://docs.fiddler.ai/reference/about-the-fiddler-client). For examples of interacting with our APIs, please check out our [Quick Start Guide](https://docs.fiddler.ai/docs/quick-start) as well as the notebooks found on our [Examples Github](https://github.com/fiddler-labs/fiddler-examples).
42
+
43
+ Version History
44
+ -------------
45
+ Version history is available on [Fiddler documentation page](https://docs.fiddler.ai/page/python-client-version-history).
@@ -0,0 +1,22 @@
1
+ Fiddler Client
2
+ =============
3
+
4
+ Python client for interacting with Fiddler. Provides a user-friendly interface to our REST API and enables event
5
+ publishing for use with our monitoring features.
6
+
7
+ Requirements
8
+ ------------
9
+ Requires Python >= Python-3.6.3 and pip >= 19.0
10
+
11
+ Installation
12
+ ------------
13
+
14
+ $ pip3 install fiddler-client
15
+
16
+ API Example Usage
17
+ -------------
18
+ Documentation for the API can be found [here](https://docs.fiddler.ai/reference/about-the-fiddler-client). For examples of interacting with our APIs, please check out our [Quick Start Guide](https://docs.fiddler.ai/docs/quick-start) as well as the notebooks found on our [Examples Github](https://github.com/fiddler-labs/fiddler-examples).
19
+
20
+ Version History
21
+ -------------
22
+ Version history is available on [Fiddler documentation page](https://docs.fiddler.ai/page/python-client-version-history).
@@ -0,0 +1 @@
1
+ 3.0.0.dev15
@@ -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'])
@@ -1,4 +1,4 @@
1
- from typing import Any, Dict, List, Optional, Type, TypeVar
1
+ from typing import Any, Dict, List, Optional, Type, TypeVar, Literal
2
2
 
3
3
  from pydantic import BaseModel, validator
4
4
 
@@ -10,18 +10,12 @@ CustomFeatureTypeVar = TypeVar('CustomFeatureTypeVar', bound='CustomFeature')
10
10
 
11
11
  class CustomFeature(BaseModel):
12
12
  name: str
13
- type: CustomFeatureType
14
- n_clusters: Optional[int] = DEFAULT_NUM_CLUSTERS
15
- centroids: Optional[List] = None
16
-
17
- @validator('n_clusters')
18
- def validate_n_clusters(cls, value: int) -> int: # noqa: N805
19
- if value < 0:
20
- raise ValueError('n_clusters must be greater than 0')
21
- return value
13
+ type: Any
22
14
 
23
15
  class Config:
24
16
  allow_mutation = False
17
+ use_enum_values = True
18
+ discriminator = 'type'
25
19
 
26
20
  @classmethod
27
21
  def from_columns(
@@ -53,12 +47,13 @@ class CustomFeature(BaseModel):
53
47
  return_dict: Dict[str, Any] = {
54
48
  'name': self.name,
55
49
  'type': self.type.value,
56
- 'n_clusters': self.n_clusters,
57
50
  }
58
51
  if isinstance(self, Multivariate):
59
52
  return_dict['columns'] = self.columns
53
+ return_dict['n_clusters'] = self.n_clusters
60
54
  elif isinstance(self, VectorFeature):
61
55
  return_dict['column'] = self.column
56
+ return_dict['n_clusters'] = self.n_clusters
62
57
  if isinstance(self, (ImageEmbedding, TextEmbedding)):
63
58
  return_dict['source_column'] = self.source_column
64
59
  if isinstance(self, TextEmbedding):
@@ -74,7 +69,9 @@ class CustomFeature(BaseModel):
74
69
 
75
70
 
76
71
  class Multivariate(CustomFeature):
77
- type: CustomFeatureType = CustomFeatureType.FROM_COLUMNS
72
+ type: Literal['FROM_COLUMNS'] = CustomFeatureType.FROM_COLUMNS.value
73
+ n_clusters: Optional[int] = DEFAULT_NUM_CLUSTERS
74
+ centroids: Optional[List] = None
78
75
  columns: List[str]
79
76
  monitor_components: bool = False
80
77
 
@@ -84,22 +81,31 @@ class Multivariate(CustomFeature):
84
81
  raise ValueError('Multivariate columns must be greater than 1')
85
82
  return value
86
83
 
84
+ @validator('n_clusters')
85
+ def validate_n_clusters(cls, value: int) -> int: # noqa: N805
86
+ if value < 0:
87
+ raise ValueError('n_clusters must be greater than 0')
88
+ return value
89
+
87
90
 
88
91
  class VectorFeature(CustomFeature):
89
- type: CustomFeatureType = CustomFeatureType.FROM_VECTOR
90
- source_column: Optional[str] = None
92
+ type: Literal['FROM_VECTOR'] = CustomFeatureType.FROM_VECTOR.value
93
+ n_clusters: Optional[int] = DEFAULT_NUM_CLUSTERS
94
+ centroids: Optional[List] = None
91
95
  column: str
92
96
 
97
+ @validator('n_clusters')
98
+ def validate_n_clusters(cls, value: int) -> int: # noqa: N805
99
+ if value < 0:
100
+ raise ValueError('n_clusters must be greater than 0')
101
+ return value
102
+
93
103
 
94
104
  class TextEmbedding(VectorFeature):
95
- type: CustomFeatureType = CustomFeatureType.FROM_TEXT_EMBEDDING
105
+ type: Literal['FROM_TEXT_EMBEDDING'] = CustomFeatureType.FROM_TEXT_EMBEDDING.value # type: ignore
106
+ source_column: str
96
107
  n_tags: Optional[int] = DEFAULT_NUM_TAGS
97
-
98
- @validator('source_column')
99
- def validate_source_column(cls, value: str) -> str: # noqa: N805
100
- if value is None:
101
- raise ValueError('source_column must be specified')
102
- return value
108
+ tf_idf: Optional[Dict[str, List]] = None
103
109
 
104
110
  @validator('n_tags')
105
111
  def validate_n_tags(cls, value: int) -> int: # noqa: N805
@@ -109,13 +115,8 @@ class TextEmbedding(VectorFeature):
109
115
 
110
116
 
111
117
  class ImageEmbedding(VectorFeature):
112
- type: CustomFeatureType = CustomFeatureType.FROM_IMAGE_EMBEDDING
113
-
114
- @validator('source_column')
115
- def validate_source_column(cls, value: str) -> str: # noqa: N805
116
- if value is None:
117
- raise ValueError('source_column must be specified')
118
- return value
118
+ type: Literal['FROM_IMAGE_EMBEDDING'] = CustomFeatureType.FROM_IMAGE_EMBEDDING.value # type: ignore
119
+ source_column: str
119
120
 
120
121
 
121
122
  class Enrichment(CustomFeature):
@@ -134,7 +135,7 @@ class Enrichment(CustomFeature):
134
135
  """
135
136
 
136
137
  # Setting the feature type to ENRICHMENT
137
- type: CustomFeatureType = CustomFeatureType.ENRICHMENT
138
+ type: Literal['ENRICHMENT'] = CustomFeatureType.ENRICHMENT.value
138
139
 
139
140
  # List of input column names used to generate the enrichment
140
141
  columns: List[str]
@@ -0,0 +1,32 @@
1
+ from typing import List, Union
2
+
3
+ from pydantic import BaseModel, Field
4
+
5
+ from fiddler.schemas.custom_features import Multivariate, VectorFeature, TextEmbedding, ImageEmbedding, Enrichment
6
+
7
+
8
+ class ModelSpec(BaseModel):
9
+ """Model spec defines how model columns are used along with model task"""
10
+
11
+ schema_version: int = 1
12
+ """Schema version"""
13
+
14
+ inputs: List[str] = Field(default_factory=list)
15
+ """Feature columns"""
16
+
17
+ outputs: List[str] = Field(default_factory=list)
18
+ """Prediction columns"""
19
+
20
+ targets: List[str] = Field(default_factory=list)
21
+ """Label columns"""
22
+
23
+ decisions: List[str] = Field(default_factory=list)
24
+ """Decisions columns"""
25
+
26
+ metadata: List[str] = Field(default_factory=list)
27
+ """Metadata columns"""
28
+
29
+ custom_features: List[Union[Multivariate, VectorFeature, TextEmbedding, ImageEmbedding, Enrichment]] = Field(
30
+ default_factory=list
31
+ )
32
+ """Custom feature definitions"""
@@ -0,0 +1,45 @@
1
+ Metadata-Version: 2.1
2
+ Name: fiddler-client
3
+ Version: 3.0.0.dev15
4
+ Summary: Python client for Fiddler Platform
5
+ Home-page: https://fiddler.ai
6
+ Author: Fiddler Labs
7
+ Classifier: Programming Language :: Python :: 3
8
+ Classifier: License :: OSI Approved :: Apache Software License
9
+ Classifier: Operating System :: OS Independent
10
+ Requires-Python: >3.8.0
11
+ Description-Content-Type: text/markdown
12
+ License-File: LICENSE.txt
13
+ Requires-Dist: pip>=21.0
14
+ Requires-Dist: requests<3
15
+ Requires-Dist: requests-toolbelt
16
+ Requires-Dist: pandas>=1.2.5
17
+ Requires-Dist: pydantic<2,>=1.9.0
18
+ Requires-Dist: deprecated==1.2.13
19
+ Requires-Dist: tqdm
20
+ Requires-Dist: simplejson>=3.17.0
21
+ Requires-Dist: pyarrow>=7.0.0
22
+ Requires-Dist: pyyaml
23
+
24
+ Fiddler Client
25
+ =============
26
+
27
+ Python client for interacting with Fiddler. Provides a user-friendly interface to our REST API and enables event
28
+ publishing for use with our monitoring features.
29
+
30
+ Requirements
31
+ ------------
32
+ Requires Python >= Python-3.6.3 and pip >= 19.0
33
+
34
+ Installation
35
+ ------------
36
+
37
+ $ pip3 install fiddler-client
38
+
39
+ API Example Usage
40
+ -------------
41
+ Documentation for the API can be found [here](https://docs.fiddler.ai/reference/about-the-fiddler-client). For examples of interacting with our APIs, please check out our [Quick Start Guide](https://docs.fiddler.ai/docs/quick-start) as well as the notebooks found on our [Examples Github](https://github.com/fiddler-labs/fiddler-examples).
42
+
43
+ Version History
44
+ -------------
45
+ Version history is available on [Fiddler documentation page](https://docs.fiddler.ai/page/python-client-version-history).