plato-sdk-v2 2.0.64__py3-none-any.whl → 2.3.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.
Files changed (46) hide show
  1. plato/__init__.py +0 -9
  2. plato/_sims_generator/__init__.py +19 -4
  3. plato/_sims_generator/instruction.py +203 -0
  4. plato/_sims_generator/templates/instruction/helpers.py.jinja +161 -0
  5. plato/_sims_generator/templates/instruction/init.py.jinja +43 -0
  6. plato/agents/__init__.py +99 -430
  7. plato/agents/base.py +145 -0
  8. plato/agents/build.py +61 -0
  9. plato/agents/config.py +160 -0
  10. plato/agents/logging.py +515 -0
  11. plato/agents/runner.py +191 -0
  12. plato/agents/trajectory.py +266 -0
  13. plato/chronos/models/__init__.py +1 -1
  14. plato/sims/cli.py +299 -123
  15. plato/sims/registry.py +77 -4
  16. plato/v1/cli/agent.py +88 -84
  17. plato/v1/cli/pm.py +84 -44
  18. plato/v1/cli/sandbox.py +241 -61
  19. plato/v1/cli/ssh.py +16 -4
  20. plato/v1/cli/verify.py +685 -0
  21. plato/v1/cli/world.py +3 -0
  22. plato/v1/flow_executor.py +21 -17
  23. plato/v1/models/env.py +11 -11
  24. plato/v1/sdk.py +2 -2
  25. plato/v1/sync_env.py +11 -11
  26. plato/v1/sync_flow_executor.py +21 -17
  27. plato/v1/sync_sdk.py +4 -2
  28. plato/v2/__init__.py +2 -0
  29. plato/v2/async_/environment.py +31 -0
  30. plato/v2/async_/session.py +72 -4
  31. plato/v2/sync/environment.py +31 -0
  32. plato/v2/sync/session.py +72 -4
  33. plato/worlds/README.md +71 -56
  34. plato/worlds/__init__.py +56 -18
  35. plato/worlds/base.py +578 -93
  36. plato/worlds/config.py +276 -74
  37. plato/worlds/runner.py +475 -80
  38. {plato_sdk_v2-2.0.64.dist-info → plato_sdk_v2-2.3.4.dist-info}/METADATA +3 -3
  39. {plato_sdk_v2-2.0.64.dist-info → plato_sdk_v2-2.3.4.dist-info}/RECORD +41 -36
  40. {plato_sdk_v2-2.0.64.dist-info → plato_sdk_v2-2.3.4.dist-info}/entry_points.txt +1 -0
  41. plato/agents/callback.py +0 -246
  42. plato/world/__init__.py +0 -44
  43. plato/world/base.py +0 -267
  44. plato/world/config.py +0 -139
  45. plato/world/types.py +0 -47
  46. {plato_sdk_v2-2.0.64.dist-info → plato_sdk_v2-2.3.4.dist-info}/WHEEL +0 -0
@@ -1,4 +1,4 @@
1
- plato/__init__.py,sha256=5e5V0xR4tbIT6NfGo5DNilmd2TSLe0mBRjFR1anuFP4,2014
1
+ plato/__init__.py,sha256=a9E0KS1602GWHHStnf7wDEuvPCvh2GpPh0Sf8oKZx5Q,1795
2
2
  plato/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  plato/_generated/__init__.py,sha256=8BNQD2tT98Nrl8jP97bIzUxFTkb1681a1kbJExyZYuo,738
4
4
  plato/_generated/client.py,sha256=_oMKXyAShQVddCaIKnfB2zPkRsDlCwLp-N3RFoKq_v8,5489
@@ -283,10 +283,13 @@ plato/_generated/api/v2/user/get_current_user.py,sha256=tvamtbWTEkeeNUBLSPqZIcCG
283
283
  plato/_generated/api/version/__init__.py,sha256=dQXTYrXjD1RZcvWwnlqXWAZ-eAV-V-6JSNuY7uaca7o,70
284
284
  plato/_generated/api/version/check.py,sha256=HTVNw0oi9gbvX4pOVoH4y4JywCxdl1pJTCk2PjJFwJ4,778
285
285
  plato/_generated/models/__init__.py,sha256=VGsTMYUCCqa7r_tl5m--dwjy7viYAN20nU2HhVAibcU,154130
