polyaxon 2.3.3rc0__py3-none-any.whl → 2.4.0__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/_cli/operations.py +32 -3
- polyaxon/_cli/services/agent.py +1 -1
- polyaxon/_client/run.py +40 -2
- polyaxon/_compiler/contexts/contexts.py +4 -0
- polyaxon/_compiler/resolver/runtime.py +4 -0
- polyaxon/_contexts/keys.py +1 -0
- polyaxon/_deploy/operators/compose.py +1 -1
- polyaxon/_flow/operations/operation.py +27 -19
- polyaxon/_k8s/logging/async_monitor.py +14 -6
- polyaxon/_sidecar/container/__init__.py +19 -10
- polyaxon/_sidecar/container/monitors/logs.py +10 -13
- polyaxon/_sidecar/ignore.py +0 -1
- polyaxon/pkg.py +1 -1
- {polyaxon-2.3.3rc0.dist-info → polyaxon-2.4.0.dist-info}/METADATA +3 -3
- {polyaxon-2.3.3rc0.dist-info → polyaxon-2.4.0.dist-info}/RECORD +19 -19
- {polyaxon-2.3.3rc0.dist-info → polyaxon-2.4.0.dist-info}/LICENSE +0 -0
- {polyaxon-2.3.3rc0.dist-info → polyaxon-2.4.0.dist-info}/WHEEL +0 -0
- {polyaxon-2.3.3rc0.dist-info → polyaxon-2.4.0.dist-info}/entry_points.txt +0 -0
- {polyaxon-2.3.3rc0.dist-info → polyaxon-2.4.0.dist-info}/top_level.txt +0 -0
polyaxon/_cli/operations.py
CHANGED
@@ -1851,9 +1851,12 @@ def artifacts(
|
|
1851
1851
|
default=False,
|
1852
1852
|
help="To set the run to failed if the upload fails.",
|
1853
1853
|
)
|
1854
|
+
@click.option(
|
1855
|
+
"--agent", "-ag", type=str, help="Optional, uuid reference of an agent to use."
|
1856
|
+
)
|
1854
1857
|
@click.pass_context
|
1855
1858
|
@clean_outputs
|
1856
|
-
def upload(ctx, project, uid, path_from, path_to, sync_failure):
|
1859
|
+
def upload(ctx, project, uid, path_from, path_to, sync_failure, agent):
|
1857
1860
|
"""Upload runs' artifacts.
|
1858
1861
|
|
1859
1862
|
Uses /docs/core/cli/#caching
|
@@ -1884,7 +1887,7 @@ def upload(ctx, project, uid, path_from, path_to, sync_failure):
|
|
1884
1887
|
)
|
1885
1888
|
if is_file:
|
1886
1889
|
response = client.upload_artifact(
|
1887
|
-
filepath=path_from, path=path_to, overwrite=True
|
1890
|
+
filepath=path_from, path=path_to, overwrite=True, agent=agent
|
1888
1891
|
)
|
1889
1892
|
else:
|
1890
1893
|
response = client.upload_artifacts_dir(
|
@@ -1892,6 +1895,7 @@ def upload(ctx, project, uid, path_from, path_to, sync_failure):
|
|
1892
1895
|
path=path_to,
|
1893
1896
|
overwrite=True,
|
1894
1897
|
relative_to=path_from,
|
1898
|
+
agent=agent,
|
1895
1899
|
)
|
1896
1900
|
except (
|
1897
1901
|
ApiException,
|
@@ -2302,9 +2306,31 @@ def pull(
|
|
2302
2306
|
help="Optional, to ignore the owner/project of the local "
|
2303
2307
|
"run and use the owner/project provided or resolved from the current project.",
|
2304
2308
|
)
|
2309
|
+
@click.option(
|
2310
|
+
"--reset-uuid",
|
2311
|
+
is_flag=True,
|
2312
|
+
default=False,
|
2313
|
+
help="Optional, to ignore the uuid of the local " "run and generate a new uuid.",
|
2314
|
+
)
|
2315
|
+
@click.option(
|
2316
|
+
"--agent", "-ag", type=str, help="Optional, uuid reference of an agent to use."
|
2317
|
+
)
|
2318
|
+
@click.option("--name", "-n", type=str, help="Optional, a new name to set for the run.")
|
2305
2319
|
@click.pass_context
|
2306
2320
|
@clean_outputs
|
2307
|
-
def push(
|
2321
|
+
def push(
|
2322
|
+
ctx,
|
2323
|
+
project,
|
2324
|
+
uid,
|
2325
|
+
all_runs,
|
2326
|
+
no_artifacts,
|
2327
|
+
clean,
|
2328
|
+
path,
|
2329
|
+
reset_project,
|
2330
|
+
reset_uuid,
|
2331
|
+
agent,
|
2332
|
+
name,
|
2333
|
+
):
|
2308
2334
|
"""Push a local run (or all runs) to a remove server.
|
2309
2335
|
|
2310
2336
|
Uses /docs/core/cli/#caching
|
@@ -2352,6 +2378,8 @@ def push(ctx, project, uid, all_runs, no_artifacts, clean, path, reset_project):
|
|
2352
2378
|
path=artifacts_path,
|
2353
2379
|
run_client=client,
|
2354
2380
|
reset_project=reset_project,
|
2381
|
+
name=name,
|
2382
|
+
reset_uuid=reset_uuid,
|
2355
2383
|
raise_if_not_found=True,
|
2356
2384
|
)
|
2357
2385
|
except Exception as e:
|
@@ -2368,6 +2396,7 @@ def push(ctx, project, uid, all_runs, no_artifacts, clean, path, reset_project):
|
|
2368
2396
|
path=artifacts_path,
|
2369
2397
|
upload_artifacts=not no_artifacts,
|
2370
2398
|
clean=clean,
|
2399
|
+
agent=agent,
|
2371
2400
|
)
|
2372
2401
|
Printer.success(
|
2373
2402
|
f"Finished pushing offline run {uid} to {client.owner}/{client.project}"
|
polyaxon/_cli/services/agent.py
CHANGED
@@ -33,7 +33,7 @@ def agent():
|
|
33
33
|
help="Number of times to retry the process.",
|
34
34
|
)
|
35
35
|
@coroutine
|
36
|
-
async def start(kind,
|
36
|
+
async def start(kind, max_interval, max_retries):
|
37
37
|
from polyaxon import settings
|
38
38
|
from polyaxon._env_vars.getters import get_agent_info
|
39
39
|
from polyaxon._runner.kinds import RunnerKind
|
polyaxon/_client/run.py
CHANGED
@@ -21,6 +21,7 @@ from clipped.utils.paths import (
|
|
21
21
|
get_base_filename,
|
22
22
|
get_dirs_under_path,
|
23
23
|
get_files_in_path_context,
|
24
|
+
set_permissions,
|
24
25
|
)
|
25
26
|
from clipped.utils.query_params import (
|
26
27
|
get_logs_params,
|
@@ -64,6 +65,7 @@ from polyaxon._sdk.schemas.v1_operation_body import V1OperationBody
|
|
64
65
|
from polyaxon._sdk.schemas.v1_project_version import V1ProjectVersion
|
65
66
|
from polyaxon._sdk.schemas.v1_run import V1Run
|
66
67
|
from polyaxon._sdk.schemas.v1_run_settings import V1RunSettings
|
68
|
+
from polyaxon._sdk.schemas.v1_settings_catalog import V1SettingsCatalog
|
67
69
|
from polyaxon._utils.fqn_utils import (
|
68
70
|
get_entity_full_name,
|
69
71
|
split_owner_team_space,
|
@@ -225,6 +227,18 @@ class RunClient(ClientMixin):
|
|
225
227
|
return client.config.no_op
|
226
228
|
return settings.CLIENT_CONFIG.no_op
|
227
229
|
|
230
|
+
def _reset_agent(self, agent: Optional[str] = None):
|
231
|
+
if agent:
|
232
|
+
agent = self.client.agents_v1.get_agent(self.owner, agent)
|
233
|
+
self.settings.agent = V1SettingsCatalog(
|
234
|
+
uuid=agent.uuid,
|
235
|
+
name=agent.name,
|
236
|
+
version=agent.version,
|
237
|
+
url=agent.hostname,
|
238
|
+
)
|
239
|
+
self.settings.namespace = agent.namespace
|
240
|
+
self.settings.artifacts_store = None
|
241
|
+
|
228
242
|
def _use_agent_host(self):
|
229
243
|
if self.settings.agent and self.settings.agent.url:
|
230
244
|
self.reset_client(
|
@@ -1502,6 +1516,7 @@ class RunClient(ClientMixin):
|
|
1502
1516
|
untar: bool = False,
|
1503
1517
|
overwrite: bool = True,
|
1504
1518
|
show_progress: bool = True,
|
1519
|
+
agent: Optional[str] = None,
|
1505
1520
|
):
|
1506
1521
|
"""Uploads a single artifact to the run's artifacts store path.
|
1507
1522
|
|
@@ -1512,12 +1527,16 @@ class RunClient(ClientMixin):
|
|
1512
1527
|
it should be decompressed on the artifacts store.
|
1513
1528
|
overwrite: bool, optional, if the file uploaded should overwrite any previous content.
|
1514
1529
|
show_progress: bool, to show a progress bar.
|
1530
|
+
agent: str, optional, uuid reference of an agent to use.
|
1515
1531
|
|
1516
1532
|
Returns:
|
1517
1533
|
str
|
1518
1534
|
"""
|
1519
1535
|
if not self.settings:
|
1520
1536
|
self.refresh_data()
|
1537
|
+
if agent:
|
1538
|
+
self._reset_agent(agent)
|
1539
|
+
|
1521
1540
|
self._use_agent_host()
|
1522
1541
|
|
1523
1542
|
params = get_streams_params(connection=self.artifacts_store)
|
@@ -1548,6 +1567,7 @@ class RunClient(ClientMixin):
|
|
1548
1567
|
path: str = "",
|
1549
1568
|
overwrite: bool = True,
|
1550
1569
|
relative_to: Optional[str] = None,
|
1570
|
+
agent: Optional[str] = None,
|
1551
1571
|
):
|
1552
1572
|
"""Uploads a full directory to the run's artifacts store path.
|
1553
1573
|
|
@@ -1560,7 +1580,7 @@ class RunClient(ClientMixin):
|
|
1560
1580
|
overwrite: bool, optional, if the file uploaded should overwrite any previous content.
|
1561
1581
|
relative_to: str, optional, if the path uploaded is not the current dir,
|
1562
1582
|
and you want to cancel the relative path.
|
1563
|
-
|
1583
|
+
agent: str, optional, uuid reference of an agent to use.
|
1564
1584
|
Returns:
|
1565
1585
|
str.
|
1566
1586
|
"""
|
@@ -1580,6 +1600,7 @@ class RunClient(ClientMixin):
|
|
1580
1600
|
path=path or "",
|
1581
1601
|
overwrite=overwrite,
|
1582
1602
|
relative_to=relative_to,
|
1603
|
+
agent=agent,
|
1583
1604
|
)
|
1584
1605
|
|
1585
1606
|
@client_handler(check_no_op=True, check_offline=True)
|
@@ -1589,6 +1610,7 @@ class RunClient(ClientMixin):
|
|
1589
1610
|
path: str = "",
|
1590
1611
|
overwrite: bool = True,
|
1591
1612
|
relative_to: Optional[str] = None,
|
1613
|
+
agent: Optional[str] = None,
|
1592
1614
|
):
|
1593
1615
|
"""Uploads multiple artifacts to the run's artifacts store path.
|
1594
1616
|
|
@@ -1598,7 +1620,7 @@ class RunClient(ClientMixin):
|
|
1598
1620
|
overwrite: bool, optional, if the file uploaded should overwrite any previous content.
|
1599
1621
|
relative_to: str, optional, if the path uploaded is not the current dir,
|
1600
1622
|
and you want to cancel the relative path.
|
1601
|
-
|
1623
|
+
agent: str, optional, uuid reference of an agent to use.
|
1602
1624
|
Returns:
|
1603
1625
|
str.
|
1604
1626
|
"""
|
@@ -1608,6 +1630,9 @@ class RunClient(ClientMixin):
|
|
1608
1630
|
|
1609
1631
|
if not self.settings:
|
1610
1632
|
self.refresh_data()
|
1633
|
+
if agent:
|
1634
|
+
self._reset_agent(agent)
|
1635
|
+
|
1611
1636
|
self._use_agent_host()
|
1612
1637
|
|
1613
1638
|
params = get_streams_params(connection=self.artifacts_store)
|
@@ -2872,6 +2897,7 @@ class RunClient(ClientMixin):
|
|
2872
2897
|
config_file.write(
|
2873
2898
|
orjson_dumps(self.client.sanitize_for_serialization(self.run_data))
|
2874
2899
|
)
|
2900
|
+
set_permissions(run_path)
|
2875
2901
|
|
2876
2902
|
if not self._artifacts_lineage:
|
2877
2903
|
logger.debug("Persist offline run call did not find any lineage data. ")
|
@@ -2887,6 +2913,7 @@ class RunClient(ClientMixin):
|
|
2887
2913
|
]
|
2888
2914
|
)
|
2889
2915
|
)
|
2916
|
+
set_permissions(lineages_path)
|
2890
2917
|
|
2891
2918
|
@classmethod
|
2892
2919
|
@client_handler(check_no_op=True)
|
@@ -2895,6 +2922,8 @@ class RunClient(ClientMixin):
|
|
2895
2922
|
path: str,
|
2896
2923
|
run_client: Optional[Union["RunClient", "Run"]] = None,
|
2897
2924
|
reset_project: bool = False,
|
2925
|
+
reset_uuid: bool = False,
|
2926
|
+
name: Optional[str] = None,
|
2898
2927
|
raise_if_not_found: bool = False,
|
2899
2928
|
) -> Optional[Union["RunClient", "Run"]]:
|
2900
2929
|
"""Loads an offline run from a local path.
|
@@ -2911,6 +2940,8 @@ class RunClient(ClientMixin):
|
|
2911
2940
|
from the local run.
|
2912
2941
|
raise_if_not_found: bool, optional, a flag to raise an error if the local path does not
|
2913
2942
|
contain a persisted run.
|
2943
|
+
reset_uuid: bool, optional, a flag to reset the run's uuid.
|
2944
|
+
name: str, optional, a name to set for the run.
|
2914
2945
|
"""
|
2915
2946
|
run_path = "{}/{}".format(path, ctx_paths.CONTEXT_LOCAL_RUN)
|
2916
2947
|
if not os.path.isfile(run_path):
|
@@ -2925,6 +2956,10 @@ class RunClient(ClientMixin):
|
|
2925
2956
|
run_config = V1Run(**orjson_loads(config_str))
|
2926
2957
|
owner = run_config.owner
|
2927
2958
|
project = run_config.project
|
2959
|
+
if reset_uuid:
|
2960
|
+
run_config.uuid = uuid.uuid4().hex
|
2961
|
+
if name:
|
2962
|
+
run_config.name = name
|
2928
2963
|
if run_client:
|
2929
2964
|
if reset_project or not owner:
|
2930
2965
|
owner = run_client.owner
|
@@ -2983,6 +3018,7 @@ class RunClient(ClientMixin):
|
|
2983
3018
|
path: str,
|
2984
3019
|
upload_artifacts: bool = True,
|
2985
3020
|
clean: bool = False,
|
3021
|
+
agent: Optional[str] = None,
|
2986
3022
|
):
|
2987
3023
|
"""Syncs an offline run to Polyaxon's API and artifacts store.
|
2988
3024
|
|
@@ -2991,6 +3027,7 @@ class RunClient(ClientMixin):
|
|
2991
3027
|
path: str, root path where the run's metadata & artifacts are stored.
|
2992
3028
|
upload_artifacts: bool, optional, flag to trigger artifacts upload.
|
2993
3029
|
clean: bool, optional, flag to clean local path after pushing the run.
|
3030
|
+
agent: str, optional, uuid reference of an agent to use.
|
2994
3031
|
"""
|
2995
3032
|
# We ensure that the is_offline is False
|
2996
3033
|
is_offline = self._is_offline
|
@@ -3023,6 +3060,7 @@ class RunClient(ClientMixin):
|
|
3023
3060
|
path="/",
|
3024
3061
|
overwrite=True,
|
3025
3062
|
relative_to=path,
|
3063
|
+
agent=agent,
|
3026
3064
|
)
|
3027
3065
|
logger.info(f"Offline artifacts for run {self.run_data.uuid} uploaded")
|
3028
3066
|
|
@@ -61,6 +61,7 @@ def resolve_globals_contexts(
|
|
61
61
|
cloning_kind: V1CloningKind = None,
|
62
62
|
original_uuid: Optional[str] = None,
|
63
63
|
is_independent: bool = True,
|
64
|
+
username: Optional[str] = None,
|
64
65
|
) -> Dict:
|
65
66
|
resolved_contexts = {
|
66
67
|
ctx_sections.GLOBALS: {
|
@@ -70,6 +71,7 @@ def resolve_globals_contexts(
|
|
70
71
|
owner_name, project_name
|
71
72
|
),
|
72
73
|
ctx_keys.PROJECT_UUID: project_uuid,
|
74
|
+
ctx_keys.USERNAME: username,
|
73
75
|
ctx_keys.RUN_INFO: get_run_instance(owner_name, project_name, run_uuid),
|
74
76
|
ctx_keys.NAME: run_name,
|
75
77
|
ctx_keys.UUID: run_uuid,
|
@@ -138,6 +140,7 @@ def resolve_contexts(
|
|
138
140
|
cloning_kind: V1CloningKind = None,
|
139
141
|
original_uuid: Optional[str] = None,
|
140
142
|
is_independent: bool = True,
|
143
|
+
username: Optional[str] = None,
|
141
144
|
) -> Dict:
|
142
145
|
run_kind = compiled_operation.get_run_kind()
|
143
146
|
if run_kind not in CONTEXTS_MANAGERS:
|
@@ -168,6 +171,7 @@ def resolve_contexts(
|
|
168
171
|
cloning_kind=cloning_kind,
|
169
172
|
original_uuid=original_uuid,
|
170
173
|
is_independent=is_independent,
|
174
|
+
username=username,
|
171
175
|
)
|
172
176
|
|
173
177
|
return CONTEXTS_MANAGERS[run_kind].resolve(
|
@@ -46,12 +46,14 @@ class BaseResolver:
|
|
46
46
|
cloning_kind: V1CloningKind = None,
|
47
47
|
original_uuid: Optional[str] = None,
|
48
48
|
is_independent: bool = True,
|
49
|
+
username: Optional[str] = None,
|
49
50
|
):
|
50
51
|
if not compiled_operation:
|
51
52
|
raise PolyaxonCompilerError("A run spec is required for resolution.")
|
52
53
|
self.run = run
|
53
54
|
self.compiled_operation = compiled_operation
|
54
55
|
self.owner_name = owner_name
|
56
|
+
self.username = username
|
55
57
|
self.project_name = project_name
|
56
58
|
self.project_uuid = project_uuid
|
57
59
|
self.project_uuid = project_uuid or project_name
|
@@ -105,6 +107,7 @@ class BaseResolver:
|
|
105
107
|
owner_name=self.owner_name,
|
106
108
|
project_name=self.project_name,
|
107
109
|
project_uuid=self.project_uuid,
|
110
|
+
username=self.username,
|
108
111
|
run_uuid=self.run_uuid,
|
109
112
|
run_name=self.run_name,
|
110
113
|
run_path=self.run_path,
|
@@ -232,6 +235,7 @@ class BaseResolver:
|
|
232
235
|
cloning_kind=self.cloning_kind,
|
233
236
|
original_uuid=self.original_uuid,
|
234
237
|
is_independent=self.is_independent,
|
238
|
+
username=self.username,
|
235
239
|
)
|
236
240
|
|
237
241
|
def _apply_runtime_contexts(self):
|
polyaxon/_contexts/keys.py
CHANGED
@@ -662,14 +662,16 @@ class V1Operation(BaseOp, TemplateMixinConfig):
|
|
662
662
|
for k, v in contexts.items():
|
663
663
|
params[k] = V1Param(value=v, context_only=True)
|
664
664
|
|
665
|
-
|
666
|
-
|
667
|
-
hub_ref=hook.hub_ref
|
668
|
-
|
669
|
-
|
670
|
-
|
671
|
-
|
672
|
-
|
665
|
+
content = {"run_patch": run_patch, "params": params}
|
666
|
+
if hook.hub_ref:
|
667
|
+
content["hub_ref"] = hook.hub_ref
|
668
|
+
if hook.presets:
|
669
|
+
content["presets"] = hook.presets
|
670
|
+
if hook.queue:
|
671
|
+
content["queue"] = hook.queue
|
672
|
+
if hook.namespace:
|
673
|
+
content["namespace"] = hook.namespace
|
674
|
+
return cls.construct(**content)
|
673
675
|
|
674
676
|
@classmethod
|
675
677
|
def from_build(cls, build: V1Build, contexts: Optional[Dict] = None):
|
@@ -685,17 +687,23 @@ class V1Operation(BaseOp, TemplateMixinConfig):
|
|
685
687
|
if not destination.connection or build.connection:
|
686
688
|
destination.connection = build.connection
|
687
689
|
params["destination"] = destination
|
688
|
-
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
|
693
|
-
|
694
|
-
|
695
|
-
|
696
|
-
|
697
|
-
|
698
|
-
|
690
|
+
content = {
|
691
|
+
"run_patch": build.run_patch,
|
692
|
+
"patch_strategy": build.patch_strategy,
|
693
|
+
"params": params,
|
694
|
+
}
|
695
|
+
if build.hub_ref:
|
696
|
+
content["hub_ref"] = build.hub_ref
|
697
|
+
if build.presets:
|
698
|
+
content["presets"] = build.presets
|
699
|
+
if build.queue:
|
700
|
+
content["queue"] = build.queue
|
701
|
+
if build.namespace:
|
702
|
+
content["namespace"] = build.namespace
|
703
|
+
if build.cache:
|
704
|
+
content["cache"] = build.cache
|
705
|
+
|
706
|
+
return cls.construct(**content)
|
699
707
|
|
700
708
|
|
701
709
|
PartialV1Operation = to_partial(V1Operation)
|
@@ -66,7 +66,7 @@ async def query_k8s_operation_logs(
|
|
66
66
|
new_time = now()
|
67
67
|
params = {}
|
68
68
|
if last_time:
|
69
|
-
since_seconds = (new_time - last_time).total_seconds()
|
69
|
+
since_seconds = (new_time - last_time).total_seconds()
|
70
70
|
params["since_seconds"] = int(since_seconds)
|
71
71
|
if stream:
|
72
72
|
params["tail_lines"] = V1Logs._CHUNK_SIZE
|
@@ -83,6 +83,11 @@ async def query_k8s_operation_logs(
|
|
83
83
|
**params,
|
84
84
|
)
|
85
85
|
|
86
|
+
if logs and last_time:
|
87
|
+
# make sure to filter logs larger than last_time
|
88
|
+
logs = [log for log in logs if log.timestamp > last_time]
|
89
|
+
if logs and logs[-1].timestamp:
|
90
|
+
new_time = logs[-1].timestamp
|
86
91
|
return logs, new_time
|
87
92
|
|
88
93
|
|
@@ -96,7 +101,7 @@ async def collect_agent_service_logs(
|
|
96
101
|
k8s_manager=k8s_manager,
|
97
102
|
pod=pod,
|
98
103
|
container_name=container.name,
|
99
|
-
tail_lines=V1Logs._CHUNK_SIZE
|
104
|
+
tail_lines=V1Logs._CHUNK_SIZE,
|
100
105
|
)
|
101
106
|
|
102
107
|
|
@@ -109,16 +114,19 @@ async def query_k8s_pod_logs(
|
|
109
114
|
new_time = now()
|
110
115
|
params = {}
|
111
116
|
if last_time:
|
112
|
-
since_seconds = (new_time - last_time).total_seconds()
|
117
|
+
since_seconds = (new_time - last_time).total_seconds()
|
113
118
|
params["since_seconds"] = int(since_seconds)
|
114
119
|
if stream:
|
115
120
|
params["tail_lines"] = V1Logs._CHUNK_SIZE
|
116
121
|
|
117
122
|
logs = await handle_pod_logs(k8s_manager=k8s_manager, pod=pod, **params)
|
118
123
|
|
119
|
-
if logs:
|
120
|
-
|
121
|
-
|
124
|
+
if logs and last_time:
|
125
|
+
# make sure to filter logs larger than last_time
|
126
|
+
logs = [log for log in logs if log.timestamp > last_time]
|
127
|
+
if logs and logs[-1].timestamp:
|
128
|
+
new_time = logs[-1].timestamp
|
129
|
+
return logs, new_time
|
122
130
|
|
123
131
|
|
124
132
|
async def get_op_pods_and_services(
|
@@ -16,7 +16,7 @@ from polyaxon._fs.watcher import FSWatcher
|
|
16
16
|
from polyaxon._k8s.manager.async_manager import AsyncK8sManager
|
17
17
|
from polyaxon._sidecar.container.intervals import get_sync_interval
|
18
18
|
from polyaxon._sidecar.container.monitors import sync_artifacts, sync_logs, sync_spec
|
19
|
-
from polyaxon._sidecar.ignore import
|
19
|
+
from polyaxon._sidecar.ignore import IGNORE_FOLDERS
|
20
20
|
from polyaxon.client import RunClient
|
21
21
|
from polyaxon.exceptions import PolyaxonClientException, PolyaxonContainerException
|
22
22
|
from polyaxon.logger import logger
|
@@ -34,6 +34,9 @@ async def start_sidecar(
|
|
34
34
|
sync_interval = get_sync_interval(
|
35
35
|
interval=sync_interval, sleep_interval=sleep_interval
|
36
36
|
)
|
37
|
+
fs_refresh_interval = get_sync_interval(
|
38
|
+
interval=60 * 60 * 2, sleep_interval=sleep_interval
|
39
|
+
)
|
37
40
|
try:
|
38
41
|
pod_id = os.environ[ENV_KEYS_K8S_POD_ID]
|
39
42
|
except KeyError as e:
|
@@ -61,6 +64,7 @@ async def start_sidecar(
|
|
61
64
|
retry = 0
|
62
65
|
is_running = True
|
63
66
|
counter = 0
|
67
|
+
fs_refresh_counter = 0
|
64
68
|
state = {
|
65
69
|
"last_artifacts_check": None,
|
66
70
|
"last_logs_check": None,
|
@@ -74,23 +78,21 @@ async def start_sidecar(
|
|
74
78
|
run_kind=pod.metadata.annotations.get("operation.polyaxon.com/kind"),
|
75
79
|
)
|
76
80
|
if monitor_logs:
|
77
|
-
await sync_logs(
|
81
|
+
state["last_logs_check"] = await sync_logs(
|
78
82
|
run_uuid=run_uuid,
|
79
83
|
k8s_manager=k8s_manager,
|
80
84
|
pod=pod,
|
81
|
-
last_time=
|
82
|
-
stream=
|
83
|
-
is_running=is_running,
|
85
|
+
last_time=state["last_logs_check"],
|
86
|
+
stream=False,
|
84
87
|
)
|
85
88
|
if monitor_outputs:
|
86
|
-
last_check = state["last_artifacts_check"]
|
87
89
|
try:
|
88
90
|
await sync_artifacts(
|
89
91
|
fs=fs,
|
90
92
|
fw=fw,
|
91
93
|
store_path=connection.store_path,
|
92
94
|
run_uuid=run_uuid,
|
93
|
-
exclude=
|
95
|
+
exclude=IGNORE_FOLDERS,
|
94
96
|
)
|
95
97
|
except Exception as e:
|
96
98
|
logger.debug(
|
@@ -98,13 +100,13 @@ async def start_sidecar(
|
|
98
100
|
)
|
99
101
|
try:
|
100
102
|
client.sync_events_summaries(
|
101
|
-
last_check=
|
103
|
+
last_check=state["last_artifacts_check"],
|
102
104
|
events_path=ctx_paths.CONTEXT_MOUNT_RUN_EVENTS_FORMAT.format(
|
103
105
|
run_uuid
|
104
106
|
),
|
105
107
|
)
|
106
108
|
client.sync_system_events_summaries(
|
107
|
-
last_check=
|
109
|
+
last_check=state["last_artifacts_check"],
|
108
110
|
events_path=ctx_paths.CONTEXT_MOUNT_RUN_SYSTEM_RESOURCES_EVENTS_FORMAT.format(
|
109
111
|
run_uuid
|
110
112
|
),
|
@@ -136,7 +138,14 @@ async def start_sidecar(
|
|
136
138
|
retry = 0
|
137
139
|
|
138
140
|
counter += 1
|
139
|
-
|
141
|
+
fs_refresh_counter += 1
|
142
|
+
|
143
|
+
if fs_refresh_counter >= fs_refresh_interval:
|
144
|
+
fs_refresh_counter = 0
|
145
|
+
await close_fs(fs)
|
146
|
+
fs = await get_async_fs_from_connection(connection=connection)
|
147
|
+
|
148
|
+
if counter >= sync_interval:
|
140
149
|
counter = 0
|
141
150
|
try:
|
142
151
|
await monitor()
|
@@ -4,7 +4,7 @@ from typing import Optional
|
|
4
4
|
|
5
5
|
import aiofiles
|
6
6
|
|
7
|
-
from clipped.utils.paths import check_or_create_path
|
7
|
+
from clipped.utils.paths import check_or_create_path
|
8
8
|
from kubernetes_asyncio.client.models import V1Pod
|
9
9
|
|
10
10
|
from polyaxon._contexts import paths as ctx_paths
|
@@ -19,26 +19,23 @@ async def sync_logs(
|
|
19
19
|
pod: V1Pod,
|
20
20
|
last_time: Optional[datetime.datetime],
|
21
21
|
stream: bool = False,
|
22
|
-
|
23
|
-
):
|
22
|
+
) -> Optional[datetime.datetime]:
|
24
23
|
path_from = ctx_paths.CONTEXT_MOUNT_ARTIFACTS_FORMAT.format(run_uuid)
|
25
|
-
path_from = "{}
|
24
|
+
path_from = "{}/plxlogs".format(path_from)
|
26
25
|
|
27
|
-
|
28
|
-
delete_path(path_from)
|
29
|
-
return
|
30
|
-
|
31
|
-
logs, _ = await query_k8s_pod_logs(
|
26
|
+
logs, last_time = await query_k8s_pod_logs(
|
32
27
|
k8s_manager=k8s_manager,
|
33
28
|
pod=pod,
|
34
29
|
last_time=last_time,
|
35
30
|
stream=stream,
|
36
31
|
)
|
37
32
|
if not logs:
|
38
|
-
return
|
33
|
+
return last_time
|
39
34
|
|
40
|
-
path_from = "{}/{}".format(path_from, pod.metadata.name)
|
35
|
+
path_from = "{}/{}.jsonl".format(path_from, pod.metadata.name)
|
41
36
|
check_or_create_path(path_from, is_dir=False)
|
42
|
-
async with aiofiles.open(path_from, "
|
37
|
+
async with aiofiles.open(path_from, "a") as filepath:
|
43
38
|
_logs = V1Logs.construct(logs=logs)
|
44
|
-
await filepath.write(_logs.
|
39
|
+
await filepath.write(_logs.get_jsonl_events())
|
40
|
+
|
41
|
+
return last_time
|
polyaxon/_sidecar/ignore.py
CHANGED
polyaxon/pkg.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: polyaxon
|
3
|
-
Version: 2.
|
3
|
+
Version: 2.4.0
|
4
4
|
Summary: Command Line Interface (CLI) and client to interact with Polyaxon API.
|
5
5
|
Home-page: https://github.com/polyaxon/polyaxon
|
6
6
|
Author: Polyaxon, Inc.
|
@@ -34,7 +34,7 @@ Requires-Python: >=3.8
|
|
34
34
|
Description-Content-Type: text/markdown
|
35
35
|
License-File: LICENSE
|
36
36
|
Requires-Dist: click<9.0.0,>=7.1.1
|
37
|
-
Requires-Dist: clipped==0.
|
37
|
+
Requires-Dist: clipped==0.8.*
|
38
38
|
Requires-Dist: vents==0.4.*
|
39
39
|
Requires-Dist: Jinja2<3.1.5,>=2.10.3
|
40
40
|
Requires-Dist: kubernetes>=10.0.1
|
@@ -93,7 +93,7 @@ Requires-Dist: anyio; extra == "sidecar"
|
|
93
93
|
[](https://polyaxon.com/slack/)
|
94
94
|
|
95
95
|
[](https://polyaxon.com/docs/)
|
96
|
-
[](https://polyaxon.com/docs/releases/2-1/)
|
97
97
|
[](https://github.com/polyaxon/polyaxon/issues)
|
98
98
|
[](https://github.com/orgs/polyaxon/projects/5)
|
99
99
|
|
@@ -9,7 +9,7 @@ polyaxon/exceptions.py,sha256=ujvG9p1Pn2KHYbHqB3-faadW46dEuULUQXNtfkd2zk8,10236
|
|
9
9
|
polyaxon/fs.py,sha256=RS8XmVrrfXfIJXN6cTCCRRYwesCLHVVfC01Vi56lecs,246
|
10
10
|
polyaxon/k8s.py,sha256=nI5oPCSlqU4aaeVShM6SlYS9eqYiYUL4GDXIZ4bnq-I,1051
|
11
11
|
polyaxon/logger.py,sha256=gdZQms37Pe5G2j-Ear5jbSAJeGgX6fnvg7oE8_9MSlc,2309
|
12
|
-
polyaxon/pkg.py,sha256=
|
12
|
+
polyaxon/pkg.py,sha256=zQKd316ycIkfgrmJTWrxpKm5hZyFE96u5m4uP0M4Sj8,262
|
13
13
|
polyaxon/polyaxonfile.py,sha256=xHmHT_cHomfuAQm82Jhnp71YNN5mQ-Lod7EbonjY4b4,429
|
14
14
|
polyaxon/schemas.py,sha256=-CykY3emoAUCs_zRNbjwkuMkqbaEDjfKsZC86rI8154,5870
|
15
15
|
polyaxon/settings.py,sha256=Pxx1-T2oeJ5XmvGFN0YgnVzum_9FyTPaQtl68aQvYc4,4116
|
@@ -33,7 +33,7 @@ polyaxon/_cli/dashboard.py,sha256=zRrOJMfowM7YQnYXhz_guKsTi-jkoCuVl_g0UTJ37qE,16
|
|
33
33
|
polyaxon/_cli/errors.py,sha256=BYs7-I0CLLNYma-I0eJXB1EHs8ZTs_nWGRKGJz6CzTI,1031
|
34
34
|
polyaxon/_cli/init.py,sha256=lZhkIbaHGv4FdMypdmXhYXRrH5GpM-qcDEks4IsmKIM,7714
|
35
35
|
polyaxon/_cli/models.py,sha256=71oxGrIe4nQORnnfAiNi6T7A0DBnEe3V6whBABBGL3c,18066
|
36
|
-
polyaxon/_cli/operations.py,sha256=
|
36
|
+
polyaxon/_cli/operations.py,sha256=tYqqnTkgDWS_3bVqz_WVbDYSdKxr5qPNFnIw0AwvBW0,76291
|
37
37
|
polyaxon/_cli/options.py,sha256=-jeMZsdfg0JOV_QzVDf1hAhqK55NI0dkC_x4MZZWty8,1927
|
38
38
|
polyaxon/_cli/port_forward.py,sha256=Lshpcrv7-4tXcriHmppiFW_3QZ7ZosDtUbJDIvdddSA,2733
|
39
39
|
polyaxon/_cli/project_versions.py,sha256=fbgE3tRShrgH8TAA6ETj78J38HG2-BcVoAWbxYS9d5s,20507
|
@@ -43,7 +43,7 @@ polyaxon/_cli/session.py,sha256=5Plolpxwkv3wiup0pRYBpBPD64dvb4GzeRPz_nuIGRo,6033
|
|
43
43
|
polyaxon/_cli/utils.py,sha256=jRD1npuD89-0SxtzAx5SE3i4Lvhi8vnfYkmyOMbDxEY,1319
|
44
44
|
polyaxon/_cli/version.py,sha256=bC0T8S6Momr7EvHGV9Swn868x9ZHD7oL8ahQv57yInk,4536
|
45
45
|
polyaxon/_cli/services/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
46
|
-
polyaxon/_cli/services/agent.py,sha256=
|
46
|
+
polyaxon/_cli/services/agent.py,sha256=jIq7F92TI0r4Cr0XoYmsXiPmZ3ZDYpk3weBA21sZiPQ,2080
|
47
47
|
polyaxon/_cli/services/clean_artifacts.py,sha256=CHN7dh7p5Hx5HJV4j_xAMrnNOvQAJfxSwrx6YVj_UD0,3549
|
48
48
|
polyaxon/_cli/services/docker.py,sha256=G6jIYSABEzXYfrBEOTke2TDwTMZfJU-QdIRAL0JvXnU,7867
|
49
49
|
polyaxon/_cli/services/initializer.py,sha256=eBVfCsn32vqtrmJe8lcfHfjUgPtzLM8eLk6rx-cxCnc,9735
|
@@ -57,7 +57,7 @@ polyaxon/_client/impersonate.py,sha256=4jRoJoX8nkwvVc3zAYqVqPoysNT1kZoPRbwyTpyHG
|
|
57
57
|
polyaxon/_client/init.py,sha256=QECGjzuBTFaagndubzd9U1COpc5NGe-E0aVkSRetcIs,418
|
58
58
|
polyaxon/_client/mixin.py,sha256=-tPm8RBej0UeG9HAKH3qN2fPX8PBtuXAHY1OpwLIDu4,1017
|
59
59
|
polyaxon/_client/project.py,sha256=-vHLae0fMYqOjMscRm0I25Ixj-hS6o9i6XQm5PIxyiA,65520
|
60
|
-
polyaxon/_client/run.py,sha256=
|
60
|
+
polyaxon/_client/run.py,sha256=Zj0sXR2c_80fqxm-jOq4IudgtjFiQ6MoWkKb1pfpr8o,120362
|
61
61
|
polyaxon/_client/store.py,sha256=-Y33ypkijGQnhHTQ_vCTqLlpk0wRqoaP-ntJhdUtv7E,11311
|
62
62
|
polyaxon/_client/decorators/__init__.py,sha256=e5CBijciLP-Ic-YkaL4tFhUdr--uod_TexvxAJamGZQ,186
|
63
63
|
polyaxon/_client/decorators/client_call_handler.py,sha256=dgdidWsL9e8AgJmOfxz4urkI3bBgX64whWI1WHeAJDU,4587
|
@@ -77,7 +77,7 @@ polyaxon/_client/workers/queue_worker.py,sha256=-hZa8bJeXb407B8VrPpJWdSkipFlj92F
|
|
77
77
|
polyaxon/_compiler/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
78
78
|
polyaxon/_compiler/contexts/__init__.py,sha256=qSmtu6aGcXZa6EVQOzzavVOd-FcBY2WNsUye3-gYry8,105
|
79
79
|
polyaxon/_compiler/contexts/base.py,sha256=4EVQQlLgxvFORZ27ouBhwcJKhl3vMGXyOVP9HLZ0MLs,2366
|
80
|
-
polyaxon/_compiler/contexts/contexts.py,sha256=
|
80
|
+
polyaxon/_compiler/contexts/contexts.py,sha256=9nQ3c6fVqUKDZaPL_gkNC54QE0lEF2nEJsVxvbfzhuU,6675
|
81
81
|
polyaxon/_compiler/contexts/dask_job.py,sha256=GxhLcZtCDWSDfc45UenmKsJ6Fhr0f_GeneaAzLHtncg,1265
|
82
82
|
polyaxon/_compiler/contexts/job.py,sha256=1lkjfMO2eHndmmtxC551K6n6RE5XasqkWBfwNpYy_MA,759
|
83
83
|
polyaxon/_compiler/contexts/ray_job.py,sha256=6CFFuX63HhyU0z--GoE3Tv2vENBB1QKGCwuFmEwC2PY,1292
|
@@ -96,7 +96,7 @@ polyaxon/_compiler/lineage/io_collector.py,sha256=4uD6Yc-m1tWcCb2trrBe8N-PQz8jAx
|
|
96
96
|
polyaxon/_compiler/resolver/__init__.py,sha256=A-0nZiZgysAMRyOcJ5TZN4P_lWC0nqamNSqCld-kPg4,193
|
97
97
|
polyaxon/_compiler/resolver/agent.py,sha256=R-IqlQh6HStgbQADzY8wVqmmXxMqKSUUvbLGzr0PSPI,6745
|
98
98
|
polyaxon/_compiler/resolver/resolver.py,sha256=FmOLexETCd2h7X94DcmkYBTeeOksPoCNMN1ypZpeoUk,2724
|
99
|
-
polyaxon/_compiler/resolver/runtime.py,sha256=
|
99
|
+
polyaxon/_compiler/resolver/runtime.py,sha256=_-58S7bFg_7pOT0ogBHPYWEoFddjVxDQ8q2YitEkPyw,9858
|
100
100
|
polyaxon/_config/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
101
101
|
polyaxon/_config/manager.py,sha256=rHSRfhYTVp_kwjwf2bSt-bqU_EB4DpD5mxzH6iTT4ZE,443
|
102
102
|
polyaxon/_config/parser.py,sha256=9z7AO12HOGzhO9OeoQPOSWEcVtuTGFujLyYq4MNAaio,399
|
@@ -113,7 +113,7 @@ polyaxon/_containers/names.py,sha256=IAO-YLcvsK3RBsOfKXIKDkVNtbDOZyIdr8Hh8N136lc
|
|
113
113
|
polyaxon/_containers/pull_policy.py,sha256=LnEVhXBRCyPhH61Zs-V2ClUvpskeeRQccGon7WujnqM,131
|
114
114
|
polyaxon/_containers/statuses.py,sha256=Ac-AqBEStg0R_lFUF6l7dL7Pxnn1qgywLWJio9JLN0w,103
|
115
115
|
polyaxon/_contexts/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
116
|
-
polyaxon/_contexts/keys.py,sha256=
|
116
|
+
polyaxon/_contexts/keys.py,sha256=rh4SHjL5xfTBzbGiyeIZr_Rs69LvRsKBhVDggyySv7k,731
|
117
117
|
polyaxon/_contexts/params.py,sha256=eqxmgMEQR2flL0WiziOHPo314S7vqFBrig3s9hMK_vM,293
|
118
118
|
polyaxon/_contexts/paths.py,sha256=VenEQwumkRPSDYchrNPU0PsBLkOHy1CLFOQKCv3oCyE,3644
|
119
119
|
polyaxon/_contexts/refs.py,sha256=qtxG6QgawTpH9Ckaq-RK6UcB0ZyDBy8YqRieugOmnF0,3426
|
@@ -122,7 +122,7 @@ polyaxon/_deploy/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,
|
|
122
122
|
polyaxon/_deploy/reader.py,sha256=fYv1aXvaWulqy-mr0jbgnhAIa9oAXzDA3KQVOy3_kCo,220
|
123
123
|
polyaxon/_deploy/operators/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
124
124
|
polyaxon/_deploy/operators/cmd_operator.py,sha256=lXDwLKuayiajzd0PVxxxoLb5qbf9OhYWb4iGm_D9IxU,1746
|
125
|
-
polyaxon/_deploy/operators/compose.py,sha256=
|
125
|
+
polyaxon/_deploy/operators/compose.py,sha256=WBBB8auRFTqqymzWDdyVAUwd3x9whpY9OKfofx8dNXU,6426
|
126
126
|
polyaxon/_deploy/operators/conda.py,sha256=x5PzfziR1rr68lBffqzQuObdqzlKEwpCI7aFWE42LTE,575
|
127
127
|
polyaxon/_deploy/operators/docker.py,sha256=aaaEU3eMqYbcq4YTMf9khgcDyfbNvv3fiaEkbauFglw,1115
|
128
128
|
polyaxon/_deploy/operators/helm.py,sha256=e3aa7Ogdbv0O5wi7dwvwnLXaW776WJzFrVTlqhLZ3gI,779
|
@@ -216,7 +216,7 @@ polyaxon/_flow/notifications/__init__.py,sha256=S8GtjElJzzCGlxSL6Yi_h3CrvE4SKnnl
|
|
216
216
|
polyaxon/_flow/operations/__init__.py,sha256=j77iDOi_01VURVhA116wf5kkTftcH2wmo1LkeiwI6zg,137
|
217
217
|
polyaxon/_flow/operations/base.py,sha256=AAnah-5pwKCabZEDbcUJHOc0yQqPlVE6Bj_NfcZXmZU,2299
|
218
218
|
polyaxon/_flow/operations/compiled_operation.py,sha256=S4BFiAH3Bj3ddEzfRNcB-JCoP1yvB6F4V_gf8tG-xAk,4569
|
219
|
-
polyaxon/_flow/operations/operation.py,sha256=
|
219
|
+
polyaxon/_flow/operations/operation.py,sha256=kfol-tyLTgaGPiCxOdA7eXY3h3v6B_CUBq8zN-oPFIk,24093
|
220
220
|
polyaxon/_flow/optimization/__init__.py,sha256=zgba5ZXbXmChLq7PUnuxCXjvGVBnP9OO08xErSWjTkE,866
|
221
221
|
polyaxon/_flow/optimization/enums.py,sha256=Uc2bP8cyvuf7lDmNqsk9bweB8Rr2QChXyKtaxgnRLpY,1135
|
222
222
|
polyaxon/_flow/params/__init__.py,sha256=G_dCHuJZjRAkI83vDLykZE5_xeUjjEKaDL9QWVxCZ6E,60
|
@@ -343,7 +343,7 @@ polyaxon/_k8s/executor/async_executor.py,sha256=5JShP9O0Jv2Czgyab8BkAVxjuPLD5FWV
|
|
343
343
|
polyaxon/_k8s/executor/base.py,sha256=5qD21gfBlAq9KabgMYkExHejs61LtFAUAcnAqsmj3k0,4004
|
344
344
|
polyaxon/_k8s/executor/executor.py,sha256=Qub57Q86SdmBv73CuyFJxydFOIyL0CZKp4B_7aSyLsU,321
|
345
345
|
polyaxon/_k8s/logging/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
346
|
-
polyaxon/_k8s/logging/async_monitor.py,sha256=
|
346
|
+
polyaxon/_k8s/logging/async_monitor.py,sha256=NK49bB-vytSU2_JlicZudKpiGzkNpVexVGevcJESAXo,7577
|
347
347
|
polyaxon/_k8s/logging/monitor.py,sha256=4-NLN4_y0QVsReNJr8Ekv8kh0XNRRTKiiHopWs4wtMc,3426
|
348
348
|
polyaxon/_k8s/manager/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
349
349
|
polyaxon/_k8s/manager/async_manager.py,sha256=REeGSH-rP0WvpCQvwE-6ZfELfpVCJBsDkTe1QzPLy3o,9474
|
@@ -561,13 +561,13 @@ polyaxon/_services/auth.py,sha256=Hkt-aet0kjCN7cfVqTKHgCpEjn-6s8HrHyYfH20w-3k,22
|
|
561
561
|
polyaxon/_services/headers.py,sha256=SAQHSFuIBtt28Ro-tlMhN1T1Qw9WQdF3S6XH08LuygM,535
|
562
562
|
polyaxon/_services/values.py,sha256=Uyj-kB5omSm3SbwpjqeuboSSOK5dyovoh-RszHPdiQ8,2347
|
563
563
|
polyaxon/_sidecar/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
564
|
-
polyaxon/_sidecar/ignore.py,sha256
|
564
|
+
polyaxon/_sidecar/ignore.py,sha256=VSMo0kaTD7K2zTyVJ1u84mZyR_07YdICptbKsxHKo9c,26
|
565
565
|
polyaxon/_sidecar/processor.py,sha256=XIIxl_9W2wme0xOq-4lBnZeThJrGj0dlaC4_mhSKgVI,3235
|
566
|
-
polyaxon/_sidecar/container/__init__.py,sha256=
|
566
|
+
polyaxon/_sidecar/container/__init__.py,sha256=EHzOtJQvqshuNEMwWEABL0CbR86GOahX8708vCXrV4o,5611
|
567
567
|
polyaxon/_sidecar/container/intervals.py,sha256=-tckK4E_Ur0feVsLBhUPUu6brx-JaU6RDFQBW-TAo6I,304
|
568
568
|
polyaxon/_sidecar/container/monitors/__init__.py,sha256=x12AMMGTi4cK_LaDvEK0gd3jZ3R57iPnp5ICehCwOl8,202
|
569
569
|
polyaxon/_sidecar/container/monitors/artifacts.py,sha256=BlXMOiKJFhHcRpJ9T7izh-GtcXoKfulZmzfq7aBgdOY,2746
|
570
|
-
polyaxon/_sidecar/container/monitors/logs.py,sha256=
|
570
|
+
polyaxon/_sidecar/container/monitors/logs.py,sha256=xionA2GZCfcbtBVYpzTBLnkfWlFsG1wT1y1Y9LPc0Ik,1197
|
571
571
|
polyaxon/_sidecar/container/monitors/spec.py,sha256=1JCkz0gH8j6C9WNlG6c4_0PiwfghFXc7bv3VeE13Mhw,836
|
572
572
|
polyaxon/_utils/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
573
573
|
polyaxon/_utils/cache.py,sha256=hsnADZUnnYKQ2jrzuQjg3z9_4YGznL-pof9wH-cObR8,1717
|
@@ -611,9 +611,9 @@ polyaxon/tuners/hyperopt.py,sha256=zd6MblMGkooqLGDFJVo5kClqYnBoMwGj-opqqj8FDzQ,7
|
|
611
611
|
polyaxon/tuners/mapping.py,sha256=pOdHCiwEufTk-QT7pNyjBjAEWNTM-lMC17WNTCk7C24,69
|
612
612
|
polyaxon/tuners/random_search.py,sha256=6VEekM3N9h6E1lbpVTTUGKFPJlGMY2u-GkG615_nQcI,80
|
613
613
|
polyaxon_sdk/__init__.py,sha256=HWvFdGWESyVG3f26K_szewiG-McMOHFkXKTfZcBlHsM,92
|
614
|
-
polyaxon-2.
|
615
|
-
polyaxon-2.
|
616
|
-
polyaxon-2.
|
617
|
-
polyaxon-2.
|
618
|
-
polyaxon-2.
|
619
|
-
polyaxon-2.
|
614
|
+
polyaxon-2.4.0.dist-info/LICENSE,sha256=86kroZbQUDsmSWOomB7dpceG65UXiVSPob4581tStBc,11349
|
615
|
+
polyaxon-2.4.0.dist-info/METADATA,sha256=cbVkotBGTIpRB2ZLYBr4jFC9gzavsTyPxZI_CQgBhOk,11657
|
616
|
+
polyaxon-2.4.0.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
|
617
|
+
polyaxon-2.4.0.dist-info/entry_points.txt,sha256=aFbUMjkg9vzRBVAFhqvR1m92yG8Cov7UAF0zViGfoQw,70
|
618
|
+
polyaxon-2.4.0.dist-info/top_level.txt,sha256=I_2e_Vv8rdcqWcMMdZocbrHiKPNGqoSMBqIObrw00Rg,22
|
619
|
+
polyaxon-2.4.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|