polyaxon 2.5.3__py3-none-any.whl → 2.6.0.post1__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.
- polyaxon/_auxiliaries/default_scheduling.py +17 -7
- polyaxon/_auxiliaries/init.py +14 -6
- polyaxon/_auxiliaries/sidecar.py +10 -8
- polyaxon/_compiler/resolver/agent.py +10 -9
- polyaxon/_deploy/schemas/auth.py +3 -3
- polyaxon/_deploy/schemas/celery.py +10 -8
- polyaxon/_deploy/schemas/deployment.py +148 -115
- polyaxon/_deploy/schemas/email.py +8 -8
- polyaxon/_deploy/schemas/ingress.py +7 -7
- polyaxon/_deploy/schemas/intervals.py +3 -1
- polyaxon/_deploy/schemas/operators.py +8 -8
- polyaxon/_deploy/schemas/proxy.py +9 -9
- polyaxon/_deploy/schemas/rbac.py +1 -1
- polyaxon/_deploy/schemas/root_user.py +5 -5
- polyaxon/_deploy/schemas/security_context.py +25 -15
- polyaxon/_deploy/schemas/service.py +73 -69
- polyaxon/_deploy/schemas/ssl.py +3 -3
- polyaxon/_deploy/schemas/ui.py +10 -8
- polyaxon/_docker/builder/builder.py +4 -1
- polyaxon/_docker/converter/base/containers.py +4 -7
- polyaxon/_docker/converter/base/env_vars.py +5 -5
- polyaxon/_docker/converter/base/mounts.py +2 -2
- polyaxon/_docker/docker_types.py +57 -30
- polyaxon/_flow/__init__.py +3 -2
- polyaxon/_flow/builds/__init__.py +8 -8
- polyaxon/_flow/cache/__init__.py +4 -4
- polyaxon/_flow/component/base.py +25 -18
- polyaxon/_flow/component/component.py +4 -3
- polyaxon/_flow/early_stopping/__init__.py +1 -1
- polyaxon/_flow/early_stopping/policies.py +12 -10
- polyaxon/_flow/environment/__init__.py +42 -24
- polyaxon/_flow/hooks/__init__.py +11 -11
- polyaxon/_flow/init/__init__.py +41 -25
- polyaxon/_flow/io/io.py +59 -47
- polyaxon/_flow/joins/__init__.py +5 -5
- polyaxon/_flow/matrix/bayes.py +23 -17
- polyaxon/_flow/matrix/grid_search.py +16 -7
- polyaxon/_flow/matrix/hyperband.py +10 -10
- polyaxon/_flow/matrix/hyperopt.py +14 -9
- polyaxon/_flow/matrix/iterative.py +14 -8
- polyaxon/_flow/matrix/mapping.py +4 -4
- polyaxon/_flow/matrix/params.py +138 -77
- polyaxon/_flow/matrix/random_search.py +10 -5
- polyaxon/_flow/matrix/tuner.py +4 -4
- polyaxon/_flow/mounts/artifacts_mounts.py +1 -1
- polyaxon/_flow/notifications/__init__.py +1 -1
- polyaxon/_flow/operations/base.py +10 -8
- polyaxon/_flow/operations/compiled_operation.py +5 -4
- polyaxon/_flow/operations/operation.py +30 -22
- polyaxon/_flow/optimization/__init__.py +2 -2
- polyaxon/_flow/params/params.py +11 -10
- polyaxon/_flow/plugins/__init__.py +19 -13
- polyaxon/_flow/run/dag.py +12 -9
- polyaxon/_flow/run/dask/dask.py +4 -4
- polyaxon/_flow/run/dask/replica.py +17 -11
- polyaxon/_flow/run/job.py +17 -11
- polyaxon/_flow/run/kubeflow/mpi_job.py +10 -5
- polyaxon/_flow/run/kubeflow/mx_job.py +25 -9
- polyaxon/_flow/run/kubeflow/paddle_job.py +16 -9
- polyaxon/_flow/run/kubeflow/pytorch_job.py +24 -17
- polyaxon/_flow/run/kubeflow/replica.py +17 -11
- polyaxon/_flow/run/kubeflow/scheduling_policy.py +7 -5
- polyaxon/_flow/run/kubeflow/tf_job.py +15 -8
- polyaxon/_flow/run/kubeflow/xgboost_job.py +9 -4
- polyaxon/_flow/run/ray/ray.py +9 -6
- polyaxon/_flow/run/ray/replica.py +25 -16
- polyaxon/_flow/run/resources.py +14 -13
- polyaxon/_flow/run/service.py +4 -4
- polyaxon/_flow/schedules/cron.py +4 -4
- polyaxon/_flow/schedules/interval.py +4 -4
- polyaxon/_flow/templates/__init__.py +3 -3
- polyaxon/_flow/termination/__init__.py +3 -3
- polyaxon/_fs/watcher.py +26 -27
- polyaxon/_k8s/k8s_validation.py +1 -1
- polyaxon/_local_process/converter/base/containers.py +4 -7
- polyaxon/_local_process/converter/base/env_vars.py +5 -5
- polyaxon/_local_process/process_types.py +15 -12
- polyaxon/_polyaxonfile/specs/compiled_operation.py +1 -1
- polyaxon/_polyaxonfile/specs/libs/validator.py +1 -1
- polyaxon/_polyaxonfile/specs/operation.py +1 -1
- polyaxon/_runner/agent/sync_agent.py +1 -1
- polyaxon/_runner/converter/converter.py +1 -1
- polyaxon/_schemas/agent.py +69 -37
- polyaxon/_schemas/authentication.py +4 -4
- polyaxon/_schemas/base.py +26 -2
- polyaxon/_schemas/checks.py +3 -3
- polyaxon/_schemas/cli.py +4 -6
- polyaxon/_schemas/client.py +20 -18
- polyaxon/_schemas/compatibility.py +4 -4
- polyaxon/_schemas/container_resources.py +1 -1
- polyaxon/_schemas/home.py +3 -3
- polyaxon/_schemas/installation.py +8 -8
- polyaxon/_schemas/lifecycle.py +21 -21
- polyaxon/_schemas/log_handler.py +2 -2
- polyaxon/_schemas/services.py +26 -14
- polyaxon/_schemas/types/artifacts.py +3 -3
- polyaxon/_schemas/types/dockerfile.py +14 -12
- polyaxon/_schemas/types/event.py +2 -2
- polyaxon/_schemas/types/file.py +3 -3
- polyaxon/_schemas/types/git.py +12 -4
- polyaxon/_schemas/types/tensorboard.py +14 -8
- polyaxon/_schemas/user.py +3 -3
- polyaxon/_schemas/version.py +2 -2
- polyaxon/_sdk/api/agents_v1_api.py +45 -45
- polyaxon/_sdk/api/artifacts_stores_v1_api.py +3 -3
- polyaxon/_sdk/api/auth_v1_api.py +13 -13
- polyaxon/_sdk/api/connections_v1_api.py +15 -15
- polyaxon/_sdk/api/dashboards_v1_api.py +15 -15
- polyaxon/_sdk/api/organizations_v1_api.py +77 -77
- polyaxon/_sdk/api/presets_v1_api.py +15 -15
- polyaxon/_sdk/api/project_dashboards_v1_api.py +17 -17
- polyaxon/_sdk/api/project_searches_v1_api.py +17 -17
- polyaxon/_sdk/api/projects_v1_api.py +65 -65
- polyaxon/_sdk/api/queues_v1_api.py +19 -19
- polyaxon/_sdk/api/runs_v1_api.py +127 -127
- polyaxon/_sdk/api/searches_v1_api.py +15 -15
- polyaxon/_sdk/api/service_accounts_v1_api.py +27 -27
- polyaxon/_sdk/api/tags_v1_api.py +17 -17
- polyaxon/_sdk/api/teams_v1_api.py +51 -51
- polyaxon/_sdk/api/users_v1_api.py +25 -25
- polyaxon/_sdk/api/versions_v1_api.py +7 -7
- polyaxon/_sdk/schemas/v1_activity.py +8 -8
- polyaxon/_sdk/schemas/v1_agent.py +17 -17
- polyaxon/_sdk/schemas/v1_agent_state_response.py +4 -4
- polyaxon/_sdk/schemas/v1_agent_state_response_agent_state.py +10 -10
- polyaxon/_sdk/schemas/v1_agent_status_body_request.py +3 -3
- polyaxon/_sdk/schemas/v1_analytics_spec.py +4 -4
- polyaxon/_sdk/schemas/v1_artifact_tree.py +3 -3
- polyaxon/_sdk/schemas/v1_auth.py +1 -1
- polyaxon/_sdk/schemas/v1_cloning.py +3 -3
- polyaxon/_sdk/schemas/v1_connection_response.py +9 -9
- polyaxon/_sdk/schemas/v1_dashboard.py +9 -9
- polyaxon/_sdk/schemas/v1_dashboard_spec.py +5 -5
- polyaxon/_sdk/schemas/v1_entities_tags.py +2 -2
- polyaxon/_sdk/schemas/v1_entities_transfer.py +2 -2
- polyaxon/_sdk/schemas/v1_entity_notification_body.py +7 -7
- polyaxon/_sdk/schemas/v1_entity_stage_body_request.py +5 -5
- polyaxon/_sdk/schemas/v1_entity_status_body_request.py +5 -5
- polyaxon/_sdk/schemas/v1_events_response.py +2 -2
- polyaxon/_sdk/schemas/v1_list_activities_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_agents_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_bookmarks_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_connections_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_dashboards_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_organization_members_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_organizations_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_presets_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_project_versions_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_projects_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_queues_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_run_artifacts_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_run_connections_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_run_edges_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_runs_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_searches_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_service_accounts_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_tags_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_team_members_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_teams_response.py +4 -4
- polyaxon/_sdk/schemas/v1_list_token_response.py +4 -4
- polyaxon/_sdk/schemas/v1_operation_body.py +8 -8
- polyaxon/_sdk/schemas/v1_organization.py +16 -16
- polyaxon/_sdk/schemas/v1_organization_member.py +6 -6
- polyaxon/_sdk/schemas/v1_password_change.py +3 -3
- polyaxon/_sdk/schemas/v1_pipeline.py +3 -3
- polyaxon/_sdk/schemas/v1_preset.py +11 -11
- polyaxon/_sdk/schemas/v1_project.py +17 -17
- polyaxon/_sdk/schemas/v1_project_settings.py +11 -11
- polyaxon/_sdk/schemas/v1_project_version.py +20 -20
- polyaxon/_sdk/schemas/v1_queue.py +12 -12
- polyaxon/_sdk/schemas/v1_run.py +38 -38
- polyaxon/_sdk/schemas/v1_run_connection.py +3 -3
- polyaxon/_sdk/schemas/v1_run_edge.py +5 -5
- polyaxon/_sdk/schemas/v1_run_edge_lineage.py +3 -3
- polyaxon/_sdk/schemas/v1_run_edges_graph.py +1 -1
- polyaxon/_sdk/schemas/v1_run_reference_catalog.py +4 -4
- polyaxon/_sdk/schemas/v1_run_settings.py +9 -9
- polyaxon/_sdk/schemas/v1_search.py +10 -10
- polyaxon/_sdk/schemas/v1_search_spec.py +14 -14
- polyaxon/_sdk/schemas/v1_section_spec.py +12 -12
- polyaxon/_sdk/schemas/v1_service_account.py +9 -9
- polyaxon/_sdk/schemas/v1_settings_catalog.py +4 -4
- polyaxon/_sdk/schemas/v1_tag.py +6 -6
- polyaxon/_sdk/schemas/v1_team.py +11 -11
- polyaxon/_sdk/schemas/v1_team_member.py +6 -6
- polyaxon/_sdk/schemas/v1_team_settings.py +2 -2
- polyaxon/_sdk/schemas/v1_token.py +10 -10
- polyaxon/_sdk/schemas/v1_trial_start.py +6 -6
- polyaxon/_sdk/schemas/v1_user.py +6 -6
- polyaxon/_sdk/schemas/v1_user_access.py +7 -7
- polyaxon/_sdk/schemas/v1_user_email.py +1 -1
- polyaxon/_sdk/schemas/v1_user_singup.py +5 -5
- polyaxon/_sdk/schemas/v1_uuids.py +1 -1
- polyaxon/_utils/test_utils.py +2 -1
- polyaxon/pkg.py +1 -1
- {polyaxon-2.5.3.dist-info → polyaxon-2.6.0.post1.dist-info}/METADATA +10 -10
- {polyaxon-2.5.3.dist-info → polyaxon-2.6.0.post1.dist-info}/RECORD +201 -201
- {polyaxon-2.5.3.dist-info → polyaxon-2.6.0.post1.dist-info}/LICENSE +0 -0
- {polyaxon-2.5.3.dist-info → polyaxon-2.6.0.post1.dist-info}/WHEEL +0 -0
- {polyaxon-2.5.3.dist-info → polyaxon-2.6.0.post1.dist-info}/entry_points.txt +0 -0
- {polyaxon-2.5.3.dist-info → polyaxon-2.6.0.post1.dist-info}/top_level.txt +0 -0
@@ -13,9 +13,9 @@ class V1MedianStoppingPolicy(BaseSchemaModel):
|
|
13
13
|
_USE_DISCRIMINATOR = True
|
14
14
|
|
15
15
|
kind: Literal[_IDENTIFIER] = _IDENTIFIER
|
16
|
-
evaluation_interval: IntOrRef = Field(alias="evaluationInterval")
|
17
|
-
min_interval: Optional[IntOrRef] = Field(alias="minInterval")
|
18
|
-
min_samples: Optional[IntOrRef] = Field(alias="minSamples")
|
16
|
+
evaluation_interval: IntOrRef = Field(alias="evaluationInterval", default=None)
|
17
|
+
min_interval: Optional[IntOrRef] = Field(alias="minInterval", default=None)
|
18
|
+
min_samples: Optional[IntOrRef] = Field(alias="minSamples", default=None)
|
19
19
|
|
20
20
|
|
21
21
|
class V1TruncationStoppingPolicy(BaseSchemaModel):
|
@@ -24,9 +24,11 @@ class V1TruncationStoppingPolicy(BaseSchemaModel):
|
|
24
24
|
kind: Literal[_IDENTIFIER] = _IDENTIFIER
|
25
25
|
percent: FloatOrRef
|
26
26
|
evaluation_interval: IntOrRef = Field(alias="evaluationInterval")
|
27
|
-
min_interval: Optional[IntOrRef] = Field(alias="minInterval")
|
28
|
-
min_samples: Optional[IntOrRef] = Field(alias="minSamples")
|
29
|
-
include_succeeded: Optional[BoolOrRef] = Field(
|
27
|
+
min_interval: Optional[IntOrRef] = Field(alias="minInterval", default=None)
|
28
|
+
min_samples: Optional[IntOrRef] = Field(alias="minSamples", default=None)
|
29
|
+
include_succeeded: Optional[BoolOrRef] = Field(
|
30
|
+
alias="includeSucceeded", default=None
|
31
|
+
)
|
30
32
|
|
31
33
|
|
32
34
|
class V1DiffStoppingPolicy(BaseSchemaModel):
|
@@ -35,13 +37,13 @@ class V1DiffStoppingPolicy(BaseSchemaModel):
|
|
35
37
|
kind: Literal[_IDENTIFIER] = _IDENTIFIER
|
36
38
|
percent: FloatOrRef
|
37
39
|
evaluation_interval: IntOrRef = Field(alias="evaluationInterval")
|
38
|
-
min_interval: Optional[IntOrRef] = Field(alias="minInterval")
|
39
|
-
min_samples: Optional[IntOrRef] = Field(alias="minSamples")
|
40
|
+
min_interval: Optional[IntOrRef] = Field(alias="minInterval", default=None)
|
41
|
+
min_samples: Optional[IntOrRef] = Field(alias="minSamples", default=None)
|
40
42
|
|
41
43
|
|
42
44
|
V1EarlyStoppingPolicy = Annotated[
|
43
45
|
Union[V1MedianStoppingPolicy, V1TruncationStoppingPolicy, V1DiffStoppingPolicy],
|
44
|
-
Field(discriminator="kind"
|
46
|
+
Field(discriminator="kind"),
|
45
47
|
]
|
46
48
|
|
47
49
|
|
@@ -150,7 +152,7 @@ class V1MetricEarlyStopping(BaseSchemaModel):
|
|
150
152
|
metric: StrictStr
|
151
153
|
value: FloatOrRef
|
152
154
|
optimization: Union[StrictFloat, V1Optimization]
|
153
|
-
policy: Optional[V1EarlyStoppingPolicy]
|
155
|
+
policy: Optional[V1EarlyStoppingPolicy] = None
|
154
156
|
|
155
157
|
|
156
158
|
class V1FailureEarlyStopping(BaseSchemaModel):
|
@@ -1,7 +1,13 @@
|
|
1
1
|
from typing import Dict, List, Optional, Union
|
2
2
|
from typing_extensions import Literal
|
3
3
|
|
4
|
-
from clipped.compact.pydantic import
|
4
|
+
from clipped.compact.pydantic import (
|
5
|
+
Field,
|
6
|
+
StrictStr,
|
7
|
+
field_validator,
|
8
|
+
validation_always,
|
9
|
+
validation_before,
|
10
|
+
)
|
5
11
|
|
6
12
|
from polyaxon._k8s import k8s_schemas, k8s_validation
|
7
13
|
from polyaxon._schemas.base import BaseSchemaModel
|
@@ -389,52 +395,64 @@ class V1Environment(BaseSchemaModel):
|
|
389
395
|
"dnsConfig",
|
390
396
|
]
|
391
397
|
|
392
|
-
labels: Optional[Dict[StrictStr, StrictStr]]
|
393
|
-
annotations: Optional[Dict[StrictStr, StrictStr]]
|
394
|
-
node_selector: Optional[Dict[StrictStr, StrictStr]] = Field(
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
398
|
+
labels: Optional[Dict[StrictStr, StrictStr]] = None
|
399
|
+
annotations: Optional[Dict[StrictStr, StrictStr]] = None
|
400
|
+
node_selector: Optional[Dict[StrictStr, StrictStr]] = Field(
|
401
|
+
alias="nodeSelector", default=None
|
402
|
+
)
|
403
|
+
affinity: Optional[Union[k8s_schemas.V1Affinity, Dict]] = None
|
404
|
+
tolerations: Optional[List[Union[k8s_schemas.V1Toleration, Dict]]] = None
|
405
|
+
node_name: Optional[StrictStr] = Field(alias="nodeName", default=None)
|
406
|
+
service_account_name: Optional[StrictStr] = Field(
|
407
|
+
alias="serviceAccountName", default=None
|
408
|
+
)
|
409
|
+
host_aliases: Optional[List[k8s_schemas.V1HostAlias]] = Field(
|
410
|
+
alias="hostAliases", default=None
|
411
|
+
)
|
400
412
|
security_context: Optional[Union[k8s_schemas.V1SecurityContext, Dict]] = Field(
|
401
|
-
alias="securityContext"
|
413
|
+
alias="securityContext", default=None
|
414
|
+
)
|
415
|
+
image_pull_secrets: Optional[List[StrictStr]] = Field(
|
416
|
+
alias="imagePullSecrets", default=None
|
417
|
+
)
|
418
|
+
host_network: Optional[bool] = Field(alias="hostNetwork", default=None)
|
419
|
+
host_pid: Optional[bool] = Field(alias="hostPID", default=None)
|
420
|
+
dns_policy: Optional[StrictStr] = Field(alias="dnsPolicy", default=None)
|
421
|
+
dns_config: Optional[k8s_schemas.V1PodDNSConfig] = Field(
|
422
|
+
alias="dnsConfig", default=None
|
423
|
+
)
|
424
|
+
scheduler_name: Optional[StrictStr] = Field(alias="schedulerName", default=None)
|
425
|
+
priority_class_name: Optional[StrictStr] = Field(
|
426
|
+
alias="priorityClassName", default=None
|
402
427
|
)
|
403
|
-
|
404
|
-
host_network: Optional[bool] = Field(alias="hostNetwork")
|
405
|
-
host_pid: Optional[bool] = Field(alias="hostPID")
|
406
|
-
dns_policy: Optional[StrictStr] = Field(alias="dnsPolicy")
|
407
|
-
dns_config: Optional[k8s_schemas.V1PodDNSConfig] = Field(alias="dnsConfig")
|
408
|
-
scheduler_name: Optional[StrictStr] = Field(alias="schedulerName")
|
409
|
-
priority_class_name: Optional[StrictStr] = Field(alias="priorityClassName")
|
410
|
-
priority: Optional[int]
|
428
|
+
priority: Optional[int] = None
|
411
429
|
restart_policy: Optional[
|
412
430
|
Literal["Always", "OnFailure", "Never", "ExitCode"]
|
413
|
-
] = Field(alias="restartPolicy")
|
431
|
+
] = Field(alias="restartPolicy", default=None)
|
414
432
|
|
415
|
-
@
|
433
|
+
@field_validator("affinity", **validation_always, **validation_before)
|
416
434
|
def validate_affinity(cls, v):
|
417
435
|
return k8s_validation.validate_k8s_affinity(v)
|
418
436
|
|
419
|
-
@
|
437
|
+
@field_validator("tolerations", **validation_always, **validation_before)
|
420
438
|
def validate_tolerations(cls, v):
|
421
439
|
if not v:
|
422
440
|
return v
|
423
441
|
return [k8s_validation.validate_k8s_toleration(vi) for vi in v]
|
424
442
|
|
425
|
-
@
|
443
|
+
@field_validator("host_aliases", **validation_always, **validation_before)
|
426
444
|
def validate_host_aliases(cls, v):
|
427
445
|
if not v:
|
428
446
|
return v
|
429
447
|
return [k8s_validation.validate_k8s_host_alias(vi) for vi in v]
|
430
448
|
|
431
|
-
@
|
449
|
+
@field_validator("security_context", **validation_always, **validation_before)
|
432
450
|
def validate_security_context(cls, v):
|
433
451
|
if not v:
|
434
452
|
return v
|
435
453
|
return k8s_validation.validate_k8s_security_context(v)
|
436
454
|
|
437
|
-
@
|
455
|
+
@field_validator("dns_config", **validation_always, **validation_before)
|
438
456
|
def validate_dns_config(cls, v):
|
439
457
|
if not v:
|
440
458
|
return v
|
polyaxon/_flow/hooks/__init__.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
from typing import Dict, List, Optional, Union
|
2
2
|
|
3
|
-
from clipped.compact.pydantic import Field, StrictStr,
|
3
|
+
from clipped.compact.pydantic import Field, StrictStr, field_validator
|
4
4
|
from clipped.types.ref_or_obj import BoolOrRef, RefField
|
5
5
|
|
6
6
|
from polyaxon._flow.params import V1Param
|
@@ -208,16 +208,16 @@ class V1Hook(BaseSchemaModel):
|
|
208
208
|
_IDENTIFIER = "hook"
|
209
209
|
|
210
210
|
hub_ref: StrictStr = Field(alias="hubRef")
|
211
|
-
connection: Optional[StrictStr]
|
212
|
-
trigger: Optional[V1Statuses]
|
213
|
-
conditions: Optional[StrictStr]
|
214
|
-
presets: Optional[List[StrictStr]]
|
215
|
-
queue: Optional[StrictStr]
|
216
|
-
namespace: Optional[StrictStr]
|
217
|
-
params: Optional[Union[Dict[str, V1Param], RefField]]
|
218
|
-
disable_defaults: Optional[BoolOrRef] = Field(alias="disableDefaults")
|
219
|
-
|
220
|
-
@
|
211
|
+
connection: Optional[StrictStr] = None
|
212
|
+
trigger: Optional[V1Statuses] = None
|
213
|
+
conditions: Optional[StrictStr] = None
|
214
|
+
presets: Optional[List[StrictStr]] = None
|
215
|
+
queue: Optional[StrictStr] = None
|
216
|
+
namespace: Optional[StrictStr] = None
|
217
|
+
params: Optional[Union[Dict[str, V1Param], RefField]] = None
|
218
|
+
disable_defaults: Optional[BoolOrRef] = Field(alias="disableDefaults", default=None)
|
219
|
+
|
220
|
+
@field_validator("trigger")
|
221
221
|
def validate_trigger(cls, v):
|
222
222
|
if v and v not in V1Statuses.get_allowable_hook_values():
|
223
223
|
raise ValueError(
|
polyaxon/_flow/init/__init__.py
CHANGED
@@ -1,6 +1,14 @@
|
|
1
1
|
from typing import List, Optional, Union
|
2
2
|
|
3
|
-
from clipped.compact.pydantic import
|
3
|
+
from clipped.compact.pydantic import (
|
4
|
+
Field,
|
5
|
+
StrictStr,
|
6
|
+
field_validator,
|
7
|
+
model_validator,
|
8
|
+
validation_after,
|
9
|
+
validation_always,
|
10
|
+
validation_before,
|
11
|
+
)
|
4
12
|
from clipped.config.schema import skip_partial
|
5
13
|
from clipped.types.ref_or_obj import RefField
|
6
14
|
|
@@ -202,32 +210,40 @@ class V1Init(BaseSchemaModel):
|
|
202
210
|
_IDENTIFIER = "init"
|
203
211
|
_SWAGGER_FIELDS = ["container"]
|
204
212
|
|
205
|
-
artifacts: Optional[Union[V1ArtifactsType, RefField]]
|
206
|
-
paths: Optional[
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
213
|
+
artifacts: Optional[Union[V1ArtifactsType, RefField]] = None
|
214
|
+
paths: Optional[
|
215
|
+
Union[List[Union[List[StrictStr], StrictStr]], StrictStr, RefField]
|
216
|
+
] = None
|
217
|
+
git: Optional[Union[V1GitType, RefField]] = None
|
218
|
+
dockerfile: Optional[Union[V1DockerfileType, RefField]] = None
|
219
|
+
file: Optional[Union[V1FileType, RefField]] = None
|
220
|
+
tensorboard: Optional[Union[V1TensorboardType, RefField]] = None
|
221
|
+
lineage_ref: Optional[Union[StrictStr, RefField]] = Field(
|
222
|
+
alias="lineageRef", default=None
|
223
|
+
)
|
224
|
+
model_ref: Optional[Union[StrictStr, RefField]] = Field(
|
225
|
+
alias="modelRef", default=None
|
226
|
+
)
|
227
|
+
artifact_ref: Optional[Union[StrictStr, RefField]] = Field(
|
228
|
+
alias="artifactRef", default=None
|
229
|
+
)
|
230
|
+
connection: Optional[StrictStr] = None
|
231
|
+
path: Optional[StrictStr] = None
|
232
|
+
container: Optional[Union[k8s_schemas.V1Container, RefField]] = None
|
217
233
|
|
218
|
-
@
|
234
|
+
@model_validator(**validation_after)
|
219
235
|
@skip_partial
|
220
236
|
def validate_init(cls, values):
|
221
|
-
artifacts =
|
222
|
-
paths =
|
223
|
-
git =
|
224
|
-
dockerfile =
|
225
|
-
file =
|
226
|
-
tensorboard =
|
227
|
-
lineage_ref =
|
228
|
-
model_ref =
|
229
|
-
artifact_ref =
|
230
|
-
connection =
|
237
|
+
artifacts = cls.get_value_for_key("artifacts", values)
|
238
|
+
paths = cls.get_value_for_key("paths", values)
|
239
|
+
git = cls.get_value_for_key("git", values)
|
240
|
+
dockerfile = cls.get_value_for_key("dockerfile", values)
|
241
|
+
file = cls.get_value_for_key("file", values)
|
242
|
+
tensorboard = cls.get_value_for_key("tensorboard", values)
|
243
|
+
lineage_ref = cls.get_value_for_key("lineage_ref", values)
|
244
|
+
model_ref = cls.get_value_for_key("model_ref", values)
|
245
|
+
artifact_ref = cls.get_value_for_key("artifact_ref", values)
|
246
|
+
connection = cls.get_value_for_key("connection", values)
|
231
247
|
schemas = 0
|
232
248
|
if artifacts:
|
233
249
|
schemas += 1
|
@@ -258,7 +274,7 @@ class V1Init(BaseSchemaModel):
|
|
258
274
|
)
|
259
275
|
return values
|
260
276
|
|
261
|
-
@
|
277
|
+
@field_validator("container", **validation_always, **validation_before)
|
262
278
|
def validate_container(cls, v):
|
263
279
|
return k8s_validation.validate_k8s_container(v)
|
264
280
|
|
polyaxon/_flow/io/io.py
CHANGED
@@ -2,7 +2,15 @@ import re
|
|
2
2
|
|
3
3
|
from typing import Any, Dict, List, Optional, Union
|
4
4
|
|
5
|
-
from clipped.compact.pydantic import
|
5
|
+
from clipped.compact.pydantic import (
|
6
|
+
Field,
|
7
|
+
StrictStr,
|
8
|
+
field_validator,
|
9
|
+
model_validator,
|
10
|
+
validation_after,
|
11
|
+
validation_always,
|
12
|
+
validation_before,
|
13
|
+
)
|
6
14
|
from clipped.config.schema import skip_partial
|
7
15
|
from clipped.types.numbers import StrictIntOrFloat
|
8
16
|
from clipped.types.ref_or_obj import BoolOrRef, IntOrRef, RefField
|
@@ -38,6 +46,8 @@ def validate_io_value(
|
|
38
46
|
default=default,
|
39
47
|
)
|
40
48
|
if validation:
|
49
|
+
if isinstance(validation, dict):
|
50
|
+
validation = V1Validation(**validation)
|
41
51
|
validation.run_validation(
|
42
52
|
value=parsed_value, type=type, is_optional=is_optional
|
43
53
|
)
|
@@ -86,7 +96,7 @@ def validate_io(
|
|
86
96
|
)
|
87
97
|
|
88
98
|
if is_flag and type != "bool":
|
89
|
-
raise
|
99
|
+
raise ValueError(
|
90
100
|
"IO type `{}` cannot be a flag, it must be of type `{}`".format(
|
91
101
|
type, "bool"
|
92
102
|
)
|
@@ -241,29 +251,31 @@ class V1Validation(BaseSchemaModel):
|
|
241
251
|
* maxItems - maximum number of items
|
242
252
|
"""
|
243
253
|
|
244
|
-
delay: Optional[BoolOrRef]
|
245
|
-
gt: Optional[Union[StrictIntOrFloat, RefField]]
|
246
|
-
ge: Optional[Union[StrictIntOrFloat, RefField]]
|
247
|
-
lt: Optional[Union[StrictIntOrFloat, RefField]]
|
248
|
-
le: Optional[Union[StrictIntOrFloat, RefField]]
|
249
|
-
multiple_of: Optional[Union[StrictIntOrFloat, RefField]] = Field(
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
254
|
+
delay: Optional[BoolOrRef] = None
|
255
|
+
gt: Optional[Union[StrictIntOrFloat, RefField]] = None
|
256
|
+
ge: Optional[Union[StrictIntOrFloat, RefField]] = None
|
257
|
+
lt: Optional[Union[StrictIntOrFloat, RefField]] = None
|
258
|
+
le: Optional[Union[StrictIntOrFloat, RefField]] = None
|
259
|
+
multiple_of: Optional[Union[StrictIntOrFloat, RefField]] = Field(
|
260
|
+
alias="multipleOf", default=None
|
261
|
+
)
|
262
|
+
min_digits: Optional[IntOrRef] = Field(alias="minDigits", default=None)
|
263
|
+
max_digits: Optional[IntOrRef] = Field(alias="maxDigits", default=None)
|
264
|
+
decimal_places: Optional[IntOrRef] = Field(alias="decimalPlaces", default=None)
|
265
|
+
regex: Optional[StrictStr] = None
|
266
|
+
min_length: Optional[IntOrRef] = Field(alias="minLength", default=None)
|
267
|
+
max_length: Optional[IntOrRef] = Field(alias="maxLength", default=None)
|
268
|
+
contains: Optional[Any] = None
|
269
|
+
excludes: Optional[Any] = None
|
270
|
+
options: Optional[Any] = None
|
271
|
+
min_items: Optional[IntOrRef] = Field(alias="minItems", default=None)
|
272
|
+
max_items: Optional[IntOrRef] = Field(alias="maxItems", default=None)
|
273
|
+
keys: Optional[Union[List[StrictStr], RefField]] = None
|
262
274
|
contains_keys: Optional[Union[List[StrictStr], RefField]] = Field(
|
263
|
-
alias="containsKeys"
|
275
|
+
alias="containsKeys", default=None
|
264
276
|
)
|
265
277
|
excludes_keys: Optional[Union[List[StrictStr], RefField]] = Field(
|
266
|
-
alias="excludesKeys"
|
278
|
+
alias="excludesKeys", default=None
|
267
279
|
)
|
268
280
|
|
269
281
|
def _validate_gt(self, value):
|
@@ -891,27 +903,27 @@ class V1IO(BaseSchemaModel):
|
|
891
903
|
_IDENTIFIER = "io"
|
892
904
|
|
893
905
|
name: StrictStr
|
894
|
-
description: Optional[StrictStr]
|
895
|
-
type: Optional[StrictStr]
|
896
|
-
is_optional: Optional[bool] = Field(alias="isOptional")
|
897
|
-
is_list: Optional[bool] = Field(alias="isList")
|
898
|
-
is_flag: Optional[bool] = Field(alias="isFlag")
|
899
|
-
arg_format: Optional[StrictStr] = Field(alias="argFormat")
|
900
|
-
connection: Optional[StrictStr]
|
901
|
-
to_init: Optional[bool] = Field(alias="toInit")
|
902
|
-
to_env: Optional[StrictStr] = Field(alias="toEnv")
|
903
|
-
value: Optional[Any]
|
904
|
-
validation: Optional[V1Validation]
|
905
|
-
delay_validation: Optional[bool] = Field(alias="delayValidation")
|
906
|
-
options: Optional[Any]
|
907
|
-
|
908
|
-
@
|
906
|
+
description: Optional[StrictStr] = None
|
907
|
+
type: Optional[StrictStr] = None
|
908
|
+
is_optional: Optional[bool] = Field(alias="isOptional", default=None)
|
909
|
+
is_list: Optional[bool] = Field(alias="isList", default=None)
|
910
|
+
is_flag: Optional[bool] = Field(alias="isFlag", default=None)
|
911
|
+
arg_format: Optional[StrictStr] = Field(alias="argFormat", default=None)
|
912
|
+
connection: Optional[StrictStr] = None
|
913
|
+
to_init: Optional[bool] = Field(alias="toInit", default=None)
|
914
|
+
to_env: Optional[StrictStr] = Field(alias="toEnv", default=None)
|
915
|
+
value: Optional[Any] = None
|
916
|
+
validation: Optional[V1Validation] = None
|
917
|
+
delay_validation: Optional[bool] = Field(alias="delayValidation", default=None)
|
918
|
+
options: Optional[Any] = None
|
919
|
+
|
920
|
+
@field_validator("name", **validation_always)
|
909
921
|
def validate_name(cls, v):
|
910
922
|
if v in IO_NAME_BLACK_LIST:
|
911
923
|
raise ValueError(IO_NAME_ERROR)
|
912
924
|
return v
|
913
925
|
|
914
|
-
@
|
926
|
+
@model_validator(**validation_before)
|
915
927
|
def handle_validation(cls, values):
|
916
928
|
validation = values.get("validation")
|
917
929
|
if not validation and (
|
@@ -926,20 +938,20 @@ class V1IO(BaseSchemaModel):
|
|
926
938
|
if values.get("delay_validation") is not None:
|
927
939
|
validation.delay = values.pop("delay_validation")
|
928
940
|
if validation:
|
929
|
-
values["validation"] = validation
|
941
|
+
values["validation"] = validation.to_dict()
|
930
942
|
return values
|
931
943
|
|
932
|
-
@
|
944
|
+
@model_validator(**validation_after)
|
933
945
|
@skip_partial
|
934
946
|
def validate_io(cls, values):
|
935
947
|
validate_io(
|
936
|
-
name=
|
937
|
-
type=
|
938
|
-
value=
|
939
|
-
is_list=
|
940
|
-
is_optional=
|
941
|
-
is_flag=
|
942
|
-
validation=
|
948
|
+
name=cls.get_value_for_key("name", values),
|
949
|
+
type=cls.get_value_for_key("type", values),
|
950
|
+
value=cls.get_value_for_key("value", values),
|
951
|
+
is_list=cls.get_value_for_key("is_list", values),
|
952
|
+
is_optional=cls.get_value_for_key("is_optional", values),
|
953
|
+
is_flag=cls.get_value_for_key("is_flag", values),
|
954
|
+
validation=cls.get_value_for_key("validation", values),
|
943
955
|
)
|
944
956
|
return values
|
945
957
|
|
polyaxon/_flow/joins/__init__.py
CHANGED
@@ -205,9 +205,9 @@ class V1Join(BaseSchemaModel):
|
|
205
205
|
|
206
206
|
_IDENTIFIER = "join"
|
207
207
|
|
208
|
-
ref: Optional[StrictStr]
|
208
|
+
ref: Optional[StrictStr] = None
|
209
209
|
query: StrictStr
|
210
|
-
sort: Optional[StrictStr]
|
211
|
-
limit: Optional[IntOrRef]
|
212
|
-
offset: Optional[IntOrRef]
|
213
|
-
params: Optional[Union[Dict[str, V1JoinParam], RefField]]
|
210
|
+
sort: Optional[StrictStr] = None
|
211
|
+
limit: Optional[IntOrRef] = None
|
212
|
+
offset: Optional[IntOrRef] = None
|
213
|
+
params: Optional[Union[Dict[str, V1JoinParam], RefField]] = None
|
polyaxon/_flow/matrix/bayes.py
CHANGED
@@ -5,8 +5,10 @@ from clipped.compact.pydantic import (
|
|
5
5
|
Field,
|
6
6
|
PositiveInt,
|
7
7
|
StrictInt,
|
8
|
-
|
9
|
-
|
8
|
+
field_validator,
|
9
|
+
model_validator,
|
10
|
+
validation_after,
|
11
|
+
validation_always,
|
10
12
|
)
|
11
13
|
from clipped.config.schema import skip_partial
|
12
14
|
from clipped.types.ref_or_obj import RefField
|
@@ -60,19 +62,21 @@ class UtilityFunctionConfig(BaseSchemaModel): # TODO: Rename to V1UtilityFuncti
|
|
60
62
|
acquisition_function: Optional[AcquisitionFunctions] = Field(
|
61
63
|
default=AcquisitionFunctions.UCB, alias="acquisitionFunction"
|
62
64
|
)
|
63
|
-
gaussian_process: Optional[GaussianProcessConfig] = Field(
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
65
|
+
gaussian_process: Optional[GaussianProcessConfig] = Field(
|
66
|
+
alias="gaussianProcess", default=None
|
67
|
+
)
|
68
|
+
kappa: Optional[float] = None
|
69
|
+
eps: Optional[float] = None
|
70
|
+
num_warmup: Optional[int] = Field(alias="numWarmup", default=None)
|
71
|
+
num_iterations: Optional[int] = Field(alias="numIterations", default=None)
|
68
72
|
|
69
|
-
@
|
73
|
+
@model_validator(**validation_after)
|
70
74
|
@skip_partial
|
71
75
|
def validate_utility_function(cls, values):
|
72
76
|
validate_utility_function(
|
73
|
-
acquisition_function=
|
74
|
-
kappa=
|
75
|
-
eps=
|
77
|
+
acquisition_function=cls.get_value_for_key("acquisition_function", values),
|
78
|
+
kappa=cls.get_value_for_key("kappa", values),
|
79
|
+
eps=cls.get_value_for_key("eps", values),
|
76
80
|
)
|
77
81
|
return values
|
78
82
|
|
@@ -393,16 +397,18 @@ class V1Bayes(BaseSearchConfig):
|
|
393
397
|
_IDENTIFIER = V1MatrixKind.BAYES
|
394
398
|
|
395
399
|
kind: Literal[_IDENTIFIER] = _IDENTIFIER
|
396
|
-
utility_function: Optional[UtilityFunctionConfig] = Field(
|
400
|
+
utility_function: Optional[UtilityFunctionConfig] = Field(
|
401
|
+
alias="utilityFunction", default=None
|
402
|
+
)
|
397
403
|
num_initial_runs: Union[PositiveInt, RefField] = Field(alias="numInitialRuns")
|
398
404
|
max_iterations: Union[PositiveInt, RefField] = Field(alias="maxIterations")
|
399
405
|
metric: V1OptimizationMetric
|
400
406
|
params: Union[Dict[str, V1HpParam], RefField]
|
401
|
-
seed: Optional[Union[StrictInt, RefField]]
|
402
|
-
concurrency: Optional[Union[PositiveInt, RefField]]
|
403
|
-
tuner: Optional[Union[V1Tuner, RefField]]
|
407
|
+
seed: Optional[Union[StrictInt, RefField]] = None
|
408
|
+
concurrency: Optional[Union[PositiveInt, RefField]] = None
|
409
|
+
tuner: Optional[Union[V1Tuner, RefField]] = None
|
404
410
|
early_stopping: Optional[Union[List[V1EarlyStopping], RefField]] = Field(
|
405
|
-
alias="earlyStopping"
|
411
|
+
alias="earlyStopping", default=None
|
406
412
|
)
|
407
413
|
|
408
414
|
def create_iteration(self, iteration: Optional[int] = None) -> int:
|
@@ -414,7 +420,7 @@ class V1Bayes(BaseSearchConfig):
|
|
414
420
|
"""Return a boolean to indicate if we need to reschedule another iteration."""
|
415
421
|
return iteration < self.max_iterations
|
416
422
|
|
417
|
-
@
|
423
|
+
@field_validator("params", **validation_always)
|
418
424
|
@skip_partial
|
419
425
|
def validate_matrix(cls, params):
|
420
426
|
return validate_matrix(params)
|
@@ -1,7 +1,13 @@
|
|
1
1
|
from typing import Dict, List, Optional, Union
|
2
2
|
from typing_extensions import Literal
|
3
3
|
|
4
|
-
from clipped.compact.pydantic import
|
4
|
+
from clipped.compact.pydantic import (
|
5
|
+
Field,
|
6
|
+
PositiveInt,
|
7
|
+
field_validator,
|
8
|
+
validation_always,
|
9
|
+
validation_before,
|
10
|
+
)
|
5
11
|
from clipped.config.schema import skip_partial
|
6
12
|
from clipped.types.ref_or_obj import RefField
|
7
13
|
|
@@ -196,19 +202,22 @@ class V1GridSearch(BaseSearchConfig):
|
|
196
202
|
|
197
203
|
kind: Literal[_IDENTIFIER] = _IDENTIFIER
|
198
204
|
params: Union[Dict[str, V1HpParam], RefField]
|
199
|
-
num_runs: Optional[Union[PositiveInt, RefField]] = Field(
|
200
|
-
|
205
|
+
num_runs: Optional[Union[PositiveInt, RefField]] = Field(
|
206
|
+
alias="numRuns", default=None
|
207
|
+
)
|
208
|
+
concurrency: Optional[Union[PositiveInt, RefField]] = None
|
201
209
|
early_stopping: Optional[Union[List[V1EarlyStopping], RefField]] = Field(
|
202
|
-
alias="earlyStopping"
|
210
|
+
alias="earlyStopping", default=None
|
203
211
|
)
|
204
212
|
|
205
|
-
@
|
213
|
+
@field_validator("num_runs", "concurrency", **validation_before)
|
206
214
|
def check_values(cls, v, field):
|
215
|
+
key = cls.get_field_name(field)
|
207
216
|
if v and v < 1:
|
208
|
-
raise ValueError(f"{
|
217
|
+
raise ValueError(f"{key} must be greater than 1, received `{v}` instead.")
|
209
218
|
return v
|
210
219
|
|
211
|
-
@
|
220
|
+
@field_validator("params", **validation_always)
|
212
221
|
@skip_partial
|
213
222
|
def validate_matrix(cls, params):
|
214
223
|
return validate_matrix(params)
|
@@ -313,17 +313,17 @@ class V1Hyperband(BaseSearchConfig):
|
|
313
313
|
_IDENTIFIER = V1MatrixKind.HYPERBAND
|
314
314
|
|
315
315
|
kind: Literal[_IDENTIFIER] = _IDENTIFIER
|
316
|
-
params: Optional[Union[Dict[str, V1HpParam], RefField]]
|
317
|
-
max_iterations: Optional[PositiveInt] = Field(alias="maxIterations")
|
318
|
-
eta: Optional[Union[NonNegativeFloat, RefField]]
|
319
|
-
resource: Optional[V1OptimizationResource]
|
320
|
-
metric: Optional[V1OptimizationMetric]
|
321
|
-
resume: Optional[BoolOrRef]
|
322
|
-
seed: Optional[IntOrRef]
|
323
|
-
concurrency: Optional[Union[PositiveInt, RefField]]
|
324
|
-
tuner: Optional[V1Tuner]
|
316
|
+
params: Optional[Union[Dict[str, V1HpParam], RefField]] = None
|
317
|
+
max_iterations: Optional[PositiveInt] = Field(alias="maxIterations", default=None)
|
318
|
+
eta: Optional[Union[NonNegativeFloat, RefField]] = None
|
319
|
+
resource: Optional[V1OptimizationResource] = None
|
320
|
+
metric: Optional[V1OptimizationMetric] = None
|
321
|
+
resume: Optional[BoolOrRef] = None
|
322
|
+
seed: Optional[IntOrRef] = None
|
323
|
+
concurrency: Optional[Union[PositiveInt, RefField]] = None
|
324
|
+
tuner: Optional[V1Tuner] = None
|
325
325
|
early_stopping: Optional[Union[List[V1EarlyStopping], RefField]] = Field(
|
326
|
-
alias="earlyStopping"
|
326
|
+
alias="earlyStopping", default=None
|
327
327
|
)
|
328
328
|
|
329
329
|
_s_max: Optional[int] = PrivateAttr()
|
@@ -1,7 +1,12 @@
|
|
1
1
|
from typing import Dict, List, Optional, Union
|
2
2
|
from typing_extensions import Literal
|
3
3
|
|
4
|
-
from clipped.compact.pydantic import
|
4
|
+
from clipped.compact.pydantic import (
|
5
|
+
Field,
|
6
|
+
PositiveInt,
|
7
|
+
field_validator,
|
8
|
+
validation_before,
|
9
|
+
)
|
5
10
|
from clipped.types.ref_or_obj import IntOrRef, RefField
|
6
11
|
from clipped.utils.enums import PEnum
|
7
12
|
|
@@ -212,19 +217,19 @@ class V1Hyperopt(BaseSearchConfig):
|
|
212
217
|
_IDENTIFIER = V1MatrixKind.HYPEROPT
|
213
218
|
|
214
219
|
kind: Literal[_IDENTIFIER] = _IDENTIFIER
|
215
|
-
max_iterations: Optional[IntOrRef] = Field(alias="maxIterations")
|
220
|
+
max_iterations: Optional[IntOrRef] = Field(alias="maxIterations", default=None)
|
216
221
|
metric: V1OptimizationMetric
|
217
|
-
algorithm: Optional[V1HyperoptAlgorithms]
|
222
|
+
algorithm: Optional[V1HyperoptAlgorithms] = None
|
218
223
|
params: Union[Dict[str, V1HpParam], RefField]
|
219
|
-
num_runs: Union[PositiveInt, RefField] = Field(alias="numRuns")
|
220
|
-
seed: Optional[IntOrRef]
|
221
|
-
concurrency: Optional[Union[PositiveInt, RefField]]
|
222
|
-
tuner: Optional[V1Tuner]
|
224
|
+
num_runs: Union[PositiveInt, RefField] = Field(alias="numRuns", default=None)
|
225
|
+
seed: Optional[IntOrRef] = None
|
226
|
+
concurrency: Optional[Union[PositiveInt, RefField]] = None
|
227
|
+
tuner: Optional[V1Tuner] = None
|
223
228
|
early_stopping: Optional[Union[List[V1EarlyStopping], RefField]] = Field(
|
224
|
-
alias="earlyStopping"
|
229
|
+
alias="earlyStopping", default=None
|
225
230
|
)
|
226
231
|
|
227
|
-
@
|
232
|
+
@field_validator("num_runs", "concurrency", **validation_before)
|
228
233
|
def check_values(cls, v, field):
|
229
234
|
if v and v < 1:
|
230
235
|
raise ValueError(f"{field} must be greater than 1, received `{v}` instead.")
|