truefoundry 0.5.0rc7__py3-none-any.whl → 0.5.1rc2__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.
Potentially problematic release.
This version of truefoundry might be problematic. Click here for more details.
- truefoundry/common/utils.py +73 -1
- truefoundry/deploy/__init__.py +5 -0
- truefoundry/deploy/cli/cli.py +2 -0
- truefoundry/deploy/cli/commands/__init__.py +1 -0
- truefoundry/deploy/cli/commands/deploy_init_command.py +22 -0
- truefoundry/deploy/lib/dao/application.py +2 -1
- truefoundry/deploy/v2/lib/patched_models.py +8 -0
- truefoundry/ml/__init__.py +14 -12
- truefoundry/ml/autogen/client/__init__.py +5 -0
- truefoundry/ml/autogen/client/api/mlfoundry_artifacts_api.py +161 -0
- truefoundry/ml/autogen/client/models/__init__.py +5 -0
- truefoundry/ml/autogen/client/models/artifact_version_manifest.py +2 -2
- truefoundry/ml/autogen/client/models/export_deployment_files_request_dto.py +82 -0
- truefoundry/ml/autogen/client/models/infer_method_name.py +34 -0
- truefoundry/ml/autogen/client/models/model_server.py +34 -0
- truefoundry/ml/autogen/client/models/model_version_environment.py +1 -1
- truefoundry/ml/autogen/client/models/model_version_manifest.py +3 -3
- truefoundry/ml/autogen/client/models/sklearn_framework.py +17 -1
- truefoundry/ml/autogen/client/models/transformers_framework.py +2 -2
- truefoundry/ml/autogen/client/models/xg_boost_framework.py +6 -1
- truefoundry/ml/autogen/client_README.md +4 -0
- truefoundry/ml/autogen/entities/artifacts.py +29 -7
- truefoundry/ml/cli/commands/model_init.py +97 -0
- truefoundry/ml/cli/utils.py +34 -0
- truefoundry/ml/log_types/artifacts/model.py +63 -24
- truefoundry/ml/log_types/artifacts/utils.py +37 -1
- truefoundry/ml/mlfoundry_api.py +74 -78
- truefoundry/ml/mlfoundry_run.py +0 -30
- truefoundry/ml/model_framework.py +257 -3
- truefoundry/ml/validation_utils.py +2 -0
- {truefoundry-0.5.0rc7.dist-info → truefoundry-0.5.1rc2.dist-info}/METADATA +1 -5
- {truefoundry-0.5.0rc7.dist-info → truefoundry-0.5.1rc2.dist-info}/RECORD +34 -46
- truefoundry/deploy/function_service/__init__.py +0 -3
- truefoundry/deploy/function_service/__main__.py +0 -27
- truefoundry/deploy/function_service/app.py +0 -92
- truefoundry/deploy/function_service/build.py +0 -45
- truefoundry/deploy/function_service/remote/__init__.py +0 -6
- truefoundry/deploy/function_service/remote/context.py +0 -3
- truefoundry/deploy/function_service/remote/method.py +0 -67
- truefoundry/deploy/function_service/remote/remote.py +0 -144
- truefoundry/deploy/function_service/route.py +0 -137
- truefoundry/deploy/function_service/service.py +0 -113
- truefoundry/deploy/function_service/utils.py +0 -53
- truefoundry/langchain/__init__.py +0 -12
- truefoundry/langchain/deprecated.py +0 -302
- truefoundry/langchain/truefoundry_chat.py +0 -130
- truefoundry/langchain/truefoundry_embeddings.py +0 -171
- truefoundry/langchain/truefoundry_llm.py +0 -106
- truefoundry/langchain/utils.py +0 -44
- truefoundry/ml/log_types/artifacts/model_extras.py +0 -48
- {truefoundry-0.5.0rc7.dist-info → truefoundry-0.5.1rc2.dist-info}/WHEEL +0 -0
- {truefoundry-0.5.0rc7.dist-info → truefoundry-0.5.1rc2.dist-info}/entry_points.txt +0 -0
truefoundry/common/utils.py
CHANGED
|
@@ -1,7 +1,14 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import logging
|
|
3
|
+
import os
|
|
4
|
+
import sys
|
|
1
5
|
import time
|
|
6
|
+
from collections import namedtuple
|
|
2
7
|
from functools import lru_cache, wraps
|
|
8
|
+
from shutil import rmtree
|
|
9
|
+
from subprocess import check_output
|
|
3
10
|
from time import monotonic_ns
|
|
4
|
-
from typing import Callable, Generator, Optional, TypeVar
|
|
11
|
+
from typing import Callable, Generator, List, Optional, TypeVar
|
|
5
12
|
from urllib.parse import urljoin, urlparse
|
|
6
13
|
|
|
7
14
|
from truefoundry.common.constants import (
|
|
@@ -12,7 +19,10 @@ from truefoundry.common.constants import (
|
|
|
12
19
|
)
|
|
13
20
|
from truefoundry.pydantic_v1 import BaseSettings
|
|
14
21
|
|
|
22
|
+
logger = logging.getLogger(__name__)
|
|
23
|
+
|
|
15
24
|
T = TypeVar("T")
|
|
25
|
+
InstalledPipPackage = namedtuple("InstalledPipPackage", ["name", "version"])
|
|
16
26
|
|
|
17
27
|
|
|
18
28
|
class _TFYServersConfig(BaseSettings):
|
|
@@ -102,3 +112,65 @@ def resolve_tfy_host(tfy_host: Optional[str] = None) -> str:
|
|
|
102
112
|
tfy_host = tfy_host.strip("/")
|
|
103
113
|
validate_tfy_host(tfy_host)
|
|
104
114
|
return tfy_host
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
class ContextualDirectoryManager:
|
|
118
|
+
def __init__(self, dir_path: str, cleanup_on_error: bool = True):
|
|
119
|
+
self.dir_path = dir_path
|
|
120
|
+
self.cleanup_on_error = cleanup_on_error
|
|
121
|
+
|
|
122
|
+
def __enter__(self):
|
|
123
|
+
if os.path.exists(self.dir_path):
|
|
124
|
+
raise FileExistsError(
|
|
125
|
+
f"The directory {self.dir_path!r} already exists. "
|
|
126
|
+
"Please provide a path with a different name that does not already exist."
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
os.makedirs(self.dir_path, exist_ok=False)
|
|
130
|
+
return self.dir_path
|
|
131
|
+
|
|
132
|
+
def __exit__(self, exc_type, exc_value, traceback):
|
|
133
|
+
if self.cleanup_on_error and exc_type is not None:
|
|
134
|
+
# Only delete the directory if an exception occurred
|
|
135
|
+
if os.path.exists(self.dir_path):
|
|
136
|
+
rmtree(self.dir_path)
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
def get_python_version_major_minor() -> str:
|
|
140
|
+
"""
|
|
141
|
+
Returns the major.minor version of the Python interpreter
|
|
142
|
+
"""
|
|
143
|
+
version_info = sys.version_info
|
|
144
|
+
return f"{version_info.major}.{version_info.minor}"
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def list_pip_packages_installed(
|
|
148
|
+
filter_package_names: Optional[List[str]] = None,
|
|
149
|
+
) -> List[InstalledPipPackage]:
|
|
150
|
+
"""
|
|
151
|
+
List the installed package_names, along with their versions.
|
|
152
|
+
Args:
|
|
153
|
+
filter_package_names (List[str]): A list of specific libraries to filter for.
|
|
154
|
+
|
|
155
|
+
Returns:
|
|
156
|
+
List[InstalledPipPackage]: A list of InstalledPipPackage namedtuples for each match.
|
|
157
|
+
"""
|
|
158
|
+
relevant_package_names: List[InstalledPipPackage] = []
|
|
159
|
+
|
|
160
|
+
# Get the installed packages in JSON format from pip
|
|
161
|
+
try:
|
|
162
|
+
output = check_output(
|
|
163
|
+
[sys.executable, "-m", "pip", "list", "--pre", "--format=json"]
|
|
164
|
+
)
|
|
165
|
+
installed_package_names = json.loads(output.decode("utf-8"))
|
|
166
|
+
except Exception:
|
|
167
|
+
logger.exception("Failed to list installed packages using pip.")
|
|
168
|
+
return relevant_package_names
|
|
169
|
+
|
|
170
|
+
package_names_to_check = set(filter_package_names or [])
|
|
171
|
+
for package in installed_package_names:
|
|
172
|
+
if package["name"] in package_names_to_check:
|
|
173
|
+
relevant_package_names.append(
|
|
174
|
+
InstalledPipPackage(package["name"], package["version"])
|
|
175
|
+
)
|
|
176
|
+
return relevant_package_names
|
truefoundry/deploy/__init__.py
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
from truefoundry.deploy.auto_gen.models import (
|
|
2
2
|
AppProtocol,
|
|
3
|
+
Autoshutdown,
|
|
3
4
|
CanaryStep,
|
|
4
5
|
CapacityType,
|
|
6
|
+
Claim,
|
|
5
7
|
ConcurrencyPolicy,
|
|
8
|
+
JobAlert,
|
|
6
9
|
Kustomize,
|
|
7
10
|
ParamType,
|
|
8
11
|
Protocol,
|
|
@@ -66,6 +69,7 @@ from truefoundry.deploy.v2.lib.patched_models import (
|
|
|
66
69
|
DynamicVolumeConfig,
|
|
67
70
|
Endpoint,
|
|
68
71
|
GcpTPU,
|
|
72
|
+
GitHelmRepo,
|
|
69
73
|
GitSource,
|
|
70
74
|
GPUType,
|
|
71
75
|
HealthProbe,
|
|
@@ -73,6 +77,7 @@ from truefoundry.deploy.v2.lib.patched_models import (
|
|
|
73
77
|
HttpProbe,
|
|
74
78
|
HuggingfaceArtifactSource,
|
|
75
79
|
Image,
|
|
80
|
+
JwtAuthCreds,
|
|
76
81
|
KafkaInputConfig,
|
|
77
82
|
KafkaMetricConfig,
|
|
78
83
|
KafkaOutputConfig,
|
truefoundry/deploy/cli/cli.py
CHANGED
|
@@ -9,6 +9,7 @@ from truefoundry.deploy.cli.commands import (
|
|
|
9
9
|
get_build_command,
|
|
10
10
|
get_delete_command,
|
|
11
11
|
get_deploy_command,
|
|
12
|
+
get_deploy_init_command,
|
|
12
13
|
get_login_command,
|
|
13
14
|
get_logout_command,
|
|
14
15
|
get_patch_application_command,
|
|
@@ -36,6 +37,7 @@ def create_truefoundry_cli() -> click.MultiCommand:
|
|
|
36
37
|
cli.add_command(get_logout_command())
|
|
37
38
|
cli.add_command(get_apply_command())
|
|
38
39
|
cli.add_command(get_deploy_command())
|
|
40
|
+
cli.add_command(get_deploy_init_command())
|
|
39
41
|
cli.add_command(get_patch_application_command())
|
|
40
42
|
cli.add_command(get_delete_command())
|
|
41
43
|
cli.add_command(get_trigger_command())
|
|
@@ -4,6 +4,7 @@ from truefoundry.deploy.cli.commands.build_logs_command import get_build_logs_co
|
|
|
4
4
|
from truefoundry.deploy.cli.commands.create_command import get_create_command
|
|
5
5
|
from truefoundry.deploy.cli.commands.delete_command import get_delete_command
|
|
6
6
|
from truefoundry.deploy.cli.commands.deploy_command import get_deploy_command
|
|
7
|
+
from truefoundry.deploy.cli.commands.deploy_init_command import get_deploy_init_command
|
|
7
8
|
from truefoundry.deploy.cli.commands.get_command import get_get_command
|
|
8
9
|
from truefoundry.deploy.cli.commands.list_command import get_list_command
|
|
9
10
|
from truefoundry.deploy.cli.commands.login_command import get_login_command
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import rich_click as click
|
|
2
|
+
|
|
3
|
+
from truefoundry.deploy.cli.const import GROUP_CLS
|
|
4
|
+
from truefoundry.ml.cli.commands.model_init import get_model_init_command
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@click.group(
|
|
8
|
+
name="deploy-init",
|
|
9
|
+
cls=GROUP_CLS,
|
|
10
|
+
help="Initialize the TrueFoundry deployment configuration.",
|
|
11
|
+
)
|
|
12
|
+
def deploy_init_command(): ...
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def get_deploy_init_command():
|
|
16
|
+
"""
|
|
17
|
+
Generates the deploy-init command.
|
|
18
|
+
model: Initialize the TrueFoundry deployment configuration for a model. eg: tfy deploy-init model [--args]
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
deploy_init_command.add_command(get_model_init_command())
|
|
22
|
+
return deploy_init_command
|
|
@@ -179,10 +179,11 @@ def trigger_job(
|
|
|
179
179
|
command=command_str if command_str else None,
|
|
180
180
|
params=params if params else None,
|
|
181
181
|
)
|
|
182
|
+
jobRunName = result.jobRunName
|
|
182
183
|
previous_runs_url = f"{client.base_url.strip('/')}/deployments/{application_info.id}?tab=previousRuns"
|
|
183
184
|
logger.info(
|
|
184
185
|
f"{message}.\n"
|
|
185
|
-
f"You can check the status of your job run at {previous_runs_url}"
|
|
186
|
+
f"You can check the status of your job run at {previous_runs_url} with jobRunName: {jobRunName}"
|
|
186
187
|
)
|
|
187
188
|
return result
|
|
188
189
|
|
|
@@ -186,6 +186,10 @@ class BasicAuthCreds(models.BasicAuthCreds, PatchedModelBase):
|
|
|
186
186
|
type: Literal["basic_auth"] = "basic_auth"
|
|
187
187
|
|
|
188
188
|
|
|
189
|
+
class JwtAuthCreds(models.JwtAuthCreds, PatchedModelBase):
|
|
190
|
+
type: Literal["jwt_auth"] = "jwt_auth"
|
|
191
|
+
|
|
192
|
+
|
|
189
193
|
class HealthProbe(models.HealthProbe, PatchedModelBase):
|
|
190
194
|
pass
|
|
191
195
|
|
|
@@ -338,6 +342,10 @@ class HelmRepo(models.HelmRepo, PatchedModelBase):
|
|
|
338
342
|
type: Literal["helm-repo"] = "helm-repo"
|
|
339
343
|
|
|
340
344
|
|
|
345
|
+
class GitHelmRepo(models.GitHelmRepo, PatchedModelBase):
|
|
346
|
+
type: Literal["git-helm-repo"] = "git-helm-repo"
|
|
347
|
+
|
|
348
|
+
|
|
341
349
|
class OCIRepo(models.OCIRepo, PatchedModelBase):
|
|
342
350
|
type: Literal["oci-repo"] = "oci-repo"
|
|
343
351
|
|
truefoundry/ml/__init__.py
CHANGED
|
@@ -16,6 +16,7 @@ from truefoundry.ml.log_types.artifacts.artifact import (
|
|
|
16
16
|
from truefoundry.ml.log_types.artifacts.dataset import DataDirectory, DataDirectoryPath
|
|
17
17
|
from truefoundry.ml.log_types.artifacts.model import (
|
|
18
18
|
ModelVersion,
|
|
19
|
+
infer_signature,
|
|
19
20
|
)
|
|
20
21
|
from truefoundry.ml.logger import init_logger
|
|
21
22
|
from truefoundry.ml.mlfoundry_api import get_client
|
|
@@ -45,33 +46,34 @@ __all__ = [
|
|
|
45
46
|
"DataDirectory",
|
|
46
47
|
"DataDirectoryPath",
|
|
47
48
|
"DataSlice",
|
|
49
|
+
"FastAIFramework",
|
|
48
50
|
"FileFormat",
|
|
51
|
+
"GluonFramework",
|
|
52
|
+
"H2OFramework",
|
|
49
53
|
"Image",
|
|
50
|
-
"
|
|
54
|
+
"KerasFramework",
|
|
55
|
+
"LibraryName",
|
|
56
|
+
"LightGBMFramework",
|
|
51
57
|
"MlFoundryException",
|
|
52
|
-
"
|
|
58
|
+
"MlFoundryRun",
|
|
53
59
|
"ModelFramework",
|
|
60
|
+
"ModelFrameworkType",
|
|
54
61
|
"ModelType",
|
|
55
62
|
"ModelVersion",
|
|
56
|
-
"
|
|
57
|
-
"ViewType",
|
|
58
|
-
"get_client",
|
|
59
|
-
"FastAIFramework",
|
|
60
|
-
"GluonFramework",
|
|
61
|
-
"H2OFramework",
|
|
62
|
-
"KerasFramework",
|
|
63
|
-
"LightGBMFramework",
|
|
63
|
+
"ModelVersionEnvironment",
|
|
64
64
|
"ONNXFramework",
|
|
65
65
|
"PaddleFramework",
|
|
66
|
+
"Plot",
|
|
66
67
|
"PyTorchFramework",
|
|
67
68
|
"SklearnFramework",
|
|
68
69
|
"SpaCyFramework",
|
|
69
70
|
"StatsModelsFramework",
|
|
70
71
|
"TensorFlowFramework",
|
|
71
72
|
"TransformersFramework",
|
|
73
|
+
"ViewType",
|
|
72
74
|
"XGBoostFramework",
|
|
73
|
-
"
|
|
74
|
-
"
|
|
75
|
+
"get_client",
|
|
76
|
+
"infer_signature",
|
|
75
77
|
]
|
|
76
78
|
|
|
77
79
|
init_logger()
|
|
@@ -172,6 +172,9 @@ from truefoundry.ml.autogen.client.models.experiment_response_dto import (
|
|
|
172
172
|
ExperimentResponseDto,
|
|
173
173
|
)
|
|
174
174
|
from truefoundry.ml.autogen.client.models.experiment_tag_dto import ExperimentTagDto
|
|
175
|
+
from truefoundry.ml.autogen.client.models.export_deployment_files_request_dto import (
|
|
176
|
+
ExportDeploymentFilesRequestDto,
|
|
177
|
+
)
|
|
175
178
|
from truefoundry.ml.autogen.client.models.external_artifact_source import (
|
|
176
179
|
ExternalArtifactSource,
|
|
177
180
|
)
|
|
@@ -224,6 +227,7 @@ from truefoundry.ml.autogen.client.models.http_validation_error import (
|
|
|
224
227
|
)
|
|
225
228
|
from truefoundry.ml.autogen.client.models.image_content_part import ImageContentPart
|
|
226
229
|
from truefoundry.ml.autogen.client.models.image_url import ImageUrl
|
|
230
|
+
from truefoundry.ml.autogen.client.models.infer_method_name import InferMethodName
|
|
227
231
|
from truefoundry.ml.autogen.client.models.internal_metadata import InternalMetadata
|
|
228
232
|
from truefoundry.ml.autogen.client.models.keras_framework import KerasFramework
|
|
229
233
|
from truefoundry.ml.autogen.client.models.latest_run_log_dto import LatestRunLogDto
|
|
@@ -311,6 +315,7 @@ from truefoundry.ml.autogen.client.models.mime_type import MimeType
|
|
|
311
315
|
from truefoundry.ml.autogen.client.models.model_configuration import ModelConfiguration
|
|
312
316
|
from truefoundry.ml.autogen.client.models.model_dto import ModelDto
|
|
313
317
|
from truefoundry.ml.autogen.client.models.model_response_dto import ModelResponseDto
|
|
318
|
+
from truefoundry.ml.autogen.client.models.model_server import ModelServer
|
|
314
319
|
from truefoundry.ml.autogen.client.models.model_version_dto import ModelVersionDto
|
|
315
320
|
from truefoundry.ml.autogen.client.models.model_version_environment import (
|
|
316
321
|
ModelVersionEnvironment,
|
|
@@ -73,6 +73,9 @@ from truefoundry.ml.autogen.client.models.delete_files_for_dataset_request_dto i
|
|
|
73
73
|
from truefoundry.ml.autogen.client.models.delete_model_version_request_dto import (
|
|
74
74
|
DeleteModelVersionRequestDto,
|
|
75
75
|
)
|
|
76
|
+
from truefoundry.ml.autogen.client.models.export_deployment_files_request_dto import (
|
|
77
|
+
ExportDeploymentFilesRequestDto,
|
|
78
|
+
)
|
|
76
79
|
from truefoundry.ml.autogen.client.models.finalize_artifact_version_request_dto import (
|
|
77
80
|
FinalizeArtifactVersionRequestDto,
|
|
78
81
|
)
|
|
@@ -2277,6 +2280,164 @@ class MlfoundryArtifactsApi:
|
|
|
2277
2280
|
_request_auth=_params.get("_request_auth"),
|
|
2278
2281
|
)
|
|
2279
2282
|
|
|
2283
|
+
@validate_arguments
|
|
2284
|
+
def export_deployment_files_by_fqn_post(
|
|
2285
|
+
self,
|
|
2286
|
+
export_deployment_files_request_dto: ExportDeploymentFilesRequestDto,
|
|
2287
|
+
**kwargs,
|
|
2288
|
+
) -> object: # noqa: E501
|
|
2289
|
+
"""Export Deployment Files By Fqn # noqa: E501
|
|
2290
|
+
|
|
2291
|
+
This method makes a synchronous HTTP request by default. To make an
|
|
2292
|
+
asynchronous HTTP request, please pass async_req=True
|
|
2293
|
+
|
|
2294
|
+
>>> thread = api.export_deployment_files_by_fqn_post(export_deployment_files_request_dto, async_req=True)
|
|
2295
|
+
>>> result = thread.get()
|
|
2296
|
+
|
|
2297
|
+
:param export_deployment_files_request_dto: (required)
|
|
2298
|
+
:type export_deployment_files_request_dto: ExportDeploymentFilesRequestDto
|
|
2299
|
+
:param async_req: Whether to execute the request asynchronously.
|
|
2300
|
+
:type async_req: bool, optional
|
|
2301
|
+
:param _request_timeout: timeout setting for this request.
|
|
2302
|
+
If one number provided, it will be total request
|
|
2303
|
+
timeout. It can also be a pair (tuple) of
|
|
2304
|
+
(connection, read) timeouts.
|
|
2305
|
+
:return: Returns the result object.
|
|
2306
|
+
If the method is called asynchronously,
|
|
2307
|
+
returns the request thread.
|
|
2308
|
+
:rtype: object
|
|
2309
|
+
"""
|
|
2310
|
+
kwargs["_return_http_data_only"] = True
|
|
2311
|
+
if "_preload_content" in kwargs:
|
|
2312
|
+
message = "Error! Please call the export_deployment_files_by_fqn_post_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501
|
|
2313
|
+
raise ValueError(message)
|
|
2314
|
+
return self.export_deployment_files_by_fqn_post_with_http_info(
|
|
2315
|
+
export_deployment_files_request_dto, **kwargs
|
|
2316
|
+
) # noqa: E501
|
|
2317
|
+
|
|
2318
|
+
@validate_arguments
|
|
2319
|
+
def export_deployment_files_by_fqn_post_with_http_info(
|
|
2320
|
+
self,
|
|
2321
|
+
export_deployment_files_request_dto: ExportDeploymentFilesRequestDto,
|
|
2322
|
+
**kwargs,
|
|
2323
|
+
) -> ApiResponse: # noqa: E501
|
|
2324
|
+
"""Export Deployment Files By Fqn # noqa: E501
|
|
2325
|
+
|
|
2326
|
+
This method makes a synchronous HTTP request by default. To make an
|
|
2327
|
+
asynchronous HTTP request, please pass async_req=True
|
|
2328
|
+
|
|
2329
|
+
>>> thread = api.export_deployment_files_by_fqn_post_with_http_info(export_deployment_files_request_dto, async_req=True)
|
|
2330
|
+
>>> result = thread.get()
|
|
2331
|
+
|
|
2332
|
+
:param export_deployment_files_request_dto: (required)
|
|
2333
|
+
:type export_deployment_files_request_dto: ExportDeploymentFilesRequestDto
|
|
2334
|
+
:param async_req: Whether to execute the request asynchronously.
|
|
2335
|
+
:type async_req: bool, optional
|
|
2336
|
+
:param _preload_content: if False, the ApiResponse.data will
|
|
2337
|
+
be set to none and raw_data will store the
|
|
2338
|
+
HTTP response body without reading/decoding.
|
|
2339
|
+
Default is True.
|
|
2340
|
+
:type _preload_content: bool, optional
|
|
2341
|
+
:param _return_http_data_only: response data instead of ApiResponse
|
|
2342
|
+
object with status code, headers, etc
|
|
2343
|
+
:type _return_http_data_only: bool, optional
|
|
2344
|
+
:param _request_timeout: timeout setting for this request. If one
|
|
2345
|
+
number provided, it will be total request
|
|
2346
|
+
timeout. It can also be a pair (tuple) of
|
|
2347
|
+
(connection, read) timeouts.
|
|
2348
|
+
:param _request_auth: set to override the auth_settings for an a single
|
|
2349
|
+
request; this effectively ignores the authentication
|
|
2350
|
+
in the spec for a single request.
|
|
2351
|
+
:type _request_auth: dict, optional
|
|
2352
|
+
:type _content_type: string, optional: force content-type for the request
|
|
2353
|
+
:return: Returns the result object.
|
|
2354
|
+
If the method is called asynchronously,
|
|
2355
|
+
returns the request thread.
|
|
2356
|
+
:rtype: tuple(object, status_code(int), headers(HTTPHeaderDict))
|
|
2357
|
+
"""
|
|
2358
|
+
|
|
2359
|
+
_params = locals()
|
|
2360
|
+
|
|
2361
|
+
_all_params = ["export_deployment_files_request_dto"]
|
|
2362
|
+
_all_params.extend(
|
|
2363
|
+
[
|
|
2364
|
+
"async_req",
|
|
2365
|
+
"_return_http_data_only",
|
|
2366
|
+
"_preload_content",
|
|
2367
|
+
"_request_timeout",
|
|
2368
|
+
"_request_auth",
|
|
2369
|
+
"_content_type",
|
|
2370
|
+
"_headers",
|
|
2371
|
+
]
|
|
2372
|
+
)
|
|
2373
|
+
|
|
2374
|
+
# validate the arguments
|
|
2375
|
+
for _key, _val in _params["kwargs"].items():
|
|
2376
|
+
if _key not in _all_params:
|
|
2377
|
+
raise ApiTypeError(
|
|
2378
|
+
"Got an unexpected keyword argument '%s'"
|
|
2379
|
+
" to method export_deployment_files_by_fqn_post" % _key
|
|
2380
|
+
)
|
|
2381
|
+
_params[_key] = _val
|
|
2382
|
+
del _params["kwargs"]
|
|
2383
|
+
|
|
2384
|
+
_collection_formats = {}
|
|
2385
|
+
|
|
2386
|
+
# process the path parameters
|
|
2387
|
+
_path_params = {}
|
|
2388
|
+
|
|
2389
|
+
# process the query parameters
|
|
2390
|
+
_query_params = []
|
|
2391
|
+
# process the header parameters
|
|
2392
|
+
_header_params = dict(_params.get("_headers", {}))
|
|
2393
|
+
# process the form parameters
|
|
2394
|
+
_form_params = []
|
|
2395
|
+
_files = {}
|
|
2396
|
+
# process the body parameter
|
|
2397
|
+
_body_params = None
|
|
2398
|
+
if _params["export_deployment_files_request_dto"] is not None:
|
|
2399
|
+
_body_params = _params["export_deployment_files_request_dto"]
|
|
2400
|
+
|
|
2401
|
+
# set the HTTP header `Accept`
|
|
2402
|
+
_header_params["Accept"] = self.api_client.select_header_accept(
|
|
2403
|
+
["application/json", "application/zip"]
|
|
2404
|
+
) # noqa: E501
|
|
2405
|
+
|
|
2406
|
+
# set the HTTP header `Content-Type`
|
|
2407
|
+
_content_types_list = _params.get(
|
|
2408
|
+
"_content_type",
|
|
2409
|
+
self.api_client.select_header_content_type(["application/json"]),
|
|
2410
|
+
)
|
|
2411
|
+
if _content_types_list:
|
|
2412
|
+
_header_params["Content-Type"] = _content_types_list
|
|
2413
|
+
|
|
2414
|
+
# authentication setting
|
|
2415
|
+
_auth_settings = ["HTTPBearer", "APIKeyCookie"] # noqa: E501
|
|
2416
|
+
|
|
2417
|
+
_response_types_map = {
|
|
2418
|
+
"200": "object",
|
|
2419
|
+
"422": "HTTPValidationError",
|
|
2420
|
+
}
|
|
2421
|
+
|
|
2422
|
+
return self.api_client.call_api(
|
|
2423
|
+
"/api/2.0/mlflow/mlfoundry-artifacts/model-versions/export-deployment-files-by-fqn",
|
|
2424
|
+
"POST",
|
|
2425
|
+
_path_params,
|
|
2426
|
+
_query_params,
|
|
2427
|
+
_header_params,
|
|
2428
|
+
body=_body_params,
|
|
2429
|
+
post_params=_form_params,
|
|
2430
|
+
files=_files,
|
|
2431
|
+
response_types_map=_response_types_map,
|
|
2432
|
+
auth_settings=_auth_settings,
|
|
2433
|
+
async_req=_params.get("async_req"),
|
|
2434
|
+
_return_http_data_only=_params.get("_return_http_data_only"), # noqa: E501
|
|
2435
|
+
_preload_content=_params.get("_preload_content", True),
|
|
2436
|
+
_request_timeout=_params.get("_request_timeout"),
|
|
2437
|
+
collection_formats=_collection_formats,
|
|
2438
|
+
_request_auth=_params.get("_request_auth"),
|
|
2439
|
+
)
|
|
2440
|
+
|
|
2280
2441
|
@validate_arguments
|
|
2281
2442
|
def finalize_artifact_version_post(
|
|
2282
2443
|
self,
|
|
@@ -143,6 +143,9 @@ from truefoundry.ml.autogen.client.models.experiment_response_dto import (
|
|
|
143
143
|
ExperimentResponseDto,
|
|
144
144
|
)
|
|
145
145
|
from truefoundry.ml.autogen.client.models.experiment_tag_dto import ExperimentTagDto
|
|
146
|
+
from truefoundry.ml.autogen.client.models.export_deployment_files_request_dto import (
|
|
147
|
+
ExportDeploymentFilesRequestDto,
|
|
148
|
+
)
|
|
146
149
|
from truefoundry.ml.autogen.client.models.external_artifact_source import (
|
|
147
150
|
ExternalArtifactSource,
|
|
148
151
|
)
|
|
@@ -195,6 +198,7 @@ from truefoundry.ml.autogen.client.models.http_validation_error import (
|
|
|
195
198
|
)
|
|
196
199
|
from truefoundry.ml.autogen.client.models.image_content_part import ImageContentPart
|
|
197
200
|
from truefoundry.ml.autogen.client.models.image_url import ImageUrl
|
|
201
|
+
from truefoundry.ml.autogen.client.models.infer_method_name import InferMethodName
|
|
198
202
|
from truefoundry.ml.autogen.client.models.internal_metadata import InternalMetadata
|
|
199
203
|
from truefoundry.ml.autogen.client.models.keras_framework import KerasFramework
|
|
200
204
|
from truefoundry.ml.autogen.client.models.latest_run_log_dto import LatestRunLogDto
|
|
@@ -282,6 +286,7 @@ from truefoundry.ml.autogen.client.models.mime_type import MimeType
|
|
|
282
286
|
from truefoundry.ml.autogen.client.models.model_configuration import ModelConfiguration
|
|
283
287
|
from truefoundry.ml.autogen.client.models.model_dto import ModelDto
|
|
284
288
|
from truefoundry.ml.autogen.client.models.model_response_dto import ModelResponseDto
|
|
289
|
+
from truefoundry.ml.autogen.client.models.model_server import ModelServer
|
|
285
290
|
from truefoundry.ml.autogen.client.models.model_version_dto import ModelVersionDto
|
|
286
291
|
from truefoundry.ml.autogen.client.models.model_version_environment import (
|
|
287
292
|
ModelVersionEnvironment,
|
|
@@ -36,11 +36,11 @@ class ArtifactVersionManifest(BaseModel):
|
|
|
36
36
|
|
|
37
37
|
description: Optional[constr(strict=True, max_length=512)] = Field(
|
|
38
38
|
default=None,
|
|
39
|
-
description="+label=Description +docs=Description of the artifact version",
|
|
39
|
+
description="+label=Description +usage=Description of the artifact or model version +docs=Description of the artifact or model version",
|
|
40
40
|
)
|
|
41
41
|
metadata: Dict[str, Any] = Field(
|
|
42
42
|
default=...,
|
|
43
|
-
description="+label=Metadata +docs=Metadata for the model version +usage=Metadata for the model version +uiType=JsonInput",
|
|
43
|
+
description="+label=Metadata +docs=Metadata for the artifact or model version +usage=Metadata for the artifact or model version +uiType=JsonInput",
|
|
44
44
|
)
|
|
45
45
|
type: Optional[StrictStr] = "artifact-version"
|
|
46
46
|
source: Source = Field(...)
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
FastAPI
|
|
5
|
+
|
|
6
|
+
No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
|
7
|
+
|
|
8
|
+
The version of the OpenAPI document: 0.1.0
|
|
9
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
|
10
|
+
|
|
11
|
+
Do not edit the class manually.
|
|
12
|
+
""" # noqa: E501
|
|
13
|
+
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
import json
|
|
17
|
+
import pprint
|
|
18
|
+
import re # noqa: F401
|
|
19
|
+
from typing import Optional
|
|
20
|
+
|
|
21
|
+
from truefoundry.ml.autogen.client.models.model_server import ModelServer
|
|
22
|
+
from truefoundry.pydantic_v1 import BaseModel, Field, StrictStr
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class ExportDeploymentFilesRequestDto(BaseModel):
|
|
26
|
+
"""
|
|
27
|
+
ExportDeploymentFilesRequestDto
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
model_version_fqn: StrictStr = Field(...)
|
|
31
|
+
workspace_fqn: StrictStr = Field(...)
|
|
32
|
+
service_name: StrictStr = Field(...)
|
|
33
|
+
model_server: Optional[ModelServer] = None
|
|
34
|
+
__properties = [
|
|
35
|
+
"model_version_fqn",
|
|
36
|
+
"workspace_fqn",
|
|
37
|
+
"service_name",
|
|
38
|
+
"model_server",
|
|
39
|
+
]
|
|
40
|
+
|
|
41
|
+
class Config:
|
|
42
|
+
"""Pydantic configuration"""
|
|
43
|
+
|
|
44
|
+
allow_population_by_field_name = True
|
|
45
|
+
validate_assignment = True
|
|
46
|
+
|
|
47
|
+
def to_str(self) -> str:
|
|
48
|
+
"""Returns the string representation of the model using alias"""
|
|
49
|
+
return pprint.pformat(self.dict(by_alias=True))
|
|
50
|
+
|
|
51
|
+
def to_json(self) -> str:
|
|
52
|
+
"""Returns the JSON representation of the model using alias"""
|
|
53
|
+
return json.dumps(self.to_dict())
|
|
54
|
+
|
|
55
|
+
@classmethod
|
|
56
|
+
def from_json(cls, json_str: str) -> ExportDeploymentFilesRequestDto:
|
|
57
|
+
"""Create an instance of ExportDeploymentFilesRequestDto from a JSON string"""
|
|
58
|
+
return cls.from_dict(json.loads(json_str))
|
|
59
|
+
|
|
60
|
+
def to_dict(self):
|
|
61
|
+
"""Returns the dictionary representation of the model using alias"""
|
|
62
|
+
_dict = self.dict(by_alias=True, exclude={}, exclude_none=True)
|
|
63
|
+
return _dict
|
|
64
|
+
|
|
65
|
+
@classmethod
|
|
66
|
+
def from_dict(cls, obj: dict) -> ExportDeploymentFilesRequestDto:
|
|
67
|
+
"""Create an instance of ExportDeploymentFilesRequestDto from a dict"""
|
|
68
|
+
if obj is None:
|
|
69
|
+
return None
|
|
70
|
+
|
|
71
|
+
if not isinstance(obj, dict):
|
|
72
|
+
return ExportDeploymentFilesRequestDto.parse_obj(obj)
|
|
73
|
+
|
|
74
|
+
_obj = ExportDeploymentFilesRequestDto.parse_obj(
|
|
75
|
+
{
|
|
76
|
+
"model_version_fqn": obj.get("model_version_fqn"),
|
|
77
|
+
"workspace_fqn": obj.get("workspace_fqn"),
|
|
78
|
+
"service_name": obj.get("service_name"),
|
|
79
|
+
"model_server": obj.get("model_server"),
|
|
80
|
+
}
|
|
81
|
+
)
|
|
82
|
+
return _obj
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
FastAPI
|
|
5
|
+
|
|
6
|
+
No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
|
7
|
+
|
|
8
|
+
The version of the OpenAPI document: 0.1.0
|
|
9
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
|
10
|
+
|
|
11
|
+
Do not edit the class manually.
|
|
12
|
+
""" # noqa: E501
|
|
13
|
+
|
|
14
|
+
import json
|
|
15
|
+
import re # noqa: F401
|
|
16
|
+
|
|
17
|
+
from aenum import Enum
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class InferMethodName(str, Enum):
|
|
21
|
+
"""
|
|
22
|
+
+label=Inference method name +usage=Name of the method used for inference
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
"""
|
|
26
|
+
allowed enum values
|
|
27
|
+
"""
|
|
28
|
+
PREDICT = "predict"
|
|
29
|
+
PREDICT_PROBA = "predict_proba"
|
|
30
|
+
|
|
31
|
+
@classmethod
|
|
32
|
+
def from_json(cls, json_str: str) -> InferMethodName:
|
|
33
|
+
"""Create an instance of InferMethodName from a JSON string"""
|
|
34
|
+
return InferMethodName(json.loads(json_str))
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
FastAPI
|
|
5
|
+
|
|
6
|
+
No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
|
7
|
+
|
|
8
|
+
The version of the OpenAPI document: 0.1.0
|
|
9
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
|
10
|
+
|
|
11
|
+
Do not edit the class manually.
|
|
12
|
+
""" # noqa: E501
|
|
13
|
+
|
|
14
|
+
import json
|
|
15
|
+
import re # noqa: F401
|
|
16
|
+
|
|
17
|
+
from aenum import Enum
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class ModelServer(str, Enum):
|
|
21
|
+
"""
|
|
22
|
+
An enumeration.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
"""
|
|
26
|
+
allowed enum values
|
|
27
|
+
"""
|
|
28
|
+
TRITON = "triton"
|
|
29
|
+
FASTAPI = "fastapi"
|
|
30
|
+
|
|
31
|
+
@classmethod
|
|
32
|
+
def from_json(cls, json_str: str) -> ModelServer:
|
|
33
|
+
"""Create an instance of ModelServer from a JSON string"""
|
|
34
|
+
return ModelServer(json.loads(json_str))
|