plato-sdk-v2 2.0.50__py3-none-any.whl → 2.2.4__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/__init__.py +7 -6
- plato/_generated/__init__.py +1 -1
- plato/_generated/api/v1/env/evaluate_session.py +3 -3
- plato/_generated/api/v1/env/log_state_mutation.py +4 -4
- plato/_generated/api/v1/sandbox/checkpoint_vm.py +3 -3
- plato/_generated/api/v1/sandbox/save_vm_snapshot.py +3 -3
- plato/_generated/api/v1/sandbox/setup_sandbox.py +8 -8
- plato/_generated/api/v1/session/__init__.py +2 -0
- plato/_generated/api/v1/session/get_sessions_for_archival.py +100 -0
- plato/_generated/api/v1/testcases/__init__.py +6 -2
- plato/_generated/api/v1/testcases/get_mutation_groups_for_testcase.py +98 -0
- plato/_generated/api/v1/testcases/{get_next_output_testcase_for_scoring.py → get_next_testcase_for_scoring.py} +23 -10
- plato/_generated/api/v1/testcases/get_testcase_metadata_for_scoring.py +74 -0
- plato/_generated/api/v2/__init__.py +2 -1
- plato/_generated/api/v2/jobs/__init__.py +4 -0
- plato/_generated/api/v2/jobs/checkpoint.py +3 -3
- plato/_generated/api/v2/jobs/disk_snapshot.py +3 -3
- plato/_generated/api/v2/jobs/log_for_job.py +4 -39
- plato/_generated/api/v2/jobs/make.py +4 -4
- plato/_generated/api/v2/jobs/setup_sandbox.py +97 -0
- plato/_generated/api/v2/jobs/snapshot.py +3 -3
- plato/_generated/api/v2/jobs/snapshot_store.py +91 -0
- plato/_generated/api/v2/sessions/__init__.py +4 -0
- plato/_generated/api/v2/sessions/checkpoint.py +3 -3
- plato/_generated/api/v2/sessions/disk_snapshot.py +3 -3
- plato/_generated/api/v2/sessions/evaluate.py +3 -3
- plato/_generated/api/v2/sessions/log_job_mutation.py +4 -39
- plato/_generated/api/v2/sessions/make.py +4 -4
- plato/_generated/api/v2/sessions/setup_sandbox.py +98 -0
- plato/_generated/api/v2/sessions/snapshot.py +3 -3
- plato/_generated/api/v2/sessions/snapshot_store.py +94 -0
- plato/_generated/api/v2/user/__init__.py +7 -0
- plato/_generated/api/v2/user/get_current_user.py +76 -0
- plato/_generated/models/__init__.py +174 -23
- plato/_sims_generator/__init__.py +19 -4
- plato/_sims_generator/instruction.py +203 -0
- plato/_sims_generator/templates/instruction/helpers.py.jinja +161 -0
- plato/_sims_generator/templates/instruction/init.py.jinja +43 -0
- plato/agents/__init__.py +107 -517
- plato/agents/base.py +145 -0
- plato/agents/build.py +61 -0
- plato/agents/config.py +160 -0
- plato/agents/logging.py +401 -0
- plato/agents/runner.py +161 -0
- plato/agents/trajectory.py +266 -0
- plato/chronos/__init__.py +37 -0
- plato/chronos/api/__init__.py +3 -0
- plato/chronos/api/agents/__init__.py +13 -0
- plato/chronos/api/agents/create_agent.py +63 -0
- plato/chronos/api/agents/delete_agent.py +61 -0
- plato/chronos/api/agents/get_agent.py +62 -0
- plato/chronos/api/agents/get_agent_schema.py +72 -0
- plato/chronos/api/agents/get_agent_versions.py +62 -0
- plato/chronos/api/agents/list_agents.py +57 -0
- plato/chronos/api/agents/lookup_agent.py +74 -0
- plato/chronos/api/auth/__init__.py +9 -0
- plato/chronos/api/auth/debug_auth_api_auth_debug_get.py +43 -0
- plato/chronos/api/auth/get_auth_status_api_auth_status_get.py +61 -0
- plato/chronos/api/auth/get_current_user_route_api_auth_me_get.py +60 -0
- plato/chronos/api/callback/__init__.py +11 -0
- plato/chronos/api/callback/push_agent_logs.py +61 -0
- plato/chronos/api/callback/update_agent_status.py +57 -0
- plato/chronos/api/callback/upload_artifacts.py +59 -0
- plato/chronos/api/callback/upload_logs_zip.py +57 -0
- plato/chronos/api/callback/upload_trajectory.py +57 -0
- plato/chronos/api/default/__init__.py +7 -0
- plato/chronos/api/default/health.py +43 -0
- plato/chronos/api/jobs/__init__.py +7 -0
- plato/chronos/api/jobs/launch_job.py +63 -0
- plato/chronos/api/registry/__init__.py +19 -0
- plato/chronos/api/registry/get_agent_schema_api_registry_agents__agent_name__schema_get.py +62 -0
- plato/chronos/api/registry/get_agent_versions_api_registry_agents__agent_name__versions_get.py +52 -0
- plato/chronos/api/registry/get_world_schema_api_registry_worlds__package_name__schema_get.py +68 -0
- plato/chronos/api/registry/get_world_versions_api_registry_worlds__package_name__versions_get.py +52 -0
- plato/chronos/api/registry/list_registry_agents_api_registry_agents_get.py +44 -0
- plato/chronos/api/registry/list_registry_worlds_api_registry_worlds_get.py +44 -0
- plato/chronos/api/runtimes/__init__.py +11 -0
- plato/chronos/api/runtimes/create_runtime.py +63 -0
- plato/chronos/api/runtimes/delete_runtime.py +61 -0
- plato/chronos/api/runtimes/get_runtime.py +62 -0
- plato/chronos/api/runtimes/list_runtimes.py +57 -0
- plato/chronos/api/runtimes/test_runtime.py +67 -0
- plato/chronos/api/secrets/__init__.py +11 -0
- plato/chronos/api/secrets/create_secret.py +63 -0
- plato/chronos/api/secrets/delete_secret.py +61 -0
- plato/chronos/api/secrets/get_secret.py +62 -0
- plato/chronos/api/secrets/list_secrets.py +57 -0
- plato/chronos/api/secrets/update_secret.py +68 -0
- plato/chronos/api/sessions/__init__.py +10 -0
- plato/chronos/api/sessions/get_session.py +62 -0
- plato/chronos/api/sessions/get_session_logs.py +72 -0
- plato/chronos/api/sessions/get_session_logs_download.py +62 -0
- plato/chronos/api/sessions/list_sessions.py +57 -0
- plato/chronos/api/status/__init__.py +8 -0
- plato/chronos/api/status/get_status_api_status_get.py +44 -0
- plato/chronos/api/status/get_version_info_api_version_get.py +44 -0
- plato/chronos/api/templates/__init__.py +11 -0
- plato/chronos/api/templates/create_template.py +63 -0
- plato/chronos/api/templates/delete_template.py +61 -0
- plato/chronos/api/templates/get_template.py +62 -0
- plato/chronos/api/templates/list_templates.py +57 -0
- plato/chronos/api/templates/update_template.py +68 -0
- plato/chronos/api/trajectories/__init__.py +8 -0
- plato/chronos/api/trajectories/get_trajectory.py +62 -0
- plato/chronos/api/trajectories/list_trajectories.py +62 -0
- plato/chronos/api/worlds/__init__.py +10 -0
- plato/chronos/api/worlds/create_world.py +63 -0
- plato/chronos/api/worlds/delete_world.py +61 -0
- plato/chronos/api/worlds/get_world.py +62 -0
- plato/chronos/api/worlds/list_worlds.py +57 -0
- plato/chronos/client.py +171 -0
- plato/chronos/errors.py +141 -0
- plato/chronos/models/__init__.py +647 -0
- plato/chronos/py.typed +0 -0
- plato/sims/cli.py +299 -123
- plato/sims/registry.py +77 -4
- plato/v1/cli/agent.py +88 -84
- plato/v1/cli/main.py +2 -0
- plato/v1/cli/pm.py +441 -119
- plato/v1/cli/sandbox.py +747 -191
- plato/v1/cli/sim.py +11 -0
- plato/v1/cli/verify.py +1269 -0
- plato/v1/cli/world.py +3 -0
- plato/v1/flow_executor.py +21 -17
- plato/v1/models/env.py +11 -11
- plato/v1/sdk.py +2 -2
- plato/v1/sync_env.py +11 -11
- plato/v1/sync_flow_executor.py +21 -17
- plato/v1/sync_sdk.py +4 -2
- plato/v2/__init__.py +2 -0
- plato/v2/async_/environment.py +20 -1
- plato/v2/async_/session.py +54 -3
- plato/v2/sync/environment.py +2 -1
- plato/v2/sync/session.py +52 -2
- plato/worlds/README.md +218 -0
- plato/worlds/__init__.py +54 -18
- plato/worlds/base.py +304 -93
- plato/worlds/config.py +239 -73
- plato/worlds/runner.py +391 -80
- {plato_sdk_v2-2.0.50.dist-info → plato_sdk_v2-2.2.4.dist-info}/METADATA +1 -3
- {plato_sdk_v2-2.0.50.dist-info → plato_sdk_v2-2.2.4.dist-info}/RECORD +143 -68
- {plato_sdk_v2-2.0.50.dist-info → plato_sdk_v2-2.2.4.dist-info}/entry_points.txt +1 -0
- plato/_generated/api/v2/interfaces/__init__.py +0 -27
- plato/_generated/api/v2/interfaces/v2_interface_browser_create.py +0 -68
- plato/_generated/api/v2/interfaces/v2_interface_cdp_url.py +0 -65
- plato/_generated/api/v2/interfaces/v2_interface_click.py +0 -64
- plato/_generated/api/v2/interfaces/v2_interface_close.py +0 -59
- plato/_generated/api/v2/interfaces/v2_interface_computer_create.py +0 -68
- plato/_generated/api/v2/interfaces/v2_interface_cursor.py +0 -64
- plato/_generated/api/v2/interfaces/v2_interface_key.py +0 -68
- plato/_generated/api/v2/interfaces/v2_interface_screenshot.py +0 -65
- plato/_generated/api/v2/interfaces/v2_interface_scroll.py +0 -70
- plato/_generated/api/v2/interfaces/v2_interface_type.py +0 -64
- plato/world/__init__.py +0 -44
- plato/world/base.py +0 -267
- plato/world/config.py +0 -139
- plato/world/types.py +0 -47
- {plato_sdk_v2-2.0.50.dist-info → plato_sdk_v2-2.2.4.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"""Test Runtime"""
|
|
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
|
+
|
|
11
|
+
|
|
12
|
+
def _build_request_args(
|
|
13
|
+
artifact_id: str,
|
|
14
|
+
x_api_key: str | None = None,
|
|
15
|
+
) -> dict[str, Any]:
|
|
16
|
+
"""Build request arguments."""
|
|
17
|
+
url = f"/api/runtimes/{artifact_id}/test"
|
|
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
|
+
artifact_id: str,
|
|
33
|
+
x_api_key: str | None = None,
|
|
34
|
+
) -> dict[str, Any]:
|
|
35
|
+
"""Test a runtime by starting a session from it.
|
|
36
|
+
|
|
37
|
+
Creates a session from the runtime artifact, waits for it to be ready,
|
|
38
|
+
then returns the session info. The session stays open for manual testing."""
|
|
39
|
+
|
|
40
|
+
request_args = _build_request_args(
|
|
41
|
+
artifact_id=artifact_id,
|
|
42
|
+
x_api_key=x_api_key,
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
response = client.request(**request_args)
|
|
46
|
+
raise_for_status(response)
|
|
47
|
+
return response.json()
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
async def asyncio(
|
|
51
|
+
client: httpx.AsyncClient,
|
|
52
|
+
artifact_id: str,
|
|
53
|
+
x_api_key: str | None = None,
|
|
54
|
+
) -> dict[str, Any]:
|
|
55
|
+
"""Test a runtime by starting a session from it.
|
|
56
|
+
|
|
57
|
+
Creates a session from the runtime artifact, waits for it to be ready,
|
|
58
|
+
then returns the session info. The session stays open for manual testing."""
|
|
59
|
+
|
|
60
|
+
request_args = _build_request_args(
|
|
61
|
+
artifact_id=artifact_id,
|
|
62
|
+
x_api_key=x_api_key,
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
response = await client.request(**request_args)
|
|
66
|
+
raise_for_status(response)
|
|
67
|
+
return response.json()
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"""Create Secret"""
|
|
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 EnvSecretCreate, EnvSecretResponse
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _build_request_args(
|
|
14
|
+
body: EnvSecretCreate,
|
|
15
|
+
x_api_key: str | None = None,
|
|
16
|
+
) -> dict[str, Any]:
|
|
17
|
+
"""Build request arguments."""
|
|
18
|
+
url = "/api/secrets"
|
|
19
|
+
|
|
20
|
+
headers: dict[str, str] = {}
|
|
21
|
+
if x_api_key is not None:
|
|
22
|
+
headers["X-API-Key"] = x_api_key
|
|
23
|
+
|
|
24
|
+
return {
|
|
25
|
+
"method": "POST",
|
|
26
|
+
"url": url,
|
|
27
|
+
"json": body.model_dump(mode="json", exclude_none=True),
|
|
28
|
+
"headers": headers,
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def sync(
|
|
33
|
+
client: httpx.Client,
|
|
34
|
+
body: EnvSecretCreate,
|
|
35
|
+
x_api_key: str | None = None,
|
|
36
|
+
) -> EnvSecretResponse:
|
|
37
|
+
"""Create or update an environment secret."""
|
|
38
|
+
|
|
39
|
+
request_args = _build_request_args(
|
|
40
|
+
body=body,
|
|
41
|
+
x_api_key=x_api_key,
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
response = client.request(**request_args)
|
|
45
|
+
raise_for_status(response)
|
|
46
|
+
return EnvSecretResponse.model_validate(response.json())
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
async def asyncio(
|
|
50
|
+
client: httpx.AsyncClient,
|
|
51
|
+
body: EnvSecretCreate,
|
|
52
|
+
x_api_key: str | None = None,
|
|
53
|
+
) -> EnvSecretResponse:
|
|
54
|
+
"""Create or update an environment secret."""
|
|
55
|
+
|
|
56
|
+
request_args = _build_request_args(
|
|
57
|
+
body=body,
|
|
58
|
+
x_api_key=x_api_key,
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
response = await client.request(**request_args)
|
|
62
|
+
raise_for_status(response)
|
|
63
|
+
return EnvSecretResponse.model_validate(response.json())
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"""Delete Secret"""
|
|
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
|
+
|
|
11
|
+
|
|
12
|
+
def _build_request_args(
|
|
13
|
+
name: str,
|
|
14
|
+
x_api_key: str | None = None,
|
|
15
|
+
) -> dict[str, Any]:
|
|
16
|
+
"""Build request arguments."""
|
|
17
|
+
url = f"/api/secrets/{name}"
|
|
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": "DELETE",
|
|
25
|
+
"url": url,
|
|
26
|
+
"headers": headers,
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def sync(
|
|
31
|
+
client: httpx.Client,
|
|
32
|
+
name: str,
|
|
33
|
+
x_api_key: str | None = None,
|
|
34
|
+
) -> dict[str, Any]:
|
|
35
|
+
"""Delete an environment secret."""
|
|
36
|
+
|
|
37
|
+
request_args = _build_request_args(
|
|
38
|
+
name=name,
|
|
39
|
+
x_api_key=x_api_key,
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
response = client.request(**request_args)
|
|
43
|
+
raise_for_status(response)
|
|
44
|
+
return response.json()
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
async def asyncio(
|
|
48
|
+
client: httpx.AsyncClient,
|
|
49
|
+
name: str,
|
|
50
|
+
x_api_key: str | None = None,
|
|
51
|
+
) -> dict[str, Any]:
|
|
52
|
+
"""Delete an environment secret."""
|
|
53
|
+
|
|
54
|
+
request_args = _build_request_args(
|
|
55
|
+
name=name,
|
|
56
|
+
x_api_key=x_api_key,
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
response = await client.request(**request_args)
|
|
60
|
+
raise_for_status(response)
|
|
61
|
+
return response.json()
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"""Get Secret"""
|
|
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 EnvSecretResponse
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _build_request_args(
|
|
14
|
+
name: str,
|
|
15
|
+
x_api_key: str | None = None,
|
|
16
|
+
) -> dict[str, Any]:
|
|
17
|
+
"""Build request arguments."""
|
|
18
|
+
url = f"/api/secrets/{name}"
|
|
19
|
+
|
|
20
|
+
headers: dict[str, str] = {}
|
|
21
|
+
if x_api_key is not None:
|
|
22
|
+
headers["X-API-Key"] = x_api_key
|
|
23
|
+
|
|
24
|
+
return {
|
|
25
|
+
"method": "GET",
|
|
26
|
+
"url": url,
|
|
27
|
+
"headers": headers,
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def sync(
|
|
32
|
+
client: httpx.Client,
|
|
33
|
+
name: str,
|
|
34
|
+
x_api_key: str | None = None,
|
|
35
|
+
) -> EnvSecretResponse:
|
|
36
|
+
"""Get an environment secret by name."""
|
|
37
|
+
|
|
38
|
+
request_args = _build_request_args(
|
|
39
|
+
name=name,
|
|
40
|
+
x_api_key=x_api_key,
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
response = client.request(**request_args)
|
|
44
|
+
raise_for_status(response)
|
|
45
|
+
return EnvSecretResponse.model_validate(response.json())
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
async def asyncio(
|
|
49
|
+
client: httpx.AsyncClient,
|
|
50
|
+
name: str,
|
|
51
|
+
x_api_key: str | None = None,
|
|
52
|
+
) -> EnvSecretResponse:
|
|
53
|
+
"""Get an environment secret by name."""
|
|
54
|
+
|
|
55
|
+
request_args = _build_request_args(
|
|
56
|
+
name=name,
|
|
57
|
+
x_api_key=x_api_key,
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
response = await client.request(**request_args)
|
|
61
|
+
raise_for_status(response)
|
|
62
|
+
return EnvSecretResponse.model_validate(response.json())
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"""List Secrets"""
|
|
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 EnvSecretListResponse
|
|
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/secrets"
|
|
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": "GET",
|
|
25
|
+
"url": url,
|
|
26
|
+
"headers": headers,
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def sync(
|
|
31
|
+
client: httpx.Client,
|
|
32
|
+
x_api_key: str | None = None,
|
|
33
|
+
) -> EnvSecretListResponse:
|
|
34
|
+
"""List all environment secrets for the org."""
|
|
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 EnvSecretListResponse.model_validate(response.json())
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
async def asyncio(
|
|
46
|
+
client: httpx.AsyncClient,
|
|
47
|
+
x_api_key: str | None = None,
|
|
48
|
+
) -> EnvSecretListResponse:
|
|
49
|
+
"""List all environment secrets for the org."""
|
|
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 EnvSecretListResponse.model_validate(response.json())
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"""Update Secret"""
|
|
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 EnvSecretResponse, EnvSecretUpdate
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _build_request_args(
|
|
14
|
+
name: str,
|
|
15
|
+
body: EnvSecretUpdate,
|
|
16
|
+
x_api_key: str | None = None,
|
|
17
|
+
) -> dict[str, Any]:
|
|
18
|
+
"""Build request arguments."""
|
|
19
|
+
url = f"/api/secrets/{name}"
|
|
20
|
+
|
|
21
|
+
headers: dict[str, str] = {}
|
|
22
|
+
if x_api_key is not None:
|
|
23
|
+
headers["X-API-Key"] = x_api_key
|
|
24
|
+
|
|
25
|
+
return {
|
|
26
|
+
"method": "PUT",
|
|
27
|
+
"url": url,
|
|
28
|
+
"json": body.model_dump(mode="json", exclude_none=True),
|
|
29
|
+
"headers": headers,
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def sync(
|
|
34
|
+
client: httpx.Client,
|
|
35
|
+
name: str,
|
|
36
|
+
body: EnvSecretUpdate,
|
|
37
|
+
x_api_key: str | None = None,
|
|
38
|
+
) -> EnvSecretResponse:
|
|
39
|
+
"""Update an environment secret."""
|
|
40
|
+
|
|
41
|
+
request_args = _build_request_args(
|
|
42
|
+
name=name,
|
|
43
|
+
body=body,
|
|
44
|
+
x_api_key=x_api_key,
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
response = client.request(**request_args)
|
|
48
|
+
raise_for_status(response)
|
|
49
|
+
return EnvSecretResponse.model_validate(response.json())
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
async def asyncio(
|
|
53
|
+
client: httpx.AsyncClient,
|
|
54
|
+
name: str,
|
|
55
|
+
body: EnvSecretUpdate,
|
|
56
|
+
x_api_key: str | None = None,
|
|
57
|
+
) -> EnvSecretResponse:
|
|
58
|
+
"""Update an environment secret."""
|
|
59
|
+
|
|
60
|
+
request_args = _build_request_args(
|
|
61
|
+
name=name,
|
|
62
|
+
body=body,
|
|
63
|
+
x_api_key=x_api_key,
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
response = await client.request(**request_args)
|
|
67
|
+
raise_for_status(response)
|
|
68
|
+
return EnvSecretResponse.model_validate(response.json())
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"""Get Session"""
|
|
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 SessionResponse
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _build_request_args(
|
|
14
|
+
public_id: str,
|
|
15
|
+
x_api_key: str | None = None,
|
|
16
|
+
) -> dict[str, Any]:
|
|
17
|
+
"""Build request arguments."""
|
|
18
|
+
url = f"/api/sessions/{public_id}"
|
|
19
|
+
|
|
20
|
+
headers: dict[str, str] = {}
|
|
21
|
+
if x_api_key is not None:
|
|
22
|
+
headers["X-API-Key"] = x_api_key
|
|
23
|
+
|
|
24
|
+
return {
|
|
25
|
+
"method": "GET",
|
|
26
|
+
"url": url,
|
|
27
|
+
"headers": headers,
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def sync(
|
|
32
|
+
client: httpx.Client,
|
|
33
|
+
public_id: str,
|
|
34
|
+
x_api_key: str | None = None,
|
|
35
|
+
) -> SessionResponse:
|
|
36
|
+
"""Get a session by public ID."""
|
|
37
|
+
|
|
38
|
+
request_args = _build_request_args(
|
|
39
|
+
public_id=public_id,
|
|
40
|
+
x_api_key=x_api_key,
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
response = client.request(**request_args)
|
|
44
|
+
raise_for_status(response)
|
|
45
|
+
return SessionResponse.model_validate(response.json())
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
async def asyncio(
|
|
49
|
+
client: httpx.AsyncClient,
|
|
50
|
+
public_id: str,
|
|
51
|
+
x_api_key: str | None = None,
|
|
52
|
+
) -> SessionResponse:
|
|
53
|
+
"""Get a session by public ID."""
|
|
54
|
+
|
|
55
|
+
request_args = _build_request_args(
|
|
56
|
+
public_id=public_id,
|
|
57
|
+
x_api_key=x_api_key,
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
response = await client.request(**request_args)
|
|
61
|
+
raise_for_status(response)
|
|
62
|
+
return SessionResponse.model_validate(response.json())
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"""Get Session Logs"""
|
|
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 SessionLogsResponse
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _build_request_args(
|
|
14
|
+
public_id: str,
|
|
15
|
+
limit: int | None = 100,
|
|
16
|
+
x_api_key: str | None = None,
|
|
17
|
+
) -> dict[str, Any]:
|
|
18
|
+
"""Build request arguments."""
|
|
19
|
+
url = f"/api/sessions/{public_id}/logs"
|
|
20
|
+
|
|
21
|
+
params: dict[str, Any] = {}
|
|
22
|
+
if limit is not None:
|
|
23
|
+
params["limit"] = limit
|
|
24
|
+
|
|
25
|
+
headers: dict[str, str] = {}
|
|
26
|
+
if x_api_key is not None:
|
|
27
|
+
headers["X-API-Key"] = x_api_key
|
|
28
|
+
|
|
29
|
+
return {
|
|
30
|
+
"method": "GET",
|
|
31
|
+
"url": url,
|
|
32
|
+
"params": params,
|
|
33
|
+
"headers": headers,
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def sync(
|
|
38
|
+
client: httpx.Client,
|
|
39
|
+
public_id: str,
|
|
40
|
+
limit: int | None = 100,
|
|
41
|
+
x_api_key: str | None = None,
|
|
42
|
+
) -> SessionLogsResponse:
|
|
43
|
+
"""Get logs/events for a session."""
|
|
44
|
+
|
|
45
|
+
request_args = _build_request_args(
|
|
46
|
+
public_id=public_id,
|
|
47
|
+
limit=limit,
|
|
48
|
+
x_api_key=x_api_key,
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
response = client.request(**request_args)
|
|
52
|
+
raise_for_status(response)
|
|
53
|
+
return SessionLogsResponse.model_validate(response.json())
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
async def asyncio(
|
|
57
|
+
client: httpx.AsyncClient,
|
|
58
|
+
public_id: str,
|
|
59
|
+
limit: int | None = 100,
|
|
60
|
+
x_api_key: str | None = None,
|
|
61
|
+
) -> SessionLogsResponse:
|
|
62
|
+
"""Get logs/events for a session."""
|
|
63
|
+
|
|
64
|
+
request_args = _build_request_args(
|
|
65
|
+
public_id=public_id,
|
|
66
|
+
limit=limit,
|
|
67
|
+
x_api_key=x_api_key,
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
response = await client.request(**request_args)
|
|
71
|
+
raise_for_status(response)
|
|
72
|
+
return SessionLogsResponse.model_validate(response.json())
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"""Get Session Logs Download"""
|
|
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 LogsDownloadResponse
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _build_request_args(
|
|
14
|
+
public_id: str,
|
|
15
|
+
x_api_key: str | None = None,
|
|
16
|
+
) -> dict[str, Any]:
|
|
17
|
+
"""Build request arguments."""
|
|
18
|
+
url = f"/api/sessions/{public_id}/logs-download"
|
|
19
|
+
|
|
20
|
+
headers: dict[str, str] = {}
|
|
21
|
+
if x_api_key is not None:
|
|
22
|
+
headers["X-API-Key"] = x_api_key
|
|
23
|
+
|
|
24
|
+
return {
|
|
25
|
+
"method": "GET",
|
|
26
|
+
"url": url,
|
|
27
|
+
"headers": headers,
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def sync(
|
|
32
|
+
client: httpx.Client,
|
|
33
|
+
public_id: str,
|
|
34
|
+
x_api_key: str | None = None,
|
|
35
|
+
) -> LogsDownloadResponse:
|
|
36
|
+
"""Get a presigned download URL for the session's zipped logs."""
|
|
37
|
+
|
|
38
|
+
request_args = _build_request_args(
|
|
39
|
+
public_id=public_id,
|
|
40
|
+
x_api_key=x_api_key,
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
response = client.request(**request_args)
|
|
44
|
+
raise_for_status(response)
|
|
45
|
+
return LogsDownloadResponse.model_validate(response.json())
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
async def asyncio(
|
|
49
|
+
client: httpx.AsyncClient,
|
|
50
|
+
public_id: str,
|
|
51
|
+
x_api_key: str | None = None,
|
|
52
|
+
) -> LogsDownloadResponse:
|
|
53
|
+
"""Get a presigned download URL for the session's zipped logs."""
|
|
54
|
+
|
|
55
|
+
request_args = _build_request_args(
|
|
56
|
+
public_id=public_id,
|
|
57
|
+
x_api_key=x_api_key,
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
response = await client.request(**request_args)
|
|
61
|
+
raise_for_status(response)
|
|
62
|
+
return LogsDownloadResponse.model_validate(response.json())
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"""List Sessions"""
|
|
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 SessionListResponse
|
|
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/sessions"
|
|
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": "GET",
|
|
25
|
+
"url": url,
|
|
26
|
+
"headers": headers,
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def sync(
|
|
31
|
+
client: httpx.Client,
|
|
32
|
+
x_api_key: str | None = None,
|
|
33
|
+
) -> SessionListResponse:
|
|
34
|
+
"""List all sessions for the org."""
|
|
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 SessionListResponse.model_validate(response.json())
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
async def asyncio(
|
|
46
|
+
client: httpx.AsyncClient,
|
|
47
|
+
x_api_key: str | None = None,
|
|
48
|
+
) -> SessionListResponse:
|
|
49
|
+
"""List all sessions for the org."""
|
|
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 SessionListResponse.model_validate(response.json())
|