286
- plato/_sims_generator/__init__.py,sha256=Cg8atlEoWsd5nf0qLz3_EbHxFVFtBwPDDUZbx3jxRrc,1125
286
+ plato/_sims_generator/__init__.py,sha256=Km4QOl9wxjQ5dgpdhk9QnBFJFFc9eq3rPbMWIQRjIn0,1602
287
287
  plato/_sims_generator/cli.py,sha256=mzolN-dxfMkVAdA-vC0esnai-cGg-i4ozOw8dACefV4,2709
288
+ plato/_sims_generator/instruction.py,sha256=Na9M-jIdBPhp_fLuBPTicoFnWriRyi8YiZ-eQBj64HI,6644
288
289
  plato/_sims_generator/parser.py,sha256=BbgRYllqYf7H76JyMfe7LYo1we-kh7YEOxUwrYT3shc,38347
289
290
  plato/_sims_generator/python.py,sha256=ZYZJeOhGhYV95iB2_G-stQHaIv5sQj0jo3GXSLb6SdA,18295
291
+ plato/_sims_generator/templates/instruction/helpers.py.jinja,sha256=kJ8lhVLPygjMh8l-In9rLtFci6Bxg3zVoz5BZFfLKms,4937
292
+ plato/_sims_generator/templates/instruction/init.py.jinja,sha256=oabz8xKdkz9SjRBYwg_GoHZdz1ZrhHXOOEazw2pOczQ,879
290
293
  plato/_sims_generator/templates/python/api_init.py.jinja,sha256=HYNtVsiGU91IzhBtBA3qlLv8b3U5kZbmW-FqdZ9F7mQ,188
291
294
  plato/_sims_generator/templates/python/client.py.jinja,sha256=H99L4kgRfTwJs3DOC9P-DcGtHNYBDNxcOvtedWEgWYM,19755
292
295
  plato/_sims_generator/templates/python/endpoint.py.jinja,sha256=1ToZiS8w_aZydVBhNt5KxLIbCo3toWCi4NPjLAmhVy4,12478
@@ -294,8 +297,13 @@ plato/_sims_generator/templates/python/errors.py.jinja,sha256=8L_FbHczBNLXJrbSlN
294
297
  plato/_sims_generator/templates/python/package_init.py.jinja,sha256=sOcJxUT0LuOWu5jOMGGKYxfCEjcYQv1hGF3n0iOA4hQ,986
295
298
  plato/_sims_generator/templates/python/tag_init.py.jinja,sha256=WB_9cv0JKIVg5TOXeSolET3tAfVg7sExjboh5jbCXz4,170
296
299
  plato/_sims_generator/templates/python/version_init.py.jinja,sha256=sGvFcYVfzXFyQDAe0PSOrg9yys93KE0XInFQNb1TvCY,179
297
- plato/agents/__init__.py,sha256=x_mdGT686769OPSBMN70VRIcfVdUmduLEsj325jAyPA,14578
298
- plato/agents/callback.py,sha256=9ziAH72HX6CDvMy_IrzzvSOlFDnhdz2TDG4hCmbc8IU,8188
300
+ plato/agents/__init__.py,sha256=1l-Vw5SFydmPsl1toXdc2oH3eLhFwz6jtI_DKUx4vmo,2847
301
+ plato/agents/base.py,sha256=vUbPQuNSo6Ka2lIB_ZOXgi4EoAjtAD7GIj9LnNotam0,4577
302
+ plato/agents/build.py,sha256=CNMbVQFs2_pYit1dA29Davve28Yi4c7TNK9wBB7odrE,1621
303
+ plato/agents/config.py,sha256=VZVMdCmEQnoR0VkrGdScG8p6zSKVFe7BZPd2h8lKNjI,5460
304
+ plato/agents/logging.py,sha256=bL3Q14YeFxWCQydGKrQzQPgKQzBoCCXy_AAQPZpBylU,16307
305
+ plato/agents/runner.py,sha256=UQWg3gpYhWLnGLB6Bs595qH7nZV-ch-u5fPlkltT_kc,6812
306
+ plato/agents/trajectory.py,sha256=WdiBmua0KvCrNaM3qgPI7-7B4xmSkfbP4oZ_9_8qHzU,10529
299
307
  plato/chronos/__init__.py,sha256=RHMvSrQS_-vkKOyTRuAkp2gKDP1HEuBLDnw8jcZs1Jg,739
300
308
  plato/chronos/client.py,sha256=YcOGtHWERyOD9z8LKt8bRMVL0cEwL2hiAP4qQgdZlUI,5495
301
309
  plato/chronos/errors.py,sha256=xqQIQB43nAL5urF8qc_1KUJql7KCnspULOFHLNnf83M,4199
