plato-sdk-v2 2.5.0__py3-none-any.whl → 2.6.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/v1/evals/get_scores_by_user.py +7 -0
- plato/_generated/api/v1/testcases/get_testcases.py +14 -0
- plato/_generated/api/v2/sessions/setup_sandbox.py +2 -2
- plato/_generated/models/__init__.py +42 -2
- plato/chronos/api/admin/__init__.py +17 -0
- plato/chronos/api/admin/clear_database_api_admin_clear_db_post.py +57 -0
- plato/chronos/api/admin/sync_agents_api_admin_sync_agents_post.py +67 -0
- plato/chronos/api/admin/sync_all_api_admin_sync_all_post.py +67 -0
- plato/chronos/api/admin/sync_runtimes_api_admin_sync_runtimes_post.py +67 -0
- plato/chronos/api/admin/sync_worlds_api_admin_sync_worlds_post.py +67 -0
- plato/chronos/api/agents/list_agents.py +5 -5
- plato/chronos/api/checkpoints/__init__.py +8 -0
- plato/chronos/api/checkpoints/list_checkpoints.py +52 -0
- plato/chronos/api/checkpoints/preview_checkpoint.py +74 -0
- plato/chronos/api/events/__init__.py +8 -0
- plato/chronos/api/events/get_session_event.py +68 -0
- plato/chronos/api/events/list_session_events.py +62 -0
- plato/chronos/api/jobs/launch_job.py +8 -2
- plato/chronos/api/otel/__init__.py +8 -0
- plato/chronos/api/otel/get_session_traces_api_otel_sessions__session_id__traces_get.py +56 -0
- plato/chronos/api/otel/receive_traces_api_otel_v1_traces_post.py +49 -0
- plato/chronos/api/registry/list_registry_agents_api_registry_agents_get.py +5 -5
- plato/chronos/api/runtimes/__init__.py +2 -1
- plato/chronos/api/runtimes/get_runtime_logs.py +61 -0
- plato/chronos/api/sessions/__init__.py +24 -1
- plato/chronos/api/sessions/close_session.py +66 -0
- plato/chronos/api/sessions/complete_session.py +74 -0
- plato/chronos/api/sessions/create_session.py +69 -0
- plato/chronos/api/sessions/get_session.py +20 -2
- plato/chronos/api/sessions/get_session_bash_logs_download.py +61 -0
- plato/chronos/api/sessions/get_session_envs.py +62 -0
- plato/chronos/api/sessions/get_session_live_logs.py +62 -0
- plato/chronos/api/sessions/get_session_logs.py +3 -3
- plato/chronos/api/sessions/get_session_status.py +62 -0
- plato/chronos/api/sessions/list_sessions.py +20 -2
- plato/chronos/api/sessions/list_tags.py +80 -0
- plato/chronos/api/sessions/update_session_tags.py +68 -0
- plato/chronos/models/__init__.py +241 -196
- plato/v1/cli/chronos.py +62 -0
- plato/v2/__init__.py +8 -0
- plato/v2/async_/__init__.py +4 -0
- plato/v2/async_/chronos.py +419 -0
- plato/v2/sync/__init__.py +3 -0
- plato/v2/sync/chronos.py +419 -0
- plato/worlds/base.py +12 -2
- {plato_sdk_v2-2.5.0.dist-info → plato_sdk_v2-2.6.0.dist-info}/METADATA +1 -1
- {plato_sdk_v2-2.5.0.dist-info → plato_sdk_v2-2.6.0.dist-info}/RECORD +50 -23
- {plato_sdk_v2-2.5.0.dist-info → plato_sdk_v2-2.6.0.dist-info}/WHEEL +0 -0
- {plato_sdk_v2-2.5.0.dist-info → plato_sdk_v2-2.6.0.dist-info}/entry_points.txt +0 -0
plato/_generated/__init__.py
CHANGED
|
@@ -15,6 +15,7 @@ def _build_request_args(
|
|
|
15
15
|
page_size: int | None = None,
|
|
16
16
|
days: float | None = None,
|
|
17
17
|
include_human_results: bool | None = False,
|
|
18
|
+
date: str | None = None,
|
|
18
19
|
authorization: str | None = None,
|
|
19
20
|
x_api_key: str | None = None,
|
|
20
21
|
) -> dict[str, Any]:
|
|
@@ -32,6 +33,8 @@ def _build_request_args(
|
|
|
32
33
|
params["days"] = days
|
|
33
34
|
if include_human_results is not None:
|
|
34
35
|
params["include_human_results"] = include_human_results
|
|
36
|
+
if date is not None:
|
|
37
|
+
params["date"] = date
|
|
35
38
|
|
|
36
39
|
headers: dict[str, str] = {}
|
|
37
40
|
if authorization is not None:
|
|
@@ -54,6 +57,7 @@ def sync(
|
|
|
54
57
|
page_size: int | None = None,
|
|
55
58
|
days: float | None = None,
|
|
56
59
|
include_human_results: bool | None = False,
|
|
60
|
+
date: str | None = None,
|
|
57
61
|
authorization: str | None = None,
|
|
58
62
|
x_api_key: str | None = None,
|
|
59
63
|
) -> Any:
|
|
@@ -65,6 +69,7 @@ def sync(
|
|
|
65
69
|
page_size=page_size,
|
|
66
70
|
days=days,
|
|
67
71
|
include_human_results=include_human_results,
|
|
72
|
+
date=date,
|
|
68
73
|
authorization=authorization,
|
|
69
74
|
x_api_key=x_api_key,
|
|
70
75
|
)
|
|
@@ -81,6 +86,7 @@ async def asyncio(
|
|
|
81
86
|
page_size: int | None = None,
|
|
82
87
|
days: float | None = None,
|
|
83
88
|
include_human_results: bool | None = False,
|
|
89
|
+
date: str | None = None,
|
|
84
90
|
authorization: str | None = None,
|
|
85
91
|
x_api_key: str | None = None,
|
|
86
92
|
) -> Any:
|
|
@@ -92,6 +98,7 @@ async def asyncio(
|
|
|
92
98
|
page_size=page_size,
|
|
93
99
|
days=days,
|
|
94
100
|
include_human_results=include_human_results,
|
|
101
|
+
date=date,
|
|
95
102
|
authorization=authorization,
|
|
96
103
|
x_api_key=x_api_key,
|
|
97
104
|
)
|
|
@@ -25,6 +25,8 @@ def _build_request_args(
|
|
|
25
25
|
is_sample: bool | None = None,
|
|
26
26
|
rejected: bool | None = None,
|
|
27
27
|
exclude_assigned_to_annotators: bool | None = None,
|
|
28
|
+
workorder: str | None = None,
|
|
29
|
+
infeasible: bool | None = None,
|
|
28
30
|
authorization: str | None = None,
|
|
29
31
|
x_api_key: str | None = None,
|
|
30
32
|
) -> dict[str, Any]:
|
|
@@ -62,6 +64,10 @@ def _build_request_args(
|
|
|
62
64
|
params["rejected"] = rejected
|
|
63
65
|
if exclude_assigned_to_annotators is not None:
|
|
64
66
|
params["exclude_assigned_to_annotators"] = exclude_assigned_to_annotators
|
|
67
|
+
if workorder is not None:
|
|
68
|
+
params["workorder"] = workorder
|
|
69
|
+
if infeasible is not None:
|
|
70
|
+
params["infeasible"] = infeasible
|
|
65
71
|
|
|
66
72
|
headers: dict[str, str] = {}
|
|
67
73
|
if authorization is not None:
|
|
@@ -94,6 +100,8 @@ def sync(
|
|
|
94
100
|
is_sample: bool | None = None,
|
|
95
101
|
rejected: bool | None = None,
|
|
96
102
|
exclude_assigned_to_annotators: bool | None = None,
|
|
103
|
+
workorder: str | None = None,
|
|
104
|
+
infeasible: bool | None = None,
|
|
97
105
|
authorization: str | None = None,
|
|
98
106
|
x_api_key: str | None = None,
|
|
99
107
|
) -> Any:
|
|
@@ -115,6 +123,8 @@ def sync(
|
|
|
115
123
|
is_sample=is_sample,
|
|
116
124
|
rejected=rejected,
|
|
117
125
|
exclude_assigned_to_annotators=exclude_assigned_to_annotators,
|
|
126
|
+
workorder=workorder,
|
|
127
|
+
infeasible=infeasible,
|
|
118
128
|
authorization=authorization,
|
|
119
129
|
x_api_key=x_api_key,
|
|
120
130
|
)
|
|
@@ -141,6 +151,8 @@ async def asyncio(
|
|
|
141
151
|
is_sample: bool | None = None,
|
|
142
152
|
rejected: bool | None = None,
|
|
143
153
|
exclude_assigned_to_annotators: bool | None = None,
|
|
154
|
+
workorder: str | None = None,
|
|
155
|
+
infeasible: bool | None = None,
|
|
144
156
|
authorization: str | None = None,
|
|
145
157
|
x_api_key: str | None = None,
|
|
146
158
|
) -> Any:
|
|
@@ -162,6 +174,8 @@ async def asyncio(
|
|
|
162
174
|
is_sample=is_sample,
|
|
163
175
|
rejected=rejected,
|
|
164
176
|
exclude_assigned_to_annotators=exclude_assigned_to_annotators,
|
|
177
|
+
workorder=workorder,
|
|
178
|
+
infeasible=infeasible,
|
|
165
179
|
authorization=authorization,
|
|
166
180
|
x_api_key=x_api_key,
|
|
167
181
|
)
|
|
@@ -53,7 +53,7 @@ def sync(
|
|
|
53
53
|
- Mounting /dev/vdb to /mnt/docker for Docker storage
|
|
54
54
|
- Configuring Docker with overlay2 storage driver
|
|
55
55
|
- Setting up ECR and Docker Hub authentication
|
|
56
|
-
-
|
|
56
|
+
- Adding plato user to docker group for shared Docker access"""
|
|
57
57
|
|
|
58
58
|
request_args = _build_request_args(
|
|
59
59
|
session_id=session_id,
|
|
@@ -84,7 +84,7 @@ async def asyncio(
|
|
|
84
84
|
- Mounting /dev/vdb to /mnt/docker for Docker storage
|
|
85
85
|
- Configuring Docker with overlay2 storage driver
|
|
86
86
|
- Setting up ECR and Docker Hub authentication
|
|
87
|
-
-
|
|
87
|
+
- Adding plato user to docker group for shared Docker access"""
|
|
88
88
|
|
|
89
89
|
request_args = _build_request_args(
|
|
90
90
|
session_id=session_id,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
|
-
# filename:
|
|
3
|
-
# timestamp: 2026-01-
|
|
2
|
+
# filename: tmppwt3ublb.json
|
|
3
|
+
# timestamp: 2026-01-23T22:08:30+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -840,6 +840,14 @@ class CreateSnapshotResult(BaseModel):
|
|
|
840
840
|
"""
|
|
841
841
|
ID of the created snapshot artifact
|
|
842
842
|
"""
|
|
843
|
+
success: Annotated[bool | None, Field(title="Success")] = True
|
|
844
|
+
"""
|
|
845
|
+
Whether snapshot creation succeeded
|
|
846
|
+
"""
|
|
847
|
+
error: Annotated[str | None, Field(title="Error")] = None
|
|
848
|
+
"""
|
|
849
|
+
Error message if failed
|
|
850
|
+
"""
|
|
843
851
|
|
|
844
852
|
|
|
845
853
|
class CreateTestCaseFromLabelsRequest(BaseModel):
|
|
@@ -1714,6 +1722,20 @@ class NodeNatsConfig(BaseModel):
|
|
|
1714
1722
|
subject_prefix: Annotated[str | None, Field(title="Subject Prefix")] = "firecracker"
|
|
1715
1723
|
|
|
1716
1724
|
|
|
1725
|
+
class NodeNebulaConfig(BaseModel):
|
|
1726
|
+
model_config = ConfigDict(
|
|
1727
|
+
extra="allow",
|
|
1728
|
+
)
|
|
1729
|
+
lighthouse_upstream: Annotated[str | None, Field(title="Lighthouse Upstream")] = "100.64.1.1:4242"
|
|
1730
|
+
"""
|
|
1731
|
+
Nebula lighthouse upstream address (host:port) for mesh connectivity.
|
|
1732
|
+
"""
|
|
1733
|
+
lighthouse_ip: Annotated[str | None, Field(title="Lighthouse Ip")] = "100.64.1.1"
|
|
1734
|
+
"""
|
|
1735
|
+
Nebula lighthouse mesh IP address.
|
|
1736
|
+
"""
|
|
1737
|
+
|
|
1738
|
+
|
|
1717
1739
|
class NodePolicyConfig(BaseModel):
|
|
1718
1740
|
model_config = ConfigDict(
|
|
1719
1741
|
extra="allow",
|
|
@@ -1808,6 +1830,10 @@ class NodeSnapshotStoreConfig(BaseModel):
|
|
|
1808
1830
|
"""
|
|
1809
1831
|
Worker threads for snapshot-store compression.
|
|
1810
1832
|
"""
|
|
1833
|
+
upload_workers: Annotated[int | None, Field(title="Upload Workers")] = 6
|
|
1834
|
+
"""
|
|
1835
|
+
Number of concurrent snapshot upload jobs.
|
|
1836
|
+
"""
|
|
1811
1837
|
upload_max_attempts: Annotated[int | None, Field(title="Upload Max Attempts")] = 3
|
|
1812
1838
|
"""
|
|
1813
1839
|
Max upload attempts for snapshot-store uploads.
|
|
@@ -1846,6 +1872,12 @@ class NodeStreamConfig(BaseModel):
|
|
|
1846
1872
|
resource_matcher_key_prefix: Annotated[str | None, Field(title="Resource Matcher Key Prefix")] = (
|
|
1847
1873
|
"vm-resource-matcher"
|
|
1848
1874
|
)
|
|
1875
|
+
artifact_upload_notification_channel: Annotated[str | None, Field(title="Artifact Upload Notification Channel")] = (
|
|
1876
|
+
"artifact-upload-notifications"
|
|
1877
|
+
)
|
|
1878
|
+
"""
|
|
1879
|
+
Pubsub channel for artifact upload status updates.
|
|
1880
|
+
"""
|
|
1849
1881
|
|
|
1850
1882
|
|
|
1851
1883
|
class OODRequestLogInput(BaseModel):
|
|
@@ -4358,6 +4390,10 @@ class NodeConfig(BaseModel):
|
|
|
4358
4390
|
"""
|
|
4359
4391
|
Build configuration including SSH keys for VMs
|
|
4360
4392
|
"""
|
|
4393
|
+
nebula: NodeNebulaConfig | None = None
|
|
4394
|
+
"""
|
|
4395
|
+
Nebula mesh VPN configuration for lighthouse connectivity
|
|
4396
|
+
"""
|
|
4361
4397
|
|
|
4362
4398
|
|
|
4363
4399
|
class QueueStatusResponse(BaseModel):
|
|
@@ -4501,6 +4537,8 @@ class TestCaseCreateRequest(BaseModel):
|
|
|
4501
4537
|
simulatorId: Annotated[int | None, Field(title="Simulatorid")] = None
|
|
4502
4538
|
simulatorArtifactId: Annotated[str | None, Field(title="Simulatorartifactid")] = None
|
|
4503
4539
|
simulatorArtifactIds: Annotated[list[str] | None, Field(title="Simulatorartifactids")] = None
|
|
4540
|
+
workorder: Annotated[str | None, Field(title="Workorder")] = None
|
|
4541
|
+
infeasible: Annotated[bool | None, Field(title="Infeasible")] = None
|
|
4504
4542
|
|
|
4505
4543
|
|
|
4506
4544
|
class TestCaseUpdateRequest(BaseModel):
|
|
@@ -4525,6 +4563,8 @@ class TestCaseUpdateRequest(BaseModel):
|
|
|
4525
4563
|
simulatorArtifactId: Annotated[str | None, Field(title="Simulatorartifactid")] = None
|
|
4526
4564
|
simulatorArtifactIds: Annotated[list[str] | None, Field(title="Simulatorartifactids")] = None
|
|
4527
4565
|
mutationIgnoreConfig: DatabaseIgnoreConfig | None = None
|
|
4566
|
+
workorder: Annotated[str | None, Field(title="Workorder")] = None
|
|
4567
|
+
infeasible: Annotated[bool | None, Field(title="Infeasible")] = None
|
|
4528
4568
|
|
|
4529
4569
|
|
|
4530
4570
|
class WaitForReadyResponse(BaseModel):
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"""API endpoints."""
|
|
2
|
+
|
|
3
|
+
from . import (
|
|
4
|
+
clear_database_api_admin_clear_db_post,
|
|
5
|
+
sync_agents_api_admin_sync_agents_post,
|
|
6
|
+
sync_all_api_admin_sync_all_post,
|
|
7
|
+
sync_runtimes_api_admin_sync_runtimes_post,
|
|
8
|
+
sync_worlds_api_admin_sync_worlds_post,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
__all__ = [
|
|
12
|
+
"sync_agents_api_admin_sync_agents_post",
|
|
13
|
+
"sync_worlds_api_admin_sync_worlds_post",
|
|
14
|
+
"sync_runtimes_api_admin_sync_runtimes_post",
|
|
15
|
+
"sync_all_api_admin_sync_all_post",
|
|
16
|
+
"clear_database_api_admin_clear_db_post",
|
|
17
|
+
]
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"""Clear Database"""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
import httpx
|
|
8
|
+
|
|
9
|
+
from plato.chronos.errors import raise_for_status
|
|
10
|
+
from plato.chronos.models import ClearDbResult
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _build_request_args(
|
|
14
|
+
x_api_key: str | None = None,
|
|
15
|
+
) -> dict[str, Any]:
|
|
16
|
+
"""Build request arguments."""
|
|
17
|
+
url = "/api/admin/clear-db"
|
|
18
|
+
|
|
19
|
+
headers: dict[str, str] = {}
|
|
20
|
+
if x_api_key is not None:
|
|
21
|
+
headers["X-API-Key"] = x_api_key
|
|
22
|
+
|
|
23
|
+
return {
|
|
24
|
+
"method": "POST",
|
|
25
|
+
"url": url,
|
|
26
|
+
"headers": headers,
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def sync(
|
|
31
|
+
client: httpx.Client,
|
|
32
|
+
x_api_key: str | None = None,
|
|
33
|
+
) -> ClearDbResult:
|
|
34
|
+
"""Clear ALL data from the database. Only available in local environment."""
|
|
35
|
+
|
|
36
|
+
request_args = _build_request_args(
|
|
37
|
+
x_api_key=x_api_key,
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
response = client.request(**request_args)
|
|
41
|
+
raise_for_status(response)
|
|
42
|
+
return ClearDbResult.model_validate(response.json())
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
async def asyncio(
|
|
46
|
+
client: httpx.AsyncClient,
|
|
47
|
+
x_api_key: str | None = None,
|
|
48
|
+
) -> ClearDbResult:
|
|
49
|
+
"""Clear ALL data from the database. Only available in local environment."""
|
|
50
|
+
|
|
51
|
+
request_args = _build_request_args(
|
|
52
|
+
x_api_key=x_api_key,
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
response = await client.request(**request_args)
|
|
56
|
+
raise_for_status(response)
|
|
57
|
+
return ClearDbResult.model_validate(response.json())
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"""Sync Agents"""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
import httpx
|
|
8
|
+
|
|
9
|
+
from plato.chronos.errors import raise_for_status
|
|
10
|
+
from plato.chronos.models import SyncResult
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _build_request_args(
|
|
14
|
+
source_url: str,
|
|
15
|
+
x_api_key: str | None = None,
|
|
16
|
+
) -> dict[str, Any]:
|
|
17
|
+
"""Build request arguments."""
|
|
18
|
+
url = "/api/admin/sync/agents"
|
|
19
|
+
|
|
20
|
+
params: dict[str, Any] = {}
|
|
21
|
+
if source_url is not None:
|
|
22
|
+
params["source_url"] = source_url
|
|
23
|
+
|
|
24
|
+
headers: dict[str, str] = {}
|
|
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
|
+
"params": params,
|
|
32
|
+
"headers": headers,
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def sync(
|
|
37
|
+
client: httpx.Client,
|
|
38
|
+
source_url: str,
|
|
39
|
+
x_api_key: str | None = None,
|
|
40
|
+
) -> SyncResult:
|
|
41
|
+
"""Sync agents from source Chronos to local database."""
|
|
42
|
+
|
|
43
|
+
request_args = _build_request_args(
|
|
44
|
+
source_url=source_url,
|
|
45
|
+
x_api_key=x_api_key,
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
response = client.request(**request_args)
|
|
49
|
+
raise_for_status(response)
|
|
50
|
+
return SyncResult.model_validate(response.json())
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
async def asyncio(
|
|
54
|
+
client: httpx.AsyncClient,
|
|
55
|
+
source_url: str,
|
|
56
|
+
x_api_key: str | None = None,
|
|
57
|
+
) -> SyncResult:
|
|
58
|
+
"""Sync agents from source Chronos to local database."""
|
|
59
|
+
|
|
60
|
+
request_args = _build_request_args(
|
|
61
|
+
source_url=source_url,
|
|
62
|
+
x_api_key=x_api_key,
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
response = await client.request(**request_args)
|
|
66
|
+
raise_for_status(response)
|
|
67
|
+
return SyncResult.model_validate(response.json())
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"""Sync All"""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
import httpx
|
|
8
|
+
|
|
9
|
+
from plato.chronos.errors import raise_for_status
|
|
10
|
+
from plato.chronos.models import SyncAllResult
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _build_request_args(
|
|
14
|
+
source_url: str,
|
|
15
|
+
x_api_key: str | None = None,
|
|
16
|
+
) -> dict[str, Any]:
|
|
17
|
+
"""Build request arguments."""
|
|
18
|
+
url = "/api/admin/sync/all"
|
|
19
|
+
|
|
20
|
+
params: dict[str, Any] = {}
|
|
21
|
+
if source_url is not None:
|
|
22
|
+
params["source_url"] = source_url
|
|
23
|
+
|
|
24
|
+
headers: dict[str, str] = {}
|
|
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
|
+
"params": params,
|
|
32
|
+
"headers": headers,
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def sync(
|
|
37
|
+
client: httpx.Client,
|
|
38
|
+
source_url: str,
|
|
39
|
+
x_api_key: str | None = None,
|
|
40
|
+
) -> SyncAllResult:
|
|
41
|
+
"""Sync all data (agents, worlds, runtimes) from source."""
|
|
42
|
+
|
|
43
|
+
request_args = _build_request_args(
|
|
44
|
+
source_url=source_url,
|
|
45
|
+
x_api_key=x_api_key,
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
response = client.request(**request_args)
|
|
49
|
+
raise_for_status(response)
|
|
50
|
+
return SyncAllResult.model_validate(response.json())
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
async def asyncio(
|
|
54
|
+
client: httpx.AsyncClient,
|
|
55
|
+
source_url: str,
|
|
56
|
+
x_api_key: str | None = None,
|
|
57
|
+
) -> SyncAllResult:
|
|
58
|
+
"""Sync all data (agents, worlds, runtimes) from source."""
|
|
59
|
+
|
|
60
|
+
request_args = _build_request_args(
|
|
61
|
+
source_url=source_url,
|
|
62
|
+
x_api_key=x_api_key,
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
response = await client.request(**request_args)
|
|
66
|
+
raise_for_status(response)
|
|
67
|
+
return SyncAllResult.model_validate(response.json())
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"""Sync Runtimes"""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
import httpx
|
|
8
|
+
|
|
9
|
+
from plato.chronos.errors import raise_for_status
|
|
10
|
+
from plato.chronos.models import SyncResult
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _build_request_args(
|
|
14
|
+
source_url: str,
|
|
15
|
+
x_api_key: str | None = None,
|
|
16
|
+
) -> dict[str, Any]:
|
|
17
|
+
"""Build request arguments."""
|
|
18
|
+
url = "/api/admin/sync/runtimes"
|
|
19
|
+
|
|
20
|
+
params: dict[str, Any] = {}
|
|
21
|
+
if source_url is not None:
|
|
22
|
+
params["source_url"] = source_url
|
|
23
|
+
|
|
24
|
+
headers: dict[str, str] = {}
|
|
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
|
+
"params": params,
|
|
32
|
+
"headers": headers,
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def sync(
|
|
37
|
+
client: httpx.Client,
|
|
38
|
+
source_url: str,
|
|
39
|
+
x_api_key: str | None = None,
|
|
40
|
+
) -> SyncResult:
|
|
41
|
+
"""Sync runtimes from source Chronos to local database."""
|
|
42
|
+
|
|
43
|
+
request_args = _build_request_args(
|
|
44
|
+
source_url=source_url,
|
|
45
|
+
x_api_key=x_api_key,
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
response = client.request(**request_args)
|
|
49
|
+
raise_for_status(response)
|
|
50
|
+
return SyncResult.model_validate(response.json())
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
async def asyncio(
|
|
54
|
+
client: httpx.AsyncClient,
|
|
55
|
+
source_url: str,
|
|
56
|
+
x_api_key: str | None = None,
|
|
57
|
+
) -> SyncResult:
|
|
58
|
+
"""Sync runtimes from source Chronos to local database."""
|
|
59
|
+
|
|
60
|
+
request_args = _build_request_args(
|
|
61
|
+
source_url=source_url,
|
|
62
|
+
x_api_key=x_api_key,
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
response = await client.request(**request_args)
|
|
66
|
+
raise_for_status(response)
|
|
67
|
+
return SyncResult.model_validate(response.json())
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"""Sync Worlds"""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
import httpx
|
|
8
|
+
|
|
9
|
+
from plato.chronos.errors import raise_for_status
|
|
10
|
+
from plato.chronos.models import SyncResult
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _build_request_args(
|
|
14
|
+
source_url: str,
|
|
15
|
+
x_api_key: str | None = None,
|
|
16
|
+
) -> dict[str, Any]:
|
|
17
|
+
"""Build request arguments."""
|
|
18
|
+
url = "/api/admin/sync/worlds"
|
|
19
|
+
|
|
20
|
+
params: dict[str, Any] = {}
|
|
21
|
+
if source_url is not None:
|
|
22
|
+
params["source_url"] = source_url
|
|
23
|
+
|
|
24
|
+
headers: dict[str, str] = {}
|
|
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
|
+
"params": params,
|
|
32
|
+
"headers": headers,
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def sync(
|
|
37
|
+
client: httpx.Client,
|
|
38
|
+
source_url: str,
|
|
39
|
+
x_api_key: str | None = None,
|
|
40
|
+
) -> SyncResult:
|
|
41
|
+
"""Sync worlds from source Chronos to local database."""
|
|
42
|
+
|
|
43
|
+
request_args = _build_request_args(
|
|
44
|
+
source_url=source_url,
|
|
45
|
+
x_api_key=x_api_key,
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
response = client.request(**request_args)
|
|
49
|
+
raise_for_status(response)
|
|
50
|
+
return SyncResult.model_validate(response.json())
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
async def asyncio(
|
|
54
|
+
client: httpx.AsyncClient,
|
|
55
|
+
source_url: str,
|
|
56
|
+
x_api_key: str | None = None,
|
|
57
|
+
) -> SyncResult:
|
|
58
|
+
"""Sync worlds from source Chronos to local database."""
|
|
59
|
+
|
|
60
|
+
request_args = _build_request_args(
|
|
61
|
+
source_url=source_url,
|
|
62
|
+
x_api_key=x_api_key,
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
response = await client.request(**request_args)
|
|
66
|
+
raise_for_status(response)
|
|
67
|
+
return SyncResult.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())
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"""List Checkpoints"""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
import httpx
|
|
8
|
+
|
|
9
|
+
from plato.chronos.errors import raise_for_status
|
|
10
|
+
from plato.chronos.models import CheckpointListResponse
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _build_request_args(
|
|
14
|
+
session_id: str,
|
|
15
|
+
) -> dict[str, Any]:
|
|
16
|
+
"""Build request arguments."""
|
|
17
|
+
url = f"/api/checkpoints/session/{session_id}"
|
|
18
|
+
|
|
19
|
+
return {
|
|
20
|
+
"method": "GET",
|
|
21
|
+
"url": url,
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def sync(
|
|
26
|
+
client: httpx.Client,
|
|
27
|
+
session_id: str,
|
|
28
|
+
) -> CheckpointListResponse:
|
|
29
|
+
"""List all checkpoints for a Chronos session."""
|
|
30
|
+
|
|
31
|
+
request_args = _build_request_args(
|
|
32
|
+
session_id=session_id,
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
response = client.request(**request_args)
|
|
36
|
+
raise_for_status(response)
|
|
37
|
+
return CheckpointListResponse.model_validate(response.json())
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
async def asyncio(
|
|
41
|
+
client: httpx.AsyncClient,
|
|
42
|
+
session_id: str,
|
|
43
|
+
) -> CheckpointListResponse:
|
|
44
|
+
"""List all checkpoints for a Chronos session."""
|
|
45
|
+
|
|
46
|
+
request_args = _build_request_args(
|
|
47
|
+
session_id=session_id,
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
response = await client.request(**request_args)
|
|
51
|
+
raise_for_status(response)
|
|
52
|
+
return CheckpointListResponse.model_validate(response.json())
|