plato-sdk-v2 2.7.8__py3-none-any.whl → 2.8.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.
- plato/_generated/__init__.py +1 -1
- plato/_generated/api/v2/sessions/__init__.py +2 -0
- plato/_generated/api/v2/sessions/remove_job.py +89 -0
- plato/_generated/models/__init__.py +64 -4
- plato/chronos/api/agents/get_agent_versions.py +5 -5
- plato/chronos/api/agents/list_agents.py +5 -5
- plato/chronos/api/registry/get_agent_versions_api_registry_agents__agent_name__versions_get.py +5 -5
- plato/chronos/api/registry/list_registry_agents_api_registry_agents_get.py +5 -5
- plato/chronos/models/__init__.py +21 -21
- plato/v2/async_/session.py +158 -0
- plato/v2/sync/session.py +158 -0
- {plato_sdk_v2-2.7.8.dist-info → plato_sdk_v2-2.8.0.dist-info}/METADATA +1 -1
- {plato_sdk_v2-2.7.8.dist-info → plato_sdk_v2-2.8.0.dist-info}/RECORD +15 -14
- {plato_sdk_v2-2.7.8.dist-info → plato_sdk_v2-2.8.0.dist-info}/WHEEL +0 -0
- {plato_sdk_v2-2.7.8.dist-info → plato_sdk_v2-2.8.0.dist-info}/entry_points.txt +0 -0
plato/_generated/__init__.py
CHANGED
|
@@ -23,6 +23,7 @@ from . import (
|
|
|
23
23
|
list_sessions,
|
|
24
24
|
log_job_mutation,
|
|
25
25
|
make,
|
|
26
|
+
remove_job,
|
|
26
27
|
reset,
|
|
27
28
|
set_date,
|
|
28
29
|
setup_sandbox,
|
|
@@ -37,6 +38,7 @@ __all__ = [
|
|
|
37
38
|
"make",
|
|
38
39
|
"list_jobs",
|
|
39
40
|
"add_job",
|
|
41
|
+
"remove_job",
|
|
40
42
|
"reset",
|
|
41
43
|
"heartbeat",
|
|
42
44
|
"connect_network",
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"""Remove Job"""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
import httpx
|
|
8
|
+
|
|
9
|
+
from plato._generated.errors import raise_for_status
|
|
10
|
+
from plato._generated.models import RemoveJobRequest, RemoveJobResponse
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _build_request_args(
|
|
14
|
+
session_id: str,
|
|
15
|
+
body: RemoveJobRequest,
|
|
16
|
+
authorization: str | None = None,
|
|
17
|
+
x_api_key: str | None = None,
|
|
18
|
+
) -> dict[str, Any]:
|
|
19
|
+
"""Build request arguments."""
|
|
20
|
+
url = f"/api/v2/sessions/{session_id}/remove-job"
|
|
21
|
+
|
|
22
|
+
headers: dict[str, str] = {}
|
|
23
|
+
if authorization is not None:
|
|
24
|
+
headers["authorization"] = authorization
|
|
25
|
+
if x_api_key is not None:
|
|
26
|
+
headers["X-API-Key"] = x_api_key
|
|
27
|
+
|
|
28
|
+
return {
|
|
29
|
+
"method": "POST",
|
|
30
|
+
"url": url,
|
|
31
|
+
"json": body.model_dump(mode="json", exclude_none=True),
|
|
32
|
+
"headers": headers,
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def sync(
|
|
37
|
+
client: httpx.Client,
|
|
38
|
+
session_id: str,
|
|
39
|
+
body: RemoveJobRequest,
|
|
40
|
+
authorization: str | None = None,
|
|
41
|
+
x_api_key: str | None = None,
|
|
42
|
+
) -> RemoveJobResponse:
|
|
43
|
+
"""Remove a job from a session.
|
|
44
|
+
|
|
45
|
+
This will:
|
|
46
|
+
1. Remove the job from the session's network (if connected)
|
|
47
|
+
2. Shut down the VM associated with the job
|
|
48
|
+
3. Cancel the job in the system
|
|
49
|
+
|
|
50
|
+
Use this to clean up individual jobs without closing the entire session."""
|
|
51
|
+
|
|
52
|
+
request_args = _build_request_args(
|
|
53
|
+
session_id=session_id,
|
|
54
|
+
body=body,
|
|
55
|
+
authorization=authorization,
|
|
56
|
+
x_api_key=x_api_key,
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
response = client.request(**request_args)
|
|
60
|
+
raise_for_status(response)
|
|
61
|
+
return RemoveJobResponse.model_validate(response.json())
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
async def asyncio(
|
|
65
|
+
client: httpx.AsyncClient,
|
|
66
|
+
session_id: str,
|
|
67
|
+
body: RemoveJobRequest,
|
|
68
|
+
authorization: str | None = None,
|
|
69
|
+
x_api_key: str | None = None,
|
|
70
|
+
) -> RemoveJobResponse:
|
|
71
|
+
"""Remove a job from a session.
|
|
72
|
+
|
|
73
|
+
This will:
|
|
74
|
+
1. Remove the job from the session's network (if connected)
|
|
75
|
+
2. Shut down the VM associated with the job
|
|
76
|
+
3. Cancel the job in the system
|
|
77
|
+
|
|
78
|
+
Use this to clean up individual jobs without closing the entire session."""
|
|
79
|
+
|
|
80
|
+
request_args = _build_request_args(
|
|
81
|
+
session_id=session_id,
|
|
82
|
+
body=body,
|
|
83
|
+
authorization=authorization,
|
|
84
|
+
x_api_key=x_api_key,
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
response = await client.request(**request_args)
|
|
88
|
+
raise_for_status(response)
|
|
89
|
+
return RemoveJobResponse.model_validate(response.json())
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
|
-
# filename:
|
|
3
|
-
# timestamp: 2026-01-
|
|
2
|
+
# filename: tmp2hcn27e0.json
|
|
3
|
+
# timestamp: 2026-01-29T22:45:52+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -1158,6 +1158,14 @@ class EnvFromArtifact(BaseModel):
|
|
|
1158
1158
|
"""
|
|
1159
1159
|
|
|
1160
1160
|
|
|
1161
|
+
class RootfsStorageBackend(Enum):
|
|
1162
|
+
sparse_s3 = "sparse-s3"
|
|
1163
|
+
blockdiff = "blockdiff"
|
|
1164
|
+
blockdiff_checkpoint = "blockdiff_checkpoint"
|
|
1165
|
+
blockdiff_disk = "blockdiff_disk"
|
|
1166
|
+
snapshot_store = "snapshot-store"
|
|
1167
|
+
|
|
1168
|
+
|
|
1161
1169
|
class EnvFromSimulator(BaseModel):
|
|
1162
1170
|
model_config = ConfigDict(
|
|
1163
1171
|
extra="allow",
|
|
@@ -1929,6 +1937,11 @@ class NodeSessionNetworkConfig(BaseModel):
|
|
|
1929
1937
|
"""
|
|
1930
1938
|
|
|
1931
1939
|
|
|
1940
|
+
class DefaultRootfsStorageBackend(Enum):
|
|
1941
|
+
sparse_s3 = "sparse-s3"
|
|
1942
|
+
snapshot_store = "snapshot-store"
|
|
1943
|
+
|
|
1944
|
+
|
|
1932
1945
|
class NodeSnapshotStoreConfig(BaseModel):
|
|
1933
1946
|
model_config = ConfigDict(
|
|
1934
1947
|
extra="allow",
|
|
@@ -1977,9 +1990,12 @@ class NodeSnapshotStoreConfig(BaseModel):
|
|
|
1977
1990
|
"""
|
|
1978
1991
|
Local storage root for snapshot-store data.
|
|
1979
1992
|
"""
|
|
1980
|
-
|
|
1993
|
+
default_rootfs_storage_backend: Annotated[
|
|
1994
|
+
DefaultRootfsStorageBackend | None,
|
|
1995
|
+
Field(title="Default Rootfs Storage Backend"),
|
|
1996
|
+
] = DefaultRootfsStorageBackend.sparse_s3
|
|
1981
1997
|
"""
|
|
1982
|
-
|
|
1998
|
+
Default rootfs storage backend. 'sparse-s3' uses S3 archives, 'snapshot-store' uses FUSE-based dedup.
|
|
1983
1999
|
"""
|
|
1984
2000
|
|
|
1985
2001
|
|
|
@@ -2334,6 +2350,38 @@ class ReleaseStatus(Enum):
|
|
|
2334
2350
|
failed = "failed"
|
|
2335
2351
|
|
|
2336
2352
|
|
|
2353
|
+
class RemoveJobRequest(BaseModel):
|
|
2354
|
+
model_config = ConfigDict(
|
|
2355
|
+
extra="allow",
|
|
2356
|
+
)
|
|
2357
|
+
job_id: Annotated[str, Field(title="Job Id")]
|
|
2358
|
+
"""
|
|
2359
|
+
Job ID to remove from the session
|
|
2360
|
+
"""
|
|
2361
|
+
|
|
2362
|
+
|
|
2363
|
+
class RemoveJobResponse(BaseModel):
|
|
2364
|
+
model_config = ConfigDict(
|
|
2365
|
+
extra="allow",
|
|
2366
|
+
)
|
|
2367
|
+
session_id: Annotated[str, Field(title="Session Id")]
|
|
2368
|
+
"""
|
|
2369
|
+
Session ID the job was removed from
|
|
2370
|
+
"""
|
|
2371
|
+
job_id: Annotated[str, Field(title="Job Id")]
|
|
2372
|
+
"""
|
|
2373
|
+
Job ID that was removed
|
|
2374
|
+
"""
|
|
2375
|
+
success: Annotated[bool, Field(title="Success")]
|
|
2376
|
+
"""
|
|
2377
|
+
Whether the removal was successful
|
|
2378
|
+
"""
|
|
2379
|
+
message: Annotated[str | None, Field(title="Message")] = None
|
|
2380
|
+
"""
|
|
2381
|
+
Status message or error details
|
|
2382
|
+
"""
|
|
2383
|
+
|
|
2384
|
+
|
|
2337
2385
|
class RepositoryResponse(BaseModel):
|
|
2338
2386
|
model_config = ConfigDict(
|
|
2339
2387
|
extra="allow",
|
|
@@ -4324,6 +4372,18 @@ class EnvFromResource(BaseModel):
|
|
|
4324
4372
|
"""
|
|
4325
4373
|
Custom name for this environment
|
|
4326
4374
|
"""
|
|
4375
|
+
docker_image_url: Annotated[str | None, Field(title="Docker Image Url")] = None
|
|
4376
|
+
"""
|
|
4377
|
+
Custom Docker image URL (ECR). If not set, uses default from settings.
|
|
4378
|
+
"""
|
|
4379
|
+
rootfs_storage_backend: Annotated[RootfsStorageBackend | None, Field(title="Rootfs Storage Backend")] = None
|
|
4380
|
+
"""
|
|
4381
|
+
Storage backend for rootfs ('sparse-s3' or 'snapshot-store'). If not set, uses default.
|
|
4382
|
+
"""
|
|
4383
|
+
upload_rootfs: Annotated[bool | None, Field(title="Upload Rootfs")] = True
|
|
4384
|
+
"""
|
|
4385
|
+
Upload rootfs to S3/snapshot-store if not already cached. Set to False for one-off VMs.
|
|
4386
|
+
"""
|
|
4327
4387
|
|
|
4328
4388
|
|
|
4329
4389
|
class ExecuteCommandResponse(BaseModel):
|
|
@@ -7,7 +7,7 @@ from typing import Any
|
|
|
7
7
|
import httpx
|
|
8
8
|
|
|
9
9
|
from plato.chronos.errors import raise_for_status
|
|
10
|
-
from plato.chronos.models import
|
|
10
|
+
from plato.chronos.models import ChronosModelsAgentAgentVersionsResponse
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
def _build_request_args(
|
|
@@ -32,7 +32,7 @@ def sync(
|
|
|
32
32
|
client: httpx.Client,
|
|
33
33
|
name: str,
|
|
34
34
|
x_api_key: str | None = None,
|
|
35
|
-
) ->
|
|
35
|
+
) -> ChronosModelsAgentAgentVersionsResponse:
|
|
36
36
|
"""Get all versions of an agent by name."""
|
|
37
37
|
|
|
38
38
|
request_args = _build_request_args(
|
|
@@ -42,14 +42,14 @@ def sync(
|
|
|
42
42
|
|
|
43
43
|
response = client.request(**request_args)
|
|
44
44
|
raise_for_status(response)
|
|
45
|
-
return
|
|
45
|
+
return ChronosModelsAgentAgentVersionsResponse.model_validate(response.json())
|
|
46
46
|
|
|
47
47
|
|
|
48
48
|
async def asyncio(
|
|
49
49
|
client: httpx.AsyncClient,
|
|
50
50
|
name: str,
|
|
51
51
|
x_api_key: str | None = None,
|
|
52
|
-
) ->
|
|
52
|
+
) -> ChronosModelsAgentAgentVersionsResponse:
|
|
53
53
|
"""Get all versions of an agent by name."""
|
|
54
54
|
|
|
55
55
|
request_args = _build_request_args(
|
|
@@ -59,4 +59,4 @@ async def asyncio(
|
|
|
59
59
|
|
|
60
60
|
response = await client.request(**request_args)
|
|
61
61
|
raise_for_status(response)
|
|
62
|
-
return
|
|
62
|
+
return ChronosModelsAgentAgentVersionsResponse.model_validate(response.json())
|
|
@@ -7,7 +7,7 @@ from typing import Any
|
|
|
7
7
|
import httpx
|
|
8
8
|
|
|
9
9
|
from plato.chronos.errors import raise_for_status
|
|
10
|
-
from plato.chronos.models import
|
|
10
|
+
from plato.chronos.models import ChronosModelsAgentAgentListResponse
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
def _build_request_args(
|
|
@@ -30,7 +30,7 @@ def _build_request_args(
|
|
|
30
30
|
def sync(
|
|
31
31
|
client: httpx.Client,
|
|
32
32
|
x_api_key: str | None = None,
|
|
33
|
-
) ->
|
|
33
|
+
) -> ChronosModelsAgentAgentListResponse:
|
|
34
34
|
"""List all agents for the org."""
|
|
35
35
|
|
|
36
36
|
request_args = _build_request_args(
|
|
@@ -39,13 +39,13 @@ def sync(
|
|
|
39
39
|
|
|
40
40
|
response = client.request(**request_args)
|
|
41
41
|
raise_for_status(response)
|
|
42
|
-
return
|
|
42
|
+
return ChronosModelsAgentAgentListResponse.model_validate(response.json())
|
|
43
43
|
|
|
44
44
|
|
|
45
45
|
async def asyncio(
|
|
46
46
|
client: httpx.AsyncClient,
|
|
47
47
|
x_api_key: str | None = None,
|
|
48
|
-
) ->
|
|
48
|
+
) -> ChronosModelsAgentAgentListResponse:
|
|
49
49
|
"""List all agents for the org."""
|
|
50
50
|
|
|
51
51
|
request_args = _build_request_args(
|
|
@@ -54,4 +54,4 @@ async def asyncio(
|
|
|
54
54
|
|
|
55
55
|
response = await client.request(**request_args)
|
|
56
56
|
raise_for_status(response)
|
|
57
|
-
return
|
|
57
|
+
return ChronosModelsAgentAgentListResponse.model_validate(response.json())
|
plato/chronos/api/registry/get_agent_versions_api_registry_agents__agent_name__versions_get.py
CHANGED
|
@@ -7,7 +7,7 @@ from typing import Any
|
|
|
7
7
|
import httpx
|
|
8
8
|
|
|
9
9
|
from plato.chronos.errors import raise_for_status
|
|
10
|
-
from plato.chronos.models import
|
|
10
|
+
from plato.chronos.models import AgentVersionsResponse
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
def _build_request_args(
|
|
@@ -25,7 +25,7 @@ def _build_request_args(
|
|
|
25
25
|
def sync(
|
|
26
26
|
client: httpx.Client,
|
|
27
27
|
agent_name: str,
|
|
28
|
-
) ->
|
|
28
|
+
) -> AgentVersionsResponse:
|
|
29
29
|
"""Get versions for an agent from the registry."""
|
|
30
30
|
|
|
31
31
|
request_args = _build_request_args(
|
|
@@ -34,13 +34,13 @@ def sync(
|
|
|
34
34
|
|
|
35
35
|
response = client.request(**request_args)
|
|
36
36
|
raise_for_status(response)
|
|
37
|
-
return
|
|
37
|
+
return AgentVersionsResponse.model_validate(response.json())
|
|
38
38
|
|
|
39
39
|
|
|
40
40
|
async def asyncio(
|
|
41
41
|
client: httpx.AsyncClient,
|
|
42
42
|
agent_name: str,
|
|
43
|
-
) ->
|
|
43
|
+
) -> AgentVersionsResponse:
|
|
44
44
|
"""Get versions for an agent from the registry."""
|
|
45
45
|
|
|
46
46
|
request_args = _build_request_args(
|
|
@@ -49,4 +49,4 @@ async def asyncio(
|
|
|
49
49
|
|
|
50
50
|
response = await client.request(**request_args)
|
|
51
51
|
raise_for_status(response)
|
|
52
|
-
return
|
|
52
|
+
return AgentVersionsResponse.model_validate(response.json())
|
|
@@ -7,7 +7,7 @@ from typing import Any
|
|
|
7
7
|
import httpx
|
|
8
8
|
|
|
9
9
|
from plato.chronos.errors import raise_for_status
|
|
10
|
-
from plato.chronos.models import
|
|
10
|
+
from plato.chronos.models import AgentListResponse
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
def _build_request_args() -> dict[str, Any]:
|
|
@@ -22,23 +22,23 @@ def _build_request_args() -> dict[str, Any]:
|
|
|
22
22
|
|
|
23
23
|
def sync(
|
|
24
24
|
client: httpx.Client,
|
|
25
|
-
) ->
|
|
25
|
+
) -> AgentListResponse:
|
|
26
26
|
"""List all agents from the registry with their ECR image URIs."""
|
|
27
27
|
|
|
28
28
|
request_args = _build_request_args()
|
|
29
29
|
|
|
30
30
|
response = client.request(**request_args)
|
|
31
31
|
raise_for_status(response)
|
|
32
|
-
return
|
|
32
|
+
return AgentListResponse.model_validate(response.json())
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
async def asyncio(
|
|
36
36
|
client: httpx.AsyncClient,
|
|
37
|
-
) ->
|
|
37
|
+
) -> AgentListResponse:
|
|
38
38
|
"""List all agents from the registry with their ECR image URIs."""
|
|
39
39
|
|
|
40
40
|
request_args = _build_request_args()
|
|
41
41
|
|
|
42
42
|
response = await client.request(**request_args)
|
|
43
43
|
raise_for_status(response)
|
|
44
|
-
return
|
|
44
|
+
return AgentListResponse.model_validate(response.json())
|
plato/chronos/models/__init__.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
|
-
# filename:
|
|
3
|
-
# timestamp: 2026-01-
|
|
2
|
+
# filename: tmpi9d4hw2u.json
|
|
3
|
+
# timestamp: 2026-01-29T22:45:54+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -30,6 +30,13 @@ class AgentInfo(BaseModel):
|
|
|
30
30
|
image_uri: Annotated[str, Field(title="Image Uri")]
|
|
31
31
|
|
|
32
32
|
|
|
33
|
+
class AgentListResponse(BaseModel):
|
|
34
|
+
model_config = ConfigDict(
|
|
35
|
+
extra="allow",
|
|
36
|
+
)
|
|
37
|
+
agents: Annotated[list[AgentInfo], Field(title="Agents")]
|
|
38
|
+
|
|
39
|
+
|
|
33
40
|
class AgentLookupResponse(BaseModel):
|
|
34
41
|
model_config = ConfigDict(
|
|
35
42
|
extra="allow",
|
|
@@ -71,14 +78,6 @@ class AgentVersionInfo(BaseModel):
|
|
|
71
78
|
created_at: Annotated[AwareDatetime, Field(title="Created At")]
|
|
72
79
|
|
|
73
80
|
|
|
74
|
-
class AgentVersionsResponse(BaseModel):
|
|
75
|
-
model_config = ConfigDict(
|
|
76
|
-
extra="allow",
|
|
77
|
-
)
|
|
78
|
-
name: Annotated[str, Field(title="Name")]
|
|
79
|
-
versions: Annotated[list[AgentVersionInfo], Field(title="Versions")]
|
|
80
|
-
|
|
81
|
-
|
|
82
81
|
class AuthStatusResponse(BaseModel):
|
|
83
82
|
model_config = ConfigDict(
|
|
84
83
|
extra="allow",
|
|
@@ -566,13 +565,6 @@ class WorldVersionsResponse(BaseModel):
|
|
|
566
565
|
versions: Annotated[list[str], Field(title="Versions")]
|
|
567
566
|
|
|
568
567
|
|
|
569
|
-
class ChronosApiRegistryAgentListResponse(BaseModel):
|
|
570
|
-
model_config = ConfigDict(
|
|
571
|
-
extra="allow",
|
|
572
|
-
)
|
|
573
|
-
agents: Annotated[list[AgentInfo], Field(title="Agents")]
|
|
574
|
-
|
|
575
|
-
|
|
576
568
|
class ChronosApiRegistryAgentSchemaResponse(BaseModel):
|
|
577
569
|
model_config = ConfigDict(
|
|
578
570
|
extra="allow",
|
|
@@ -592,12 +584,19 @@ class ChronosApiRegistryAgentVersionInfo(BaseModel):
|
|
|
592
584
|
created_at: Annotated[str | None, Field(title="Created At")] = None
|
|
593
585
|
|
|
594
586
|
|
|
595
|
-
class
|
|
587
|
+
class ChronosModelsAgentAgentListResponse(BaseModel):
|
|
588
|
+
model_config = ConfigDict(
|
|
589
|
+
extra="allow",
|
|
590
|
+
)
|
|
591
|
+
agents: Annotated[list[AgentResponse], Field(title="Agents")]
|
|
592
|
+
|
|
593
|
+
|
|
594
|
+
class ChronosModelsAgentAgentVersionsResponse(BaseModel):
|
|
596
595
|
model_config = ConfigDict(
|
|
597
596
|
extra="allow",
|
|
598
597
|
)
|
|
599
598
|
name: Annotated[str, Field(title="Name")]
|
|
600
|
-
versions: Annotated[list[
|
|
599
|
+
versions: Annotated[list[AgentVersionInfo], Field(title="Versions")]
|
|
601
600
|
|
|
602
601
|
|
|
603
602
|
class ChronosModelsSessionWorldInfo(BaseModel):
|
|
@@ -610,11 +609,12 @@ class ChronosModelsSessionWorldInfo(BaseModel):
|
|
|
610
609
|
config_schema: Annotated[dict[str, Any] | None, Field(title="Config Schema")] = None
|
|
611
610
|
|
|
612
611
|
|
|
613
|
-
class
|
|
612
|
+
class AgentVersionsResponse(BaseModel):
|
|
614
613
|
model_config = ConfigDict(
|
|
615
614
|
extra="allow",
|
|
616
615
|
)
|
|
617
|
-
|
|
616
|
+
name: Annotated[str, Field(title="Name")]
|
|
617
|
+
versions: Annotated[list[ChronosApiRegistryAgentVersionInfo], Field(title="Versions")]
|
|
618
618
|
|
|
619
619
|
|
|
620
620
|
class CreatorsListResponse(BaseModel):
|
plato/v2/async_/session.py
CHANGED
|
@@ -23,6 +23,8 @@ if TYPE_CHECKING:
|
|
|
23
23
|
|
|
24
24
|
from plato._generated.api.v2.jobs import get_flows as jobs_get_flows
|
|
25
25
|
from plato._generated.api.v2.jobs import public_url as jobs_public_url
|
|
26
|
+
from plato._generated.api.v2.jobs import wait_for_ready as jobs_wait_for_ready
|
|
27
|
+
from plato._generated.api.v2.sessions import add_job as sessions_add_job
|
|
26
28
|
from plato._generated.api.v2.sessions import close as sessions_close
|
|
27
29
|
from plato._generated.api.v2.sessions import connect_network as sessions_connect_network
|
|
28
30
|
from plato._generated.api.v2.sessions import disk_snapshot as sessions_disk_snapshot
|
|
@@ -31,6 +33,7 @@ from plato._generated.api.v2.sessions import execute as sessions_execute
|
|
|
31
33
|
from plato._generated.api.v2.sessions import get_public_url as sessions_get_public_url
|
|
32
34
|
from plato._generated.api.v2.sessions import heartbeat as sessions_heartbeat
|
|
33
35
|
from plato._generated.api.v2.sessions import make as sessions_make
|
|
36
|
+
from plato._generated.api.v2.sessions import remove_job as sessions_remove_job
|
|
34
37
|
from plato._generated.api.v2.sessions import reset as sessions_reset
|
|
35
38
|
from plato._generated.api.v2.sessions import set_date as sessions_set_date
|
|
36
39
|
from plato._generated.api.v2.sessions import setup_sandbox as sessions_setup_sandbox
|
|
@@ -39,6 +42,7 @@ from plato._generated.api.v2.sessions import snapshot_store as sessions_snapshot
|
|
|
39
42
|
from plato._generated.api.v2.sessions import state as sessions_state
|
|
40
43
|
from plato._generated.api.v2.sessions import wait_for_ready as sessions_wait_for_ready
|
|
41
44
|
from plato._generated.models import (
|
|
45
|
+
AddJobRequest,
|
|
42
46
|
AppApiV2SchemasSessionCreateSnapshotRequest,
|
|
43
47
|
AppApiV2SchemasSessionCreateSnapshotResponse,
|
|
44
48
|
AppApiV2SchemasSessionEvaluateResponse,
|
|
@@ -49,10 +53,12 @@ from plato._generated.models import (
|
|
|
49
53
|
CreateDiskSnapshotResponse,
|
|
50
54
|
CreateSessionFromEnvs,
|
|
51
55
|
CreateSessionFromTask,
|
|
56
|
+
EnvironmentContext,
|
|
52
57
|
Envs,
|
|
53
58
|
ExecuteCommandRequest,
|
|
54
59
|
ExecuteCommandResponse,
|
|
55
60
|
Flow,
|
|
61
|
+
RemoveJobRequest,
|
|
56
62
|
ResetSessionRequest,
|
|
57
63
|
ResetSessionResponse,
|
|
58
64
|
RunSessionSource,
|
|
@@ -780,6 +786,158 @@ class Session:
|
|
|
780
786
|
|
|
781
787
|
return result
|
|
782
788
|
|
|
789
|
+
async def add_env(
|
|
790
|
+
self,
|
|
791
|
+
env: EnvFromSimulator | EnvFromArtifact | EnvFromResource,
|
|
792
|
+
*,
|
|
793
|
+
timeout: int = 1800,
|
|
794
|
+
heartbeat_timeout: int | None = None,
|
|
795
|
+
wait_for_ready: bool = True,
|
|
796
|
+
) -> Environment:
|
|
797
|
+
"""Add a new environment to this session.
|
|
798
|
+
|
|
799
|
+
The new environment will:
|
|
800
|
+
1. Become part of the session's job group
|
|
801
|
+
2. Be matched to an available VM via the resource matcher
|
|
802
|
+
3. Automatically join the session's WireGuard network if one exists
|
|
803
|
+
|
|
804
|
+
Args:
|
|
805
|
+
env: Environment configuration (from Env.simulator(), Env.artifact(), or Env.resource()).
|
|
806
|
+
timeout: VM timeout in seconds (default: 1800).
|
|
807
|
+
heartbeat_timeout: Per-VM heartbeat timeout. None=use default (300s), 0=disabled.
|
|
808
|
+
wait_for_ready: If True, wait for the job to be ready before returning (default: True).
|
|
809
|
+
|
|
810
|
+
Returns:
|
|
811
|
+
Environment object for the new job.
|
|
812
|
+
|
|
813
|
+
Raises:
|
|
814
|
+
RuntimeError: If session is closed or job creation fails.
|
|
815
|
+
TimeoutError: If wait_for_ready=True and the job doesn't become ready within timeout.
|
|
816
|
+
"""
|
|
817
|
+
self._check_closed()
|
|
818
|
+
|
|
819
|
+
# Auto-generate alias if not set
|
|
820
|
+
if env.alias is None:
|
|
821
|
+
existing_aliases = {e.alias for e in self.envs}
|
|
822
|
+
unique_alias = f"env-{uuid.uuid4().hex[:8]}"
|
|
823
|
+
while unique_alias in existing_aliases:
|
|
824
|
+
unique_alias = f"env-{uuid.uuid4().hex[:8]}"
|
|
825
|
+
env.alias = unique_alias
|
|
826
|
+
|
|
827
|
+
# Build request
|
|
828
|
+
request = AddJobRequest(
|
|
829
|
+
env=env,
|
|
830
|
+
timeout=timeout,
|
|
831
|
+
heartbeat_timeout=heartbeat_timeout,
|
|
832
|
+
)
|
|
833
|
+
|
|
834
|
+
# Call the add_job API
|
|
835
|
+
response = await sessions_add_job.asyncio(
|
|
836
|
+
client=self._http,
|
|
837
|
+
session_id=self.session_id,
|
|
838
|
+
body=request,
|
|
839
|
+
x_api_key=self._api_key,
|
|
840
|
+
)
|
|
841
|
+
|
|
842
|
+
# Check for failures
|
|
843
|
+
if not response.env.success:
|
|
844
|
+
raise RuntimeError(f"Failed to add job: {response.env.error}")
|
|
845
|
+
|
|
846
|
+
if not response.env.job_id:
|
|
847
|
+
raise RuntimeError("Backend did not return job_id for new environment")
|
|
848
|
+
|
|
849
|
+
job_id = response.env.job_id
|
|
850
|
+
|
|
851
|
+
# Wait for the job to be ready if requested
|
|
852
|
+
if wait_for_ready:
|
|
853
|
+
ready_response = await jobs_wait_for_ready.asyncio(
|
|
854
|
+
client=self._http,
|
|
855
|
+
job_id=job_id,
|
|
856
|
+
timeout=timeout,
|
|
857
|
+
x_api_key=self._api_key,
|
|
858
|
+
)
|
|
859
|
+
|
|
860
|
+
if not ready_response.ready:
|
|
861
|
+
error = ready_response.error or "Unknown error"
|
|
862
|
+
raise TimeoutError(f"Job {job_id} did not become ready: {error}")
|
|
863
|
+
|
|
864
|
+
# Update internal context with the new environment
|
|
865
|
+
new_env_context = EnvironmentContext(
|
|
866
|
+
job_id=job_id,
|
|
867
|
+
alias=env.alias,
|
|
868
|
+
artifact_id=response.env.artifact_id,
|
|
869
|
+
simulator=getattr(env, "simulator", None),
|
|
870
|
+
)
|
|
871
|
+
|
|
872
|
+
# Add to context's envs list
|
|
873
|
+
if self._context.envs is None:
|
|
874
|
+
self._context.envs = []
|
|
875
|
+
self._context.envs.append(new_env_context)
|
|
876
|
+
|
|
877
|
+
# Reset cached envs to force rebuild
|
|
878
|
+
self._envs = None
|
|
879
|
+
|
|
880
|
+
# Create and return the Environment object
|
|
881
|
+
new_environment = Environment(
|
|
882
|
+
session=self,
|
|
883
|
+
job_id=job_id,
|
|
884
|
+
alias=env.alias,
|
|
885
|
+
artifact_id=response.env.artifact_id,
|
|
886
|
+
)
|
|
887
|
+
|
|
888
|
+
logger.info(f"Added job {job_id} (alias={env.alias}) to session {self.session_id}")
|
|
889
|
+
return new_environment
|
|
890
|
+
|
|
891
|
+
async def remove_env(self, env: Environment | str) -> None:
|
|
892
|
+
"""Remove an environment from this session.
|
|
893
|
+
|
|
894
|
+
This will:
|
|
895
|
+
1. Remove the job from the session's network (if connected)
|
|
896
|
+
2. Shut down the VM associated with the job
|
|
897
|
+
3. Cancel the job in the system
|
|
898
|
+
|
|
899
|
+
Args:
|
|
900
|
+
env: Environment object or alias string to remove.
|
|
901
|
+
|
|
902
|
+
Raises:
|
|
903
|
+
RuntimeError: If session is closed or removal fails.
|
|
904
|
+
ValueError: If environment not found in session.
|
|
905
|
+
"""
|
|
906
|
+
self._check_closed()
|
|
907
|
+
|
|
908
|
+
# Resolve to job_id
|
|
909
|
+
if isinstance(env, str):
|
|
910
|
+
# Find by alias
|
|
911
|
+
found_env = self.get_env(env)
|
|
912
|
+
if not found_env:
|
|
913
|
+
raise ValueError(f"Environment with alias '{env}' not found in session")
|
|
914
|
+
job_id = found_env.job_id
|
|
915
|
+
alias = env
|
|
916
|
+
else:
|
|
917
|
+
job_id = env.job_id
|
|
918
|
+
alias = env.alias
|
|
919
|
+
|
|
920
|
+
# Call the remove_job API
|
|
921
|
+
request = RemoveJobRequest(job_id=job_id)
|
|
922
|
+
response = await sessions_remove_job.asyncio(
|
|
923
|
+
client=self._http,
|
|
924
|
+
session_id=self.session_id,
|
|
925
|
+
body=request,
|
|
926
|
+
x_api_key=self._api_key,
|
|
927
|
+
)
|
|
928
|
+
|
|
929
|
+
if not response.success:
|
|
930
|
+
raise RuntimeError(f"Failed to remove job {job_id}")
|
|
931
|
+
|
|
932
|
+
# Update internal context - remove the environment
|
|
933
|
+
if self._context.envs:
|
|
934
|
+
self._context.envs = [e for e in self._context.envs if e.job_id != job_id]
|
|
935
|
+
|
|
936
|
+
# Reset cached envs to force rebuild
|
|
937
|
+
self._envs = None
|
|
938
|
+
|
|
939
|
+
logger.info(f"Removed job {job_id} (alias={alias}) from session {self.session_id}")
|
|
940
|
+
|
|
783
941
|
async def cleanup_databases(self) -> SessionCleanupResult:
|
|
784
942
|
"""Clean up database audit logs for all environments.
|
|
785
943
|
|
plato/v2/sync/session.py
CHANGED
|
@@ -22,6 +22,8 @@ if TYPE_CHECKING:
|
|
|
22
22
|
|
|
23
23
|
from plato._generated.api.v2.jobs import get_flows as jobs_get_flows
|
|
24
24
|
from plato._generated.api.v2.jobs import public_url as jobs_public_url
|
|
25
|
+
from plato._generated.api.v2.jobs import wait_for_ready as jobs_wait_for_ready
|
|
26
|
+
from plato._generated.api.v2.sessions import add_job as sessions_add_job
|
|
25
27
|
from plato._generated.api.v2.sessions import close as sessions_close
|
|
26
28
|
from plato._generated.api.v2.sessions import connect_network as sessions_connect_network
|
|
27
29
|
from plato._generated.api.v2.sessions import disk_snapshot as sessions_disk_snapshot
|
|
@@ -29,6 +31,7 @@ from plato._generated.api.v2.sessions import evaluate as sessions_evaluate
|
|
|
29
31
|
from plato._generated.api.v2.sessions import execute as sessions_execute
|
|
30
32
|
from plato._generated.api.v2.sessions import heartbeat as sessions_heartbeat
|
|
31
33
|
from plato._generated.api.v2.sessions import make as sessions_make
|
|
34
|
+
from plato._generated.api.v2.sessions import remove_job as sessions_remove_job
|
|
32
35
|
from plato._generated.api.v2.sessions import reset as sessions_reset
|
|
33
36
|
from plato._generated.api.v2.sessions import set_date as sessions_set_date
|
|
34
37
|
from plato._generated.api.v2.sessions import setup_sandbox as sessions_setup_sandbox
|
|
@@ -37,6 +40,7 @@ from plato._generated.api.v2.sessions import snapshot_store as sessions_snapshot
|
|
|
37
40
|
from plato._generated.api.v2.sessions import state as sessions_state
|
|
38
41
|
from plato._generated.api.v2.sessions import wait_for_ready as sessions_wait_for_ready
|
|
39
42
|
from plato._generated.models import (
|
|
43
|
+
AddJobRequest,
|
|
40
44
|
AppApiV2SchemasSessionCreateSnapshotRequest,
|
|
41
45
|
AppApiV2SchemasSessionCreateSnapshotResponse,
|
|
42
46
|
AppApiV2SchemasSessionEvaluateResponse,
|
|
@@ -47,10 +51,12 @@ from plato._generated.models import (
|
|
|
47
51
|
CreateDiskSnapshotResponse,
|
|
48
52
|
CreateSessionFromEnvs,
|
|
49
53
|
CreateSessionFromTask,
|
|
54
|
+
EnvironmentContext,
|
|
50
55
|
Envs,
|
|
51
56
|
ExecuteCommandRequest,
|
|
52
57
|
ExecuteCommandResponse,
|
|
53
58
|
Flow,
|
|
59
|
+
RemoveJobRequest,
|
|
54
60
|
ResetSessionRequest,
|
|
55
61
|
ResetSessionResponse,
|
|
56
62
|
RunSessionSource,
|
|
@@ -690,6 +696,158 @@ class Session:
|
|
|
690
696
|
|
|
691
697
|
return result
|
|
692
698
|
|
|
699
|
+
def add_env(
|
|
700
|
+
self,
|
|
701
|
+
env: EnvFromSimulator | EnvFromArtifact | EnvFromResource,
|
|
702
|
+
*,
|
|
703
|
+
timeout: int = 1800,
|
|
704
|
+
heartbeat_timeout: int | None = None,
|
|
705
|
+
wait_for_ready: bool = True,
|
|
706
|
+
) -> Environment:
|
|
707
|
+
"""Add a new environment to this session.
|
|
708
|
+
|
|
709
|
+
The new environment will:
|
|
710
|
+
1. Become part of the session's job group
|
|
711
|
+
2. Be matched to an available VM via the resource matcher
|
|
712
|
+
3. Automatically join the session's WireGuard network if one exists
|
|
713
|
+
|
|
714
|
+
Args:
|
|
715
|
+
env: Environment configuration (from Env.simulator(), Env.artifact(), or Env.resource()).
|
|
716
|
+
timeout: VM timeout in seconds (default: 1800).
|
|
717
|
+
heartbeat_timeout: Per-VM heartbeat timeout. None=use default (300s), 0=disabled.
|
|
718
|
+
wait_for_ready: If True, wait for the job to be ready before returning (default: True).
|
|
719
|
+
|
|
720
|
+
Returns:
|
|
721
|
+
Environment object for the new job.
|
|
722
|
+
|
|
723
|
+
Raises:
|
|
724
|
+
RuntimeError: If session is closed or job creation fails.
|
|
725
|
+
TimeoutError: If wait_for_ready=True and the job doesn't become ready within timeout.
|
|
726
|
+
"""
|
|
727
|
+
self._check_closed()
|
|
728
|
+
|
|
729
|
+
# Auto-generate alias if not set
|
|
730
|
+
if env.alias is None:
|
|
731
|
+
existing_aliases = {e.alias for e in self.envs}
|
|
732
|
+
unique_alias = f"env-{uuid.uuid4().hex[:8]}"
|
|
733
|
+
while unique_alias in existing_aliases:
|
|
734
|
+
unique_alias = f"env-{uuid.uuid4().hex[:8]}"
|
|
735
|
+
env.alias = unique_alias
|
|
736
|
+
|
|
737
|
+
# Build request
|
|
738
|
+
request = AddJobRequest(
|
|
739
|
+
env=env,
|
|
740
|
+
timeout=timeout,
|
|
741
|
+
heartbeat_timeout=heartbeat_timeout,
|
|
742
|
+
)
|
|
743
|
+
|
|
744
|
+
# Call the add_job API
|
|
745
|
+
response = sessions_add_job.sync(
|
|
746
|
+
client=self._http,
|
|
747
|
+
session_id=self.session_id,
|
|
748
|
+
body=request,
|
|
749
|
+
x_api_key=self._api_key,
|
|
750
|
+
)
|
|
751
|
+
|
|
752
|
+
# Check for failures
|
|
753
|
+
if not response.env.success:
|
|
754
|
+
raise RuntimeError(f"Failed to add job: {response.env.error}")
|
|
755
|
+
|
|
756
|
+
if not response.env.job_id:
|
|
757
|
+
raise RuntimeError("Backend did not return job_id for new environment")
|
|
758
|
+
|
|
759
|
+
job_id = response.env.job_id
|
|
760
|
+
|
|
761
|
+
# Wait for the job to be ready if requested
|
|
762
|
+
if wait_for_ready:
|
|
763
|
+
ready_response = jobs_wait_for_ready.sync(
|
|
764
|
+
client=self._http,
|
|
765
|
+
job_id=job_id,
|
|
766
|
+
timeout=timeout,
|
|
767
|
+
x_api_key=self._api_key,
|
|
768
|
+
)
|
|
769
|
+
|
|
770
|
+
if not ready_response.ready:
|
|
771
|
+
error = ready_response.error or "Unknown error"
|
|
772
|
+
raise TimeoutError(f"Job {job_id} did not become ready: {error}")
|
|
773
|
+
|
|
774
|
+
# Update internal context with the new environment
|
|
775
|
+
new_env_context = EnvironmentContext(
|
|
776
|
+
job_id=job_id,
|
|
777
|
+
alias=env.alias,
|
|
778
|
+
artifact_id=response.env.artifact_id,
|
|
779
|
+
simulator=getattr(env, "simulator", None),
|
|
780
|
+
)
|
|
781
|
+
|
|
782
|
+
# Add to context's envs list
|
|
783
|
+
if self._context.envs is None:
|
|
784
|
+
self._context.envs = []
|
|
785
|
+
self._context.envs.append(new_env_context)
|
|
786
|
+
|
|
787
|
+
# Reset cached envs to force rebuild
|
|
788
|
+
self._envs = None
|
|
789
|
+
|
|
790
|
+
# Create and return the Environment object
|
|
791
|
+
new_environment = Environment(
|
|
792
|
+
session=self,
|
|
793
|
+
job_id=job_id,
|
|
794
|
+
alias=env.alias,
|
|
795
|
+
artifact_id=response.env.artifact_id,
|
|
796
|
+
)
|
|
797
|
+
|
|
798
|
+
logger.info(f"Added job {job_id} (alias={env.alias}) to session {self.session_id}")
|
|
799
|
+
return new_environment
|
|
800
|
+
|
|
801
|
+
def remove_env(self, env: Environment | str) -> None:
|
|
802
|
+
"""Remove an environment from this session.
|
|
803
|
+
|
|
804
|
+
This will:
|
|
805
|
+
1. Remove the job from the session's network (if connected)
|
|
806
|
+
2. Shut down the VM associated with the job
|
|
807
|
+
3. Cancel the job in the system
|
|
808
|
+
|
|
809
|
+
Args:
|
|
810
|
+
env: Environment object or alias string to remove.
|
|
811
|
+
|
|
812
|
+
Raises:
|
|
813
|
+
RuntimeError: If session is closed or removal fails.
|
|
814
|
+
ValueError: If environment not found in session.
|
|
815
|
+
"""
|
|
816
|
+
self._check_closed()
|
|
817
|
+
|
|
818
|
+
# Resolve to job_id
|
|
819
|
+
if isinstance(env, str):
|
|
820
|
+
# Find by alias
|
|
821
|
+
found_env = self.get_env(env)
|
|
822
|
+
if not found_env:
|
|
823
|
+
raise ValueError(f"Environment with alias '{env}' not found in session")
|
|
824
|
+
job_id = found_env.job_id
|
|
825
|
+
alias = env
|
|
826
|
+
else:
|
|
827
|
+
job_id = env.job_id
|
|
828
|
+
alias = env.alias
|
|
829
|
+
|
|
830
|
+
# Call the remove_job API
|
|
831
|
+
request = RemoveJobRequest(job_id=job_id)
|
|
832
|
+
response = sessions_remove_job.sync(
|
|
833
|
+
client=self._http,
|
|
834
|
+
session_id=self.session_id,
|
|
835
|
+
body=request,
|
|
836
|
+
x_api_key=self._api_key,
|
|
837
|
+
)
|
|
838
|
+
|
|
839
|
+
if not response.success:
|
|
840
|
+
raise RuntimeError(f"Failed to remove job {job_id}")
|
|
841
|
+
|
|
842
|
+
# Update internal context - remove the environment
|
|
843
|
+
if self._context.envs:
|
|
844
|
+
self._context.envs = [e for e in self._context.envs if e.job_id != job_id]
|
|
845
|
+
|
|
846
|
+
# Reset cached envs to force rebuild
|
|
847
|
+
self._envs = None
|
|
848
|
+
|
|
849
|
+
logger.info(f"Removed job {job_id} (alias={alias}) from session {self.session_id}")
|
|
850
|
+
|
|
693
851
|
def login(
|
|
694
852
|
self,
|
|
695
853
|
browser: Browser,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
plato/__init__.py,sha256=a9E0KS1602GWHHStnf7wDEuvPCvh2GpPh0Sf8oKZx5Q,1795
|
|
2
2
|
plato/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
-
plato/_generated/__init__.py,sha256=
|
|
3
|
+
plato/_generated/__init__.py,sha256=finH7i7IrCbUnu4ussJ7wY_duPHgclocRcijeXEUVi8,738
|
|
4
4
|
plato/_generated/client.py,sha256=_oMKXyAShQVddCaIKnfB2zPkRsDlCwLp-N3RFoKq_v8,5489
|
|
5
5
|
plato/_generated/errors.py,sha256=goTGrZ4rrujGZ-BoOonoyaGwdGDkGO6GyeubIkQVv9E,4197
|
|
6
6
|
plato/_generated/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -266,7 +266,7 @@ plato/_generated/api/v2/releases/handle_import.py,sha256=ByBl6tHDKMXD0Ic_C4jpokx
|
|
|
266
266
|
plato/_generated/api/v2/releases/list_releases.py,sha256=ebNZc45ooGrKT-1lZ6mIjruTO8zwngz5G9edS6DB7lc,2149
|
|
267
267
|
plato/_generated/api/v2/releases/prep_release_assigned_testcases.py,sha256=B171O7xqXZm1AEXGhSfPNobBsqQRINxX4gYBU-TTwEg,2668
|
|
268
268
|
plato/_generated/api/v2/releases/update.py,sha256=aEz9dbnvRg5pAp1jkTZpwUjKxpOOn-xXktPeNVKpruI,1956
|
|
269
|
-
plato/_generated/api/v2/sessions/__init__.py,sha256=
|
|
269
|
+
plato/_generated/api/v2/sessions/__init__.py,sha256=AC6xIczdSAW34kxj7aRUG1aWMPOwK93zHA0F_bcJ4Eo,1259
|
|
270
270
|
plato/_generated/api/v2/sessions/add_job.py,sha256=PqnYCPuOFkqJjaK5jg7O4v92La4In2pSiCI1A_OoJRQ,2792
|
|
271
271
|
plato/_generated/api/v2/sessions/add_ssh_key.py,sha256=JDaw5B1hHodH43DUoZ7FrO1_ECWacjinia4-DbU0jGo,2198
|
|
272
272
|
plato/_generated/api/v2/sessions/checkpoint.py,sha256=Kd8NSIeuC41cRB4Y3j_L0yNIU_WVRjkBIL72pRqoRTc,2933
|
|
@@ -289,6 +289,7 @@ plato/_generated/api/v2/sessions/list_jobs.py,sha256=FbfOqNLqvk0hq4tngFYvgA-kQkL
|
|
|
289
289
|
plato/_generated/api/v2/sessions/list_sessions.py,sha256=GPm_nShD8DxJD86v3n64kjtBctBZ8iGX9sERAdWKk68,1929
|
|
290
290
|
plato/_generated/api/v2/sessions/log_job_mutation.py,sha256=6x8rSFCbd3u3p3jms62X4k2BGk6eMuoUn04Ha3Pj1P8,1870
|
|
291
291
|
plato/_generated/api/v2/sessions/make.py,sha256=1FP7rCbjT62T8Of9otByl6L0p-VwwsruoaK--vYUUx0,2081
|
|
292
|
+
plato/_generated/api/v2/sessions/remove_job.py,sha256=Lc3ERBR1cTFv-3u1Wbz5QDu5ksy5MqSke2GT6zgViiA,2374
|
|
292
293
|
plato/_generated/api/v2/sessions/reset.py,sha256=L8s2E_8wMq0hkNGNKrCx8gHTm-1KXltlzfHVI5sY14U,1941
|
|
293
294
|
plato/_generated/api/v2/sessions/set_date.py,sha256=jbw3KVBI5TngHGBMavFawjNudRutAC0eb8jEbsSJdkw,2278
|
|
294
295
|
plato/_generated/api/v2/sessions/setup_sandbox.py,sha256=FtxC3NXFPpITupyBYlRtsMfP64vXYuKq23pwACT9v0U,3162
|
|
@@ -301,7 +302,7 @@ plato/_generated/api/v2/user/__init__.py,sha256=yMh1Gn9VpKHQMQCmJdpeDPA9Ek9PBgP0
|
|
|
301
302
|
plato/_generated/api/v2/user/get_current_user.py,sha256=tvamtbWTEkeeNUBLSPqZIcCGqKVadQM3DVcezsWP22U,1814
|
|
302
303
|
plato/_generated/api/version/__init__.py,sha256=dQXTYrXjD1RZcvWwnlqXWAZ-eAV-V-6JSNuY7uaca7o,70
|
|
303
304
|
plato/_generated/api/version/check.py,sha256=HTVNw0oi9gbvX4pOVoH4y4JywCxdl1pJTCk2PjJFwJ4,778
|
|
304
|
-
plato/_generated/models/__init__.py,sha256=
|
|
305
|
+
plato/_generated/models/__init__.py,sha256=597HUbpzjUUHGONUbaS5JE4W_gjcqn7_sJDmvHkvDnc,163870
|
|
305
306
|
plato/_sims_generator/__init__.py,sha256=Km4QOl9wxjQ5dgpdhk9QnBFJFFc9eq3rPbMWIQRjIn0,1602
|
|
306
307
|
plato/_sims_generator/cli.py,sha256=mzolN-dxfMkVAdA-vC0esnai-cGg-i4ozOw8dACefV4,2709
|
|
307
308
|
plato/_sims_generator/instruction.py,sha256=Na9M-jIdBPhp_fLuBPTicoFnWriRyi8YiZ-eQBj64HI,6644
|
|
@@ -340,8 +341,8 @@ plato/chronos/api/agents/create_agent.py,sha256=G8LR1KlWOCfmZ71Sl0seo7aRYmG7_nok
|
|
|
340
341
|
plato/chronos/api/agents/delete_agent.py,sha256=fuL8Ip8veUXpOhSYxX_74S0zM_kZsTX61KosiFyhRWo,1241
|
|
341
342
|
plato/chronos/api/agents/get_agent.py,sha256=o61fxCyYpTe6-3SC2RAebp3kW8rgEOWSN_NCph_iMUc,1358
|
|
342
343
|
plato/chronos/api/agents/get_agent_schema.py,sha256=O-N1h0vQJIXM2uonYCgXa_FFr54C4_n0Spu-MdRy2U0,1679
|
|
343
|
-
plato/chronos/api/agents/get_agent_versions.py,sha256=
|
|
344
|
-
plato/chronos/api/agents/list_agents.py,sha256=
|
|
344
|
+
plato/chronos/api/agents/get_agent_versions.py,sha256=mVLFvOrAwoyR9Jnu4F26EhNv08zGbXywiohr6hojxMY,1496
|
|
345
|
+
plato/chronos/api/agents/list_agents.py,sha256=OcycIUUc8yTGAhmpr2qhU2-2qIbvAtKko6l7cgmcKes,1343
|
|
345
346
|
plato/chronos/api/agents/lookup_agent.py,sha256=DOGfrOK6Lh6ULMqRmf4zRQHlDXMhYenidx8wcZx4caY,1766
|
|
346
347
|
plato/chronos/api/auth/__init__.py,sha256=6qao3xT8yw9-WTpUlv4tVtpWhL2EycQd3I2WKQ5p9Lk,284
|
|
347
348
|
plato/chronos/api/auth/debug_auth_api_auth_debug_get.py,sha256=L1RWyQ1w7V8dyhOAU2VQlT9x0jkeng3eIvZDOv9Gl2w,881
|
|
@@ -362,10 +363,10 @@ plato/chronos/api/otel/get_session_traces_api_otel_sessions__session_id__traces_
|
|
|
362
363
|
plato/chronos/api/otel/receive_traces_api_otel_v1_traces_post.py,sha256=XvEe6XBB672qZ_d9IkD9dhxehK-H07yGxqKPaZG-EXA,1074
|
|
363
364
|
plato/chronos/api/registry/__init__.py,sha256=gPN-3oENHUrwaiacYt1_jI7HQ6gGe9i-34-Smb-0KHg,819
|
|
364
365
|
plato/chronos/api/registry/get_agent_schema_api_registry_agents__agent_name__schema_get.py,sha256=gkM9RY6yO_I4A2152BkaBzGyjAmWg0mm25s-c8QixwY,1533
|
|
365
|
-
plato/chronos/api/registry/get_agent_versions_api_registry_agents__agent_name__versions_get.py,sha256=
|
|
366
|
+
plato/chronos/api/registry/get_agent_versions_api_registry_agents__agent_name__versions_get.py,sha256=TjYCZcIc6Bc0iS1E2MMPAK-yDUX_zijT8g7We7dNcQI,1176
|
|
366
367
|
plato/chronos/api/registry/get_world_schema_api_registry_worlds__package_name__schema_get.py,sha256=RM-1MDYaG8B9iRl93KBG4tVjWJAHA08X6lSwjzk8fkw,1697
|
|
367
368
|
plato/chronos/api/registry/get_world_versions_api_registry_worlds__package_name__versions_get.py,sha256=07MKXi5-d8Qk8cKRdVW2AZoeeksX7OpTgFR9bkJni0Y,1206
|
|
368
|
-
plato/chronos/api/registry/list_registry_agents_api_registry_agents_get.py,sha256=
|
|
369
|
+
plato/chronos/api/registry/list_registry_agents_api_registry_agents_get.py,sha256=3rACHpvv2P7gooHcNH4sU82pCSPIWH0f17lmQyGdEyU,1031
|
|
369
370
|
plato/chronos/api/registry/list_registry_worlds_api_registry_worlds_get.py,sha256=g9KHZ2ZLJnhS5uCb55K7ez5plpfGL88o-pcdLMDgrRg,1010
|
|
370
371
|
plato/chronos/api/runtimes/__init__.py,sha256=_887oqgAfMazmoU-tTbOQ4k-k6E0PW004bdFxTM117M,270
|
|
371
372
|
plato/chronos/api/runtimes/create_runtime.py,sha256=D37d2nMqyTxT8r_9faPWI-E18pAVjLlh0hCgBf0L6wQ,1524
|
|
@@ -412,7 +413,7 @@ plato/chronos/api/worlds/create_world.py,sha256=H6yl5QIazNXgryOR5rvscSIMf8Y9kjc6
|
|
|
412
413
|
plato/chronos/api/worlds/delete_world.py,sha256=UETu3Zk0e2VkDdAyMilv1ev-0g_j-oujH1Dc8DBqQOc,1239
|
|
413
414
|
plato/chronos/api/worlds/get_world.py,sha256=eHTM1U5JiNTaZwYLh7x4QVBoRQeI5kaJ9o6xSi4-nos,1356
|
|
414
415
|
plato/chronos/api/worlds/list_worlds.py,sha256=hBAuGb69tlasyn-kV_LNr9x6Rr7SHhST5hXJn1uqMf8,1253
|
|
415
|
-
plato/chronos/models/__init__.py,sha256=
|
|
416
|
+
plato/chronos/models/__init__.py,sha256=M2dV42UmYgsNC4M76jOO4vILgzNvM6m3BGpf6McfFwE,23198
|
|
416
417
|
plato/cli/__init__.py,sha256=UsKj-69eWKuAlk-Fiwlrz0GJiBfuOmcf-ZLmZJb21Vo,102
|
|
417
418
|
plato/cli/agent.py,sha256=5qA0T1n0H0JQ5ZB-fAVKm3Nw-y_M-GiSQx1OTcKgkrI,44050
|
|
418
419
|
plato/cli/audit_ui.py,sha256=AfnC3wngGV3ujg9POHNYQhal2S6Hr0ZhcXrAAxtVfMg,12307
|
|
@@ -505,7 +506,7 @@ plato/v2/async_/chronos.py,sha256=WeqYF3HIKs7hV9LNZb2GlDS1yP6b422DZKtNuPxdL34,12
|
|
|
505
506
|
plato/v2/async_/client.py,sha256=IhiEiwbLNPBr9JJilw4uz7MLKXY_rUZpYGYC1dX-UfA,5186
|
|
506
507
|
plato/v2/async_/environment.py,sha256=M5IeWYLwREOIyuS2zqgBSqHE_x66_OZXrevA9Rkc8Is,5825
|
|
507
508
|
plato/v2/async_/flow_executor.py,sha256=Tl4nRu1ZPWJFNNxyTGy-PxvebZEUD18ZDaz8T2chtzU,14188
|
|
508
|
-
plato/v2/async_/session.py,sha256=
|
|
509
|
+
plato/v2/async_/session.py,sha256=31sJeQNKlUL2g0GRsJAG1OmoQp5LJxwfCECuUBh87CQ,43459
|
|
509
510
|
plato/v2/sync/__init__.py,sha256=3WXLqem7GbicVevLD1lCarr7YI1m6j7-AmJf9OVKKgc,521
|
|
510
511
|
plato/v2/sync/artifact.py,sha256=wTLC-tugG128wLvh-JqNPb0zsw5FXEJlZNahurSWink,1169
|
|
511
512
|
plato/v2/sync/chronos.py,sha256=ChXpasjRzAZjoYTimpPqYydnwEk-IgdxR0SDXDOZbUM,12078
|
|
@@ -513,7 +514,7 @@ plato/v2/sync/client.py,sha256=rsrU7_RhE-syf3FMNw5LaxmF7rYw2GBzC_TPpd-6thk,4986
|
|
|
513
514
|
plato/v2/sync/environment.py,sha256=WnDzbyEHpwCSEP8XnfNSjIYS7rt7lYR4HGJjzprZmTQ,5066
|
|
514
515
|
plato/v2/sync/flow_executor.py,sha256=N41-WCWIJVcCR2UmPUEiK7roNacYoeONkRXpR7lUgT8,13941
|
|
515
516
|
plato/v2/sync/sandbox.py,sha256=yRwkms1_qsHjhbLZQ7FiaLgFme2tMw8YM2xg2-ZZS04,53734
|
|
516
|
-
plato/v2/sync/session.py,sha256=
|
|
517
|
+
plato/v2/sync/session.py,sha256=FYVxgGZ3eL_YpoJiUgJamrt-jVaBqJITzFzepOKMRjA,35065
|
|
517
518
|
plato/v2/utils/__init__.py,sha256=XLeFFsjXkm9g2raMmo7Wt4QN4hhCrNZDJKnpffJ4LtM,38
|
|
518
519
|
plato/v2/utils/db_cleanup.py,sha256=JMzAAJz0ZnoUXtd8F4jpQmBpJpos2__RkgN_cuEearg,8692
|
|
519
520
|
plato/v2/utils/gateway_tunnel.py,sha256=eWgwf4VV8-jx6iCuHFgCISsAOVmNOOjCB56EuZLsnOA,7171
|
|
@@ -525,7 +526,7 @@ plato/worlds/base.py,sha256=-RR71bSxEFI5yydtrtq-AAbuw98CIjvmrbztqzB9oIc,31041
|
|
|
525
526
|
plato/worlds/build_hook.py,sha256=KSoW0kqa5b7NyZ7MYOw2qsZ_2FkWuz0M3Ru7AKOP7Qw,3486
|
|
526
527
|
plato/worlds/config.py,sha256=O1lUXzxp-Z_M7izslT8naXgE6XujjzwYFFrDDzUOueI,12736
|
|
527
528
|
plato/worlds/runner.py,sha256=r9B2BxBae8_dM7y5cJf9xhThp_I1Qvf_tlPq2rs8qC8,4013
|
|
528
|
-
plato_sdk_v2-2.
|
|
529
|
-
plato_sdk_v2-2.
|
|
530
|
-
plato_sdk_v2-2.
|
|
531
|
-
plato_sdk_v2-2.
|
|
529
|
+
plato_sdk_v2-2.8.0.dist-info/METADATA,sha256=ouPYAxE-Lp1XW9dhodGVz5E-cPdN-jEFRPjkYnsooNM,8652
|
|
530
|
+
plato_sdk_v2-2.8.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
531
|
+
plato_sdk_v2-2.8.0.dist-info/entry_points.txt,sha256=iynJvTkU7E4MZNtSozVF0Wh083yPm6cuKV362Ol_ez8,133
|
|
532
|
+
plato_sdk_v2-2.8.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|