@@ -364,32 +372,33 @@ plato/chronos/api/worlds/create_world.py,sha256=H6yl5QIazNXgryOR5rvscSIMf8Y9kjc6
364
372
  plato/chronos/api/worlds/delete_world.py,sha256=UETu3Zk0e2VkDdAyMilv1ev-0g_j-oujH1Dc8DBqQOc,1239
365
373
  plato/chronos/api/worlds/get_world.py,sha256=eHTM1U5JiNTaZwYLh7x4QVBoRQeI5kaJ9o6xSi4-nos,1356
366
374
  plato/chronos/api/worlds/list_worlds.py,sha256=hBAuGb69tlasyn-kV_LNr9x6Rr7SHhST5hXJn1uqMf8,1253
367
- plato/chronos/models/__init__.py,sha256=Iyh5srlL4oqsviCnjk9xHW7g0BjgJR4lAthFkZoXafs,21008
375
+ plato/chronos/models/__init__.py,sha256=5Hil8v_jFX1YU6LpOfqyJM4WV867Ckv6CX052Q4SCso,20996
368
376
  plato/sims/README.md,sha256=FIbJhNVNAV-SO6dq_cXX3Rg0C7HdQCfEY9YxGlkCmsM,6902
369
377
  plato/sims/__init__.py,sha256=tnoCGKZwNx6h22tEWLujdpLv6K4PpFU2RnDOhL1o-Uc,1494
370
378
  plato/sims/agent_helpers.py,sha256=kITvQywoTCS8mGhro3jZWuPJHDlje-UZujhjoahqhd0,10291
371
- plato/sims/cli.py,sha256=ySG5TNh9L2E-bgP0Jv4sbewReaoPw5jDYFAQk_jubuw,46093
379
+ plato/sims/cli.py,sha256=lvdc_fSyNVmXvblFaE0saiVPdTpoR8Tlh9NN2LCBrd8,52704
372
380
  plato/sims/generate_clients.py,sha256=nEe39v3UOcks-ggv5jomcwN33R5U9n8MDNCpHoZ2lDg,5958
373
- plato/sims/registry.py,sha256=_xtjcI4HHGBsJ4c0kzxK90U2B_h6FK-5FAoAwyWZokQ,8777
381
+ plato/sims/registry.py,sha256=1LHW1SMJJNYIvn0zY9BPkHo4yHpdDAk7BxTYw1HpweY,11963
374
382
  plato/v1/__init__.py,sha256=t1Ejb7YCFOVSKZL9hJ0UsmEE1mULDvO__f75dz1UueQ,197
375
383
  plato/v1/audit_ui.py,sha256=zYYufJKn7291uCNb_59ItmDTYsPr7YLshBFwcAwl1LQ,10990
376
384
  plato/v1/cli.py,sha256=iEt58vvW7ab9YH0CLcBHvf4653fk1gcEdij4HZc10YY,269
377
385
  plato/v1/config.py,sha256=Zc5qGBcR8UfLuZrfQhkZ5cUmV_9pPKHPyKpU0SNysGY,667
378
386
  plato/v1/exceptions.py,sha256=BS5A0NLZ2FgL6YVaIL-c8FXASTsOpuKrF3_Pb0tad6w,109
379
- plato/v1/flow_executor.py,sha256=DrpcWECW120P6WlS2Ol7AVcGHgKiJ-BFmYQi1_fdENw,19010
387
+ plato/v1/flow_executor.py,sha256=rHYPPG4XPdq00Ty7_c4r7dZ-LixtUrEV3KEg1i-Owto,19720
380
388
  plato/v1/sandbox_sdk.py,sha256=5-ESB3spe4BFGn1dVfgSWwKyfQeeUokPWsmbti3obOY,41854
381
- plato/v1/sdk.py,sha256=b-mDCwVtxWbVsHEZ1x5m1kJ4Hxs57Y7l-UBR2aUP0dY,33323
382
- plato/v1/sync_env.py,sha256=qClrMAe5CNj6KX8lDhHJi7GIToDkm00o8KNAYfJMf_Q,24793
383
- plato/v1/sync_flow_executor.py,sha256=NTRKtlAeuFct6kKWRQ4LsRwnGC1Yo58ICN91dDzOjBg,18523
384
- plato/v1/sync_sdk.py,sha256=ztAvqR5yW_ALj8g97K6U-jSQzwzVNVKWlGZ-tdMUP_M,25620
389
+ plato/v1/sdk.py,sha256=zNcYgANeMZG8r9AH3POJhJ11UQcOvdsLfUFABoB1cwg,33382
390
+ plato/v1/sync_env.py,sha256=UIfDpx3nPHBNWzahSddvol0SvfK9vU4mr3MOIOPCGr8,24878
391
+ plato/v1/sync_flow_executor.py,sha256=kgvNYOtA9FHeNfP7qb8ZPUIlTsfIss_Z98W8uX5veck,19233
392
+ plato/v1/sync_sdk.py,sha256=2sedg1QJiSxr1I3kCyfaLAnlAgHlbblc3QQP_47O30k,25697
385
393
  plato/v1/cli/__init__.py,sha256=om4b7PxgsoI7rEwuQelmQkqPdhMVn53_5qEN8kvksYw,105
