plato-sdk-v2 2.0.1__tar.gz
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_sdk_v2-2.0.1/.gitignore +23 -0
- plato_sdk_v2-2.0.1/PKG-INFO +283 -0
- plato_sdk_v2-2.0.1/README.md +253 -0
- plato_sdk_v2-2.0.1/plato/__init__.py +37 -0
- plato_sdk_v2-2.0.1/plato/_generated/__init__.py +37 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/__init__.py +8 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/__init__.py +31 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/agent_artifacts/__init__.py +10 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/agent_artifacts/archive_agent_artifact.py +51 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/agent_artifacts/create_agent_artifact.py +53 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/agent_artifacts/get_agent_artifact_by_public_id.py +51 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/agent_artifacts/get_agent_artifacts.py +43 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/cluster/__init__.py +21 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/cluster/cleanup_stale_vms.py +88 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/cluster/get_dispatchers.py +50 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/cluster/get_nodes_status.py +62 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/cluster/get_snapshot_lineage.py +79 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/cluster/get_snapshots_status.py +62 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/cluster/pause_resume_dispatchers.py +94 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/cluster/prefetch_snapshot.py +105 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/env/__init__.py +67 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/env/backup.py +69 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/env/cleanup.py +69 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/env/close.py +69 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/env/close_async.py +69 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/env/create.py +71 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/env/create_batch.py +79 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/env/create_simulator.py +71 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/env/evaluate_session.py +69 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/env/generate_mutations.py +53 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/env/generate_mutations_single.py +53 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/env/get_active_session.py +69 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/env/get_app_sim_worker_info.py +52 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/env/get_cdp_url.py +69 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/env/get_flows.py +69 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/env/get_interface_worker_info.py +69 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/env/get_job_info.py +69 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/env/get_job_status.py +69 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/env/get_job_worker_info.py +52 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/env/get_proxy_url.py +69 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/env/get_public_url.py +99 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/env/get_simulator_by_name.py +69 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/env/get_simulators.py +66 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/env/get_state.py +69 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/env/get_worker_ready.py +87 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/env/log_state_mutation.py +52 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/env/rescore_simulator_sessions.py +69 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/env/reset.py +76 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/env/score.py +76 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/env/send_heartbeat.py +69 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/env/update_simulator.py +76 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/evals/__init__.py +11 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/evals/evaluate_python.py +53 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/evals/get_scores_by_user.py +84 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/evals/get_scoring.py +51 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/evals/human_in_the_loop_scoring.py +58 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/evals/start_eval_from_git.py +53 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/gitea/__init__.py +35 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/gitea/create_gitea_repository.py +71 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/gitea/create_simulator_repository.py +69 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/gitea/delete_gitea_repository.py +74 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/gitea/get_accessible_simulators.py +66 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/gitea/get_gitea_credentials.py +64 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/gitea/get_gitea_repository.py +74 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/gitea/get_my_gitea_info.py +64 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/gitea/get_my_repositories.py +64 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/gitea/get_repository_branches.py +73 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/gitea/get_repository_contents.py +90 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/gitea/get_simulator_file_content.py +86 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/gitea/get_simulator_repository.py +69 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/gitea/get_simulator_repository_branches.py +68 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/gitea/get_simulator_repository_contents.py +85 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/jobs/__init__.py +11 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/jobs/get_job_by_id.py +68 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/jobs/get_jobs_by_group_id.py +68 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/jobs/get_keepalive_jobs.py +63 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/jobs/list_jobs.py +102 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/jobs/update_job_status.py +70 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/organization/__init__.py +33 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/organization/create_annotator_assignment.py +70 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/organization/create_org_api_key.py +76 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/organization/create_org_policy.py +76 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/organization/delete_org_api_key.py +73 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/organization/delete_org_policy.py +73 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/organization/get_annotator_assignments.py +74 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/organization/get_org_api_key_policies.py +74 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/organization/get_org_api_keys.py +69 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/organization/get_org_policies.py +69 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/organization/get_organization_concurrency_status.py +85 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/organization/get_organization_members.py +63 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/organization/update_annotator_assignment_stage.py +82 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/organization/update_organization_concurrency_limit.py +90 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/queue/__init__.py +10 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/queue/get_queue_status.py +56 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/queue/get_vm_detail.py +83 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/queue/get_vms.py +96 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/queue/get_workers.py +87 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/sandbox/__init__.py +29 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/sandbox/checkpoint_vm.py +83 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/sandbox/close_vm.py +69 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/sandbox/create_vm.py +71 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/sandbox/execute_ssh_command.py +82 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/sandbox/get_operation_events.py +68 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/sandbox/healthy_services.py +76 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/sandbox/healthy_worker.py +69 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/sandbox/save_vm_snapshot.py +81 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/sandbox/setup_root_access.py +76 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/sandbox/setup_sandbox.py +76 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/sandbox/start_worker.py +76 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/session/__init__.py +53 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/session/analyze_labels.py +63 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/session/archive_session.py +51 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/session/create_from_labels.py +68 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/session/create_session_from_browser.py +53 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/session/create_session_from_env_recording.py +47 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/session/create_session_from_har.py +45 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/session/get_env_recording.py +57 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/session/get_grouped_replay_sessions.py +45 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/session/get_network_requests.py +51 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/session/get_next_session_for_annotator.py +58 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/session/get_public_benchmark_sessions.py +72 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/session/get_replay_score_data.py +53 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/session/get_rrweb_actions.py +51 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/session/get_rrweb_events.py +51 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/session/get_screen_recording.py +51 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/session/get_session.py +61 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/session/get_session_replays.py +53 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/session/get_sessions.py +43 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/session/get_ui_events.py +51 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/session/score_session_with_config.py +62 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/session/search_sessions_by_ids.py +58 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/session/update_session_public.py +58 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/session/update_session_testcase.py +60 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/simulator/__init__.py +53 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/simulator/add_simulator_review.py +81 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/simulator/batch_create_test_cases.py +76 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/simulator/batch_get_artifact_metadata.py +54 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/simulator/get_all_simulators_info.py +74 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/simulator/get_db_config.py +75 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/simulator/get_env_flows.py +68 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/simulator/get_plato_config.py +69 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/simulator/get_sessions_batch_by_job_groups.py +81 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/simulator/get_sessions_by_job_group.py +86 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/simulator/get_simulator_by_name.py +82 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/simulator/get_simulator_id.py +69 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/simulator/get_simulator_info.py +67 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/simulator/get_simulator_version_details.py +62 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/simulator/get_simulator_versions.py +79 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/simulator/get_start_path.py +83 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/simulator/get_version_by_tag.py +56 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/simulator/list_simulators.py +64 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/simulator/list_simulators_by_org.py +64 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/simulator/list_simulators_status.py +64 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/simulator/register.py +76 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/simulator/update_simulator.py +77 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/simulator/update_simulator_status.py +85 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/simulator/update_tag.py +73 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/testcases/__init__.py +59 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/testcases/archive_organization_test_case_assignments.py +55 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/testcases/archive_organization_testcase.py +55 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/testcases/archive_testcase.py +51 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/testcases/assign_testcase_to_organizations.py +60 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/testcases/bulk_archive_testcases.py +53 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/testcases/convert_text_to_structured_data.py +53 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/testcases/create_testcase.py +53 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/testcases/create_testcase_set.py +53 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/testcases/delete_testcase_set.py +51 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/testcases/filter_human_recorder_testcases.py +84 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/testcases/generate_outcome_schema.py +53 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/testcases/generate_prediction.py +53 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/testcases/generate_prediction_from_steps.py +55 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/testcases/generate_scoring_config_from_sessions.py +61 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/testcases/generate_state_mutations_config_route.py +51 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/testcases/get_human_recorder_tab_counts.py +87 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/testcases/get_human_recorder_testcases.py +84 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/testcases/get_merged_mutations.py +65 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/testcases/get_organization_test_case_assignments.py +79 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/testcases/get_testcase.py +51 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/testcases/get_testcase_sets.py +43 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/testcases/get_testcases.py +154 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/testcases/get_testcases_in_set.py +51 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/testcases/mark_organization_test_case_completed.py +51 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/testcases/update_testcase.py +58 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v1/testcases/version_bump_testcase.py +58 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/__init__.py +8 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/interfaces/__init__.py +27 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/interfaces/v2_interface_browser_create.py +68 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/interfaces/v2_interface_cdp_url.py +65 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/interfaces/v2_interface_click.py +64 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/interfaces/v2_interface_close.py +59 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/interfaces/v2_interface_computer_create.py +68 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/interfaces/v2_interface_cursor.py +64 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/interfaces/v2_interface_key.py +68 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/interfaces/v2_interface_screenshot.py +65 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/interfaces/v2_interface_scroll.py +70 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/interfaces/v2_interface_type.py +64 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/jobs/__init__.py +27 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/jobs/close.py +69 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/jobs/connect_routing_info.py +74 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/jobs/connect_url.py +105 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/jobs/execute.py +76 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/jobs/make.py +72 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/jobs/public_url.py +107 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/jobs/reset.py +76 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/jobs/snapshot.py +69 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/jobs/state.py +69 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/jobs/wait_for_ready.py +105 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/sessions/__init__.py +33 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/sessions/checkpoint.py +81 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/sessions/close.py +69 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/sessions/evaluate.py +69 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/sessions/execute.py +76 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/sessions/get_connect_url.py +99 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/sessions/get_public_url.py +101 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/sessions/heartbeat.py +69 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/sessions/list_jobs.py +69 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/sessions/make.py +79 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/sessions/reset.py +76 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/sessions/snapshot.py +71 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/sessions/state.py +69 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/v2/sessions/wait_for_ready.py +105 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/version/__init__.py +7 -0
- plato_sdk_v2-2.0.1/plato/_generated/api/version/check.py +43 -0
- plato_sdk_v2-2.0.1/plato/_generated/client.py +171 -0
- plato_sdk_v2-2.0.1/plato/_generated/errors.py +141 -0
- plato_sdk_v2-2.0.1/plato/_generated/models/__init__.py +2150 -0
- plato_sdk_v2-2.0.1/plato/_generated/py.typed +0 -0
- plato_sdk_v2-2.0.1/plato/v1/__init__.py +6 -0
- plato_sdk_v2-2.0.1/plato/v1/audit_ui.py +281 -0
- plato_sdk_v2-2.0.1/plato/v1/cli.py +1173 -0
- plato_sdk_v2-2.0.1/plato/v1/config.py +25 -0
- plato_sdk_v2-2.0.1/plato/v1/examples/doordash_tasks.py +540 -0
- plato_sdk_v2-2.0.1/plato/v1/examples/loadtest.py +160 -0
- plato_sdk_v2-2.0.1/plato/v1/examples/test_env.py +128 -0
- plato_sdk_v2-2.0.1/plato/v1/examples/test_env_custom_browser.py +103 -0
- plato_sdk_v2-2.0.1/plato/v1/examples/test_env_sync.py +80 -0
- plato_sdk_v2-2.0.1/plato/v1/examples/test_reuse_env.py +0 -0
- plato_sdk_v2-2.0.1/plato/v1/examples/test_run.py +0 -0
- plato_sdk_v2-2.0.1/plato/v1/exceptions.py +4 -0
- plato_sdk_v2-2.0.1/plato/v1/extensions/envgen-recorder/README.md +223 -0
- plato_sdk_v2-2.0.1/plato/v1/extensions/envgen-recorder/api-client.js +158 -0
- plato_sdk_v2-2.0.1/plato/v1/extensions/envgen-recorder/background.js +1044 -0
- plato_sdk_v2-2.0.1/plato/v1/extensions/envgen-recorder/build-sdk.js +17 -0
- plato_sdk_v2-2.0.1/plato/v1/extensions/envgen-recorder/content.js +446 -0
- plato_sdk_v2-2.0.1/plato/v1/extensions/envgen-recorder/manifest.json +51 -0
- plato_sdk_v2-2.0.1/plato/v1/extensions/envgen-recorder/offscreen.html +10 -0
- plato_sdk_v2-2.0.1/plato/v1/extensions/envgen-recorder/offscreen.js +205 -0
- plato_sdk_v2-2.0.1/plato/v1/extensions/envgen-recorder/options.html +204 -0
- plato_sdk_v2-2.0.1/plato/v1/extensions/envgen-recorder/options.js +101 -0
- plato_sdk_v2-2.0.1/plato/v1/extensions/envgen-recorder/package-lock.json +496 -0
- plato_sdk_v2-2.0.1/plato/v1/extensions/envgen-recorder/package.json +5 -0
- plato_sdk_v2-2.0.1/plato/v1/extensions/envgen-recorder/plato-sdk-bundle.js +7036 -0
- plato_sdk_v2-2.0.1/plato/v1/extensions/envgen-recorder/plato-sdk-bundle.js.map +7 -0
- plato_sdk_v2-2.0.1/plato/v1/extensions/envgen-recorder/popup.html +228 -0
- plato_sdk_v2-2.0.1/plato/v1/extensions/envgen-recorder/popup.js +324 -0
- plato_sdk_v2-2.0.1/plato/v1/extensions/envgen-recorder/review-panel.html +63 -0
- plato_sdk_v2-2.0.1/plato/v1/extensions/envgen-recorder/review-panel.js +216 -0
- plato_sdk_v2-2.0.1/plato/v1/extensions/envgen-recorder/review-success.html +49 -0
- plato_sdk_v2-2.0.1/plato/v1/extensions/envgen-recorder/review-success.js +58 -0
- plato_sdk_v2-2.0.1/plato/v1/extensions/envgen-recorder/session-active.html +63 -0
- plato_sdk_v2-2.0.1/plato/v1/extensions/envgen-recorder/session-active.js +487 -0
- plato_sdk_v2-2.0.1/plato/v1/extensions/envgen-recorder/session-ended.html +54 -0
- plato_sdk_v2-2.0.1/plato/v1/extensions/envgen-recorder/session-ended.js +61 -0
- plato_sdk_v2-2.0.1/plato/v1/extensions/envgen-recorder/session-setup.html +54 -0
- plato_sdk_v2-2.0.1/plato/v1/extensions/envgen-recorder/session-setup.js +101 -0
- plato_sdk_v2-2.0.1/plato/v1/extensions/envgen-recorder/sessions.html +270 -0
- plato_sdk_v2-2.0.1/plato/v1/extensions/envgen-recorder/sessions.js +444 -0
- plato_sdk_v2-2.0.1/plato/v1/extensions/envgen-recorder/styles.css +374 -0
- plato_sdk_v2-2.0.1/plato/v1/flow_executor.py +455 -0
- plato_sdk_v2-2.0.1/plato/v1/models/__init__.py +37 -0
- plato_sdk_v2-2.0.1/plato/v1/models/build_models.py +245 -0
- plato_sdk_v2-2.0.1/plato/v1/models/env.py +771 -0
- plato_sdk_v2-2.0.1/plato/v1/models/flow.py +195 -0
- plato_sdk_v2-2.0.1/plato/v1/models/sandbox.py +143 -0
- plato_sdk_v2-2.0.1/plato/v1/models/task.py +145 -0
- plato_sdk_v2-2.0.1/plato/v1/sandbox_sdk.py +1046 -0
- plato_sdk_v2-2.0.1/plato/v1/sdk.py +852 -0
- plato_sdk_v2-2.0.1/plato/v1/sync_env.py +600 -0
- plato_sdk_v2-2.0.1/plato/v1/sync_flow_executor.py +449 -0
- plato_sdk_v2-2.0.1/plato/v1/sync_sdk.py +689 -0
- plato_sdk_v2-2.0.1/plato/v1/utils/proxytunnel.py +152 -0
- plato_sdk_v2-2.0.1/plato/v2/__init__.py +47 -0
- plato_sdk_v2-2.0.1/plato/v2/async_/__init__.py +11 -0
- plato_sdk_v2-2.0.1/plato/v2/async_/client.py +127 -0
- plato_sdk_v2-2.0.1/plato/v2/async_/environment.py +112 -0
- plato_sdk_v2-2.0.1/plato/v2/async_/session.py +636 -0
- plato_sdk_v2-2.0.1/plato/v2/models.py +61 -0
- plato_sdk_v2-2.0.1/plato/v2/sync/__init__.py +11 -0
- plato_sdk_v2-2.0.1/plato/v2/sync/client.py +127 -0
- plato_sdk_v2-2.0.1/plato/v2/sync/environment.py +117 -0
- plato_sdk_v2-2.0.1/plato/v2/sync/session.py +558 -0
- plato_sdk_v2-2.0.1/plato/v2/types.py +125 -0
- plato_sdk_v2-2.0.1/plato/v2/utils/__init__.py +1 -0
- plato_sdk_v2-2.0.1/plato/v2/utils/db_cleanup.py +225 -0
- plato_sdk_v2-2.0.1/plato/v2/utils/models.py +52 -0
- plato_sdk_v2-2.0.1/plato/v2/utils/proxy_tunnel.py +299 -0
- plato_sdk_v2-2.0.1/pyproject.toml +71 -0
- plato_sdk_v2-2.0.1/tests/__init__.py +1 -0
- plato_sdk_v2-2.0.1/tests/integration/test_cleanup_snapshot.py +143 -0
- plato_sdk_v2-2.0.1/tests/test_v2_multisim_integration.py +233 -0
- plato_sdk_v2-2.0.1/tests/test_v2_session.py +50 -0
- plato_sdk_v2-2.0.1/uv.lock +707 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
__pycache__/
|
|
2
|
+
build/
|
|
3
|
+
dist/
|
|
4
|
+
*.egg-info/
|
|
5
|
+
.pytest_cache/
|
|
6
|
+
|
|
7
|
+
# pyenv
|
|
8
|
+
.python-version
|
|
9
|
+
|
|
10
|
+
# Environments
|
|
11
|
+
.env
|
|
12
|
+
.venv
|
|
13
|
+
|
|
14
|
+
# mypy
|
|
15
|
+
.mypy_cache/
|
|
16
|
+
.dmypy.json
|
|
17
|
+
dmypy.json
|
|
18
|
+
|
|
19
|
+
# JetBrains
|
|
20
|
+
.idea/
|
|
21
|
+
|
|
22
|
+
/coverage.xml
|
|
23
|
+
/.coverage
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: plato-sdk-v2
|
|
3
|
+
Version: 2.0.1
|
|
4
|
+
Summary: Python SDK for the Plato API
|
|
5
|
+
Author-email: Plato <support@plato.so>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Classifier: Development Status :: 4 - Beta
|
|
8
|
+
Classifier: Intended Audience :: Developers
|
|
9
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
10
|
+
Classifier: Programming Language :: Python :: 3
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
+
Classifier: Typing :: Typed
|
|
15
|
+
Requires-Python: >=3.10
|
|
16
|
+
Requires-Dist: httpx>=0.25.0
|
|
17
|
+
Requires-Dist: pydantic>=2.0.0
|
|
18
|
+
Requires-Dist: python-dotenv>=1.2.1
|
|
19
|
+
Provides-Extra: db-cleanup
|
|
20
|
+
Requires-Dist: aiomysql>=0.2; extra == 'db-cleanup'
|
|
21
|
+
Requires-Dist: aiosqlite>=0.20; extra == 'db-cleanup'
|
|
22
|
+
Requires-Dist: asyncpg>=0.29; extra == 'db-cleanup'
|
|
23
|
+
Requires-Dist: sqlalchemy[asyncio]>=2.0; extra == 'db-cleanup'
|
|
24
|
+
Provides-Extra: dev
|
|
25
|
+
Requires-Dist: basedpyright>=1.18; extra == 'dev'
|
|
26
|
+
Requires-Dist: pytest-asyncio>=0.21; extra == 'dev'
|
|
27
|
+
Requires-Dist: pytest>=7.0; extra == 'dev'
|
|
28
|
+
Requires-Dist: ruff>=0.1; extra == 'dev'
|
|
29
|
+
Description-Content-Type: text/markdown
|
|
30
|
+
|
|
31
|
+
# Plato Python SDK
|
|
32
|
+
|
|
33
|
+
Python SDK for the Plato API v2.
|
|
34
|
+
|
|
35
|
+
## Installation
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
pip install plato-sdk
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Quick Start
|
|
42
|
+
|
|
43
|
+
```python
|
|
44
|
+
from plato.v2 import Client, Env
|
|
45
|
+
|
|
46
|
+
# Synchronous usage
|
|
47
|
+
with Client() as client:
|
|
48
|
+
# Create a session with an environment
|
|
49
|
+
with client.session(envs=[Env.artifact("espocrm")]) as session:
|
|
50
|
+
# Batch operations on all environments
|
|
51
|
+
session.reset()
|
|
52
|
+
state = session.get_state()
|
|
53
|
+
|
|
54
|
+
# Per-environment operations
|
|
55
|
+
for env in session.envs:
|
|
56
|
+
result = env.execute("ls -la")
|
|
57
|
+
print(result)
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Environment Configuration
|
|
61
|
+
|
|
62
|
+
The SDK provides three modes for creating environments using the `Env` helper, which returns `EnvConfig` objects:
|
|
63
|
+
|
|
64
|
+
### Mode 1: Simulator with Tag (Default)
|
|
65
|
+
|
|
66
|
+
Start from a snapshotted artifact using "simulator:tag" format:
|
|
67
|
+
|
|
68
|
+
```python
|
|
69
|
+
from plato.v2 import Client, Env
|
|
70
|
+
|
|
71
|
+
with Client() as client:
|
|
72
|
+
# Use default :prod-latest tag
|
|
73
|
+
session = client.session(envs=[Env.artifact("espocrm")])
|
|
74
|
+
# Equivalent to: Env.artifact("espocrm:prod-latest")
|
|
75
|
+
|
|
76
|
+
# Use custom tag
|
|
77
|
+
session = client.session(envs=[Env.artifact("espocrm:staging")])
|
|
78
|
+
|
|
79
|
+
# With custom alias
|
|
80
|
+
session = client.session(envs=[Env.artifact("espocrm", alias="crm")])
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Mode 2: Explicit Artifact ID
|
|
84
|
+
|
|
85
|
+
Start
|
|
86
|
+
from
|
|
87
|
+
a
|
|
88
|
+
specific
|
|
89
|
+
artifact
|
|
90
|
+
snapshot
|
|
91
|
+
using
|
|
92
|
+
its
|
|
93
|
+
ID:
|
|
94
|
+
|
|
95
|
+
```python
|
|
96
|
+
from plato.v2 import Client, Env
|
|
97
|
+
|
|
98
|
+
with Client() as client:
|
|
99
|
+
# Use explicit artifact ID
|
|
100
|
+
session = client.session(envs=[
|
|
101
|
+
Env.artifact(artifact_id="artifact-123", alias="my-env")
|
|
102
|
+
])
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Mode 3: Custom VM Resources
|
|
106
|
+
|
|
107
|
+
Create
|
|
108
|
+
a
|
|
109
|
+
blank
|
|
110
|
+
VM
|
|
111
|
+
with
|
|
112
|
+
custom
|
|
113
|
+
CPU,
|
|
114
|
+
memory,
|
|
115
|
+
and
|
|
116
|
+
disk
|
|
117
|
+
configuration:
|
|
118
|
+
|
|
119
|
+
```python
|
|
120
|
+
from plato.v2 import Client, Env, SimConfigCompute
|
|
121
|
+
|
|
122
|
+
with Client() as client:
|
|
123
|
+
# Create blank VM with custom resources
|
|
124
|
+
session = client.session(envs=[
|
|
125
|
+
Env.resource(
|
|
126
|
+
"redis",
|
|
127
|
+
SimConfigCompute(cpus=4, memory=8192, disk=20000),
|
|
128
|
+
alias="cache"
|
|
129
|
+
)
|
|
130
|
+
])
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Multiple Environments
|
|
134
|
+
|
|
135
|
+
```python
|
|
136
|
+
from plato.v2 import Client, Env, SimConfigCompute
|
|
137
|
+
|
|
138
|
+
with Client() as client:
|
|
139
|
+
# Mix artifact and resource-based environments
|
|
140
|
+
envs = [
|
|
141
|
+
Env.artifact("espocrm", alias="crm"),
|
|
142
|
+
Env.artifact("wordpress:staging", alias="blog"),
|
|
143
|
+
Env.resource("redis", SimConfigCompute(cpus=2, memory=4096), alias="cache"),
|
|
144
|
+
]
|
|
145
|
+
|
|
146
|
+
with client.session.from_envs(envs) as session:
|
|
147
|
+
# Access environments by alias
|
|
148
|
+
crm = session.get_env("crm")
|
|
149
|
+
blog = session.get_env("blog")
|
|
150
|
+
cache = session.get_env("cache")
|
|
151
|
+
|
|
152
|
+
if crm:
|
|
153
|
+
crm.execute("echo 'Hello CRM'")
|
|
154
|
+
if blog:
|
|
155
|
+
blog.execute("echo 'Hello Blog'")
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Create Session from Task
|
|
159
|
+
|
|
160
|
+
```python
|
|
161
|
+
from plato.v2 import Client
|
|
162
|
+
|
|
163
|
+
with Client() as client:
|
|
164
|
+
# Create session from a task ID
|
|
165
|
+
session = client.from_task(task_id=123)
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
## Async Usage
|
|
169
|
+
|
|
170
|
+
```python
|
|
171
|
+
import asyncio
|
|
172
|
+
from plato.v2 import AsyncClient, Env
|
|
173
|
+
|
|
174
|
+
async def main():
|
|
175
|
+
async with AsyncClient() as client:
|
|
176
|
+
async with await client.session(envs=[Env.artifact("espocrm")]) as session:
|
|
177
|
+
await session.reset()
|
|
178
|
+
state = await session.get_state()
|
|
179
|
+
|
|
180
|
+
for env in session.envs:
|
|
181
|
+
result = await env.execute("ls -la")
|
|
182
|
+
print(result)
|
|
183
|
+
|
|
184
|
+
asyncio.run(main())
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
## Session Operations
|
|
188
|
+
|
|
189
|
+
```python
|
|
190
|
+
from plato.v2 import Client, Env
|
|
191
|
+
|
|
192
|
+
with Client() as client:
|
|
193
|
+
with client.session(envs=[Env.artifact("espocrm")]) as session:
|
|
194
|
+
# Reset all environments
|
|
195
|
+
session.reset()
|
|
196
|
+
|
|
197
|
+
# Get state from all environments
|
|
198
|
+
state = session.get_state()
|
|
199
|
+
|
|
200
|
+
# Execute command on all environments
|
|
201
|
+
results = session.execute("ls -la", timeout=30)
|
|
202
|
+
|
|
203
|
+
# Create snapshot of all environments
|
|
204
|
+
snapshots = session.snapshot()
|
|
205
|
+
|
|
206
|
+
# Evaluate session
|
|
207
|
+
evaluation = session.evaluate()
|
|
208
|
+
|
|
209
|
+
# Send heartbeat (automatically done when using context manager)
|
|
210
|
+
session.heartbeat()
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
## Per-Environment Operations
|
|
214
|
+
|
|
215
|
+
```python
|
|
216
|
+
from plato.v2 import Client, Env
|
|
217
|
+
|
|
218
|
+
with Client() as client:
|
|
219
|
+
with client.session(envs=[Env.artifact("espocrm", alias="crm")]) as session:
|
|
220
|
+
# Get specific environment
|
|
221
|
+
env = session.get_env("crm")
|
|
222
|
+
|
|
223
|
+
if env:
|
|
224
|
+
# Execute command
|
|
225
|
+
result = env.execute("pwd")
|
|
226
|
+
print(result.stdout)
|
|
227
|
+
|
|
228
|
+
# Reset environment
|
|
229
|
+
env.reset()
|
|
230
|
+
|
|
231
|
+
# Create snapshot
|
|
232
|
+
snapshot = env.snapshot()
|
|
233
|
+
|
|
234
|
+
# Get state
|
|
235
|
+
state = env.get_state()
|
|
236
|
+
|
|
237
|
+
# Close environment
|
|
238
|
+
env.close()
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
## Configuration
|
|
242
|
+
|
|
243
|
+
Set
|
|
244
|
+
your
|
|
245
|
+
API
|
|
246
|
+
key
|
|
247
|
+
via
|
|
248
|
+
environment
|
|
249
|
+
variable:
|
|
250
|
+
|
|
251
|
+
```bash
|
|
252
|
+
export PLATO_API_KEY=your-api-key
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
Or
|
|
256
|
+
pass
|
|
257
|
+
it
|
|
258
|
+
directly:
|
|
259
|
+
|
|
260
|
+
```python
|
|
261
|
+
from plato.v2 import Client
|
|
262
|
+
|
|
263
|
+
client = Client(api_key="your-api-key")
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
Configure
|
|
267
|
+
custom
|
|
268
|
+
base
|
|
269
|
+
URL:
|
|
270
|
+
|
|
271
|
+
```bash
|
|
272
|
+
export PLATO_BASE_URL=https://custom.plato.so
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
Or:
|
|
276
|
+
|
|
277
|
+
```python
|
|
278
|
+
client = Client(base_url="https://custom.plato.so")
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
## License
|
|
282
|
+
|
|
283
|
+
MIT
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
# Plato Python SDK
|
|
2
|
+
|
|
3
|
+
Python SDK for the Plato API v2.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pip install plato-sdk
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Quick Start
|
|
12
|
+
|
|
13
|
+
```python
|
|
14
|
+
from plato.v2 import Client, Env
|
|
15
|
+
|
|
16
|
+
# Synchronous usage
|
|
17
|
+
with Client() as client:
|
|
18
|
+
# Create a session with an environment
|
|
19
|
+
with client.session(envs=[Env.artifact("espocrm")]) as session:
|
|
20
|
+
# Batch operations on all environments
|
|
21
|
+
session.reset()
|
|
22
|
+
state = session.get_state()
|
|
23
|
+
|
|
24
|
+
# Per-environment operations
|
|
25
|
+
for env in session.envs:
|
|
26
|
+
result = env.execute("ls -la")
|
|
27
|
+
print(result)
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Environment Configuration
|
|
31
|
+
|
|
32
|
+
The SDK provides three modes for creating environments using the `Env` helper, which returns `EnvConfig` objects:
|
|
33
|
+
|
|
34
|
+
### Mode 1: Simulator with Tag (Default)
|
|
35
|
+
|
|
36
|
+
Start from a snapshotted artifact using "simulator:tag" format:
|
|
37
|
+
|
|
38
|
+
```python
|
|
39
|
+
from plato.v2 import Client, Env
|
|
40
|
+
|
|
41
|
+
with Client() as client:
|
|
42
|
+
# Use default :prod-latest tag
|
|
43
|
+
session = client.session(envs=[Env.artifact("espocrm")])
|
|
44
|
+
# Equivalent to: Env.artifact("espocrm:prod-latest")
|
|
45
|
+
|
|
46
|
+
# Use custom tag
|
|
47
|
+
session = client.session(envs=[Env.artifact("espocrm:staging")])
|
|
48
|
+
|
|
49
|
+
# With custom alias
|
|
50
|
+
session = client.session(envs=[Env.artifact("espocrm", alias="crm")])
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Mode 2: Explicit Artifact ID
|
|
54
|
+
|
|
55
|
+
Start
|
|
56
|
+
from
|
|
57
|
+
a
|
|
58
|
+
specific
|
|
59
|
+
artifact
|
|
60
|
+
snapshot
|
|
61
|
+
using
|
|
62
|
+
its
|
|
63
|
+
ID:
|
|
64
|
+
|
|
65
|
+
```python
|
|
66
|
+
from plato.v2 import Client, Env
|
|
67
|
+
|
|
68
|
+
with Client() as client:
|
|
69
|
+
# Use explicit artifact ID
|
|
70
|
+
session = client.session(envs=[
|
|
71
|
+
Env.artifact(artifact_id="artifact-123", alias="my-env")
|
|
72
|
+
])
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Mode 3: Custom VM Resources
|
|
76
|
+
|
|
77
|
+
Create
|
|
78
|
+
a
|
|
79
|
+
blank
|
|
80
|
+
VM
|
|
81
|
+
with
|
|
82
|
+
custom
|
|
83
|
+
CPU,
|
|
84
|
+
memory,
|
|
85
|
+
and
|
|
86
|
+
disk
|
|
87
|
+
configuration:
|
|
88
|
+
|
|
89
|
+
```python
|
|
90
|
+
from plato.v2 import Client, Env, SimConfigCompute
|
|
91
|
+
|
|
92
|
+
with Client() as client:
|
|
93
|
+
# Create blank VM with custom resources
|
|
94
|
+
session = client.session(envs=[
|
|
95
|
+
Env.resource(
|
|
96
|
+
"redis",
|
|
97
|
+
SimConfigCompute(cpus=4, memory=8192, disk=20000),
|
|
98
|
+
alias="cache"
|
|
99
|
+
)
|
|
100
|
+
])
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Multiple Environments
|
|
104
|
+
|
|
105
|
+
```python
|
|
106
|
+
from plato.v2 import Client, Env, SimConfigCompute
|
|
107
|
+
|
|
108
|
+
with Client() as client:
|
|
109
|
+
# Mix artifact and resource-based environments
|
|
110
|
+
envs = [
|
|
111
|
+
Env.artifact("espocrm", alias="crm"),
|
|
112
|
+
Env.artifact("wordpress:staging", alias="blog"),
|
|
113
|
+
Env.resource("redis", SimConfigCompute(cpus=2, memory=4096), alias="cache"),
|
|
114
|
+
]
|
|
115
|
+
|
|
116
|
+
with client.session.from_envs(envs) as session:
|
|
117
|
+
# Access environments by alias
|
|
118
|
+
crm = session.get_env("crm")
|
|
119
|
+
blog = session.get_env("blog")
|
|
120
|
+
cache = session.get_env("cache")
|
|
121
|
+
|
|
122
|
+
if crm:
|
|
123
|
+
crm.execute("echo 'Hello CRM'")
|
|
124
|
+
if blog:
|
|
125
|
+
blog.execute("echo 'Hello Blog'")
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Create Session from Task
|
|
129
|
+
|
|
130
|
+
```python
|
|
131
|
+
from plato.v2 import Client
|
|
132
|
+
|
|
133
|
+
with Client() as client:
|
|
134
|
+
# Create session from a task ID
|
|
135
|
+
session = client.from_task(task_id=123)
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Async Usage
|
|
139
|
+
|
|
140
|
+
```python
|
|
141
|
+
import asyncio
|
|
142
|
+
from plato.v2 import AsyncClient, Env
|
|
143
|
+
|
|
144
|
+
async def main():
|
|
145
|
+
async with AsyncClient() as client:
|
|
146
|
+
async with await client.session(envs=[Env.artifact("espocrm")]) as session:
|
|
147
|
+
await session.reset()
|
|
148
|
+
state = await session.get_state()
|
|
149
|
+
|
|
150
|
+
for env in session.envs:
|
|
151
|
+
result = await env.execute("ls -la")
|
|
152
|
+
print(result)
|
|
153
|
+
|
|
154
|
+
asyncio.run(main())
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## Session Operations
|
|
158
|
+
|
|
159
|
+
```python
|
|
160
|
+
from plato.v2 import Client, Env
|
|
161
|
+
|
|
162
|
+
with Client() as client:
|
|
163
|
+
with client.session(envs=[Env.artifact("espocrm")]) as session:
|
|
164
|
+
# Reset all environments
|
|
165
|
+
session.reset()
|
|
166
|
+
|
|
167
|
+
# Get state from all environments
|
|
168
|
+
state = session.get_state()
|
|
169
|
+
|
|
170
|
+
# Execute command on all environments
|
|
171
|
+
results = session.execute("ls -la", timeout=30)
|
|
172
|
+
|
|
173
|
+
# Create snapshot of all environments
|
|
174
|
+
snapshots = session.snapshot()
|
|
175
|
+
|
|
176
|
+
# Evaluate session
|
|
177
|
+
evaluation = session.evaluate()
|
|
178
|
+
|
|
179
|
+
# Send heartbeat (automatically done when using context manager)
|
|
180
|
+
session.heartbeat()
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## Per-Environment Operations
|
|
184
|
+
|
|
185
|
+
```python
|
|
186
|
+
from plato.v2 import Client, Env
|
|
187
|
+
|
|
188
|
+
with Client() as client:
|
|
189
|
+
with client.session(envs=[Env.artifact("espocrm", alias="crm")]) as session:
|
|
190
|
+
# Get specific environment
|
|
191
|
+
env = session.get_env("crm")
|
|
192
|
+
|
|
193
|
+
if env:
|
|
194
|
+
# Execute command
|
|
195
|
+
result = env.execute("pwd")
|
|
196
|
+
print(result.stdout)
|
|
197
|
+
|
|
198
|
+
# Reset environment
|
|
199
|
+
env.reset()
|
|
200
|
+
|
|
201
|
+
# Create snapshot
|
|
202
|
+
snapshot = env.snapshot()
|
|
203
|
+
|
|
204
|
+
# Get state
|
|
205
|
+
state = env.get_state()
|
|
206
|
+
|
|
207
|
+
# Close environment
|
|
208
|
+
env.close()
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
## Configuration
|
|
212
|
+
|
|
213
|
+
Set
|
|
214
|
+
your
|
|
215
|
+
API
|
|
216
|
+
key
|
|
217
|
+
via
|
|
218
|
+
environment
|
|
219
|
+
variable:
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
export PLATO_API_KEY=your-api-key
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
Or
|
|
226
|
+
pass
|
|
227
|
+
it
|
|
228
|
+
directly:
|
|
229
|
+
|
|
230
|
+
```python
|
|
231
|
+
from plato.v2 import Client
|
|
232
|
+
|
|
233
|
+
client = Client(api_key="your-api-key")
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
Configure
|
|
237
|
+
custom
|
|
238
|
+
base
|
|
239
|
+
URL:
|
|
240
|
+
|
|
241
|
+
```bash
|
|
242
|
+
export PLATO_BASE_URL=https://custom.plato.so
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
Or:
|
|
246
|
+
|
|
247
|
+
```python
|
|
248
|
+
client = Client(base_url="https://custom.plato.so")
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
## License
|
|
252
|
+
|
|
253
|
+
MIT
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Plato SDK
|
|
2
|
+
#
|
|
3
|
+
# v1: Legacy SDK (deprecated)
|
|
4
|
+
# v2: New SDK with separate sync/async modules
|
|
5
|
+
#
|
|
6
|
+
# Usage (v2 - recommended):
|
|
7
|
+
# from plato.v2.sync import Client
|
|
8
|
+
# from plato.v2.async_ import Client
|
|
9
|
+
# from plato import EnvOption
|
|
10
|
+
#
|
|
11
|
+
# Usage (v1 - deprecated):
|
|
12
|
+
# from plato import Plato, SyncPlato
|
|
13
|
+
|
|
14
|
+
# Defer imports to avoid circular issues with _generated
|
|
15
|
+
__all__ = ["EnvOption", "v2"]
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def __getattr__(name):
|
|
19
|
+
"""Lazy import to avoid loading all modules at once."""
|
|
20
|
+
if name == "v2":
|
|
21
|
+
from plato import v2
|
|
22
|
+
|
|
23
|
+
return v2
|
|
24
|
+
if name == "EnvOption":
|
|
25
|
+
from plato._generated.models.env_option import EnvOption
|
|
26
|
+
|
|
27
|
+
return EnvOption
|
|
28
|
+
if name in ("Plato", "SyncPlato", "PlatoTask", "v1"):
|
|
29
|
+
try:
|
|
30
|
+
from plato import v1
|
|
31
|
+
|
|
32
|
+
if name == "v1":
|
|
33
|
+
return v1
|
|
34
|
+
return getattr(v1, name)
|
|
35
|
+
except ImportError:
|
|
36
|
+
raise AttributeError(f"module 'plato' has no attribute '{name}' (v1 unavailable)")
|
|
37
|
+
raise AttributeError(f"module 'plato' has no attribute '{name}'")
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"""Plato API SDK - v0.13.10"""
|
|
2
|
+
|
|
3
|
+
from . import api, errors, models
|
|
4
|
+
from .client import AsyncClient, Client
|
|
5
|
+
from .errors import (
|
|
6
|
+
APIError,
|
|
7
|
+
BadRequestError,
|
|
8
|
+
ConflictError,
|
|
9
|
+
ForbiddenError,
|
|
10
|
+
InternalServerError,
|
|
11
|
+
NotFoundError,
|
|
12
|
+
RateLimitError,
|
|
13
|
+
ServiceUnavailableError,
|
|
14
|
+
UnauthorizedError,
|
|
15
|
+
UnprocessableEntityError,
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
__all__ = [
|
|
19
|
+
# Clients
|
|
20
|
+
"Client",
|
|
21
|
+
"AsyncClient",
|
|
22
|
+
# Modules
|
|
23
|
+
"api",
|
|
24
|
+
"models",
|
|
25
|
+
"errors",
|
|
26
|
+
# Error types for convenience
|
|
27
|
+
"APIError",
|
|
28
|
+
"BadRequestError",
|
|
29
|
+
"UnauthorizedError",
|
|
30
|
+
"ForbiddenError",
|
|
31
|
+
"NotFoundError",
|
|
32
|
+
"ConflictError",
|
|
33
|
+
"UnprocessableEntityError",
|
|
34
|
+
"RateLimitError",
|
|
35
|
+
"InternalServerError",
|
|
36
|
+
"ServiceUnavailableError",
|
|
37
|
+
]
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"""API version module."""
|
|
2
|
+
|
|
3
|
+
from . import (
|
|
4
|
+
agent_artifacts,
|
|
5
|
+
cluster,
|
|
6
|
+
env,
|
|
7
|
+
evals,
|
|
8
|
+
gitea,
|
|
9
|
+
jobs,
|
|
10
|
+
organization,
|
|
11
|
+
queue,
|
|
12
|
+
sandbox,
|
|
13
|
+
session,
|
|
14
|
+
simulator,
|
|
15
|
+
testcases,
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
__all__ = [
|
|
19
|
+
"agent_artifacts",
|
|
20
|
+
"cluster",
|
|
21
|
+
"env",
|
|
22
|
+
"evals",
|
|
23
|
+
"gitea",
|
|
24
|
+
"jobs",
|
|
25
|
+
"organization",
|
|
26
|
+
"queue",
|
|
27
|
+
"sandbox",
|
|
28
|
+
"session",
|
|
29
|
+
"simulator",
|
|
30
|
+
"testcases",
|
|
31
|
+
]
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"""API endpoints."""
|
|
2
|
+
|
|
3
|
+
from . import archive_agent_artifact, create_agent_artifact, get_agent_artifact_by_public_id, get_agent_artifacts
|
|
4
|
+
|
|
5
|
+
__all__ = [
|
|
6
|
+
"get_agent_artifacts",
|
|
7
|
+
"create_agent_artifact",
|
|
8
|
+
"get_agent_artifact_by_public_id",
|
|
9
|
+
"archive_agent_artifact",
|
|
10
|
+
]
|