frogml-core 0.0.113__py3-none-any.whl → 0.0.115__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.
- frogml_core/__init__.py +1 -1
- frogml_core/clients/administration/authentication/client.py +2 -2
- frogml_core/clients/batch_job_management/client.py +4 -4
- frogml_core/clients/build_orchestrator/build_model_request_getter.py +6 -6
- frogml_core/clients/build_orchestrator/client.py +12 -12
- frogml_core/clients/build_orchestrator/internal_client.py +10 -10
- frogml_core/frogml_client/build_api_helpers/build_api_steps.py +3 -3
- frogml_core/inner/build_logic/constants/upload_tag.py +7 -7
- frogml_core/inner/build_logic/interface/context_interface.py +1 -1
- frogml_core/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/strategy.py +4 -4
- frogml_core/inner/build_logic/phases/phase_010_fetch_model/set_version_step.py +3 -3
- frogml_core/inner/build_logic/phases/phase_020_remote_register_frogml_build/start_remote_build_step.py +3 -3
- frogml_core/inner/build_logic/phases/phase_020_remote_register_frogml_build/upload_step.py +11 -9
- frogml_core/inner/build_logic/tools/ignore_files.py +3 -3
- frogml_core/inner/di_configuration/__init__.py +0 -6
- frogml_core/model/adapters/__init__.py +1 -1
- frogml_core/model/analytics_logging.py +1 -1
- frogml_core/model/tools/adapters/input.py +6 -6
- frogml_core/model/tools/adapters/output.py +8 -8
- frogml_core/model/tools/run_model_locally.py +2 -2
- frogml_core/model/utils/feature_utils.py +1 -1
- {frogml_core-0.0.113.dist-info → frogml_core-0.0.115.dist-info}/METADATA +1 -1
- {frogml_core-0.0.113.dist-info → frogml_core-0.0.115.dist-info}/RECORD +30 -137
- frogml_services_mock/mocks/analytics_api.py +6 -6
- frogml_services_mock/mocks/ecosystem_service_api.py +2 -2
- frogml_services_mock/mocks/frogml_mocks.py +0 -11
- frogml_services_mock/services_mock.py +4 -52
- frogml_storage/__init__.py +1 -1
- frogml_core/clients/prompt_manager/__init__.py +0 -0
- frogml_core/clients/prompt_manager/model_descriptor_mapper.py +0 -196
- frogml_core/clients/prompt_manager/prompt_manager_client.py +0 -190
- frogml_core/clients/prompt_manager/prompt_proto_mapper.py +0 -264
- frogml_core/clients/vector_store/__init__.py +0 -2
- frogml_core/clients/vector_store/management_client.py +0 -127
- frogml_core/clients/vector_store/serving_client.py +0 -157
- frogml_core/clients/workspace_manager/__init__.py +0 -1
- frogml_core/clients/workspace_manager/client.py +0 -224
- frogml_core/llmops/__init__.py +0 -0
- frogml_core/llmops/generation/__init__.py +0 -0
- frogml_core/llmops/generation/_steaming.py +0 -78
- frogml_core/llmops/generation/base.py +0 -5
- frogml_core/llmops/generation/chat/__init__.py +0 -0
- frogml_core/llmops/generation/chat/openai/LICENSE.txt +0 -201
- frogml_core/llmops/generation/chat/openai/types/__init__.py +0 -0
- frogml_core/llmops/generation/chat/openai/types/chat/__init__.py +0 -0
- frogml_core/llmops/generation/chat/openai/types/chat/chat_completion.py +0 -88
- frogml_core/llmops/generation/chat/openai/types/chat/chat_completion_assistant_message_param.py +0 -65
- frogml_core/llmops/generation/chat/openai/types/chat/chat_completion_chunk.py +0 -153
- frogml_core/llmops/generation/chat/openai/types/chat/chat_completion_content_part_text_param.py +0 -28
- frogml_core/llmops/generation/chat/openai/types/chat/chat_completion_function_call_option_param.py +0 -25
- frogml_core/llmops/generation/chat/openai/types/chat/chat_completion_function_message_param.py +0 -33
- frogml_core/llmops/generation/chat/openai/types/chat/chat_completion_message.py +0 -56
- frogml_core/llmops/generation/chat/openai/types/chat/chat_completion_message_param.py +0 -34
- frogml_core/llmops/generation/chat/openai/types/chat/chat_completion_message_tool_call.py +0 -46
- frogml_core/llmops/generation/chat/openai/types/chat/chat_completion_message_tool_call_param.py +0 -44
- frogml_core/llmops/generation/chat/openai/types/chat/chat_completion_named_tool_choice_param.py +0 -32
- frogml_core/llmops/generation/chat/openai/types/chat/chat_completion_role.py +0 -20
- frogml_core/llmops/generation/chat/openai/types/chat/chat_completion_system_message_param.py +0 -35
- frogml_core/llmops/generation/chat/openai/types/chat/chat_completion_token_logprob.py +0 -71
- frogml_core/llmops/generation/chat/openai/types/chat/chat_completion_tool_choice_option_param.py +0 -28
- frogml_core/llmops/generation/chat/openai/types/chat/chat_completion_tool_message_param.py +0 -31
- frogml_core/llmops/generation/chat/openai/types/chat/chat_completion_tool_param.py +0 -29
- frogml_core/llmops/generation/chat/openai/types/chat/chat_completion_user_message_param.py +0 -35
- frogml_core/llmops/generation/chat/openai/types/chat/completion_create_params.py +0 -279
- frogml_core/llmops/generation/chat/openai/types/completion_choice.py +0 -47
- frogml_core/llmops/generation/chat/openai/types/completion_create_params.py +0 -209
- frogml_core/llmops/generation/chat/openai/types/completion_usage.py +0 -30
- frogml_core/llmops/generation/chat/openai/types/model.py +0 -35
- frogml_core/llmops/generation/chat/openai/types/shared/__init__.py +0 -3
- frogml_core/llmops/generation/chat/openai/types/shared/error_object.py +0 -27
- frogml_core/llmops/generation/chat/openai/types/shared/function_definition.py +0 -49
- frogml_core/llmops/generation/chat/openai/types/shared/function_parameters.py +0 -20
- frogml_core/llmops/generation/chat/openai/types/shared_params/__init__.py +0 -2
- frogml_core/llmops/generation/chat/openai/types/shared_params/function_definition.py +0 -49
- frogml_core/llmops/generation/chat/openai/types/shared_params/function_parameters.py +0 -22
- frogml_core/llmops/generation/streaming.py +0 -26
- frogml_core/llmops/model/__init__.py +0 -0
- frogml_core/llmops/model/descriptor.py +0 -40
- frogml_core/llmops/prompt/__init__.py +0 -0
- frogml_core/llmops/prompt/base.py +0 -136
- frogml_core/llmops/prompt/chat/__init__.py +0 -0
- frogml_core/llmops/prompt/chat/message.py +0 -24
- frogml_core/llmops/prompt/chat/template.py +0 -113
- frogml_core/llmops/prompt/chat/value.py +0 -10
- frogml_core/llmops/prompt/manager.py +0 -138
- frogml_core/llmops/prompt/template.py +0 -24
- frogml_core/llmops/prompt/value.py +0 -14
- frogml_core/llmops/provider/__init__.py +0 -0
- frogml_core/llmops/provider/chat.py +0 -44
- frogml_core/llmops/provider/openai/__init__.py +0 -0
- frogml_core/llmops/provider/openai/client.py +0 -126
- frogml_core/llmops/provider/openai/provider.py +0 -93
- frogml_core/vector_store/__init__.py +0 -4
- frogml_core/vector_store/client.py +0 -151
- frogml_core/vector_store/collection.py +0 -429
- frogml_core/vector_store/filters.py +0 -359
- frogml_core/vector_store/inference_client.py +0 -105
- frogml_core/vector_store/rest_helpers.py +0 -81
- frogml_core/vector_store/utils/__init__.py +0 -0
- frogml_core/vector_store/utils/filter_utils.py +0 -23
- frogml_core/vector_store/utils/upsert_utils.py +0 -218
- frogml_proto/qwak/prompt/v1/prompt/prompt_manager_service_pb2.py +0 -77
- frogml_proto/qwak/prompt/v1/prompt/prompt_manager_service_pb2.pyi +0 -417
- frogml_proto/qwak/prompt/v1/prompt/prompt_manager_service_pb2_grpc.py +0 -441
- frogml_proto/qwak/prompt/v1/prompt/prompt_pb2.py +0 -69
- frogml_proto/qwak/prompt/v1/prompt/prompt_pb2.pyi +0 -415
- frogml_proto/qwak/prompt/v1/prompt/prompt_pb2_grpc.py +0 -4
- frogml_proto/qwak/vectors/v1/collection/collection_pb2.py +0 -46
- frogml_proto/qwak/vectors/v1/collection/collection_pb2.pyi +0 -287
- frogml_proto/qwak/vectors/v1/collection/collection_pb2_grpc.py +0 -4
- frogml_proto/qwak/vectors/v1/collection/collection_service_pb2.py +0 -60
- frogml_proto/qwak/vectors/v1/collection/collection_service_pb2.pyi +0 -258
- frogml_proto/qwak/vectors/v1/collection/collection_service_pb2_grpc.py +0 -304
- frogml_proto/qwak/vectors/v1/collection/event/collection_event_pb2.py +0 -28
- frogml_proto/qwak/vectors/v1/collection/event/collection_event_pb2.pyi +0 -41
- frogml_proto/qwak/vectors/v1/collection/event/collection_event_pb2_grpc.py +0 -4
- frogml_proto/qwak/vectors/v1/filters_pb2.py +0 -52
- frogml_proto/qwak/vectors/v1/filters_pb2.pyi +0 -297
- frogml_proto/qwak/vectors/v1/filters_pb2_grpc.py +0 -4
- frogml_proto/qwak/vectors/v1/vector_pb2.py +0 -38
- frogml_proto/qwak/vectors/v1/vector_pb2.pyi +0 -142
- frogml_proto/qwak/vectors/v1/vector_pb2_grpc.py +0 -4
- frogml_proto/qwak/vectors/v1/vector_service_pb2.py +0 -53
- frogml_proto/qwak/vectors/v1/vector_service_pb2.pyi +0 -243
- frogml_proto/qwak/vectors/v1/vector_service_pb2_grpc.py +0 -201
- frogml_proto/qwak/workspace/workspace_pb2.py +0 -50
- frogml_proto/qwak/workspace/workspace_pb2.pyi +0 -331
- frogml_proto/qwak/workspace/workspace_pb2_grpc.py +0 -4
- frogml_proto/qwak/workspace/workspace_service_pb2.py +0 -84
- frogml_proto/qwak/workspace/workspace_service_pb2.pyi +0 -393
- frogml_proto/qwak/workspace/workspace_service_pb2_grpc.py +0 -507
- frogml_services_mock/mocks/prompt_manager_service.py +0 -281
- frogml_services_mock/mocks/vector_serving_api.py +0 -159
- frogml_services_mock/mocks/vectors_management_api.py +0 -97
- frogml_services_mock/mocks/workspace_manager_service_mock.py +0 -202
- /frogml_core/model/adapters/output_adapters/{qwak_with_default_fallback.py → frogml_with_default_fallback.py} +0 -0
- {frogml_core-0.0.113.dist-info → frogml_core-0.0.115.dist-info}/WHEEL +0 -0
frogml_core/__init__.py
CHANGED
@@ -5,7 +5,7 @@ from frogml_proto.qwak.administration.v0.authentication.authentication_service_p
|
|
5
5
|
AuthenticateRequest,
|
6
6
|
)
|
7
7
|
from frogml_proto.qwak.administration.v0.authentication.authentication_service_pb2 import (
|
8
|
-
QwakApiKeyMethod
|
8
|
+
QwakApiKeyMethod,
|
9
9
|
)
|
10
10
|
from frogml_proto.qwak.administration.v0.authentication.authentication_service_pb2_grpc import (
|
11
11
|
AuthenticationServiceStub,
|
@@ -26,7 +26,7 @@ class AuthenticationClient:
|
|
26
26
|
|
27
27
|
def authenticate(self, api_key=None):
|
28
28
|
request = AuthenticateRequest(
|
29
|
-
qwak_api_key_method=
|
29
|
+
qwak_api_key_method=QwakApiKeyMethod(qwak_api_key=api_key)
|
30
30
|
)
|
31
31
|
try:
|
32
32
|
return self._authentication_service.Authenticate(request)
|
@@ -407,7 +407,7 @@ class BatchJobManagerClient:
|
|
407
407
|
self, model_id: str, number_of_batches: int, file_type: str = "csv"
|
408
408
|
) -> GetBatchJobPreSignedUploadUrlResult:
|
409
409
|
"""
|
410
|
-
Get pre signed upload urls details in order to start a job using
|
410
|
+
Get pre signed upload urls details in order to start a job using FrogML cloud bucket
|
411
411
|
Args:
|
412
412
|
model_id: The model id for the execution
|
413
413
|
number_of_batches: The number of pre-signed urls to request
|
@@ -445,7 +445,7 @@ class BatchJobManagerClient:
|
|
445
445
|
self, execution_id: str
|
446
446
|
) -> GetBatchJobPreSignedDownloadUrlResult:
|
447
447
|
"""
|
448
|
-
Get pre signed urls links in order to download files using
|
448
|
+
Get pre signed urls links in order to download files using FrogML cloud bucket
|
449
449
|
Args:
|
450
450
|
execution_id: The execution id of the files
|
451
451
|
|
@@ -475,7 +475,7 @@ class BatchJobManagerClient:
|
|
475
475
|
|
476
476
|
def get_upload_details(self, model_id: str) -> GetBatchJobUploadDetailsResponse:
|
477
477
|
"""
|
478
|
-
Get upload details in order to start a job using
|
478
|
+
Get upload details in order to start a job using FrogML cloud bucket
|
479
479
|
Args:
|
480
480
|
model_id: The model id for the execution
|
481
481
|
|
@@ -496,7 +496,7 @@ class BatchJobManagerClient:
|
|
496
496
|
self, execution_id: str
|
497
497
|
) -> GetBatchJobDownloadDetailsResponse:
|
498
498
|
"""
|
499
|
-
Get download details in order to download files using
|
499
|
+
Get download details in order to download files using FrogML cloud bucket
|
500
500
|
Args:
|
501
501
|
execution_id: The execution id of the files
|
502
502
|
|
@@ -32,10 +32,10 @@ def _get_build_model_spec(
|
|
32
32
|
build_code_path: str = "",
|
33
33
|
build_v1_flag: bool = False,
|
34
34
|
build_config_url: str = "",
|
35
|
-
|
36
|
-
|
35
|
+
frogml_cli_wheel_url: str = "",
|
36
|
+
frogml_cli_version_url: str = "",
|
37
37
|
build_steps: Optional[List[str]] = None,
|
38
|
-
|
38
|
+
cli_version: str = "",
|
39
39
|
) -> RemoteBuildSpec:
|
40
40
|
build_spec = RemoteBuildSpec(
|
41
41
|
build_properties=BuildProperties(
|
@@ -65,7 +65,7 @@ def _get_build_model_spec(
|
|
65
65
|
python_env=PythonEnv(
|
66
66
|
git_credentials=build_conf.build_properties.model_uri.git_credentials,
|
67
67
|
git_credentials_secret=build_conf.build_properties.model_uri.git_credentials_secret,
|
68
|
-
qwak_sdk_version=
|
68
|
+
qwak_sdk_version=cli_version,
|
69
69
|
),
|
70
70
|
),
|
71
71
|
verbose=verbose,
|
@@ -75,8 +75,8 @@ def _get_build_model_spec(
|
|
75
75
|
),
|
76
76
|
build_properties_v1=BuildPropertiesV1(
|
77
77
|
build_config_url=build_config_url,
|
78
|
-
qwak_sdk_wheel_url=
|
79
|
-
qwak_sdk_version_url=
|
78
|
+
qwak_sdk_wheel_url=frogml_cli_wheel_url,
|
79
|
+
qwak_sdk_version_url=frogml_cli_version_url,
|
80
80
|
),
|
81
81
|
build_v1_flag=build_v1_flag,
|
82
82
|
build_steps=build_steps,
|
@@ -365,10 +365,10 @@ class BuildOrchestratorClient:
|
|
365
365
|
build_code_path: str = "",
|
366
366
|
build_v1_flag: bool = False,
|
367
367
|
build_config_url: str = "",
|
368
|
-
|
369
|
-
|
368
|
+
frogml_cli_wheel_url: str = "",
|
369
|
+
frogml_cli_version_url: str = "",
|
370
370
|
build_steps: Optional[List[str]] = None,
|
371
|
-
|
371
|
+
cli_version: str = "",
|
372
372
|
):
|
373
373
|
"""Initiate remote build
|
374
374
|
|
@@ -380,13 +380,13 @@ class BuildOrchestratorClient:
|
|
380
380
|
build_code_path: The code path saved by frogml
|
381
381
|
build_v1_flag:
|
382
382
|
build_config_url:
|
383
|
-
|
384
|
-
|
383
|
+
frogml_cli_wheel_url: Url for wheel file
|
384
|
+
frogml_cli_version_url: The cli version
|
385
385
|
build_steps: List of the steps the build is comprised from
|
386
|
-
|
386
|
+
cli_version: The cli version to build the
|
387
387
|
|
388
388
|
Raises:
|
389
|
-
|
389
|
+
FrogmlException: In case of failing to connect the service
|
390
390
|
"""
|
391
391
|
build_steps = build_steps if build_steps else []
|
392
392
|
|
@@ -399,10 +399,10 @@ class BuildOrchestratorClient:
|
|
399
399
|
build_code_path,
|
400
400
|
build_v1_flag,
|
401
401
|
build_config_url,
|
402
|
-
|
403
|
-
|
402
|
+
frogml_cli_wheel_url,
|
403
|
+
frogml_cli_version_url,
|
404
404
|
build_steps,
|
405
|
-
|
405
|
+
cli_version,
|
406
406
|
)
|
407
407
|
self._builds_orchestrator_stub.BuildModel(
|
408
408
|
BuildModelRequest(build_spec=build_spec)
|
@@ -424,7 +424,7 @@ class BuildOrchestratorClient:
|
|
424
424
|
build_id: The build ID to cancel
|
425
425
|
|
426
426
|
Raises:
|
427
|
-
|
427
|
+
FrogmlException: In case of failing to connect the service
|
428
428
|
"""
|
429
429
|
try:
|
430
430
|
self._builds_orchestrator_stub.CancelBuildModel(
|
@@ -444,7 +444,7 @@ class BuildOrchestratorClient:
|
|
444
444
|
Returns:
|
445
445
|
The base docker image name
|
446
446
|
Raises:
|
447
|
-
|
447
|
+
FrogmlException: In case of failing to connect the service
|
448
448
|
"""
|
449
449
|
try:
|
450
450
|
return self._builds_orchestrator_stub.GetBaseDockerImageName(
|
@@ -43,11 +43,11 @@ class InternalBuildOrchestratorClient:
|
|
43
43
|
build_code_path: str = "",
|
44
44
|
build_v1_flag: bool = False,
|
45
45
|
build_config_url: str = "",
|
46
|
-
|
47
|
-
|
46
|
+
frogml_cli_wheel_url: str = "",
|
47
|
+
frogml_cli_version_url: str = "",
|
48
48
|
build_steps: Optional[List[str]] = None,
|
49
49
|
build_initiator: BuildInitiator = None,
|
50
|
-
|
50
|
+
cli_version: str = "",
|
51
51
|
):
|
52
52
|
"""Initiate remote build
|
53
53
|
|
@@ -59,14 +59,14 @@ class InternalBuildOrchestratorClient:
|
|
59
59
|
build_code_path: The code path saved by frogml
|
60
60
|
build_v1_flag:
|
61
61
|
build_config_url:
|
62
|
-
|
63
|
-
|
62
|
+
frogml_cli_wheel_url: Url for wheel file
|
63
|
+
frogml_cli_version_url: The cli version
|
64
64
|
build_steps: List of the steps the build is comprised from
|
65
65
|
build_initiator: Override the initiator of build
|
66
|
-
|
66
|
+
cli_version: The cli version to build the
|
67
67
|
|
68
68
|
Raises:
|
69
|
-
|
69
|
+
FrogmlException: In case of failing to connect the service
|
70
70
|
"""
|
71
71
|
if not self._internal_builds_orchestrator_stub:
|
72
72
|
grpc_channel = self.grpc_channel_factory(
|
@@ -91,10 +91,10 @@ class InternalBuildOrchestratorClient:
|
|
91
91
|
build_code_path,
|
92
92
|
build_v1_flag,
|
93
93
|
build_config_url,
|
94
|
-
|
95
|
-
|
94
|
+
frogml_cli_wheel_url,
|
95
|
+
frogml_cli_version_url,
|
96
96
|
build_steps,
|
97
|
-
|
97
|
+
cli_version,
|
98
98
|
)
|
99
99
|
self._internal_builds_orchestrator_stub.BuildModel(
|
100
100
|
InternalBuildModelRequest(
|
@@ -24,8 +24,8 @@ from frogml_core.inner.build_logic.phases.phase_020_remote_register_frogml_build
|
|
24
24
|
from frogml_core.inner.build_logic.phases.phases_pipeline import PhasesPipeline
|
25
25
|
from frogml_core.inner.build_logic.trigger_build_context import TriggerBuildContext
|
26
26
|
|
27
|
-
FETCHING_MODEL_CODE_PHASE = "FETCHING_MODEL_CODE"
|
28
|
-
|
27
|
+
FETCHING_MODEL_CODE_PHASE: str = "FETCHING_MODEL_CODE"
|
28
|
+
REGISTERING_FROGML_BUILD_PHASE: str = "REGISTERING_FROGML_BUILD"
|
29
29
|
|
30
30
|
|
31
31
|
def get_trigger_build_api_steps(
|
@@ -47,7 +47,7 @@ def get_trigger_build_api_steps(
|
|
47
47
|
StartRemoteBuildStep(),
|
48
48
|
CleanupStep(),
|
49
49
|
],
|
50
|
-
build_phase=BuildPhase(phase_id=
|
50
|
+
build_phase=BuildPhase(phase_id=REGISTERING_FROGML_BUILD_PHASE),
|
51
51
|
)
|
52
52
|
|
53
53
|
return steps_root
|
@@ -1,7 +1,7 @@
|
|
1
|
-
MODEL_CODE_TAG = "code.zip"
|
2
|
-
SKINNY_MODEL_CODE_TAG = "skinny_code.zip"
|
3
|
-
|
4
|
-
FROGML_RUNTIME_WHEEL_TAG = "frogml_runtime_wheel"
|
5
|
-
FROGML_CORE_WHEEL_TAG = "frogml_core_wheel"
|
6
|
-
BUILD_CONFIG_TAG = "frogml_build_config"
|
7
|
-
FROGML_BUILT_MODEL_TAG = "frogml_built_model"
|
1
|
+
MODEL_CODE_TAG: str = "code.zip"
|
2
|
+
SKINNY_MODEL_CODE_TAG: str = "skinny_code.zip"
|
3
|
+
FROGML_CLI_VERSION_TAG: str = "frogml_cli_version"
|
4
|
+
FROGML_RUNTIME_WHEEL_TAG: str = "frogml_runtime_wheel"
|
5
|
+
FROGML_CORE_WHEEL_TAG: str = "frogml_core_wheel"
|
6
|
+
BUILD_CONFIG_TAG: str = "frogml_build_config"
|
7
|
+
FROGML_BUILT_MODEL_TAG: str = "frogml_built_model"
|
@@ -48,7 +48,7 @@ class Context(metaclass=ABCMeta):
|
|
48
48
|
|
49
49
|
# Upload model
|
50
50
|
model_code_remote_url: Optional[str] = field(default=None)
|
51
|
-
|
51
|
+
frogml_cli_version: Optional[str] = field(default=None)
|
52
52
|
|
53
53
|
# Image
|
54
54
|
base_image: Optional[str] = field(default=None)
|
@@ -11,16 +11,16 @@ from frogml_core.inner.build_logic.tools.ignore_files import (
|
|
11
11
|
)
|
12
12
|
|
13
13
|
_IGNORED_PATTERNS = [r"\..*", r"__pycache__"]
|
14
|
-
|
14
|
+
FROGML_IGNORE_FILE_NAME: str = ".frogmlignore"
|
15
15
|
|
16
16
|
|
17
17
|
def get_ignore_pattern(
|
18
18
|
src: str, main_dir: str, build_logger: BuildLogger
|
19
19
|
) -> Tuple[Callable[[Any, list[str]], set[str]], list[str]]:
|
20
|
-
if (Path(src) / main_dir /
|
21
|
-
ignore_file_path = Path(src) / main_dir /
|
20
|
+
if (Path(src) / main_dir / FROGML_IGNORE_FILE_NAME).is_file():
|
21
|
+
ignore_file_path: Path = Path(src) / main_dir / FROGML_IGNORE_FILE_NAME
|
22
22
|
else:
|
23
|
-
ignore_file_path = Path(src) /
|
23
|
+
ignore_file_path: Path = Path(src) / FROGML_IGNORE_FILE_NAME
|
24
24
|
|
25
25
|
ignored_patterns = (
|
26
26
|
load_patterns_from_ignore_file(
|
@@ -17,8 +17,8 @@ class SetVersionStep(Step):
|
|
17
17
|
def execute(self) -> None:
|
18
18
|
try:
|
19
19
|
self.build_logger.debug("Getting sdk version")
|
20
|
-
frogml_sdk_version = importlib.import_module("frogml_sdk").__version__
|
21
|
-
self.context.
|
20
|
+
frogml_sdk_version: str = importlib.import_module("frogml_sdk").__version__
|
21
|
+
self.context.frogml_cli_version = frogml_sdk_version
|
22
22
|
self.build_logger.debug(
|
23
23
|
self.SDK_VERSION_FOUND_MSG_FORMAT.format(
|
24
24
|
frogml_sdk_version=frogml_sdk_version
|
@@ -30,4 +30,4 @@ class SetVersionStep(Step):
|
|
30
30
|
frogml_core_version=frogml_core_version
|
31
31
|
)
|
32
32
|
)
|
33
|
-
self.context.
|
33
|
+
self.context.frogml_cli_version = frogml_core_version
|
@@ -3,7 +3,7 @@ from copy import deepcopy
|
|
3
3
|
from frogml_proto.qwak.builds.build_url_pb2 import BuildVersioningTagsType
|
4
4
|
from frogml_core.inner.build_logic.constants.upload_tag import (
|
5
5
|
BUILD_CONFIG_TAG,
|
6
|
-
|
6
|
+
FROGML_CLI_VERSION_TAG,
|
7
7
|
MODEL_CODE_TAG,
|
8
8
|
)
|
9
9
|
from frogml_core.inner.build_logic.interface.step_inteface import Step
|
@@ -24,10 +24,10 @@ class StartRemoteBuildStep(Step):
|
|
24
24
|
build_conf=config_copy,
|
25
25
|
build_v1_flag=False,
|
26
26
|
build_config_url=self.get_download_url(BUILD_CONFIG_TAG),
|
27
|
-
|
27
|
+
frogml_cli_version_url=self.get_download_url(FROGML_CLI_VERSION_TAG),
|
28
28
|
resolved_model_url=self.get_download_url(MODEL_CODE_TAG),
|
29
29
|
git_commit_id=self.context.git_commit_id,
|
30
|
-
|
30
|
+
cli_version=self.context.frogml_cli_version,
|
31
31
|
)
|
32
32
|
self.build_logger.info("Remote build started successfully")
|
33
33
|
|
@@ -19,7 +19,7 @@ from frogml_core.inner.build_logic.constants.upload_tag import (
|
|
19
19
|
FROGML_BUILT_MODEL_TAG,
|
20
20
|
FROGML_CORE_WHEEL_TAG,
|
21
21
|
FROGML_RUNTIME_WHEEL_TAG,
|
22
|
-
|
22
|
+
FROGML_CLI_VERSION_TAG,
|
23
23
|
MODEL_CODE_TAG,
|
24
24
|
SKINNY_MODEL_CODE_TAG,
|
25
25
|
)
|
@@ -37,13 +37,13 @@ from frogml_core.inner.build_logic.tools.ignore_files import (
|
|
37
37
|
_MAX_FILE_SIZE_BYTES = 10000000
|
38
38
|
|
39
39
|
|
40
|
-
def should_retry(
|
40
|
+
def should_retry(frogml_exception: FrogmlException) -> bool:
|
41
41
|
# when Got 403 from Jfrog it means that the reposity doesn't exist. It may happen when in the first build in the project
|
42
|
-
return str(
|
42
|
+
return "403" in str(frogml_exception.message)
|
43
43
|
|
44
44
|
|
45
45
|
class UploadStep(Step):
|
46
|
-
STEP_DESCRIPTION = "Saving
|
46
|
+
STEP_DESCRIPTION = "Saving FrogML Model"
|
47
47
|
|
48
48
|
def description(self) -> str:
|
49
49
|
return self.STEP_DESCRIPTION
|
@@ -124,13 +124,15 @@ class UploadStep(Step):
|
|
124
124
|
config_file_temp.write_text(self.config.to_yaml())
|
125
125
|
|
126
126
|
# Dump frogml-sdk version for upload
|
127
|
-
|
128
|
-
|
127
|
+
frogml_cli_version_temp_file_path: Path = (
|
128
|
+
self.context.host_temp_local_build_dir / "VERSION"
|
129
|
+
)
|
130
|
+
frogml_cli_version_temp_file_path.write_text(self.context.frogml_cli_version)
|
129
131
|
|
130
132
|
files_tag_iterator = [
|
131
133
|
(full_size_zip_file, MODEL_CODE_TAG),
|
132
134
|
(skinny_size_zip_file, SKINNY_MODEL_CODE_TAG),
|
133
|
-
(
|
135
|
+
(frogml_cli_version_temp_file_path, FROGML_CLI_VERSION_TAG),
|
134
136
|
(config_file_temp, BUILD_CONFIG_TAG),
|
135
137
|
]
|
136
138
|
|
@@ -211,13 +213,13 @@ class UploadStep(Step):
|
|
211
213
|
headers = {}
|
212
214
|
|
213
215
|
try:
|
214
|
-
self.build_logger.debug(f"Upload file {file} to
|
216
|
+
self.build_logger.debug(f"Upload file {file} to FrogML storage")
|
215
217
|
|
216
218
|
self.send_request(
|
217
219
|
upload_url, file, all_files_size_to_upload, read_so_far, headers
|
218
220
|
)
|
219
221
|
self.build_logger.debug(
|
220
|
-
f"File {file} uploaded to
|
222
|
+
f"File {file} uploaded to FrogML storage successfully"
|
221
223
|
)
|
222
224
|
except Exception as e:
|
223
225
|
raise FrogmlGeneralBuildException(
|
@@ -5,16 +5,16 @@ from frogml_core.inner.build_logic.interface.build_logger_interface import Build
|
|
5
5
|
|
6
6
|
def load_patterns_from_ignore_file(build_logger: BuildLogger, ignore_file_path: Path):
|
7
7
|
if Path(ignore_file_path).is_file():
|
8
|
-
build_logger.info("Found a
|
8
|
+
build_logger.info("Found a FrogML ignore file - will ignore listed patterns")
|
9
9
|
|
10
10
|
with open(ignore_file_path, "r") as igonre_file:
|
11
11
|
patterns_to_ignore = [
|
12
12
|
pattern.strip() for pattern in igonre_file.readlines()
|
13
13
|
]
|
14
14
|
build_logger.debug(
|
15
|
-
f"Patterns from
|
15
|
+
f"Patterns from FrogML igonre file detected - {str(patterns_to_ignore)}"
|
16
16
|
)
|
17
17
|
return patterns_to_ignore
|
18
18
|
|
19
|
-
build_logger.debug("no
|
19
|
+
build_logger.debug("no FrogML ignore file was found, skipping")
|
20
20
|
return []
|
@@ -32,11 +32,8 @@ def wire_dependencies():
|
|
32
32
|
model_management,
|
33
33
|
model_version_manager,
|
34
34
|
project,
|
35
|
-
prompt_manager,
|
36
35
|
system_secret,
|
37
36
|
user_application_instance,
|
38
|
-
vector_store,
|
39
|
-
workspace_manager,
|
40
37
|
jfrog_gateway,
|
41
38
|
)
|
42
39
|
|
@@ -62,11 +59,8 @@ def wire_dependencies():
|
|
62
59
|
feature_store,
|
63
60
|
user_application_instance,
|
64
61
|
alerts_registry,
|
65
|
-
workspace_manager,
|
66
|
-
vector_store,
|
67
62
|
integration_management,
|
68
63
|
system_secret,
|
69
|
-
prompt_manager,
|
70
64
|
model_version_manager,
|
71
65
|
jfrog_gateway,
|
72
66
|
]
|
@@ -14,7 +14,7 @@ from .output_adapters.default_output_adapter import DefaultOutputAdapter
|
|
14
14
|
from .output_adapters.json_output_adapter import JsonOutputAdapter
|
15
15
|
from .output_adapters.numpy_output_adapter import NumpyOutputAdapter
|
16
16
|
from .output_adapters.proto_output_adapter import ProtoOutputAdapter
|
17
|
-
from .output_adapters.
|
17
|
+
from .output_adapters.frogml_with_default_fallback import AutodetectOutputAdapter
|
18
18
|
from .output_adapters.tf_tensor_output_adapter import TfTensorOutputAdapter
|
19
19
|
|
20
20
|
__all__ = [
|
@@ -27,7 +27,7 @@ def get_input_adapter(
|
|
27
27
|
) -> Union[JsonInput, DataframeInput, StringInput]:
|
28
28
|
adapter = getattr(model.predict, "_input_adapter", "")
|
29
29
|
|
30
|
-
class
|
30
|
+
class FrogMLInput(StringInput):
|
31
31
|
def extract_user_func_args(self, data: str) -> Any:
|
32
32
|
try:
|
33
33
|
return adapter.extract_user_func_arg(data)
|
@@ -38,15 +38,15 @@ def get_input_adapter(
|
|
38
38
|
f"please check model logs.",
|
39
39
|
)
|
40
40
|
|
41
|
-
class MultiFormatInput(
|
41
|
+
class MultiFormatInput(FrogMLInput):
|
42
42
|
pass
|
43
43
|
|
44
44
|
mapping = {
|
45
45
|
JsonInputAdapter: JsonInput,
|
46
46
|
DataFrameInputAdapter: DataframeInput,
|
47
47
|
StringInputAdapter: StringInput,
|
48
|
-
ProtoInputAdapter:
|
49
|
-
NumpyInputAdapter:
|
48
|
+
ProtoInputAdapter: FrogMLInput,
|
49
|
+
NumpyInputAdapter: FrogMLInput,
|
50
50
|
MultiInputAdapter: MultiFormatInput,
|
51
51
|
TfTensorInputAdapter: TfTensorInput,
|
52
52
|
ImageInputAdapter: ImageInput,
|
@@ -55,8 +55,8 @@ def get_input_adapter(
|
|
55
55
|
|
56
56
|
if adapter:
|
57
57
|
adapter.mappings = mapping
|
58
|
-
for
|
59
|
-
if isinstance(adapter,
|
58
|
+
for frogml_impl, runtime_impl in mapping.items():
|
59
|
+
if isinstance(adapter, frogml_impl):
|
60
60
|
if isinstance(adapter, DataFrameInputAdapter) and hasattr(
|
61
61
|
adapter, "input_orient"
|
62
62
|
):
|
@@ -23,7 +23,7 @@ def get_output_adapter(
|
|
23
23
|
):
|
24
24
|
adapter = getattr(model.predict, "_output_adapter", "")
|
25
25
|
|
26
|
-
class
|
26
|
+
class FrogMLOutput(JsonOutput):
|
27
27
|
def __init__(self, **kwargs):
|
28
28
|
super().__init__(**kwargs)
|
29
29
|
|
@@ -37,7 +37,7 @@ def get_output_adapter(
|
|
37
37
|
status_code=500,
|
38
38
|
)
|
39
39
|
|
40
|
-
class
|
40
|
+
class FrogMLOutputWithDefaultFallbackOutput(FrogMLOutput):
|
41
41
|
def __init__(self, **kwargs):
|
42
42
|
super().__init__(**kwargs)
|
43
43
|
|
@@ -50,7 +50,7 @@ def get_output_adapter(
|
|
50
50
|
else return_result
|
51
51
|
)
|
52
52
|
if issubclass(type(first_result), Message):
|
53
|
-
response =
|
53
|
+
response = FrogMLOutput().pack_user_func_return_value(return_result)
|
54
54
|
return response
|
55
55
|
else:
|
56
56
|
return DefaultOutput().pack_user_func_return_value(return_result)
|
@@ -59,13 +59,13 @@ def get_output_adapter(
|
|
59
59
|
JsonOutputAdapter: JsonOutput,
|
60
60
|
DataFrameOutputAdapter: DataFrameOutput,
|
61
61
|
DefaultOutputAdapter: DefaultOutput,
|
62
|
-
AutodetectOutputAdapter:
|
63
|
-
ProtoOutputAdapter:
|
64
|
-
NumpyOutputAdapter:
|
62
|
+
AutodetectOutputAdapter: FrogMLOutputWithDefaultFallbackOutput,
|
63
|
+
ProtoOutputAdapter: FrogMLOutput,
|
64
|
+
NumpyOutputAdapter: FrogMLOutput,
|
65
65
|
TfTensorOutputAdapter: TfTensorOutput,
|
66
66
|
}
|
67
|
-
for
|
68
|
-
if isinstance(adapter,
|
67
|
+
for frogml_impl, runtime_impl in mapping.items():
|
68
|
+
if isinstance(adapter, frogml_impl):
|
69
69
|
if isinstance(adapter, DataFrameOutputAdapter) and hasattr(
|
70
70
|
adapter, "output_orient"
|
71
71
|
):
|
@@ -61,8 +61,8 @@ def _extract_online_features(model, df):
|
|
61
61
|
|
62
62
|
@contextmanager
|
63
63
|
def _set_local_mode():
|
64
|
-
os.environ["
|
64
|
+
os.environ["FROGML_IS_RUN_LOCAL"] = "true"
|
65
65
|
try:
|
66
66
|
yield
|
67
67
|
finally:
|
68
|
-
del os.environ["
|
68
|
+
del os.environ["FROGML_IS_RUN_LOCAL"]
|
@@ -27,7 +27,7 @@ def validate_and_sanitize_features_name(
|
|
27
27
|
Add the current env qualifier if env is missing and transform name to lowercase
|
28
28
|
:param features:
|
29
29
|
:return: sanitized features with lower case (to support case-insensitive) fully qualified feature names
|
30
|
-
:exception
|
30
|
+
:exception FrogmlException: if the feature name does not adhere to the convention
|
31
31
|
"""
|
32
32
|
ecosystem_utils = EcosystemUtils()
|
33
33
|
current_env_name = ecosystem_utils.get_current_environment_name()
|