386
- plato/v1/cli/agent.py,sha256=mdQrzEoFuMQnb_kMcIAkE7DbSak5Zv7A5RhPtXq-5rQ,44028
394
+ plato/v1/cli/agent.py,sha256=G6TV3blG_BqMDBWS-CG7GwzqoqcJTMsIKQ88jvLXb4k,43745
387
395
  plato/v1/cli/main.py,sha256=ktPtBvMwykR7AjXmTQ6bmZkHdzpAjhX5Fq66cDbGSzA,6844
388
- plato/v1/cli/pm.py,sha256=sIrh7qVyL-GOI8cgCUDFO2StXCxaKkCpGoN2waMqiyw,47579
389
- plato/v1/cli/sandbox.py,sha256=x0QE7ojZNI9WlKWGGxBVbLzwmkDfv80LUCz_HIWLNW8,87759
390
- plato/v1/cli/ssh.py,sha256=pePHD0lFPwSkATZYSannpFtHfJWKImAdLyS2463aRRw,6287
396
+ plato/v1/cli/pm.py,sha256=uLM6WszKqxq9Czg1FraDyWb9_INUuHZq63imvRYfRLw,49734
397
+ plato/v1/cli/sandbox.py,sha256=5rth_jL73L72GC0VJ0meXRgZo2EpsJ_qI3ipFjfXzJY,95185
398
+ plato/v1/cli/ssh.py,sha256=10ag6S1sxMcAmvcg24qy-yYwXb1miWfqxkXOs4QX8u0,6623
391
399
  plato/v1/cli/utils.py,sha256=be-llK6T6NHnIQl_Kfs-8EPu9JhIuZ_k9tJ3Ts-AKt4,3887
392
- plato/v1/cli/world.py,sha256=f-65n70-V2EBcYs9hbYqCXVT8n2xm7opIgmB5Z6yi3Y,9580
400
+ plato/v1/cli/verify.py,sha256=7QmQwfOOkr8a51f8xfVIr2zif7wGl2E8HOZTbOaIoV0,20671
401
+ plato/v1/cli/world.py,sha256=yBUadOJs1QYm6Jmx_ACDzogybRq5x4B-BnTvGO_ulQk,9757
393
402
  plato/v1/examples/doordash_tasks.py,sha256=8Sz9qx-vTmiOAiCAbrDRvZGsA1qQQBr1KHbxXdjr7OI,23233
394
403
  plato/v1/examples/loadtest.py,sha256=ZsQYNN_fZjE7CbrbVJb4KDc0OLaH7b66iPrEHDhuw0U,5609
395
404
  plato/v1/examples/test_env.py,sha256=8kUISbZyMi0Xh9HK7Il1okKQyz0Iq-vAKWgzC8kqUfU,4513
@@ -428,41 +437,37 @@ plato/v1/extensions/envgen-recorder/sessions.js,sha256=IrW0elMYYh4cUEmNZiHC-XhFL
428
437
  plato/v1/extensions/envgen-recorder/styles.css,sha256=NbpKw4NSbYw6RVDOn4zpNwwVnjFQtKIene2MZBz9kb0,5359
429
438
  plato/v1/models/__init__.py,sha256=rnv5oO0RQ_mbnv_0FxvCWpCnSKmBePoYoIQ0h1LuKE8,813
430
439
  plato/v1/models/build_models.py,sha256=zcRwg2pzU5GFDp_Qi7g0UCVNGkOtXTlHNvq_6gm5mJc,10201
431
- plato/v1/models/env.py,sha256=UClRO8wgpZutcwGsAc1Sk3tnZDucQkkT-qH_WluX77o,30958
440
+ plato/v1/models/env.py,sha256=UZgdjZrIkODeuTLTHaIyUqUJM83S8YYY_RbYqDeYjDk,31043
432
441
  plato/v1/models/flow.py,sha256=bkleb7-OR6V5tzPtggf0ZJhHZQwnktCYr1C-ONpRzwE,6920
