runloop-api-client 1.1.0__tar.gz → 1.3.0__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.
- runloop_api_client-1.3.0/.release-please-manifest.json +3 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/CHANGELOG.md +77 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/LICENSE +1 -1
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/PKG-INFO +8 -5
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/README-SDK.md +19 -27
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/README.md +4 -3
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/api.md +45 -17
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/pyproject.toml +13 -44
- runloop_api_client-1.3.0/requirements-dev.lock +125 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/_base_client.py +143 -14
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/_client.py +87 -2
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/_models.py +16 -1
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/_streaming.py +32 -32
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/_types.py +12 -2
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/_version.py +1 -1
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/pagination.py +75 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/resources/__init__.py +28 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/resources/agents.py +18 -2
- runloop_api_client-1.1.0/src/runloop_api_client/resources/benchmarks/runs.py → runloop_api_client-1.3.0/src/runloop_api_client/resources/benchmark_runs.py +79 -71
- {runloop_api_client-1.1.0/src/runloop_api_client/resources/benchmarks → runloop_api_client-1.3.0/src/runloop_api_client/resources}/benchmarks.py +183 -80
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/resources/blueprints.py +66 -8
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/resources/devboxes/devboxes.py +14 -14
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/resources/devboxes/disk_snapshots.py +2 -2
- runloop_api_client-1.3.0/src/runloop_api_client/resources/network_policies.py +680 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/resources/objects.py +4 -4
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/resources/repositories.py +2 -2
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/resources/scenarios/runs.py +26 -2
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/resources/scenarios/scenarios.py +34 -24
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/resources/scenarios/scorers.py +2 -2
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/resources/secrets.py +2 -2
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/sdk/__init__.py +36 -1
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/sdk/_types.py +90 -19
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/sdk/agent.py +4 -6
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/sdk/async_.py +151 -30
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/sdk/async_agent.py +0 -6
- runloop_api_client-1.3.0/src/runloop_api_client/sdk/async_benchmark.py +169 -0
- runloop_api_client-1.3.0/src/runloop_api_client/sdk/async_benchmark_run.py +127 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/sdk/async_devbox.py +22 -4
- runloop_api_client-1.3.0/src/runloop_api_client/sdk/async_network_policy.py +80 -0
- runloop_api_client-1.3.0/src/runloop_api_client/sdk/async_scenario_builder.py +480 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/sdk/async_scorer.py +1 -1
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/sdk/async_storage_object.py +2 -2
- runloop_api_client-1.3.0/src/runloop_api_client/sdk/benchmark.py +167 -0
- runloop_api_client-1.3.0/src/runloop_api_client/sdk/benchmark_run.py +127 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/sdk/devbox.py +20 -7
- runloop_api_client-1.3.0/src/runloop_api_client/sdk/network_policy.py +80 -0
- runloop_api_client-1.3.0/src/runloop_api_client/sdk/scenario_builder.py +480 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/sdk/scorer.py +1 -1
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/sdk/storage_object.py +2 -2
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/sdk/sync.py +158 -33
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/__init__.py +12 -2
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/agent_create_params.py +3 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/agent_list_params.py +4 -1
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/agent_list_view.py +2 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/agent_view.py +5 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/benchmark_create_params.py +3 -3
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/benchmark_definitions_params.py +1 -1
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/benchmark_list_params.py +4 -1
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/benchmark_list_public_params.py +1 -1
- runloop_api_client-1.1.0/src/runloop_api_client/types/benchmarks/run_list_params.py → runloop_api_client-1.3.0/src/runloop_api_client/types/benchmark_run_list_params.py +6 -3
- runloop_api_client-1.1.0/src/runloop_api_client/types/benchmarks/run_list_scenario_runs_params.py → runloop_api_client-1.3.0/src/runloop_api_client/types/benchmark_run_list_scenario_runs_params.py +3 -3
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/benchmark_run_view.py +10 -3
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/benchmark_start_run_params.py +8 -4
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/benchmark_update_params.py +13 -11
- runloop_api_client-1.3.0/src/runloop_api_client/types/benchmark_update_scenarios_params.py +18 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/benchmark_view.py +4 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/blueprint_build_parameters.py +13 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/blueprint_create_from_inspection_params.py +6 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/blueprint_create_params.py +13 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/blueprint_list_params.py +4 -1
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/blueprint_list_public_params.py +4 -1
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/blueprint_preview_params.py +13 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/blueprint_view.py +7 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devbox_create_ssh_key_response.py +3 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devbox_execute_params.py +2 -2
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devbox_list_disk_snapshots_params.py +1 -1
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devbox_list_params.py +1 -1
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devbox_view.py +6 -1
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devbox_wait_for_command_params.py +2 -2
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devboxes/browser_view.py +4 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devboxes/computer_create_params.py +2 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devboxes/computer_mouse_interaction_params.py +5 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devboxes/computer_view.py +4 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devboxes/disk_snapshot_list_params.py +1 -1
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/input_context.py +4 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/input_context_param.py +4 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/inspection_source_param.py +2 -0
- runloop_api_client-1.3.0/src/runloop_api_client/types/network_policy_create_params.py +40 -0
- runloop_api_client-1.3.0/src/runloop_api_client/types/network_policy_list_params.py +21 -0
- runloop_api_client-1.3.0/src/runloop_api_client/types/network_policy_list_view.py +21 -0
- runloop_api_client-1.3.0/src/runloop_api_client/types/network_policy_update_params.py +30 -0
- runloop_api_client-1.3.0/src/runloop_api_client/types/network_policy_view.py +52 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/object_download_url_view.py +2 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/object_list_params.py +1 -1
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/object_list_public_params.py +1 -1
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/object_list_view.py +2 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/object_view.py +2 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/repository_connection_view.py +2 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/repository_inspection_details.py +6 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/repository_list_params.py +1 -1
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/repository_manifest_view.py +16 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/scenario_environment.py +4 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/scenario_environment_param.py +4 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/scenario_list_params.py +4 -1
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/scenario_list_public_params.py +1 -1
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/scenario_run_view.py +5 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/scenario_update_params.py +9 -6
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/scenario_view.py +4 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/scenarios/run_list_params.py +10 -1
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/scenarios/scorer_create_response.py +2 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/scenarios/scorer_list_params.py +1 -1
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/scenarios/scorer_list_response.py +2 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/scenarios/scorer_retrieve_response.py +2 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/scenarios/scorer_update_response.py +2 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/scoring_contract.py +4 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/scoring_contract_param.py +4 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/scoring_contract_result_view.py +4 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/scoring_function.py +22 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/scoring_function_param.py +22 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/scoring_function_result_view.py +4 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/secret_list_params.py +1 -1
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/secret_list_view.py +2 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/secret_view.py +4 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/shared/__init__.py +2 -2
- runloop_api_client-1.1.0/src/runloop_api_client/types/shared/agent_mount_parameters.py → runloop_api_client-1.3.0/src/runloop_api_client/types/shared/agent_mount.py +2 -2
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/shared/agent_source.py +10 -6
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/shared/code_mount_parameters.py +0 -3
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/shared/launch_parameters.py +17 -1
- runloop_api_client-1.3.0/src/runloop_api_client/types/shared/mount.py +43 -0
- runloop_api_client-1.1.0/src/runloop_api_client/types/shared/object_mount_parameters.py → runloop_api_client-1.3.0/src/runloop_api_client/types/shared/object_mount.py +2 -2
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/shared_params/__init__.py +2 -2
- runloop_api_client-1.1.0/src/runloop_api_client/types/shared_params/agent_mount_parameters.py → runloop_api_client-1.3.0/src/runloop_api_client/types/shared_params/agent_mount.py +2 -2
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/shared_params/agent_source.py +10 -6
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/shared_params/code_mount_parameters.py +1 -3
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/shared_params/launch_parameters.py +17 -1
- runloop_api_client-1.3.0/src/runloop_api_client/types/shared_params/mount.py +43 -0
- runloop_api_client-1.1.0/src/runloop_api_client/types/shared_params/object_mount_parameters.py → runloop_api_client-1.3.0/src/runloop_api_client/types/shared_params/object_mount.py +2 -2
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/api_resources/scenarios/test_runs.py +6 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/api_resources/scenarios/test_scorers.py +2 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/api_resources/test_agents.py +10 -4
- runloop_api_client-1.1.0/tests/api_resources/benchmarks/test_runs.py → runloop_api_client-1.3.0/tests/api_resources/test_benchmark_runs.py +104 -99
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/api_resources/test_benchmarks.py +100 -10
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/api_resources/test_blueprints.py +16 -4
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/api_resources/test_devboxes.py +2 -2
- runloop_api_client-1.3.0/tests/api_resources/test_network_policies.py +433 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/api_resources/test_scenarios.py +8 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/sdk/async_devbox/test_core.py +62 -31
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/sdk/async_devbox/test_edge_cases.py +1 -1
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/sdk/async_devbox/test_interfaces.py +19 -19
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/sdk/async_devbox/test_streaming.py +10 -10
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/sdk/conftest.py +97 -18
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/sdk/devbox/test_core.py +59 -33
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/sdk/devbox/test_edge_cases.py +11 -11
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/sdk/devbox/test_interfaces.py +37 -37
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/sdk/devbox/test_streaming.py +12 -12
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/sdk/test_agent.py +6 -6
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/sdk/test_async_agent.py +6 -6
- runloop_api_client-1.3.0/tests/sdk/test_async_benchmark.py +130 -0
- runloop_api_client-1.3.0/tests/sdk/test_async_benchmark_run.py +120 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/sdk/test_async_blueprint.py +9 -9
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/sdk/test_async_execution.py +39 -38
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/sdk/test_async_execution_result.py +51 -51
- runloop_api_client-1.3.0/tests/sdk/test_async_network_policy.py +90 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/sdk/test_async_ops.py +219 -67
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/sdk/test_async_scenario.py +4 -4
- runloop_api_client-1.3.0/tests/sdk/test_async_scenario_builder.py +292 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/sdk/test_async_scenario_run.py +29 -29
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/sdk/test_async_scorer.py +8 -8
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/sdk/test_async_snapshot.py +11 -11
- runloop_api_client-1.3.0/tests/sdk/test_benchmark.py +122 -0
- runloop_api_client-1.3.0/tests/sdk/test_benchmark_run.py +114 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/sdk/test_blueprint.py +13 -13
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/sdk/test_execution.py +39 -38
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/sdk/test_execution_result.py +51 -51
- runloop_api_client-1.3.0/tests/sdk/test_network_policy.py +106 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/sdk/test_ops.py +225 -73
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/sdk/test_scenario.py +4 -4
- runloop_api_client-1.3.0/tests/sdk/test_scenario_builder.py +287 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/sdk/test_scenario_run.py +29 -29
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/sdk/test_scorer.py +11 -11
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/sdk/test_snapshot.py +16 -16
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/smoketests/sdk/conftest.py +7 -7
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/smoketests/sdk/test_agent.py +17 -4
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/smoketests/sdk/test_async_agent.py +11 -4
- runloop_api_client-1.3.0/tests/smoketests/sdk/test_async_benchmark.py +192 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/smoketests/sdk/test_async_blueprint.py +10 -10
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/smoketests/sdk/test_async_devbox.py +45 -8
- runloop_api_client-1.3.0/tests/smoketests/sdk/test_async_network_policy.py +210 -0
- runloop_api_client-1.3.0/tests/smoketests/sdk/test_async_scenario.py +260 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/smoketests/sdk/test_async_sdk.py +4 -1
- runloop_api_client-1.3.0/tests/smoketests/sdk/test_benchmark.py +190 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/smoketests/sdk/test_blueprint.py +10 -10
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/smoketests/sdk/test_devbox.py +40 -3
- runloop_api_client-1.3.0/tests/smoketests/sdk/test_network_policy.py +210 -0
- runloop_api_client-1.3.0/tests/smoketests/sdk/test_scenario.py +259 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/smoketests/sdk/test_sdk.py +4 -1
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/smoketests/test_snapshots.py +1 -1
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/test_client.py +185 -2
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/uv.lock +470 -404
- runloop_api_client-1.1.0/.release-please-manifest.json +0 -3
- runloop_api_client-1.1.0/requirements-dev.lock +0 -94
- runloop_api_client-1.1.0/src/runloop_api_client/resources/benchmarks/__init__.py +0 -33
- runloop_api_client-1.1.0/src/runloop_api_client/types/benchmarks/__init__.py +0 -6
- runloop_api_client-1.1.0/src/runloop_api_client/types/shared/mount.py +0 -28
- runloop_api_client-1.1.0/src/runloop_api_client/types/shared_params/mount.py +0 -25
- runloop_api_client-1.1.0/tests/api_resources/scenarios/__init__.py +0 -1
- runloop_api_client-1.1.0/tests/smoketests/sdk/test_async_scenario.py +0 -126
- runloop_api_client-1.1.0/tests/smoketests/sdk/test_scenario.py +0 -126
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/.gitignore +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/CONTRIBUTING.md +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/SECURITY.md +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/bin/check-release-environment +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/bin/publish-pypi +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/examples/.keep +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/release-please-config.json +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop/lib/.keep +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/__init__.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/_compat.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/_constants.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/_exceptions.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/_files.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/_qs.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/_resource.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/_response.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/_utils/__init__.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/_utils/_compat.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/_utils/_datetime_parse.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/_utils/_logs.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/_utils/_proxy.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/_utils/_reflection.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/_utils/_resources_proxy.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/_utils/_streams.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/_utils/_sync.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/_utils/_transform.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/_utils/_typing.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/_utils/_utils.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/_utils/_validation.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/lib/.keep +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/lib/__init__.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/lib/_ignore.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/lib/context_loader.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/lib/polling.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/lib/polling_async.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/py.typed +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/resources/devboxes/__init__.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/resources/devboxes/browsers.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/resources/devboxes/computers.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/resources/devboxes/executions.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/resources/devboxes/logs.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/resources/scenarios/__init__.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/sdk/_helpers.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/sdk/async_blueprint.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/sdk/async_execution.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/sdk/async_execution_result.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/sdk/async_scenario.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/sdk/async_scenario_run.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/sdk/async_snapshot.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/sdk/blueprint.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/sdk/execution.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/sdk/execution_result.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/sdk/scenario.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/sdk/scenario_run.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/sdk/snapshot.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/benchmark_run_list_view.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/blueprint_build_log.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/blueprint_build_logs_list_view.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/blueprint_list_view.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/blueprint_preview_view.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devbox_async_execution_detail_view.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devbox_create_params.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devbox_create_tunnel_params.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devbox_download_file_params.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devbox_execute_async_params.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devbox_execute_sync_params.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devbox_execution_detail_view.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devbox_list_view.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devbox_read_file_contents_params.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devbox_read_file_contents_response.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devbox_remove_tunnel_params.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devbox_send_std_in_result.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devbox_snapshot_disk_async_params.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devbox_snapshot_disk_params.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devbox_snapshot_list_view.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devbox_snapshot_view.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devbox_tunnel_view.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devbox_update_params.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devbox_upload_file_params.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devbox_write_file_contents_params.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devboxes/__init__.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devboxes/browser_create_params.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devboxes/computer_keyboard_interaction_params.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devboxes/computer_keyboard_interaction_response.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devboxes/computer_mouse_interaction_response.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devboxes/computer_screen_interaction_params.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devboxes/computer_screen_interaction_response.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devboxes/devbox_logs_list_view.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devboxes/devbox_snapshot_async_status_view.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devboxes/disk_snapshot_update_params.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devboxes/execution_execute_async_params.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devboxes/execution_execute_sync_params.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devboxes/execution_kill_params.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devboxes/execution_retrieve_params.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devboxes/execution_send_std_in_params.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devboxes/execution_stream_stderr_updates_params.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devboxes/execution_stream_stdout_updates_params.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devboxes/execution_update_chunk.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/devboxes/log_list_params.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/input_context_update_param.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/object_create_params.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/object_download_params.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/repository_connection_list_view.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/repository_create_params.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/repository_inspect_params.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/repository_inspection_list_view.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/repository_refresh_params.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/scenario_create_params.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/scenario_definition_list_view.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/scenario_run_list_view.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/scenario_start_run_params.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/scenarios/__init__.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/scenarios/scorer_create_params.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/scenarios/scorer_update_params.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/scenarios/scorer_validate_params.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/scenarios/scorer_validate_response.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/scoring_contract_update_param.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/secret_create_params.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/secret_update_params.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/shared/after_idle.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/shared/run_profile.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/shared_params/after_idle.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/src/runloop_api_client/types/shared_params/run_profile.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/__init__.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/api_resources/__init__.py +0 -0
- {runloop_api_client-1.1.0/tests/api_resources/benchmarks → runloop_api_client-1.3.0/tests/api_resources/devboxes}/__init__.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/api_resources/devboxes/test_browsers.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/api_resources/devboxes/test_computers.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/api_resources/devboxes/test_disk_snapshots.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/api_resources/devboxes/test_executions.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/api_resources/devboxes/test_logs.py +0 -0
- {runloop_api_client-1.1.0/tests/api_resources/devboxes → runloop_api_client-1.3.0/tests/api_resources/scenarios}/__init__.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/api_resources/test_objects.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/api_resources/test_repositories.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/api_resources/test_secrets.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/conftest.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/sample_file.txt +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/sdk/__init__.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/sdk/async_devbox/__init__.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/sdk/async_devbox/conftest.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/sdk/devbox/__init__.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/sdk/devbox/conftest.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/sdk/test_async_storage_object.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/sdk/test_helpers.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/sdk/test_storage_object.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/smoketests/README.md +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/smoketests/__init__.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/smoketests/conftest.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/smoketests/sdk/README.md +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/smoketests/sdk/__init__.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/smoketests/sdk/test_async_scorer.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/smoketests/sdk/test_async_snapshot.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/smoketests/sdk/test_async_storage_object.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/smoketests/sdk/test_scorer.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/smoketests/sdk/test_snapshot.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/smoketests/sdk/test_storage_object.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/smoketests/test_blueprints.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/smoketests/test_devboxes.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/smoketests/test_executions.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/smoketests/test_scenarios_benchmarks.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/smoketests/utils.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/test_deepcopy.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/test_extract_files.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/test_files.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/test_models.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/test_polling.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/test_qs.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/test_required_args.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/test_response.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/test_streaming.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/test_transform.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/test_utils/test_context_loader.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/test_utils/test_datetime_parse.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/test_utils/test_proxy.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/test_utils/test_typing.py +0 -0
- {runloop_api_client-1.1.0 → runloop_api_client-1.3.0}/tests/utils.py +0 -0
|
@@ -1,5 +1,82 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.3.0 (2026-01-22)
|
|
4
|
+
|
|
5
|
+
Full Changelog: [v1.3.0-alpha...v1.3.0](https://github.com/runloopai/api-client-python/compare/v1.3.0-alpha...v1.3.0)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
* **network-policy:** add network policies ([#720](https://github.com/runloopai/api-client-python/issues/720)) ([9b31116](https://github.com/runloopai/api-client-python/commit/9b311168fcda2554f8ea03c9698c1e284dc1bdba))
|
|
10
|
+
* **benchmarks:** add `update_scenarios` method to benchmarks resource ([71ec221](https://github.com/runloopai/api-client-python/commit/71ec221f1d0cad7aac33c0299d3f8b1aa97d0741))
|
|
11
|
+
* **blueprint:** Set cilium network policy on blueprint build ([#7006](https://github.com/runloopai/api-client-python/issues/7006)) ([95c62ac](https://github.com/runloopai/api-client-python/commit/95c62ac1e2689acdd83cac2dc85f1a639490d982))
|
|
12
|
+
* **client:** add support for binary request streaming ([d6c2200](https://github.com/runloopai/api-client-python/commit/d6c22008f7cd8a6a07055f29bcb4eca4914ec5e0))
|
|
13
|
+
* **devbox:** added stdin streaming endpoint ([83ae56a](https://github.com/runloopai/api-client-python/commit/83ae56a22a9c1d4528719321b9565731532191f2))
|
|
14
|
+
* **devbox:** remove this one ([91854d5](https://github.com/runloopai/api-client-python/commit/91854d5d0db2d89bd0e787c5f56cf84a5ea5a89b))
|
|
15
|
+
* **network-policy:** add network policies to api ([1d98bb1](https://github.com/runloopai/api-client-python/commit/1d98bb1dbcaf428e36cfc099282c71312f838d8a))
|
|
16
|
+
* **scenarios:** add scenario builder to sdk ([#706](https://github.com/runloopai/api-client-python/issues/706)) ([2d41a15](https://github.com/runloopai/api-client-python/commit/2d41a15b4455ed8d7f6a8063cf19b82d51edeef8))
|
|
17
|
+
* **sdk:** add Benchmark and AsyncBenchmark classes ([#714](https://github.com/runloopai/api-client-python/issues/714)) ([8909d8a](https://github.com/runloopai/api-client-python/commit/8909d8aabfc2f1c80ff74b636225b42cac6725ff))
|
|
18
|
+
* **sdk:** add BenchmarkOps and AsyncBenchmarkOps to SDK ([#716](https://github.com/runloopai/api-client-python/issues/716)) ([9b434d9](https://github.com/runloopai/api-client-python/commit/9b434d9bc7ebdcea2b156689403d853a932f0d9e))
|
|
19
|
+
* **sdk:** add BenchmarkRun and AsyncBenchmarkRun classes ([#712](https://github.com/runloopai/api-client-python/issues/712)) ([6aa83e2](https://github.com/runloopai/api-client-python/commit/6aa83e2a6c8a55694435bd2b707340770f0a326a))
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
### Bug Fixes
|
|
23
|
+
|
|
24
|
+
* **benchmarks:** `update()` for benchmarks and scenarios replaces all provided fields and does not modify unspecified fields ([#6702](https://github.com/runloopai/api-client-python/issues/6702)) ([cfd04b6](https://github.com/runloopai/api-client-python/commit/cfd04b6e7781534fd0e775e1b00793ad53814a47))
|
|
25
|
+
* **types:** allow pyright to infer TypedDict types within SequenceNotStr ([3241717](https://github.com/runloopai/api-client-python/commit/32417177128b5f5d90b852a5460fe6823198cf9b))
|
|
26
|
+
* use async_to_httpx_files in patch method ([88f8fb9](https://github.com/runloopai/api-client-python/commit/88f8fb92e1d48ff6f95833a7ee1e376bef76e0e1))
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
### Chores
|
|
30
|
+
|
|
31
|
+
* fix stainless spec / remove deprecated benchmark/runs ([#7074](https://github.com/runloopai/api-client-python/issues/7074)) ([3ed7d80](https://github.com/runloopai/api-client-python/commit/3ed7d806edc349b4bb4cfb8e0e54b78f272a6d75))
|
|
32
|
+
* fix tests and linting ([#719](https://github.com/runloopai/api-client-python/issues/719)) ([74db814](https://github.com/runloopai/api-client-python/commit/74db81455af44b94896e8adc7a6e24ba71b9e2ef))
|
|
33
|
+
* update network policy create params descriptions ([#7069](https://github.com/runloopai/api-client-python/issues/7069)) ([b151692](https://github.com/runloopai/api-client-python/commit/b15169283ff344c447b203b6bc3589f05c400ea7))
|
|
34
|
+
* remove support for pydantic-v1, pydantic-v2 is now default ([#710](https://github.com/runloopai/api-client-python/issues/710))
|
|
35
|
+
* add documentation url to pypi project page ([#711](https://github.com/runloopai/api-client-python/issues/711)) ([7afb327](https://github.com/runloopai/api-client-python/commit/7afb32731842ebee4f479837959ccac856bd5e85))
|
|
36
|
+
* add missing docstrings ([a198632](https://github.com/runloopai/api-client-python/commit/a198632f6a3936bcf5b5b4f4e6324461c4853893))
|
|
37
|
+
* **devbox:** Remove network policy from devbox view; use launch params instead ([#7025](https://github.com/runloopai/api-client-python/issues/7025)) ([d53af14](https://github.com/runloopai/api-client-python/commit/d53af14f6f55144859c8257d936a115989563b6d))
|
|
38
|
+
* **internal:** add `--fix` argument to lint script ([c381201](https://github.com/runloopai/api-client-python/commit/c381201ca37e7e438413c33e6be521fc43fbc762))
|
|
39
|
+
* **internal:** add missing files argument to base client ([b7065e2](https://github.com/runloopai/api-client-python/commit/b7065e204d00f853bcac75637680dc198346a804))
|
|
40
|
+
* **internal:** codegen related update ([75fecdf](https://github.com/runloopai/api-client-python/commit/75fecdf043eb67baa1bf13dbd9f5fabd7042c3f4))
|
|
41
|
+
* **internal:** update `actions/checkout` version ([7a57030](https://github.com/runloopai/api-client-python/commit/7a570300fe84dbd9e057c606bb0702b1e6ffe419))
|
|
42
|
+
* remove support for pydantic-v1, pydantic-v2 is now default ([#710](https://github.com/runloopai/api-client-python/issues/710)) ([fb3cc3d](https://github.com/runloopai/api-client-python/commit/fb3cc3d354d4279542cd20f44857f2ec28be7082))
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
### Documentation
|
|
46
|
+
|
|
47
|
+
* reformat sidebar and index pages to be more transparent, add favicon to browser tab ([#715](https://github.com/runloopai/api-client-python/issues/715)) ([1161b8f](https://github.com/runloopai/api-client-python/commit/1161b8fbe8d78dc572e0310da009e1bcc7dec36f))
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
### Refactors
|
|
51
|
+
|
|
52
|
+
* **benchmark:** Deprecate /benchmark/{id}/runs in favor of /benchmark_runs ([#7019](https://github.com/runloopai/api-client-python/issues/7019)) ([793507a](https://github.com/runloopai/api-client-python/commit/793507a2508945d80f670550493773cc89c43752))
|
|
53
|
+
|
|
54
|
+
## 1.2.0 (2025-12-09)
|
|
55
|
+
|
|
56
|
+
Full Changelog: [v1.1.0...v1.2.0](https://github.com/runloopai/api-client-python/compare/v1.1.0...v1.2.0)
|
|
57
|
+
|
|
58
|
+
### Features
|
|
59
|
+
|
|
60
|
+
* **devbox:** default to x86 arch ([501de0b](https://github.com/runloopai/api-client-python/commit/501de0bb1d76c836ff9f448513a16155641345ae))
|
|
61
|
+
* **devbox:** return user for createSshKey ([f094bf7](https://github.com/runloopai/api-client-python/commit/f094bf7443a0ca5bab6d47a53b7b14bade3cecd0))
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
### Bug Fixes
|
|
65
|
+
|
|
66
|
+
* ensure streams are always closed ([d01aae2](https://github.com/runloopai/api-client-python/commit/d01aae204d8c57ac76646df0e0e1078e64ad9891))
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
### Chores
|
|
70
|
+
|
|
71
|
+
* bump required `uv` version ([8ad519f](https://github.com/runloopai/api-client-python/commit/8ad519fd26d389628d157a413a0b0f1f5d435e9e))
|
|
72
|
+
* **deps:** mypy 1.18.1 has a regression, pin to 1.17 ([e56582a](https://github.com/runloopai/api-client-python/commit/e56582a93590445d8e545b6123be0f14db39a8f5))
|
|
73
|
+
* **docs:** use environment variables for authentication in code snippets ([55cf613](https://github.com/runloopai/api-client-python/commit/55cf6131edb8d38144761c5dbbbcf9389093ed7b))
|
|
74
|
+
* **internal:** version bump ([2fa85c6](https://github.com/runloopai/api-client-python/commit/2fa85c6694dc468280eedb28136aadcda4f11801))
|
|
75
|
+
* remove some unnecessary changes to reduce diff from Stainless ([#705](https://github.com/runloopai/api-client-python/issues/705)) ([715c9d0](https://github.com/runloopai/api-client-python/commit/715c9d09f4e874032ee1d4d6c81d80ab6a72ec45))
|
|
76
|
+
* update lockfile ([7e0136d](https://github.com/runloopai/api-client-python/commit/7e0136dfcd62a2843138ae382bd6fedfd881e1b3))
|
|
77
|
+
* update requirements-dev.lock ([#707](https://github.com/runloopai/api-client-python/issues/707)) ([a2d5326](https://github.com/runloopai/api-client-python/commit/a2d5326634cad5afe6c74252d26b01916ed41bcb))
|
|
78
|
+
* update uv.lock ([b9e0729](https://github.com/runloopai/api-client-python/commit/b9e07291745291d16f122dbca5ef513ed134c5dd))
|
|
79
|
+
|
|
3
80
|
## 1.1.0 (2025-12-06)
|
|
4
81
|
|
|
5
82
|
Full Changelog: [v1.0.0...v1.1.0](https://github.com/runloopai/api-client-python/compare/v1.0.0...v1.1.0)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Copyright
|
|
1
|
+
Copyright 2026 runloop
|
|
2
2
|
|
|
3
3
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
4
4
|
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: runloop_api_client
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.3.0
|
|
4
4
|
Summary: The official Python library for the runloop API
|
|
5
5
|
Project-URL: Homepage, https://github.com/runloopai/api-client-python
|
|
6
6
|
Project-URL: Repository, https://github.com/runloopai/api-client-python
|
|
7
|
+
Project-URL: Documentation, https://runloopai.github.io/api-client-python/
|
|
7
8
|
Author-email: Runloop <support@runloop.ai>
|
|
8
9
|
License: MIT
|
|
9
10
|
Classifier: Intended Audience :: Developers
|
|
@@ -18,13 +19,14 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
18
19
|
Classifier: Programming Language :: Python :: 3.11
|
|
19
20
|
Classifier: Programming Language :: Python :: 3.12
|
|
20
21
|
Classifier: Programming Language :: Python :: 3.13
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
21
23
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
22
24
|
Classifier: Typing :: Typed
|
|
23
25
|
Requires-Python: >=3.9
|
|
24
26
|
Requires-Dist: anyio<5,>=3.5.0
|
|
25
27
|
Requires-Dist: distro<2,>=1.7.0
|
|
26
28
|
Requires-Dist: httpx<1,>=0.23.0
|
|
27
|
-
Requires-Dist: pydantic<3,>=
|
|
29
|
+
Requires-Dist: pydantic<3,>=2.0
|
|
28
30
|
Requires-Dist: sniffio
|
|
29
31
|
Requires-Dist: typing-extensions<5,>=4.10
|
|
30
32
|
Requires-Dist: uuid-utils>=0.11.0
|
|
@@ -68,10 +70,10 @@ For a higher-level, Pythonic interface, check out the new [`RunloopSDK`](README-
|
|
|
68
70
|
```python
|
|
69
71
|
from runloop_api_client import RunloopSDK
|
|
70
72
|
|
|
71
|
-
|
|
73
|
+
runloop = RunloopSDK() # Uses RUNLOOP_API_KEY environment variable by default
|
|
72
74
|
|
|
73
75
|
# Create a devbox and execute commands with a clean, object-oriented interface
|
|
74
|
-
with
|
|
76
|
+
with runloop.devbox.create(name="my-devbox") as devbox:
|
|
75
77
|
result = devbox.cmd.exec("echo 'Hello from Runloop!'")
|
|
76
78
|
print(result.stdout())
|
|
77
79
|
```
|
|
@@ -137,6 +139,7 @@ pip install runloop_api_client[aiohttp]
|
|
|
137
139
|
Then you can enable it by instantiating the client with `http_client=DefaultAioHttpClient()`:
|
|
138
140
|
|
|
139
141
|
```python
|
|
142
|
+
import os
|
|
140
143
|
import asyncio
|
|
141
144
|
from runloop_api_client import DefaultAioHttpClient
|
|
142
145
|
from runloop_api_client import AsyncRunloop
|
|
@@ -144,7 +147,7 @@ from runloop_api_client import AsyncRunloop
|
|
|
144
147
|
|
|
145
148
|
async def main() -> None:
|
|
146
149
|
async with AsyncRunloop(
|
|
147
|
-
bearer_token="
|
|
150
|
+
bearer_token=os.environ.get("RUNLOOP_API_KEY"), # This is the default and can be omitted
|
|
148
151
|
http_client=DefaultAioHttpClient(),
|
|
149
152
|
) as client:
|
|
150
153
|
devbox_view = await client.devboxes.create()
|
|
@@ -77,6 +77,7 @@ print(obj.download_as_text())
|
|
|
77
77
|
import asyncio
|
|
78
78
|
from runloop_api_client import AsyncRunloopSDK
|
|
79
79
|
|
|
80
|
+
|
|
80
81
|
async def main():
|
|
81
82
|
runloop = AsyncRunloopSDK()
|
|
82
83
|
async with await runloop.devbox.create(name="async-devbox") as devbox:
|
|
@@ -88,6 +89,7 @@ async def main():
|
|
|
88
89
|
|
|
89
90
|
await devbox.cmd.exec("ls", stdout=capture)
|
|
90
91
|
|
|
92
|
+
|
|
91
93
|
asyncio.run(main())
|
|
92
94
|
```
|
|
93
95
|
|
|
@@ -194,7 +196,7 @@ print("Devbox ID:", execution.devbox_id)
|
|
|
194
196
|
# Poll for current state
|
|
195
197
|
state = execution.get_state()
|
|
196
198
|
print("Status:", state.status) # "running", "completed", etc.
|
|
197
|
-
print("Exit code:", state.exit_status)
|
|
199
|
+
print("Exit code:", state.exit_status) # only set when execution has completed
|
|
198
200
|
|
|
199
201
|
# Wait for completion and get results
|
|
200
202
|
result = execution.result()
|
|
@@ -229,7 +231,7 @@ result = execution.result()
|
|
|
229
231
|
# Access execution results
|
|
230
232
|
print("Exit code:", result.exit_code)
|
|
231
233
|
print("Success:", result.success) # True if exit code is 0
|
|
232
|
-
print("Failed:", result.failed)
|
|
234
|
+
print("Failed:", result.failed) # True if exit code is non-zero
|
|
233
235
|
|
|
234
236
|
# Get output streams
|
|
235
237
|
stdout = result.stdout()
|
|
@@ -261,6 +263,7 @@ Pass callbacks into `cmd.exec` / `cmd.exec_async` to process logs in real time:
|
|
|
261
263
|
def handle_output(line: str) -> None:
|
|
262
264
|
print("LOG:", line)
|
|
263
265
|
|
|
266
|
+
|
|
264
267
|
result = devbox.cmd.exec(
|
|
265
268
|
"python train.py",
|
|
266
269
|
stdout=handle_output,
|
|
@@ -278,6 +281,7 @@ def capture(line: str) -> None:
|
|
|
278
281
|
# Use thread-safe data structures if needed
|
|
279
282
|
log_queue.put_nowait(line)
|
|
280
283
|
|
|
284
|
+
|
|
281
285
|
await devbox.cmd.exec(
|
|
282
286
|
"tail -f /var/log/app.log",
|
|
283
287
|
stdout=capture,
|
|
@@ -299,6 +303,7 @@ print(content)
|
|
|
299
303
|
|
|
300
304
|
# Upload files
|
|
301
305
|
from pathlib import Path
|
|
306
|
+
|
|
302
307
|
devbox.file.upload(
|
|
303
308
|
path="/home/user/upload.txt",
|
|
304
309
|
file=Path("local_file.txt"),
|
|
@@ -434,15 +439,6 @@ build_ctx_obj = runloop.storage_object.upload_from_bytes(
|
|
|
434
439
|
content_type="tgz",
|
|
435
440
|
)
|
|
436
441
|
|
|
437
|
-
shared_root = Path("./shared-lib")
|
|
438
|
-
shared_tar = build_docker_context_tar(shared_root)
|
|
439
|
-
|
|
440
|
-
shared_ctx_obj = runloop.storage_object.upload_from_bytes(
|
|
441
|
-
data=shared_tar,
|
|
442
|
-
name="shared-lib-context.tar.gz",
|
|
443
|
-
content_type="tgz",
|
|
444
|
-
)
|
|
445
|
-
|
|
446
442
|
blueprint_with_context = runloop.blueprint.create(
|
|
447
443
|
name="my-blueprint-with-context",
|
|
448
444
|
dockerfile="""\
|
|
@@ -453,18 +449,11 @@ WORKDIR /usr/src/app
|
|
|
453
449
|
COPY package.json package.json
|
|
454
450
|
COPY src src
|
|
455
451
|
|
|
456
|
-
# copy from named context
|
|
457
|
-
COPY --from=shared / ./libs
|
|
458
|
-
|
|
459
452
|
RUN npm install --only=production
|
|
460
453
|
CMD ["node", "src/app.js"]
|
|
461
454
|
""",
|
|
462
|
-
#
|
|
455
|
+
# Build context
|
|
463
456
|
build_context=build_ctx_obj.as_build_context(),
|
|
464
|
-
# Additional named build contexts (for Docker buildx-style usage)
|
|
465
|
-
named_build_contexts={
|
|
466
|
-
"shared": shared_ctx_obj.as_build_context(),
|
|
467
|
-
},
|
|
468
457
|
)
|
|
469
458
|
|
|
470
459
|
# Or get an existing one
|
|
@@ -551,6 +540,7 @@ storage_object.complete()
|
|
|
551
540
|
|
|
552
541
|
# Upload from file
|
|
553
542
|
from pathlib import Path
|
|
543
|
+
|
|
554
544
|
uploaded = runloop.storage_object.upload_from_file(
|
|
555
545
|
Path("/path/to/file.txt"),
|
|
556
546
|
name="my-file.txt",
|
|
@@ -600,7 +590,7 @@ obj = runloop.storage_object.create(
|
|
|
600
590
|
name="data.bin",
|
|
601
591
|
content_type="binary",
|
|
602
592
|
)
|
|
603
|
-
obj.upload_content(b"\
|
|
593
|
+
obj.upload_content(b"\xde\xad\xbe\xef")
|
|
604
594
|
obj.complete()
|
|
605
595
|
```
|
|
606
596
|
|
|
@@ -747,28 +737,30 @@ The async SDK has the same interface as the synchronous version, but all I/O ope
|
|
|
747
737
|
import asyncio
|
|
748
738
|
from runloop_api_client import AsyncRunloopSDK
|
|
749
739
|
|
|
740
|
+
|
|
750
741
|
async def main():
|
|
751
742
|
runloop = AsyncRunloopSDK()
|
|
752
|
-
|
|
743
|
+
|
|
753
744
|
# All the same operations, but with await
|
|
754
745
|
async with await runloop.devbox.create(name="async-devbox") as devbox:
|
|
755
746
|
result = await devbox.cmd.exec("pwd")
|
|
756
747
|
print(await result.stdout())
|
|
757
|
-
|
|
748
|
+
|
|
758
749
|
# Streaming (note: callbacks must be synchronous)
|
|
759
750
|
def capture(line: str) -> None:
|
|
760
751
|
print(">>", line)
|
|
761
|
-
|
|
752
|
+
|
|
762
753
|
await devbox.cmd.exec("ls", stdout=capture)
|
|
763
|
-
|
|
754
|
+
|
|
764
755
|
# Async file operations
|
|
765
756
|
await devbox.file.write(path="/tmp/test.txt", contents="Hello")
|
|
766
757
|
content = await devbox.file.read(path="/tmp/test.txt")
|
|
767
|
-
|
|
758
|
+
|
|
768
759
|
# Async network operations
|
|
769
760
|
tunnel = await devbox.net.create_tunnel(port=8080)
|
|
770
761
|
print("Tunnel URL:", tunnel.url)
|
|
771
762
|
|
|
763
|
+
|
|
772
764
|
asyncio.run(main())
|
|
773
765
|
```
|
|
774
766
|
|
|
@@ -784,7 +776,7 @@ devbox = runloop.devbox.create(
|
|
|
784
776
|
name="my-devbox",
|
|
785
777
|
polling_config=PollingConfig(
|
|
786
778
|
timeout_seconds=300.0, # Wait up to 5 minutes
|
|
787
|
-
interval_seconds=2.0,
|
|
779
|
+
interval_seconds=2.0, # Poll every 2 seconds
|
|
788
780
|
),
|
|
789
781
|
)
|
|
790
782
|
|
|
@@ -792,7 +784,7 @@ devbox = runloop.devbox.create(
|
|
|
792
784
|
snapshot.await_completed(
|
|
793
785
|
polling_config=PollingConfig(
|
|
794
786
|
timeout_seconds=600.0, # Wait up to 10 minutes
|
|
795
|
-
interval_seconds=5.0,
|
|
787
|
+
interval_seconds=5.0, # Poll every 5 seconds
|
|
796
788
|
),
|
|
797
789
|
)
|
|
798
790
|
```
|
|
@@ -33,10 +33,10 @@ For a higher-level, Pythonic interface, check out the new [`RunloopSDK`](README-
|
|
|
33
33
|
```python
|
|
34
34
|
from runloop_api_client import RunloopSDK
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
runloop = RunloopSDK() # Uses RUNLOOP_API_KEY environment variable by default
|
|
37
37
|
|
|
38
38
|
# Create a devbox and execute commands with a clean, object-oriented interface
|
|
39
|
-
with
|
|
39
|
+
with runloop.devbox.create(name="my-devbox") as devbox:
|
|
40
40
|
result = devbox.cmd.exec("echo 'Hello from Runloop!'")
|
|
41
41
|
print(result.stdout())
|
|
42
42
|
```
|
|
@@ -102,6 +102,7 @@ pip install runloop_api_client[aiohttp]
|
|
|
102
102
|
Then you can enable it by instantiating the client with `http_client=DefaultAioHttpClient()`:
|
|
103
103
|
|
|
104
104
|
```python
|
|
105
|
+
import os
|
|
105
106
|
import asyncio
|
|
106
107
|
from runloop_api_client import DefaultAioHttpClient
|
|
107
108
|
from runloop_api_client import AsyncRunloop
|
|
@@ -109,7 +110,7 @@ from runloop_api_client import AsyncRunloop
|
|
|
109
110
|
|
|
110
111
|
async def main() -> None:
|
|
111
112
|
async with AsyncRunloop(
|
|
112
|
-
bearer_token="
|
|
113
|
+
bearer_token=os.environ.get("RUNLOOP_API_KEY"), # This is the default and can be omitted
|
|
113
114
|
http_client=DefaultAioHttpClient(),
|
|
114
115
|
) as client:
|
|
115
116
|
devbox_view = await client.devboxes.create()
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
```python
|
|
4
4
|
from runloop_api_client.types import (
|
|
5
5
|
AfterIdle,
|
|
6
|
-
|
|
6
|
+
AgentMount,
|
|
7
7
|
AgentSource,
|
|
8
8
|
CodeMountParameters,
|
|
9
9
|
LaunchParameters,
|
|
10
10
|
Mount,
|
|
11
|
-
|
|
11
|
+
ObjectMount,
|
|
12
12
|
RunProfile,
|
|
13
13
|
)
|
|
14
14
|
```
|
|
@@ -20,8 +20,8 @@ Types:
|
|
|
20
20
|
```python
|
|
21
21
|
from runloop_api_client.types import (
|
|
22
22
|
BenchmarkCreateParameters,
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
BenchmarkScenarioUpdateParameters,
|
|
24
|
+
BenchmarkUpdateParameters,
|
|
25
25
|
BenchmarkView,
|
|
26
26
|
ScenarioDefinitionListView,
|
|
27
27
|
StartBenchmarkRunParameters,
|
|
@@ -30,23 +30,30 @@ from runloop_api_client.types import (
|
|
|
30
30
|
|
|
31
31
|
Methods:
|
|
32
32
|
|
|
33
|
-
- <code title="post /v1/benchmarks">client.benchmarks.<a href="./src/runloop_api_client/resources/benchmarks
|
|
34
|
-
- <code title="get /v1/benchmarks/{id}">client.benchmarks.<a href="./src/runloop_api_client/resources/benchmarks
|
|
35
|
-
- <code title="post /v1/benchmarks/{id}">client.benchmarks.<a href="./src/runloop_api_client/resources/benchmarks
|
|
36
|
-
- <code title="get /v1/benchmarks">client.benchmarks.<a href="./src/runloop_api_client/resources/benchmarks
|
|
37
|
-
- <code title="get /v1/benchmarks/{id}/definitions">client.benchmarks.<a href="./src/runloop_api_client/resources/benchmarks
|
|
38
|
-
- <code title="get /v1/benchmarks/list_public">client.benchmarks.<a href="./src/runloop_api_client/resources/benchmarks
|
|
39
|
-
- <code title="post /v1/benchmarks/start_run">client.benchmarks.<a href="./src/runloop_api_client/resources/benchmarks
|
|
33
|
+
- <code title="post /v1/benchmarks">client.benchmarks.<a href="./src/runloop_api_client/resources/benchmarks.py">create</a>(\*\*<a href="src/runloop_api_client/types/benchmark_create_params.py">params</a>) -> <a href="./src/runloop_api_client/types/benchmark_view.py">BenchmarkView</a></code>
|
|
34
|
+
- <code title="get /v1/benchmarks/{id}">client.benchmarks.<a href="./src/runloop_api_client/resources/benchmarks.py">retrieve</a>(id) -> <a href="./src/runloop_api_client/types/benchmark_view.py">BenchmarkView</a></code>
|
|
35
|
+
- <code title="post /v1/benchmarks/{id}">client.benchmarks.<a href="./src/runloop_api_client/resources/benchmarks.py">update</a>(id, \*\*<a href="src/runloop_api_client/types/benchmark_update_params.py">params</a>) -> <a href="./src/runloop_api_client/types/benchmark_view.py">BenchmarkView</a></code>
|
|
36
|
+
- <code title="get /v1/benchmarks">client.benchmarks.<a href="./src/runloop_api_client/resources/benchmarks.py">list</a>(\*\*<a href="src/runloop_api_client/types/benchmark_list_params.py">params</a>) -> <a href="./src/runloop_api_client/types/benchmark_view.py">SyncBenchmarksCursorIDPage[BenchmarkView]</a></code>
|
|
37
|
+
- <code title="get /v1/benchmarks/{id}/definitions">client.benchmarks.<a href="./src/runloop_api_client/resources/benchmarks.py">definitions</a>(id, \*\*<a href="src/runloop_api_client/types/benchmark_definitions_params.py">params</a>) -> <a href="./src/runloop_api_client/types/scenario_definition_list_view.py">ScenarioDefinitionListView</a></code>
|
|
38
|
+
- <code title="get /v1/benchmarks/list_public">client.benchmarks.<a href="./src/runloop_api_client/resources/benchmarks.py">list_public</a>(\*\*<a href="src/runloop_api_client/types/benchmark_list_public_params.py">params</a>) -> <a href="./src/runloop_api_client/types/benchmark_view.py">SyncBenchmarksCursorIDPage[BenchmarkView]</a></code>
|
|
39
|
+
- <code title="post /v1/benchmarks/start_run">client.benchmarks.<a href="./src/runloop_api_client/resources/benchmarks.py">start_run</a>(\*\*<a href="src/runloop_api_client/types/benchmark_start_run_params.py">params</a>) -> <a href="./src/runloop_api_client/types/benchmark_run_view.py">BenchmarkRunView</a></code>
|
|
40
|
+
- <code title="post /v1/benchmarks/{id}/scenarios">client.benchmarks.<a href="./src/runloop_api_client/resources/benchmarks.py">update_scenarios</a>(id, \*\*<a href="src/runloop_api_client/types/benchmark_update_scenarios_params.py">params</a>) -> <a href="./src/runloop_api_client/types/benchmark_view.py">BenchmarkView</a></code>
|
|
40
41
|
|
|
41
|
-
|
|
42
|
+
# BenchmarkRuns
|
|
43
|
+
|
|
44
|
+
Types:
|
|
45
|
+
|
|
46
|
+
```python
|
|
47
|
+
from runloop_api_client.types import BenchmarkRunListView, BenchmarkRunView
|
|
48
|
+
```
|
|
42
49
|
|
|
43
50
|
Methods:
|
|
44
51
|
|
|
45
|
-
- <code title="get /v1/
|
|
46
|
-
- <code title="get /v1/
|
|
47
|
-
- <code title="post /v1/
|
|
48
|
-
- <code title="post /v1/
|
|
49
|
-
- <code title="get /v1/
|
|
52
|
+
- <code title="get /v1/benchmark_runs/{id}">client.benchmark_runs.<a href="./src/runloop_api_client/resources/benchmark_runs.py">retrieve</a>(id) -> <a href="./src/runloop_api_client/types/benchmark_run_view.py">BenchmarkRunView</a></code>
|
|
53
|
+
- <code title="get /v1/benchmark_runs">client.benchmark_runs.<a href="./src/runloop_api_client/resources/benchmark_runs.py">list</a>(\*\*<a href="src/runloop_api_client/types/benchmark_run_list_params.py">params</a>) -> <a href="./src/runloop_api_client/types/benchmark_run_view.py">SyncBenchmarkRunsCursorIDPage[BenchmarkRunView]</a></code>
|
|
54
|
+
- <code title="post /v1/benchmark_runs/{id}/cancel">client.benchmark_runs.<a href="./src/runloop_api_client/resources/benchmark_runs.py">cancel</a>(id) -> <a href="./src/runloop_api_client/types/benchmark_run_view.py">BenchmarkRunView</a></code>
|
|
55
|
+
- <code title="post /v1/benchmark_runs/{id}/complete">client.benchmark_runs.<a href="./src/runloop_api_client/resources/benchmark_runs.py">complete</a>(id) -> <a href="./src/runloop_api_client/types/benchmark_run_view.py">BenchmarkRunView</a></code>
|
|
56
|
+
- <code title="get /v1/benchmark_runs/{id}/scenario_runs">client.benchmark_runs.<a href="./src/runloop_api_client/resources/benchmark_runs.py">list_scenario_runs</a>(id, \*\*<a href="src/runloop_api_client/types/benchmark_run_list_scenario_runs_params.py">params</a>) -> <a href="./src/runloop_api_client/types/scenario_run_view.py">SyncBenchmarkRunsCursorIDPage[ScenarioRunView]</a></code>
|
|
50
57
|
|
|
51
58
|
# Agents
|
|
52
59
|
|
|
@@ -351,3 +358,24 @@ Methods:
|
|
|
351
358
|
- <code title="post /v1/secrets/{name}">client.secrets.<a href="./src/runloop_api_client/resources/secrets.py">update</a>(name, \*\*<a href="src/runloop_api_client/types/secret_update_params.py">params</a>) -> <a href="./src/runloop_api_client/types/secret_view.py">SecretView</a></code>
|
|
352
359
|
- <code title="get /v1/secrets">client.secrets.<a href="./src/runloop_api_client/resources/secrets.py">list</a>(\*\*<a href="src/runloop_api_client/types/secret_list_params.py">params</a>) -> <a href="./src/runloop_api_client/types/secret_list_view.py">SecretListView</a></code>
|
|
353
360
|
- <code title="post /v1/secrets/{name}/delete">client.secrets.<a href="./src/runloop_api_client/resources/secrets.py">delete</a>(name) -> <a href="./src/runloop_api_client/types/secret_view.py">SecretView</a></code>
|
|
361
|
+
|
|
362
|
+
# NetworkPolicies
|
|
363
|
+
|
|
364
|
+
Types:
|
|
365
|
+
|
|
366
|
+
```python
|
|
367
|
+
from runloop_api_client.types import (
|
|
368
|
+
NetworkPolicyCreateParameters,
|
|
369
|
+
NetworkPolicyListView,
|
|
370
|
+
NetworkPolicyUpdateParameters,
|
|
371
|
+
NetworkPolicyView,
|
|
372
|
+
)
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
Methods:
|
|
376
|
+
|
|
377
|
+
- <code title="post /v1/network-policies">client.network_policies.<a href="./src/runloop_api_client/resources/network_policies.py">create</a>(\*\*<a href="src/runloop_api_client/types/network_policy_create_params.py">params</a>) -> <a href="./src/runloop_api_client/types/network_policy_view.py">NetworkPolicyView</a></code>
|
|
378
|
+
- <code title="get /v1/network-policies/{id}">client.network_policies.<a href="./src/runloop_api_client/resources/network_policies.py">retrieve</a>(id) -> <a href="./src/runloop_api_client/types/network_policy_view.py">NetworkPolicyView</a></code>
|
|
379
|
+
- <code title="post /v1/network-policies/{id}">client.network_policies.<a href="./src/runloop_api_client/resources/network_policies.py">update</a>(id, \*\*<a href="src/runloop_api_client/types/network_policy_update_params.py">params</a>) -> <a href="./src/runloop_api_client/types/network_policy_view.py">NetworkPolicyView</a></code>
|
|
380
|
+
- <code title="get /v1/network-policies">client.network_policies.<a href="./src/runloop_api_client/resources/network_policies.py">list</a>(\*\*<a href="src/runloop_api_client/types/network_policy_list_params.py">params</a>) -> <a href="./src/runloop_api_client/types/network_policy_view.py">SyncNetworkPoliciesCursorIDPage[NetworkPolicyView]</a></code>
|
|
381
|
+
- <code title="post /v1/network-policies/{id}/delete">client.network_policies.<a href="./src/runloop_api_client/resources/network_policies.py">delete</a>(id) -> <a href="./src/runloop_api_client/types/network_policy_view.py">NetworkPolicyView</a></code>
|
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "runloop_api_client"
|
|
3
|
-
version = "1.
|
|
3
|
+
version = "1.3.0"
|
|
4
4
|
description = "The official Python library for the runloop API"
|
|
5
5
|
dynamic = ["readme"]
|
|
6
6
|
license = "MIT"
|
|
7
7
|
authors = [
|
|
8
8
|
{ name = "Runloop", email = "support@runloop.ai" },
|
|
9
9
|
]
|
|
10
|
+
|
|
10
11
|
dependencies = [
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
12
|
+
"httpx>=0.23.0, <1",
|
|
13
|
+
"pydantic>=2.0, <3",
|
|
14
|
+
"typing-extensions>=4.10, <5",
|
|
15
|
+
"anyio>=3.5.0, <5",
|
|
16
|
+
"distro>=1.7.0, <2",
|
|
17
|
+
"sniffio",
|
|
18
|
+
"uuid-utils>=0.11.0",
|
|
18
19
|
]
|
|
19
20
|
|
|
20
21
|
requires-python = ">= 3.9"
|
|
@@ -26,6 +27,7 @@ classifiers = [
|
|
|
26
27
|
"Programming Language :: Python :: 3.11",
|
|
27
28
|
"Programming Language :: Python :: 3.12",
|
|
28
29
|
"Programming Language :: Python :: 3.13",
|
|
30
|
+
"Programming Language :: Python :: 3.14",
|
|
29
31
|
"Operating System :: OS Independent",
|
|
30
32
|
"Operating System :: POSIX",
|
|
31
33
|
"Operating System :: MacOS",
|
|
@@ -38,19 +40,20 @@ classifiers = [
|
|
|
38
40
|
[project.urls]
|
|
39
41
|
Homepage = "https://github.com/runloopai/api-client-python"
|
|
40
42
|
Repository = "https://github.com/runloopai/api-client-python"
|
|
43
|
+
Documentation = "https://runloopai.github.io/api-client-python/"
|
|
41
44
|
|
|
42
45
|
[project.optional-dependencies]
|
|
43
46
|
aiohttp = ["aiohttp", "httpx_aiohttp>=0.1.9"]
|
|
44
47
|
|
|
45
48
|
[tool.uv]
|
|
46
49
|
managed = true
|
|
47
|
-
required-version = ">=0.
|
|
50
|
+
required-version = ">=0.9"
|
|
48
51
|
|
|
49
52
|
[dependency-groups]
|
|
50
53
|
# version pins are in uv.lock
|
|
51
54
|
dev = [
|
|
52
55
|
"pyright==1.1.399",
|
|
53
|
-
"mypy",
|
|
56
|
+
"mypy==1.17",
|
|
54
57
|
"respx",
|
|
55
58
|
"pytest",
|
|
56
59
|
"pytest-asyncio",
|
|
@@ -70,45 +73,11 @@ docs = [
|
|
|
70
73
|
"sphinx-autodoc-typehints>=2.3.0",
|
|
71
74
|
"sphinx-toolbox>=4.0.0",
|
|
72
75
|
]
|
|
73
|
-
pydantic-v1 = [
|
|
74
|
-
"pydantic>=1.9.0, <2",
|
|
75
|
-
]
|
|
76
|
-
|
|
77
|
-
[tool.rye.scripts]
|
|
78
|
-
format = { chain = [
|
|
79
|
-
"format:ruff",
|
|
80
|
-
"format:docs",
|
|
81
|
-
"fix:ruff",
|
|
82
|
-
# run formatting again to fix any inconsistencies when imports are stripped
|
|
83
|
-
"format:ruff",
|
|
84
|
-
]}
|
|
85
|
-
"format:docs" = "python scripts/utils/ruffen-docs.py README.md api.md"
|
|
86
|
-
"format:ruff" = "ruff format"
|
|
87
|
-
|
|
88
|
-
"lint" = { chain = [
|
|
89
|
-
"check:ruff",
|
|
90
|
-
"typecheck",
|
|
91
|
-
"check:importable",
|
|
92
|
-
]}
|
|
93
|
-
"check:ruff" = "ruff check ."
|
|
94
|
-
"fix:ruff" = "ruff check --fix ."
|
|
95
|
-
|
|
96
|
-
"check:importable" = "python -c 'import runloop_api_client'"
|
|
97
|
-
|
|
98
|
-
typecheck = { chain = [
|
|
99
|
-
"typecheck:pyright",
|
|
100
|
-
"typecheck:mypy"
|
|
101
|
-
]}
|
|
102
|
-
|
|
103
|
-
"typecheck:pyright" = "pyright"
|
|
104
|
-
"typecheck:verify-types" = "pyright --verifytypes runloop_api_client --ignoreexternal"
|
|
105
|
-
"typecheck:mypy" = "mypy ."
|
|
106
76
|
|
|
107
77
|
[build-system]
|
|
108
78
|
requires = ["hatchling==1.26.3", "hatch-fancy-pypi-readme"]
|
|
109
79
|
build-backend = "hatchling.build"
|
|
110
80
|
|
|
111
|
-
|
|
112
81
|
[tool.hatch.build]
|
|
113
82
|
include = [
|
|
114
83
|
"src/*"
|