plato-sdk-v2 2.3.3__py3-none-any.whl → 2.3.5__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/agents/__init__.py +24 -16
- plato/agents/artifacts.py +108 -0
- plato/agents/config.py +2 -7
- plato/agents/otel.py +258 -0
- plato/agents/runner.py +223 -68
- plato/worlds/README.md +2 -1
- plato/worlds/base.py +111 -78
- plato/worlds/config.py +5 -3
- plato/worlds/runner.py +62 -18
- {plato_sdk_v2-2.3.3.dist-info → plato_sdk_v2-2.3.5.dist-info}/METADATA +4 -2
- {plato_sdk_v2-2.3.3.dist-info → plato_sdk_v2-2.3.5.dist-info}/RECORD +13 -18
- plato/agents/logging.py +0 -515
- plato/chronos/api/callback/__init__.py +0 -11
- plato/chronos/api/callback/push_agent_logs.py +0 -61
- plato/chronos/api/callback/update_agent_status.py +0 -57
- plato/chronos/api/callback/upload_artifacts.py +0 -59
- plato/chronos/api/callback/upload_logs_zip.py +0 -57
- plato/chronos/api/callback/upload_trajectory.py +0 -57
- {plato_sdk_v2-2.3.3.dist-info → plato_sdk_v2-2.3.5.dist-info}/WHEEL +0 -0
- {plato_sdk_v2-2.3.3.dist-info → plato_sdk_v2-2.3.5.dist-info}/entry_points.txt +0 -0
plato/worlds/runner.py
CHANGED
|
@@ -246,13 +246,22 @@ def _extract_agent_images_from_config(config_data: dict) -> list[str]:
|
|
|
246
246
|
return images
|
|
247
247
|
|
|
248
248
|
|
|
249
|
+
class ChronosSessionInfo:
|
|
250
|
+
"""Info returned from Chronos session creation."""
|
|
251
|
+
|
|
252
|
+
def __init__(self, public_id: str, otel_url: str, upload_url: str):
|
|
253
|
+
self.public_id = public_id
|
|
254
|
+
self.otel_url = otel_url
|
|
255
|
+
self.upload_url = upload_url
|
|
256
|
+
|
|
257
|
+
|
|
249
258
|
async def _create_chronos_session(
|
|
250
259
|
chronos_url: str,
|
|
251
260
|
api_key: str,
|
|
252
261
|
world_name: str,
|
|
253
262
|
world_config: dict,
|
|
254
263
|
plato_session_id: str | None = None,
|
|
255
|
-
) ->
|
|
264
|
+
) -> ChronosSessionInfo:
|
|
256
265
|
"""Create a session in Chronos.
|
|
257
266
|
|
|
258
267
|
Args:
|
|
@@ -263,7 +272,7 @@ async def _create_chronos_session(
|
|
|
263
272
|
plato_session_id: Optional Plato session ID if already created
|
|
264
273
|
|
|
265
274
|
Returns:
|
|
266
|
-
|
|
275
|
+
ChronosSessionInfo with session_id, otel_url, and upload_url
|
|
267
276
|
"""
|
|
268
277
|
import httpx
|
|
269
278
|
|
|
@@ -282,7 +291,40 @@ async def _create_chronos_session(
|
|
|
282
291
|
response.raise_for_status()
|
|
283
292
|
data = response.json()
|
|
284
293
|
|
|
285
|
-
|
|
294
|
+
print(f"[Runner] Chronos session response: {data}")
|
|
295
|
+
return ChronosSessionInfo(
|
|
296
|
+
public_id=data["public_id"],
|
|
297
|
+
otel_url=data["otel_url"],
|
|
298
|
+
upload_url=data["upload_url"],
|
|
299
|
+
)
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
async def _close_chronos_session(
|
|
303
|
+
chronos_url: str,
|
|
304
|
+
api_key: str,
|
|
305
|
+
session_id: str,
|
|
306
|
+
) -> None:
|
|
307
|
+
"""Close a Chronos session.
|
|
308
|
+
|
|
309
|
+
Args:
|
|
310
|
+
chronos_url: Chronos base URL
|
|
311
|
+
api_key: Plato API key for authentication
|
|
312
|
+
session_id: Chronos session public ID to close
|
|
313
|
+
"""
|
|
314
|
+
import httpx
|
|
315
|
+
|
|
316
|
+
url = f"{chronos_url.rstrip('/')}/api/sessions/{session_id}/close"
|
|
317
|
+
|
|
318
|
+
try:
|
|
319
|
+
async with httpx.AsyncClient(timeout=30.0) as client:
|
|
320
|
+
response = await client.post(
|
|
321
|
+
url,
|
|
322
|
+
headers={"x-api-key": api_key},
|
|
323
|
+
)
|
|
324
|
+
response.raise_for_status()
|
|
325
|
+
logger.info(f"Closed Chronos session: {session_id}")
|
|
326
|
+
except Exception as e:
|
|
327
|
+
logger.warning(f"Failed to close Chronos session: {e}")
|
|
286
328
|
|
|
287
329
|
|
|
288
330
|
async def _run_dev(
|
|
@@ -297,7 +339,7 @@ async def _run_dev(
|
|
|
297
339
|
1. Load and parse the config
|
|
298
340
|
2. Build local agent images if --agents-dir is provided
|
|
299
341
|
3. Create Plato session with all environments
|
|
300
|
-
4. Create Chronos session for
|
|
342
|
+
4. Create Chronos session for OTel traces
|
|
301
343
|
5. Run the world with the session attached
|
|
302
344
|
|
|
303
345
|
Requires environment variables:
|
|
@@ -380,27 +422,30 @@ async def _run_dev(
|
|
|
380
422
|
|
|
381
423
|
# Create Chronos session (after Plato session so we can link them)
|
|
382
424
|
logger.info(f"Creating Chronos session at {chronos_url}...")
|
|
383
|
-
|
|
425
|
+
chronos_session = await _create_chronos_session(
|
|
384
426
|
chronos_url=chronos_url,
|
|
385
427
|
api_key=api_key,
|
|
386
428
|
world_name=world_name,
|
|
387
429
|
world_config=config_data,
|
|
388
430
|
plato_session_id=plato_session_id,
|
|
389
431
|
)
|
|
432
|
+
chronos_session_id = chronos_session.public_id
|
|
390
433
|
logger.info(f"Created Chronos session: {chronos_session_id}")
|
|
391
434
|
logger.info(f"View at: {chronos_url}/sessions/{chronos_session_id}")
|
|
392
435
|
|
|
393
|
-
#
|
|
394
|
-
|
|
436
|
+
# Update run_config with session info from Chronos
|
|
437
|
+
run_config.session_id = chronos_session_id
|
|
438
|
+
run_config.otel_url = chronos_session.otel_url
|
|
439
|
+
run_config.upload_url = chronos_session.upload_url
|
|
395
440
|
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
441
|
+
# For local dev, override otel_url to use localhost directly
|
|
442
|
+
# (Chronos may return a tunnel URL that's meant for remote VMs)
|
|
443
|
+
if "localhost" in chronos_url or "127.0.0.1" in chronos_url:
|
|
444
|
+
run_config.otel_url = f"{chronos_url.rstrip('/')}/api/otel"
|
|
445
|
+
logger.info(f"Local dev: using OTel URL {run_config.otel_url}")
|
|
400
446
|
|
|
401
|
-
|
|
402
|
-
run_config.
|
|
403
|
-
run_config.callback_url = callback_url
|
|
447
|
+
print(f"[Runner] run_config.otel_url = {run_config.otel_url!r}")
|
|
448
|
+
print(f"[Runner] run_config.upload_url = {run_config.upload_url!r}")
|
|
404
449
|
|
|
405
450
|
# Run the world
|
|
406
451
|
logger.info(f"Starting world '{world_name}'...")
|
|
@@ -414,10 +459,9 @@ async def _run_dev(
|
|
|
414
459
|
await session.close()
|
|
415
460
|
await plato.close()
|
|
416
461
|
|
|
417
|
-
#
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
reset_logging()
|
|
462
|
+
# Close Chronos session
|
|
463
|
+
if chronos_session_id:
|
|
464
|
+
await _close_chronos_session(chronos_url, api_key, chronos_session_id)
|
|
421
465
|
|
|
422
466
|
|
|
423
467
|
def _setup_colored_logging(verbose: bool = False) -> None:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: plato-sdk-v2
|
|
3
|
-
Version: 2.3.
|
|
3
|
+
Version: 2.3.5
|
|
4
4
|
Summary: Python SDK for the Plato API
|
|
5
5
|
Author-email: Plato <support@plato.so>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -21,6 +21,9 @@ Requires-Dist: google-genai>=1.0.0
|
|
|
21
21
|
Requires-Dist: httpx>=0.25.0
|
|
22
22
|
Requires-Dist: jinja2>=3.1.0
|
|
23
23
|
Requires-Dist: openapi-pydantic>=0.5.1
|
|
24
|
+
Requires-Dist: opentelemetry-api>=1.20.0
|
|
25
|
+
Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.20.0
|
|
26
|
+
Requires-Dist: opentelemetry-sdk>=1.20.0
|
|
24
27
|
Requires-Dist: pydantic-settings>=2.12.0
|
|
25
28
|
Requires-Dist: pydantic>=2.0.0
|
|
26
29
|
Requires-Dist: python-dotenv>=1.2.1
|
|
@@ -45,7 +48,6 @@ Description-Content-Type: text/markdown
|
|
|
45
48
|
# Plato Python SDK
|
|
46
49
|
|
|
47
50
|
|
|
48
|
-
|
|
49
51
|
Python SDK for the Plato platform. Uses [Harbor](https://harborframework.com) for agent execution.
|
|
50
52
|
|
|
51
53
|
## Installation
|
|
@@ -297,12 +297,13 @@ plato/_sims_generator/templates/python/errors.py.jinja,sha256=8L_FbHczBNLXJrbSlN
|
|
|
297
297
|
plato/_sims_generator/templates/python/package_init.py.jinja,sha256=sOcJxUT0LuOWu5jOMGGKYxfCEjcYQv1hGF3n0iOA4hQ,986
|
|
298
298
|
plato/_sims_generator/templates/python/tag_init.py.jinja,sha256=WB_9cv0JKIVg5TOXeSolET3tAfVg7sExjboh5jbCXz4,170
|
|
299
299
|
plato/_sims_generator/templates/python/version_init.py.jinja,sha256=sGvFcYVfzXFyQDAe0PSOrg9yys93KE0XInFQNb1TvCY,179
|
|
300
|
-
plato/agents/__init__.py,sha256=
|
|
300
|
+
plato/agents/__init__.py,sha256=Cxc-HUMwRGQ4D1hHnFo9vt2AV5upPRYP4e3y8X6Hzr0,3052
|
|
301
|
+
plato/agents/artifacts.py,sha256=ljeI0wzsp7Q6uKqMb-k7kTb680Vizs54ohtM-d7zvOg,2929
|
|
301
302
|
plato/agents/base.py,sha256=vUbPQuNSo6Ka2lIB_ZOXgi4EoAjtAD7GIj9LnNotam0,4577
|
|
302
303
|
plato/agents/build.py,sha256=CNMbVQFs2_pYit1dA29Davve28Yi4c7TNK9wBB7odrE,1621
|
|
303
|
-
plato/agents/config.py,sha256=
|
|
304
|
-
plato/agents/
|
|
305
|
-
plato/agents/runner.py,sha256=
|
|
304
|
+
plato/agents/config.py,sha256=CmRS6vOAg7JeqX4Hgp_KpA1YWBX_LuMicHm7SBjQEbs,5077
|
|
305
|
+
plato/agents/otel.py,sha256=xhsqJrfD9s3tyiSyZPFkTPS0wma71v_TS5BbGiL6lmQ,8168
|
|
306
|
+
plato/agents/runner.py,sha256=1qOCYVgT6m4zsRM8f0JXOYIg6smCyI-cuGZgVVae7aM,16244
|
|
306
307
|
plato/agents/trajectory.py,sha256=WdiBmua0KvCrNaM3qgPI7-7B4xmSkfbP4oZ_9_8qHzU,10529
|
|
307
308
|
plato/chronos/__init__.py,sha256=RHMvSrQS_-vkKOyTRuAkp2gKDP1HEuBLDnw8jcZs1Jg,739
|
|
308
309
|
plato/chronos/client.py,sha256=YcOGtHWERyOD9z8LKt8bRMVL0cEwL2hiAP4qQgdZlUI,5495
|
|
@@ -321,12 +322,6 @@ plato/chronos/api/auth/__init__.py,sha256=6qao3xT8yw9-WTpUlv4tVtpWhL2EycQd3I2WKQ
|
|
|
321
322
|
plato/chronos/api/auth/debug_auth_api_auth_debug_get.py,sha256=L1RWyQ1w7V8dyhOAU2VQlT9x0jkeng3eIvZDOv9Gl2w,881
|
|
322
323
|
plato/chronos/api/auth/get_auth_status_api_auth_status_get.py,sha256=i9JzH9vPeswvbWtBAkMikepbNAyNK8jpTcALU6ScG5s,1379
|
|
323
324
|
plato/chronos/api/auth/get_current_user_route_api_auth_me_get.py,sha256=w9zz7ivQpYKvV6FPIEuNHfI5BOl9bu3FYbJ5ADEuTPc,1210
|
|
324
|
-
plato/chronos/api/callback/__init__.py,sha256=KxC9frS5-0DzwOz4eympnoTvki7MslueKfRiZNdfSYg,264
|
|
325
|
-
plato/chronos/api/callback/push_agent_logs.py,sha256=MWL9-2qzRXnrXdUQktCAaIKHAOo8z7vPdaMOqgrJ6vI,1611
|
|
326
|
-
plato/chronos/api/callback/update_agent_status.py,sha256=I3N2T_670f030EvoNrX9koKQL78OjHoIRbUKaIXlktk,1323
|
|
327
|
-
plato/chronos/api/callback/upload_artifacts.py,sha256=AUg4TxFSHG6hvvSR1HyOh18eOLNuW-mtjPxXVxrWPr4,1526
|
|
328
|
-
plato/chronos/api/callback/upload_logs_zip.py,sha256=ZwB0zn23dMtfgXjkeraUG09b6OYZ2Nbfy_j0_LKndxY,1321
|
|
329
|
-
plato/chronos/api/callback/upload_trajectory.py,sha256=-cEktjBjzfxyMipJrUFwzqW1BAiKVX3bJYEHk33D9CU,1421
|
|
330
325
|
plato/chronos/api/default/__init__.py,sha256=TCF1Fl95ZyiR9-xHzf_R2A6TNb7k59N1VfSI5PAj4Pg,72
|
|
331
326
|
plato/chronos/api/default/health.py,sha256=PvBLZXdYptL9d5_BEmzUsbUjQJTNGw5E4AFryPYiruw,781
|
|
332
327
|
plato/chronos/api/jobs/__init__.py,sha256=JP76_irfuFV31HOgazh7Y81GSkcunJP_eYWX8Pqq1U0,80
|
|
@@ -461,13 +456,13 @@ plato/v2/utils/__init__.py,sha256=XLeFFsjXkm9g2raMmo7Wt4QN4hhCrNZDJKnpffJ4LtM,38
|
|
|
461
456
|
plato/v2/utils/db_cleanup.py,sha256=lnI5lsMHNHpG85Y99MaE4Rzc3618piuzhvH-uXO1zIc,8702
|
|
462
457
|
plato/v2/utils/models.py,sha256=PwehSSnIRG-tM3tWL1PzZEH77ZHhIAZ9R0UPs6YknbM,1441
|
|
463
458
|
plato/v2/utils/proxy_tunnel.py,sha256=8ZTd0jCGSfIHMvSv1fgEyacuISWnGPHLPbDglWroTzY,10463
|
|
464
|
-
plato/worlds/README.md,sha256=
|
|
459
|
+
plato/worlds/README.md,sha256=XFOkEA3cNNcrWkk-Cxnsl-zn-y0kvUENKQRSqFKpdqw,5479
|
|
465
460
|
plato/worlds/__init__.py,sha256=ALoou3l5lXvs_YZc5eH6HdMHpvhnpzKWqz__aSC1jFc,2152
|
|
466
|
-
plato/worlds/base.py,sha256=
|
|
461
|
+
plato/worlds/base.py,sha256=E_E5Y1FgcCghAIFWtTkqFXpf2tAKVKVNRKDtKXoHMac,26777
|
|
467
462
|
plato/worlds/build_hook.py,sha256=KSoW0kqa5b7NyZ7MYOw2qsZ_2FkWuz0M3Ru7AKOP7Qw,3486
|
|
468
|
-
plato/worlds/config.py,sha256=
|
|
469
|
-
plato/worlds/runner.py,sha256=
|
|
470
|
-
plato_sdk_v2-2.3.
|
|
471
|
-
plato_sdk_v2-2.3.
|
|
472
|
-
plato_sdk_v2-2.3.
|
|
473
|
-
plato_sdk_v2-2.3.
|
|
463
|
+
plato/worlds/config.py,sha256=a5frj3mt06rSlT25kE-L8Q2b2MTWkR-8cUoBKpC8tG4,11036
|
|
464
|
+
plato/worlds/runner.py,sha256=J4u0PiMAs_tG5rBaIQtLmoqGnlxvbTyPIXDBbMMA8DY,18967
|
|
465
|
+
plato_sdk_v2-2.3.5.dist-info/METADATA,sha256=YuzNDUss8gxSTa1XH86sb3etwlKd92o3GJXv6j_SWDA,8653
|
|
466
|
+
plato_sdk_v2-2.3.5.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
467
|
+
plato_sdk_v2-2.3.5.dist-info/entry_points.txt,sha256=upGMbJCx6YWUTKrPoYvYUYfFCqYr75nHDwhA-45m6p8,136
|
|
468
|
+
plato_sdk_v2-2.3.5.dist-info/RECORD,,
|