433
442
  plato/v1/models/sandbox.py,sha256=yRN036G91tFAXGxU1ni7zCU1o7U1N8nI0mjLlBRDoSk,3478
434
443
  plato/v1/models/task.py,sha256=QXwdFpDM_NLjRpQSK6duibXJXFAPZ8-PpyuLWZC5o4I,4897
435
444
  plato/v1/utils/proxytunnel.py,sha256=N1MshFY3Pu3d19cTU619-e-gP2_j-89CEcld7lCoiGk,5706
436
- plato/v2/__init__.py,sha256=lWegWEfRZu2ofNgkyQLH77Rt2iodtN6U0yVObllGwEY,1583
445
+ plato/v2/__init__.py,sha256=YUzdRnXsL61ey-LOoR-HZGYgfGKBxnuMtFIu-D0VB8E,1662
437
446
  plato/v2/models.py,sha256=41EJPdbAsW-gARVND0cg4jqpzQuYlrbAW9hF8WI8kX4,2369
438
447
  plato/v2/types.py,sha256=MrHiE8AobOegeTfoKKHZ5JTccaFfS3-EW0arV7q8S5c,3533
439
448
  plato/v2/async_/__init__.py,sha256=zcNwuX2XD-WkUCFLvXtdRqFmCgeuY3-D4zGTRVwsAFI,484
440
449
  plato/v2/async_/artifact.py,sha256=JBWVQeVaZhkU2qn_knyzyA7wd5iQ8qxfLQ_l9GPhgYs,1217
441
450
  plato/v2/async_/client.py,sha256=GVgAgNN5gsDME8iV0zxqnwbsVS93J6cknOcq_VXwYN8,4209
442
- plato/v2/async_/environment.py,sha256=Dv_4QuQx5vLVp1m1mJR2fXybvbhz-Q4gLtZecCdyFT8,4622
451
+ plato/v2/async_/environment.py,sha256=M5IeWYLwREOIyuS2zqgBSqHE_x66_OZXrevA9Rkc8Is,5825
443
452
  plato/v2/async_/flow_executor.py,sha256=Tl4nRu1ZPWJFNNxyTGy-PxvebZEUD18ZDaz8T2chtzU,14188
444
- plato/v2/async_/session.py,sha256=ZMqT0Bjyr9lmSV58XpnUw_MddD3-XItzSl7MM73phss,34086
453
+ plato/v2/async_/session.py,sha256=ssTEFgfpDQElQEmeKulLWKLoW-wA3m_nI3UvEWb9lB0,36749
445
454
  plato/v2/sync/__init__.py,sha256=_WigxuehCC8A2yRy4mSaMQmIZhS0Gch4hhZC1VHyYXs,310
446
455
  plato/v2/sync/artifact.py,sha256=wTLC-tugG128wLvh-JqNPb0zsw5FXEJlZNahurSWink,1169
447
456
  plato/v2/sync/client.py,sha256=Q9fS1BF4KxTMMnceMwCMlb5dNFZ6LA4gsXWNLgsL2eE,3870
448
- plato/v2/sync/environment.py,sha256=EJS_MBXHQgdOYztmnvcDPyQV1Z0dV6BA-7UEJ_Z-bgE,3878
457
+ plato/v2/sync/environment.py,sha256=WnDzbyEHpwCSEP8XnfNSjIYS7rt7lYR4HGJjzprZmTQ,5066
449
458
  plato/v2/sync/flow_executor.py,sha256=N41-WCWIJVcCR2UmPUEiK7roNacYoeONkRXpR7lUgT8,13941
450
- plato/v2/sync/session.py,sha256=yVSrUlViN-ge-KPdvfcbZ-lJWT0CFZJt083ETrvhf38,25775
459
+ plato/v2/sync/session.py,sha256=jc71bZFb-1m4QTtU4V00OkNH8fHac3jyWTwq-uOK-BE,28409
451
460
  plato/v2/utils/__init__.py,sha256=XLeFFsjXkm9g2raMmo7Wt4QN4hhCrNZDJKnpffJ4LtM,38
452
461
  plato/v2/utils/db_cleanup.py,sha256=lnI5lsMHNHpG85Y99MaE4Rzc3618piuzhvH-uXO1zIc,8702
453
462
  plato/v2/utils/models.py,sha256=PwehSSnIRG-tM3tWL1PzZEH77ZHhIAZ9R0UPs6YknbM,1441
