fiddler-client 3.0.0.dev10__tar.gz → 3.1.0.dev1__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.
- {fiddler-client-3.0.0.dev10/fiddler_client.egg-info → fiddler-client-3.1.0.dev1}/PKG-INFO +1 -1
- fiddler-client-3.1.0.dev1/fiddler/VERSION +1 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/__init__.py +23 -6
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/connection.py +15 -13
- fiddler-client-3.1.0.dev1/fiddler/constants/baseline.py +15 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/entities/baseline.py +13 -12
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/entities/events.py +20 -23
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/entities/model.py +70 -18
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/entities/model_deployment.py +1 -1
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/schemas/baseline.py +2 -2
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/schemas/model.py +1 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/tests/apis/test_baseline.py +4 -4
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/tests/apis/test_events.py +39 -12
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/tests/apis/test_generate_model.py +6 -1
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/tests/apis/test_model.py +115 -6
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/tests/apis/test_xai.py +2 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/tests/conftest.py +1 -1
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/tests/constants.py +1 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1/fiddler_client.egg-info}/PKG-INFO +1 -1
- fiddler-client-3.0.0.dev10/fiddler/VERSION +0 -1
- fiddler-client-3.0.0.dev10/fiddler/constants/baseline.py +0 -18
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/LICENSE.txt +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/MANIFEST.in +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/PUBLIC.md +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/README.md +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/configs.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/constants/__init__.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/constants/alert_rule.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/constants/common.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/constants/dataset.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/constants/events.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/constants/job.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/constants/model.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/constants/model_deployment.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/constants/xai.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/decorators.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/entities/__init__.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/entities/alert_record.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/entities/alert_rule.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/entities/base.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/entities/custom_expression.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/entities/dataset.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/entities/file.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/entities/job.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/entities/model_artifact.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/entities/organization.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/entities/project.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/entities/surrogate.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/entities/user.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/entities/webhook.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/entities/xai.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/exceptions.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/libs/__init__.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/libs/http_client.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/libs/json_encoder.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/libs/semver.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/packtools/__init__.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/packtools/gem.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/packtools/keras_ig_helpers.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/packtools/project_attributions_helpers.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/packtools/template_model.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/schemas/__init__.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/schemas/alert_record.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/schemas/alert_rule.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/schemas/base.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/schemas/custom_expression.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/schemas/custom_features.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/schemas/dataset.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/schemas/events.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/schemas/file.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/schemas/filter_query.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/schemas/job.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/schemas/model_deployment.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/schemas/model_schema.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/schemas/model_spec.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/schemas/model_task_params.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/schemas/organization.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/schemas/project.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/schemas/response.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/schemas/server_info.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/schemas/user.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/schemas/webhook.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/schemas/xai.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/schemas/xai_params.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/tests/__init__.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/tests/apis/__init__.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/tests/apis/test_alert_record.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/tests/apis/test_alert_rule.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/tests/apis/test_custom_metric.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/tests/apis/test_dataset.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/tests/apis/test_files.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/tests/apis/test_job.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/tests/apis/test_mixin.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/tests/apis/test_model_artifact.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/tests/apis/test_model_deployment.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/tests/apis/test_model_surrogate.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/tests/apis/test_project.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/tests/apis/test_segment.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/tests/apis/test_webhook.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/tests/test_connection.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/tests/test_json_encoder.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/tests/test_logger.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/tests/test_utils.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/tests/utils.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/utils/__init__.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/utils/helpers.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/utils/logger.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/utils/model_generator.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/utils/validations.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/utils/version.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/version.py +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler_client.egg-info/SOURCES.txt +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler_client.egg-info/dependency_links.txt +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler_client.egg-info/requires.txt +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler_client.egg-info/top_level.txt +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/setup.cfg +0 -0
- {fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/setup.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.1.0.dev1
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
1
3
|
from fiddler.connection import Connection, ConnectionMixin, init # noqa
|
|
2
4
|
from fiddler.constants.alert_rule import ( # noqa
|
|
3
5
|
AlertCondition,
|
|
@@ -5,7 +7,7 @@ from fiddler.constants.alert_rule import ( # noqa
|
|
|
5
7
|
CompareTo,
|
|
6
8
|
Priority,
|
|
7
9
|
)
|
|
8
|
-
from fiddler.constants.baseline import BaselineType,
|
|
10
|
+
from fiddler.constants.baseline import BaselineType, WindowBinSize # noqa
|
|
9
11
|
from fiddler.constants.dataset import EnvType # noqa
|
|
10
12
|
from fiddler.constants.job import JobStatus # noqa
|
|
11
13
|
from fiddler.constants.model import ( # noqa
|
|
@@ -19,14 +21,14 @@ from fiddler.constants.model_deployment import ArtifactType, DeploymentType # n
|
|
|
19
21
|
from fiddler.constants.xai import ExplainMethod # noqa
|
|
20
22
|
from fiddler.entities.alert_record import AlertRecord # noqa
|
|
21
23
|
from fiddler.entities.alert_rule import AlertRule # noqa
|
|
22
|
-
from fiddler.entities.baseline import Baseline # noqa
|
|
24
|
+
from fiddler.entities.baseline import Baseline, BaselineCompact # noqa
|
|
23
25
|
from fiddler.entities.custom_expression import CustomMetric, Segment # noqa
|
|
24
|
-
from fiddler.entities.dataset import Dataset # noqa
|
|
26
|
+
from fiddler.entities.dataset import Dataset, DatasetCompact # noqa
|
|
25
27
|
from fiddler.entities.file import File # noqa
|
|
26
28
|
from fiddler.entities.job import Job # noqa
|
|
27
|
-
from fiddler.entities.model import Model # noqa
|
|
29
|
+
from fiddler.entities.model import Model, ModelCompact # noqa
|
|
28
30
|
from fiddler.entities.model_deployment import ModelDeployment # noqa
|
|
29
|
-
from fiddler.entities.project import Project # noqa
|
|
31
|
+
from fiddler.entities.project import Project, ProjectCompact # noqa
|
|
30
32
|
from fiddler.entities.webhook import Webhook # noqa
|
|
31
33
|
from fiddler.exceptions import ( # noqa
|
|
32
34
|
ApiError,
|
|
@@ -62,11 +64,22 @@ from fiddler.schemas.xai_params import XaiParams # noqa
|
|
|
62
64
|
from fiddler.utils.logger import set_logging # noqa
|
|
63
65
|
from fiddler.version import __version__ # noqa
|
|
64
66
|
|
|
67
|
+
# Global connection object
|
|
68
|
+
conn: Connection | None = None
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def set_conn(conn_: Connection) -> None:
|
|
72
|
+
"""Set global conn variable"""
|
|
73
|
+
global conn
|
|
74
|
+
conn = conn_
|
|
75
|
+
|
|
76
|
+
|
|
65
77
|
__all__ = [
|
|
66
78
|
'__version__',
|
|
67
79
|
'Connection',
|
|
68
80
|
'ConnectionMixin',
|
|
69
81
|
'init',
|
|
82
|
+
'conn',
|
|
70
83
|
# Constants
|
|
71
84
|
'AlertCondition',
|
|
72
85
|
'ArtifactStatus',
|
|
@@ -82,7 +95,7 @@ __all__ = [
|
|
|
82
95
|
'ModelInputType',
|
|
83
96
|
'ModelTask',
|
|
84
97
|
'Priority',
|
|
85
|
-
'
|
|
98
|
+
'WindowBinSize',
|
|
86
99
|
# Schemas
|
|
87
100
|
'CustomFeature',
|
|
88
101
|
'DatasetDataSource',
|
|
@@ -103,13 +116,17 @@ __all__ = [
|
|
|
103
116
|
'AlertRecord',
|
|
104
117
|
'AlertRule',
|
|
105
118
|
'Baseline',
|
|
119
|
+
'BaselineCompact',
|
|
106
120
|
'Dataset',
|
|
121
|
+
'DatasetCompact',
|
|
107
122
|
'CustomMetric',
|
|
108
123
|
'File',
|
|
109
124
|
'Job',
|
|
110
125
|
'Model',
|
|
126
|
+
'ModelCompact',
|
|
111
127
|
'ModelDeployment',
|
|
112
128
|
'Project',
|
|
129
|
+
'ProjectCompact',
|
|
113
130
|
'Segment',
|
|
114
131
|
'Webhook',
|
|
115
132
|
# Exceptions
|
|
@@ -15,9 +15,6 @@ from fiddler.version import __version__
|
|
|
15
15
|
|
|
16
16
|
logger = get_logger(__name__)
|
|
17
17
|
|
|
18
|
-
# Global connection object
|
|
19
|
-
connection: Connection | None = None
|
|
20
|
-
|
|
21
18
|
|
|
22
19
|
class Connection:
|
|
23
20
|
def __init__( # pylint: disable=too-many-arguments
|
|
@@ -123,35 +120,37 @@ class Connection:
|
|
|
123
120
|
|
|
124
121
|
class ConnectionMixin:
|
|
125
122
|
@classmethod
|
|
126
|
-
def
|
|
123
|
+
def _conn(cls) -> Connection:
|
|
127
124
|
"""Fiddler connection instance"""
|
|
128
|
-
|
|
129
|
-
|
|
125
|
+
from fiddler import conn
|
|
126
|
+
|
|
127
|
+
assert conn is not None
|
|
128
|
+
return conn
|
|
130
129
|
|
|
131
130
|
@classmethod
|
|
132
131
|
def _client(cls) -> RequestClient:
|
|
133
132
|
"""Request client instance"""
|
|
134
|
-
return cls.
|
|
133
|
+
return cls._conn().client
|
|
135
134
|
|
|
136
135
|
@property
|
|
137
136
|
def organization_name(self) -> str:
|
|
138
137
|
"""Organization name property"""
|
|
139
|
-
return self.
|
|
138
|
+
return self._conn().server_info.organization.name
|
|
140
139
|
|
|
141
140
|
@property
|
|
142
141
|
def organization_id(self) -> UUID:
|
|
143
142
|
"""Organization id property"""
|
|
144
|
-
return self.
|
|
143
|
+
return self._conn().server_info.organization.id
|
|
145
144
|
|
|
146
145
|
@classmethod
|
|
147
146
|
def get_organization_name(cls) -> str:
|
|
148
147
|
"""Organization name"""
|
|
149
|
-
return cls.
|
|
148
|
+
return cls._conn().server_info.organization.name
|
|
150
149
|
|
|
151
150
|
@classmethod
|
|
152
151
|
def get_organization_id(cls) -> UUID:
|
|
153
152
|
"""Organization id"""
|
|
154
|
-
return cls.
|
|
153
|
+
return cls._conn().server_info.organization.id
|
|
155
154
|
|
|
156
155
|
|
|
157
156
|
def init( # pylint: disable=too-many-arguments
|
|
@@ -173,8 +172,9 @@ def init( # pylint: disable=too-many-arguments
|
|
|
173
172
|
:param validate: Whether to validate the server/client version compatibility.
|
|
174
173
|
Some functionalities might not work if this is turned off.
|
|
175
174
|
"""
|
|
176
|
-
|
|
177
|
-
|
|
175
|
+
from fiddler import set_conn
|
|
176
|
+
|
|
177
|
+
conn = Connection(
|
|
178
178
|
url=url,
|
|
179
179
|
token=token,
|
|
180
180
|
proxies=proxies,
|
|
@@ -182,3 +182,5 @@ def init( # pylint: disable=too-many-arguments
|
|
|
182
182
|
verify=verify,
|
|
183
183
|
validate=validate,
|
|
184
184
|
)
|
|
185
|
+
|
|
186
|
+
set_conn(conn_=conn)
|
|
@@ -5,6 +5,7 @@ from datetime import datetime
|
|
|
5
5
|
from typing import Any, Iterator
|
|
6
6
|
from uuid import UUID
|
|
7
7
|
|
|
8
|
+
from fiddler.constants.baseline import WindowBinSize
|
|
8
9
|
from fiddler.constants.dataset import EnvType
|
|
9
10
|
from fiddler.decorators import handle_api_error
|
|
10
11
|
from fiddler.entities.base import BaseEntity
|
|
@@ -28,8 +29,8 @@ class Baseline(
|
|
|
28
29
|
dataset_id: UUID | str | None = None,
|
|
29
30
|
start_time: int | None = None,
|
|
30
31
|
end_time: int | None = None,
|
|
31
|
-
|
|
32
|
-
|
|
32
|
+
offset_delta: int | None = None,
|
|
33
|
+
window_bin_size: WindowBinSize | str | None = None,
|
|
33
34
|
) -> None:
|
|
34
35
|
"""Construct a baseline instance."""
|
|
35
36
|
self.name = name
|
|
@@ -39,8 +40,8 @@ class Baseline(
|
|
|
39
40
|
self.dataset_id = dataset_id
|
|
40
41
|
self.start_time = start_time
|
|
41
42
|
self.end_time = end_time
|
|
42
|
-
self.
|
|
43
|
-
self.
|
|
43
|
+
self.offset_delta = offset_delta
|
|
44
|
+
self.window_bin_size = window_bin_size
|
|
44
45
|
|
|
45
46
|
self.id: UUID | None = None
|
|
46
47
|
self.row_count: int | None = None
|
|
@@ -73,8 +74,8 @@ class Baseline(
|
|
|
73
74
|
type_=resp_obj.type,
|
|
74
75
|
start_time=resp_obj.start_time,
|
|
75
76
|
end_time=resp_obj.end_time,
|
|
76
|
-
|
|
77
|
-
|
|
77
|
+
offset_delta=resp_obj.offset_delta,
|
|
78
|
+
window_bin_size=resp_obj.window_bin_size,
|
|
78
79
|
)
|
|
79
80
|
|
|
80
81
|
# Add remaining fields
|
|
@@ -109,8 +110,8 @@ class Baseline(
|
|
|
109
110
|
'type',
|
|
110
111
|
'start_time',
|
|
111
112
|
'end_time',
|
|
112
|
-
'
|
|
113
|
-
'
|
|
113
|
+
'offset_delta',
|
|
114
|
+
'window_bin_size',
|
|
114
115
|
'created_at',
|
|
115
116
|
'updated_at',
|
|
116
117
|
'row_count',
|
|
@@ -210,10 +211,10 @@ class Baseline(
|
|
|
210
211
|
payload['start_time'] = self.start_time
|
|
211
212
|
if self.end_time:
|
|
212
213
|
payload['end_time'] = self.end_time
|
|
213
|
-
if self.
|
|
214
|
-
payload['
|
|
215
|
-
if self.
|
|
216
|
-
payload['
|
|
214
|
+
if self.offset_delta:
|
|
215
|
+
payload['offset_delta'] = self.offset_delta
|
|
216
|
+
if self.window_bin_size:
|
|
217
|
+
payload['window_bin_size'] = self.window_bin_size
|
|
217
218
|
|
|
218
219
|
response = self._client().post(
|
|
219
220
|
url=self._get_url(),
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
import tempfile
|
|
3
4
|
from pathlib import Path
|
|
4
|
-
from typing import Any
|
|
5
|
+
from typing import Any
|
|
5
6
|
from uuid import UUID
|
|
6
7
|
|
|
7
8
|
import pandas as pd
|
|
8
9
|
from requests import Response
|
|
10
|
+
from tqdm import tqdm
|
|
9
11
|
|
|
10
12
|
from fiddler.configs import STREAM_EVENT_LIMIT
|
|
11
13
|
from fiddler.connection import ConnectionMixin
|
|
@@ -28,21 +30,6 @@ class EventPublisher(ConnectionMixin):
|
|
|
28
30
|
"""
|
|
29
31
|
self.model_id = model_id
|
|
30
32
|
|
|
31
|
-
def _get_stream_chunks(
|
|
32
|
-
self, source: pd.DataFrame | list[dict[str, Any]]
|
|
33
|
-
) -> Iterator[list[dict[str, Any]]]:
|
|
34
|
-
"""Chunk the source based on stream limit"""
|
|
35
|
-
|
|
36
|
-
for i in range(0, len(source), self.STREAM_LIMIT):
|
|
37
|
-
chunk = source[i : i + self.STREAM_LIMIT]
|
|
38
|
-
|
|
39
|
-
if isinstance(chunk, pd.DataFrame):
|
|
40
|
-
events = chunk.to_dict('records')
|
|
41
|
-
else:
|
|
42
|
-
events = chunk
|
|
43
|
-
|
|
44
|
-
yield events
|
|
45
|
-
|
|
46
33
|
@handle_api_error
|
|
47
34
|
def publish(
|
|
48
35
|
self,
|
|
@@ -56,13 +43,13 @@ class EventPublisher(ConnectionMixin):
|
|
|
56
43
|
|
|
57
44
|
:param source: one of:
|
|
58
45
|
Path or str path: path for data file.
|
|
59
|
-
|
|
60
|
-
|
|
46
|
+
dataframe: events dataframe.
|
|
47
|
+
list[dict]: list of event dicts EnvType.PRE_PRODUCTION is not supported
|
|
61
48
|
:param environment: Either EnvType.PRE_PRODUCTION or EnvType.PRODUCTION
|
|
62
49
|
:param dataset_name: Name of the dataset. Not supported for EnvType.PRODUCTION
|
|
63
50
|
:param update: flag indicating if the events are updates to previously published rows
|
|
64
51
|
|
|
65
|
-
:return: list[UUID] for list of dicts
|
|
52
|
+
:return: list[UUID] for list of dicts source and Job object for file path or dataframe source.
|
|
66
53
|
"""
|
|
67
54
|
if isinstance(source, (str, Path)):
|
|
68
55
|
return self._publish_file(
|
|
@@ -72,20 +59,30 @@ class EventPublisher(ConnectionMixin):
|
|
|
72
59
|
update=update,
|
|
73
60
|
)
|
|
74
61
|
|
|
75
|
-
if isinstance(source,
|
|
62
|
+
if isinstance(source, pd.DataFrame):
|
|
63
|
+
with tempfile.NamedTemporaryFile(suffix='.csv') as temp_file:
|
|
64
|
+
source.to_csv(temp_file.name, index=False)
|
|
65
|
+
return self._publish_file(
|
|
66
|
+
source=temp_file.name,
|
|
67
|
+
environment=environment,
|
|
68
|
+
dataset_name=dataset_name,
|
|
69
|
+
update=update,
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
elif isinstance(source, list):
|
|
76
73
|
return self._publish_stream(source=source, update=update)
|
|
77
74
|
|
|
78
75
|
raise ValueError(f'Unsupported source - {type(source)}')
|
|
79
76
|
|
|
80
77
|
def _publish_stream(
|
|
81
78
|
self,
|
|
82
|
-
source: list[dict[str, Any]]
|
|
79
|
+
source: list[dict[str, Any]],
|
|
83
80
|
update: bool = False,
|
|
84
81
|
) -> list[UUID]:
|
|
85
82
|
event_ids = []
|
|
86
|
-
for
|
|
83
|
+
for i in tqdm(range(0, len(source), self.STREAM_LIMIT)):
|
|
87
84
|
response = self._publish_call(
|
|
88
|
-
source=EventsSource(events=
|
|
85
|
+
source=EventsSource(events=source[i : i + self.STREAM_LIMIT]),
|
|
89
86
|
environment=EnvType.PRODUCTION,
|
|
90
87
|
dataset_name=None,
|
|
91
88
|
update=update,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import builtins
|
|
4
|
+
import copy
|
|
4
5
|
import typing
|
|
5
6
|
from dataclasses import dataclass
|
|
6
7
|
from datetime import datetime
|
|
@@ -52,6 +53,7 @@ class Model(
|
|
|
52
53
|
project_id: UUID | str,
|
|
53
54
|
schema: ModelSchema,
|
|
54
55
|
spec: ModelSpec,
|
|
56
|
+
version: str | None = None,
|
|
55
57
|
input_type: str = ModelInputType.TABULAR,
|
|
56
58
|
task: str = ModelTask.NOT_SET,
|
|
57
59
|
task_params: ModelTaskParams | None = None,
|
|
@@ -63,6 +65,7 @@ class Model(
|
|
|
63
65
|
) -> None:
|
|
64
66
|
"""Construct a model instance"""
|
|
65
67
|
self.name = name
|
|
68
|
+
self.version = version
|
|
66
69
|
self.project_id = project_id
|
|
67
70
|
self.schema = schema
|
|
68
71
|
self.input_type = input_type
|
|
@@ -101,6 +104,7 @@ class Model(
|
|
|
101
104
|
# Initialize
|
|
102
105
|
instance = cls(
|
|
103
106
|
name=resp_obj.name,
|
|
107
|
+
version=resp_obj.version,
|
|
104
108
|
schema=resp_obj.schema_,
|
|
105
109
|
spec=resp_obj.spec,
|
|
106
110
|
project_id=resp_obj.project.id,
|
|
@@ -141,6 +145,7 @@ class Model(
|
|
|
141
145
|
fields = [
|
|
142
146
|
'id',
|
|
143
147
|
'name',
|
|
148
|
+
'version',
|
|
144
149
|
'spec',
|
|
145
150
|
'input_type',
|
|
146
151
|
'task',
|
|
@@ -188,12 +193,20 @@ class Model(
|
|
|
188
193
|
|
|
189
194
|
@classmethod
|
|
190
195
|
@handle_api_error
|
|
191
|
-
def from_name(
|
|
196
|
+
def from_name(
|
|
197
|
+
cls,
|
|
198
|
+
name: str,
|
|
199
|
+
project_id: UUID | str,
|
|
200
|
+
version: str | None = None,
|
|
201
|
+
latest: bool = False,
|
|
202
|
+
) -> Model:
|
|
192
203
|
"""
|
|
193
204
|
Get the model instance from model name within a project.
|
|
194
205
|
|
|
195
206
|
:param name: Model name
|
|
196
207
|
:param project_id: Project identifier
|
|
208
|
+
:param version: Version name
|
|
209
|
+
:param latest: Whether to fetch the latest version of the model or first version
|
|
197
210
|
:return: Model instance
|
|
198
211
|
"""
|
|
199
212
|
_filter = QueryCondition(
|
|
@@ -207,8 +220,15 @@ class Model(
|
|
|
207
220
|
]
|
|
208
221
|
)
|
|
209
222
|
|
|
223
|
+
if version:
|
|
224
|
+
_filter.add_rule(
|
|
225
|
+
QueryRule(field='version', operator=OperatorType.EQUAL, value=version)
|
|
226
|
+
)
|
|
227
|
+
|
|
228
|
+
ordering = '-created_at' if latest else 'created_at'
|
|
210
229
|
response = cls._client().get(
|
|
211
|
-
url=cls._get_url(),
|
|
230
|
+
url=cls._get_url(),
|
|
231
|
+
params={'filter': _filter.json(), 'limit': 1, 'ordering': ordering},
|
|
212
232
|
)
|
|
213
233
|
|
|
214
234
|
if response.json()['data']['total'] == 0:
|
|
@@ -219,22 +239,27 @@ class Model(
|
|
|
219
239
|
@handle_api_error
|
|
220
240
|
def create(self) -> Model:
|
|
221
241
|
"""Create a new model."""
|
|
242
|
+
payload = {
|
|
243
|
+
'name': self.name,
|
|
244
|
+
'project_id': str(self.project_id),
|
|
245
|
+
'schema': self.schema.dict(),
|
|
246
|
+
'spec': self.spec.dict(),
|
|
247
|
+
'input_type': self.input_type,
|
|
248
|
+
'task': self.task,
|
|
249
|
+
'task_params': self.task_params.dict(),
|
|
250
|
+
'description': self.description,
|
|
251
|
+
'event_id_col': self.event_id_col,
|
|
252
|
+
'event_ts_col': self.event_ts_col,
|
|
253
|
+
'event_ts_format': self.event_ts_format,
|
|
254
|
+
'xai_params': self.xai_params.dict(),
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
if self.version:
|
|
258
|
+
payload['version'] = self.version
|
|
259
|
+
|
|
222
260
|
response = self._client().post(
|
|
223
261
|
url=self._get_url(),
|
|
224
|
-
data=
|
|
225
|
-
'name': self.name,
|
|
226
|
-
'project_id': str(self.project_id),
|
|
227
|
-
'schema': self.schema.dict(),
|
|
228
|
-
'spec': self.spec.dict(),
|
|
229
|
-
'input_type': self.input_type,
|
|
230
|
-
'task': self.task,
|
|
231
|
-
'task_params': self.task_params.dict(),
|
|
232
|
-
'description': self.description,
|
|
233
|
-
'event_id_col': self.event_id_col,
|
|
234
|
-
'event_ts_col': self.event_ts_col,
|
|
235
|
-
'event_ts_format': self.event_ts_format,
|
|
236
|
-
'xai_params': self.xai_params.dict(),
|
|
237
|
-
},
|
|
262
|
+
data=payload,
|
|
238
263
|
)
|
|
239
264
|
self._refresh_from_response(response=response)
|
|
240
265
|
return self
|
|
@@ -243,6 +268,7 @@ class Model(
|
|
|
243
268
|
def update(self) -> None:
|
|
244
269
|
"""Update an existing model."""
|
|
245
270
|
body: dict[str, Any] = {
|
|
271
|
+
'version': self.version,
|
|
246
272
|
'xai_params': self.xai_params.dict(),
|
|
247
273
|
'description': self.description,
|
|
248
274
|
'event_id_col': self.event_id_col,
|
|
@@ -256,13 +282,13 @@ class Model(
|
|
|
256
282
|
@classmethod
|
|
257
283
|
@handle_api_error
|
|
258
284
|
def list(
|
|
259
|
-
cls,
|
|
260
|
-
project_id: UUID | str,
|
|
285
|
+
cls, project_id: UUID | str, name: str | None = None
|
|
261
286
|
) -> Iterator[ModelCompact]:
|
|
262
287
|
"""
|
|
263
288
|
Get a list of all models with the given filters
|
|
264
289
|
|
|
265
290
|
:param project_id: Project identifier
|
|
291
|
+
:param name: Model name, use this for listing all the versions of a model
|
|
266
292
|
:return: ModelCompact iterator
|
|
267
293
|
"""
|
|
268
294
|
_filter = QueryCondition(
|
|
@@ -273,11 +299,34 @@ class Model(
|
|
|
273
299
|
]
|
|
274
300
|
)
|
|
275
301
|
|
|
302
|
+
if name:
|
|
303
|
+
_filter.add_rule(
|
|
304
|
+
QueryRule(field='name', operator=OperatorType.EQUAL, value=name)
|
|
305
|
+
)
|
|
306
|
+
|
|
276
307
|
params = {'filter': _filter.json()}
|
|
277
308
|
|
|
278
309
|
for model in cls._paginate(url=cls._get_url(), params=params):
|
|
279
310
|
yield ModelCompact(id=model['id'], name=model['name'])
|
|
280
311
|
|
|
312
|
+
def duplicate(self, version: str | None = None) -> Model:
|
|
313
|
+
"""
|
|
314
|
+
Duplicate the model instance with the given version name.
|
|
315
|
+
|
|
316
|
+
This call will not save the model on server. After making changes to the model
|
|
317
|
+
instance call .create() to add the model version to Fiddler Platform.
|
|
318
|
+
|
|
319
|
+
:param version: Version name for the new instance
|
|
320
|
+
:return: Model instance
|
|
321
|
+
"""
|
|
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
|
|
329
|
+
|
|
281
330
|
@property
|
|
282
331
|
def datasets(self) -> Iterator[Dataset]:
|
|
283
332
|
"""Fetch all the datasets of this model"""
|
|
@@ -316,6 +365,7 @@ class Model(
|
|
|
316
365
|
name: str,
|
|
317
366
|
project_id: UUID | str,
|
|
318
367
|
spec: ModelSpec | None = None,
|
|
368
|
+
version: str | None = None,
|
|
319
369
|
input_type: str = ModelInputType.TABULAR,
|
|
320
370
|
task: str = ModelTask.NOT_SET,
|
|
321
371
|
task_params: ModelTaskParams | None = None,
|
|
@@ -334,6 +384,7 @@ class Model(
|
|
|
334
384
|
:param name: Model name
|
|
335
385
|
:param project_id: Project identifier
|
|
336
386
|
:param spec: ModelSpec instance
|
|
387
|
+
:param version: Model version name
|
|
337
388
|
:param input_type: Model input task type
|
|
338
389
|
:param task: Model task like Regression, Binary classification etc.
|
|
339
390
|
:param task_params: Parameters based on the task type
|
|
@@ -354,6 +405,7 @@ class Model(
|
|
|
354
405
|
|
|
355
406
|
return Model(
|
|
356
407
|
name=name,
|
|
408
|
+
version=version,
|
|
357
409
|
schema=resp_obj.schema_,
|
|
358
410
|
spec=resp_obj.spec,
|
|
359
411
|
project_id=project_id,
|
{fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/entities/model_deployment.py
RENAMED
|
@@ -110,7 +110,7 @@ class ModelDeployment(
|
|
|
110
110
|
self._refresh_from_response(response=response)
|
|
111
111
|
|
|
112
112
|
@classmethod
|
|
113
|
-
def of(cls, model_id: UUID) -> ModelDeployment:
|
|
113
|
+
def of(cls, model_id: UUID | str) -> ModelDeployment:
|
|
114
114
|
"""
|
|
115
115
|
Get model deployment instance of the given model
|
|
116
116
|
|
|
@@ -24,8 +24,8 @@ class BaselineResp(BaseModel):
|
|
|
24
24
|
type: str
|
|
25
25
|
start_time: Optional[int]
|
|
26
26
|
end_time: Optional[int]
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
offset_delta: Optional[int]
|
|
28
|
+
window_bin_size: Optional[str]
|
|
29
29
|
row_count: Optional[int]
|
|
30
30
|
|
|
31
31
|
model: ModelCompactResp
|
{fiddler-client-3.0.0.dev10 → fiddler-client-3.1.0.dev1}/fiddler/tests/apis/test_baseline.py
RENAMED
|
@@ -29,8 +29,8 @@ API_RESPONSE_200 = {
|
|
|
29
29
|
'type': 'STATIC',
|
|
30
30
|
'start_time': None,
|
|
31
31
|
'end_time': None,
|
|
32
|
-
'
|
|
33
|
-
'
|
|
32
|
+
'offset_delta': None,
|
|
33
|
+
'window_bin_size': None,
|
|
34
34
|
'row_count': 20000,
|
|
35
35
|
'model': {
|
|
36
36
|
'id': MODEL_ID,
|
|
@@ -80,8 +80,8 @@ LIST_API_RESPONSE = {
|
|
|
80
80
|
'type': 'STATIC',
|
|
81
81
|
'start_time': None,
|
|
82
82
|
'end_time': None,
|
|
83
|
-
'
|
|
84
|
-
'
|
|
83
|
+
'offset_delta': None,
|
|
84
|
+
'window_bin_size': None,
|
|
85
85
|
'row_count': 20000,
|
|
86
86
|
'model': {
|
|
87
87
|
'id': MODEL_ID,
|