454
463
  plato/v2/utils/proxy_tunnel.py,sha256=8ZTd0jCGSfIHMvSv1fgEyacuISWnGPHLPbDglWroTzY,10463
455
- plato/world/__init__.py,sha256=v-vAQSMgROw3exUWmXc8PPUmaiYItbUdEoHPiP182wo,1312
456
- plato/world/base.py,sha256=pBAoxQEalNW8EB66Co_SshtaqtncWg7rNfZVagdN1xg,8769
457
- plato/world/config.py,sha256=7P8yMQU2LulxuK6KnK9IxRouO5gXQ9bl7xsBdcgtkn4,4077
458
- plato/world/types.py,sha256=KelUwCpFefurzh-Vu-IooTgThW6LDq4kvo2_M3mRv4k,1270
459
- plato/worlds/README.md,sha256=UkzsR6dgUK9oMQW1TXheHCabW0pEodOmqw5tGYh-XZU,5253
460
- plato/worlds/__init__.py,sha256=-a2oRiN0ECurYWG3o313C8rqyowKjiFz4__GYmVMrA0,1001
461
- plato/worlds/base.py,sha256=OSPs4wW-G6K1qoWEFcRAWPDFZ0-N1XTYp4wyzHHIF8A,6750
464
+ plato/worlds/README.md,sha256=TgG4aidude0ouJSCfY81Ev45hsUxPkO85HUIiWNqkcc,5463
465
+ plato/worlds/__init__.py,sha256=ALoou3l5lXvs_YZc5eH6HdMHpvhnpzKWqz__aSC1jFc,2152
466
+ plato/worlds/base.py,sha256=KsDq1TVVd4BKEFo42WodF4DPgodr00Gd1NrfzZEPqyw,25632
462
467
  plato/worlds/build_hook.py,sha256=KSoW0kqa5b7NyZ7MYOw2qsZ_2FkWuz0M3Ru7AKOP7Qw,3486
463
- plato/worlds/config.py,sha256=ClrHX-yu3OVqbWfGs5Lzkta1PvNJq-fTyD6W92YX-KI,4016
464
- plato/worlds/runner.py,sha256=k2mJG99VgvaJfnPhOpuMEiwJ8Pl06XnELkK82ULvp-c,4613
465
- plato_sdk_v2-2.0.64.dist-info/METADATA,sha256=jfXtCJnP5IYqYpJS7ee7JBwTbRsAAcQOu2n3eu6qaHY,8612
466
- plato_sdk_v2-2.0.64.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
467
- plato_sdk_v2-2.0.64.dist-info/entry_points.txt,sha256=wP8m2stltweMpm5iEaxPy-4u3y-0fonKBWsbKUE-5Gs,90
468
- plato_sdk_v2-2.0.64.dist-info/RECORD,,
468
+ plato/worlds/config.py,sha256=fkWoetCawIPf5xgj5EyJCvopmPPzZQAqt0Ke9P4hq5c,10845
469
+ plato/worlds/runner.py,sha256=gwTBuDPoiP3aGF4UgqNKHrfv1wohr0tsex0xlcuaw8c,18202
470
+ plato_sdk_v2-2.3.4.dist-info/METADATA,sha256=k70jP_81ZXfk_e5_nZQNO8Huplz6Wm3JoazP2-loCmg,8510
471
+ plato_sdk_v2-2.3.4.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
472
+ plato_sdk_v2-2.3.4.dist-info/entry_points.txt,sha256=upGMbJCx6YWUTKrPoYvYUYfFCqYr75nHDwhA-45m6p8,136
473
+ plato_sdk_v2-2.3.4.dist-info/RECORD,,
@@ -1,3 +1,4 @@
1
1
  [console_scripts]
2
2
  plato = plato.v1.cli:main
3
+ plato-agent-runner = plato.agents.runner:main
3
4
  plato-world-runner = plato.worlds.runner:main
plato/agents/callback.py DELETED
@@ -1,246 +0,0 @@
1
- """Chronos callback utilities for agents.
2
-
3
- This module provides utilities for agents to communicate with Chronos,
4
- including pushing logs, uploading trajectories, and uploading zipped logs.
5
- """
6
-
7
- from __future__ import annotations
8
-
9
- import base64
10
- import io
11
- import json
12
- import logging
13
- import zipfile
14
- from pathlib import Path
15
- from typing import Any
16
-
17
- import httpx
18
-
19
- logger = logging.getLogger(__name__)
20
-
21
-
22
- class ChronosCallback:
23
- """Utility class for communicating with Chronos server.
24
-
25
- Handles pushing logs, updating status, and uploading artifacts
26
- (trajectory and zipped logs) to the Chronos callback endpoints.
27
-
28
- Example:
29
- callback = ChronosCallback(
30
- callback_url="http://chronos.example.com/api/callback",
31
- session_id="abc123",
32
- )
33
-
34
- # Push logs during execution
35
- await callback.push_logs([
36
- {"level": "info", "message": "Starting agent..."},
37
- ])
38
-
39
- # After agent completes, upload artifacts
40
- await callback.upload_artifacts(logs_dir="/path/to/logs")
41
- """
42
-
43
- def __init__(self, callback_url: str, session_id: str):
44
- """Initialize the callback client.
45
-
46
- Args:
47
- callback_url: Full callback base URL (e.g., http://server/api/callback)
48
- session_id: The Chronos session ID for this run
49
- """
50
- self.callback_url = callback_url.rstrip("/")
51
- self.session_id = session_id
52
- self._enabled = bool(callback_url and session_id)
53
-
54
- @property
55
- def enabled(self) -> bool:
56
- """Check if callbacks are enabled (both server and session_id set)."""
57
- return self._enabled
58
-
59
- async def push_logs(self, logs: list[dict[str, Any]]) -> bool:
60
- """Push log entries to Chronos.
61
-
62
- Args:
63
- logs: List of log entries, each with 'level' and 'message' keys.
64
- Optional keys: 'timestamp', 'extra'
65
-
66
- Returns:
67
- True if logs were pushed successfully, False otherwise.
68
- """
69
- if not self._enabled:
70
- return False
71
-
72
- try:
73
- async with httpx.AsyncClient(timeout=10.0) as client:
74
- response = await client.post(
75
- f"{self.callback_url}/logs",
76
- json={"session_id": self.session_id, "logs": logs},
77
- )
78
- return response.status_code == 200
79
- except Exception as e:
80
- logger.warning(f"Failed to push logs to Chronos: {e}")
81
- return False
82
-
83
- async def push_log(
84
- self,
85
- message: str,
86
- level: str = "info",
87
- extra: dict[str, Any] | None = None,
88
- ) -> bool:
89
- """Push a single log entry to Chronos.
90
-
91
- Args:
92
- message: Log message
93
- level: Log level (debug, info, warning, error)
94
- extra: Optional additional structured data
95
-
96
- Returns:
97
- True if log was pushed successfully, False otherwise.
98
- """
99
- log_entry: dict[str, Any] = {"level": level, "message": message}
100
- if extra:
101
- log_entry["extra"] = extra
102
- return await self.push_logs([log_entry])
103
-
104
- async def update_status(
105
- self,
106
- status: str,
107
- message: str | None = None,
108
- extra: dict[str, Any] | None = None,
109
- ) -> bool:
110
- """Update the session status in Chronos.
111
-
112
- Args:
113
- status: New status (running, completed, failed)
114
- message: Optional status message
115
- extra: Optional additional data
116
-
117
- Returns:
118
- True if status was updated successfully, False otherwise.
119
- """
120
- if not self._enabled:
121
- return False
122
-
123
- try:
124
- async with httpx.AsyncClient(timeout=10.0) as client:
125
- response = await client.post(
126
- f"{self.callback_url}/status",
127
- json={
128
- "session_id": self.session_id,
129
- "status": status,
130
- "message": message,
131
- "extra": extra,
132
- },
133
- )
134
- return response.status_code == 200
135
- except Exception as e:
136
- logger.warning(f"Failed to update status in Chronos: {e}")
137
- return False
138
-
139
- def find_trajectory(self, logs_dir: str) -> dict[str, Any] | None:
140
- """Find and load ATIF trajectory from logs directory.
141
-
142
- Agents write ATIF trajectory to /logs/agent/trajectory.json after
143
- completing their run. This method finds and loads that file.
144
-
145
- Args:
146
- logs_dir: Path to the logs directory
147
-
148
- Returns:
149
- Parsed ATIF trajectory dict if found, None otherwise.
150
- """
151
- trajectory_path = Path(logs_dir) / "agent" / "trajectory.json"
152
-
153
- if not trajectory_path.exists():
154
- return None
155
-
156
- try:
157
- with open(trajectory_path) as f:
158
- data = json.load(f)
159
- if isinstance(data, dict) and "schema_version" in data:
160
- logger.info(f"Found ATIF trajectory: {trajectory_path}")
161
- return data
162
- return None
163
- except Exception as e:
164
- logger.warning(f"Failed to load trajectory from {trajectory_path}: {e}")
165
- return None
166
-
167
- def zip_logs_dir(self, logs_dir: str) -> bytes:
168
- """Zip the entire logs directory.
169
-
170
- Args:
171
- logs_dir: Path to the logs directory
172
-
173
- Returns:
174
- Zip file contents as bytes.
175
- """
176
- logs_path = Path(logs_dir)
177
- buffer = io.BytesIO()
178
-
179
- with zipfile.ZipFile(buffer, "w", zipfile.ZIP_DEFLATED) as zf:
180
- for file_path in logs_path.rglob("*"):
181
- if file_path.is_file():
182
- arcname = file_path.relative_to(logs_path)
183
- zf.write(file_path, arcname)
184
-
185
- buffer.seek(0)
186
- return buffer.read()
187
-
188
- async def upload_artifacts(
189
- self,
190
- logs_dir: str,
191
- trajectory: dict[str, Any] | None = None,
192
- ) -> bool:
193
- """Upload trajectory and zipped logs to Chronos.
194
-
195
- If trajectory is not provided, attempts to find it in the logs directory.
196
- The logs directory is zipped and uploaded to S3 via Chronos.
197
-
198
- Args:
199
- logs_dir: Path to the logs directory
200
- trajectory: Optional pre-loaded trajectory dict. If None, will
201
- attempt to find trajectory.json in logs_dir.
202
-
203
- Returns:
204
- True if artifacts were uploaded successfully, False otherwise.
205
- """
206
- if not self._enabled:
207
- return False
208
-
209
- # Find trajectory if not provided
210
- if trajectory is None:
211
- trajectory = self.find_trajectory(logs_dir)
212
- if trajectory:
213
- logger.info("Found ATIF trajectory in logs directory")
214
- else:
215
- logger.info("No ATIF trajectory found in logs directory")
216
-
217
- # Zip logs directory
218
- logs_base64: str | None = None
219
- try:
220
- logs_zip = self.zip_logs_dir(logs_dir)
221
- logs_base64 = base64.b64encode(logs_zip).decode("utf-8")
222
- logger.info(f"Zipped logs: {len(logs_zip)} bytes")
223
- except Exception as e:
224
- logger.warning(f"Failed to zip logs: {e}")
225
-
226
- # Upload to Chronos
227
- try:
228
- async with httpx.AsyncClient(timeout=60.0) as client:
229
- response = await client.post(
230
- f"{self.callback_url}/artifacts",
231
- json={
232
- "session_id": self.session_id,
233
- "trajectory": trajectory,
234
- "logs_base64": logs_base64,
235
- },
236
- )
237
- if response.status_code == 200:
238
- result = response.json()
239
- logger.info(f"Uploaded artifacts to Chronos: {result}")
240
- return True
241
- else:
242
- logger.warning(f"Failed to upload artifacts: {response.status_code} {response.text}")
243
- return False
244
- except Exception as e:
245
- logger.warning(f"Failed to upload artifacts to Chronos: {e}")
246
- return False
plato/world/__init__.py DELETED
@@ -1,44 +0,0 @@
1
- """World module - OpenAI Gym-like interface for Plato simulators.
2
-
3
- Provides an abstract World base class that manages Plato sessions and
4
- exposes simulator URLs for agents to interact with via plato.sims SDK.
5
-
6
- Usage:
7
- from plato.world import World, WorldConfig, EnvSpec, Observation, StepResult
8
-
9
- class MyWorld(World):
10
- async def _on_reset(self) -> Observation:
11
- return Observation(step=0, date=self.config.start_date, data={})
12
-
13
- async def _on_step(self) -> StepResult:
14
- return StepResult(observation=obs, reward=100.0)
15
-
16
- def get_prompt(self) -> str:
17
- return f"Day {self._current_step}: Do something..."
18
-
19
- config = WorldConfig(
20
- name="my-world",
21
- envs=[EnvSpec(alias="store", simulator="spree")],
22
- num_steps=30,
23
- )
24
-
25
- async with MyWorld(config) as world:
26
- obs = await world.reset()
27
- for _ in range(config.num_steps):
28
- # Agent takes turn using world.get_env_vars()
29
- result = await world.step()
30
- if result.done:
31
- break
32
- """
33
-
34
- from plato.world.base import World
35
- from plato.world.config import EnvSpec, WorldConfig
36
- from plato.world.types import Observation, StepResult
37
-
38
- __all__ = [
39
- "World",
40
- "WorldConfig",
41
- "EnvSpec",
42
- "Observation",
43
- "StepResult",
44
- ]