runloop-api-client 0.42.0__tar.gz → 0.44.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.
Files changed (286) hide show
  1. runloop_api_client-0.44.0/.release-please-manifest.json +3 -0
  2. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/CHANGELOG.md +46 -0
  3. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/PKG-INFO +38 -3
  4. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/README.md +34 -2
  5. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/api.md +1 -0
  6. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/pyproject.toml +5 -2
  7. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/requirements-dev.lock +31 -0
  8. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/requirements.lock +27 -0
  9. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/__init__.py +2 -1
  10. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/_base_client.py +38 -2
  11. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/_version.py +1 -1
  12. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/resources/scenarios/scenarios.py +40 -32
  13. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/scenario_list_params.py +3 -0
  14. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/scenario_update_params.py +10 -10
  15. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/tests/api_resources/benchmarks/test_runs.py +3 -1
  16. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/tests/api_resources/devboxes/test_browsers.py +3 -1
  17. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/tests/api_resources/devboxes/test_computers.py +3 -1
  18. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/tests/api_resources/devboxes/test_disk_snapshots.py +3 -1
  19. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/tests/api_resources/devboxes/test_executions.py +3 -1
  20. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/tests/api_resources/devboxes/test_logs.py +3 -1
  21. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/tests/api_resources/devboxes/test_lsp.py +3 -1
  22. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/tests/api_resources/scenarios/test_runs.py +3 -1
  23. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/tests/api_resources/scenarios/test_scorers.py +3 -1
  24. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/tests/api_resources/test_benchmarks.py +3 -1
  25. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/tests/api_resources/test_blueprints.py +3 -1
  26. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/tests/api_resources/test_devboxes.py +3 -1
  27. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/tests/api_resources/test_repositories.py +3 -1
  28. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/tests/api_resources/test_scenarios.py +31 -147
  29. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/tests/api_resources/test_secrets.py +3 -1
  30. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/tests/conftest.py +39 -6
  31. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/tests/test_client.py +56 -33
  32. runloop_api_client-0.42.0/.release-please-manifest.json +0 -3
  33. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/.gitignore +0 -0
  34. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/CONTRIBUTING.md +0 -0
  35. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/LICENSE +0 -0
  36. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/SECURITY.md +0 -0
  37. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/bin/check-release-environment +0 -0
  38. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/bin/publish-pypi +0 -0
  39. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/examples/.keep +0 -0
  40. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/mypy.ini +0 -0
  41. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/noxfile.py +0 -0
  42. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/release-please-config.json +0 -0
  43. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop/lib/.keep +0 -0
  44. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/_client.py +0 -0
  45. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/_compat.py +0 -0
  46. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/_constants.py +0 -0
  47. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/_exceptions.py +0 -0
  48. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/_files.py +0 -0
  49. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/_models.py +0 -0
  50. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/_qs.py +0 -0
  51. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/_resource.py +0 -0
  52. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/_response.py +0 -0
  53. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/_streaming.py +0 -0
  54. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/_types.py +0 -0
  55. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/_utils/__init__.py +0 -0
  56. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/_utils/_logs.py +0 -0
  57. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/_utils/_proxy.py +0 -0
  58. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/_utils/_reflection.py +0 -0
  59. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/_utils/_resources_proxy.py +0 -0
  60. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/_utils/_streams.py +0 -0
  61. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/_utils/_sync.py +0 -0
  62. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/_utils/_transform.py +0 -0
  63. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/_utils/_typing.py +0 -0
  64. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/_utils/_utils.py +0 -0
  65. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/lib/.keep +0 -0
  66. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/lib/polling.py +0 -0
  67. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/lib/polling_async.py +0 -0
  68. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/pagination.py +0 -0
  69. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/py.typed +0 -0
  70. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/resources/__init__.py +0 -0
  71. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/resources/benchmarks/__init__.py +0 -0
  72. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/resources/benchmarks/benchmarks.py +0 -0
  73. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/resources/benchmarks/runs.py +0 -0
  74. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/resources/blueprints.py +0 -0
  75. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/resources/devboxes/__init__.py +0 -0
  76. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/resources/devboxes/browsers.py +0 -0
  77. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/resources/devboxes/computers.py +0 -0
  78. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/resources/devboxes/devboxes.py +0 -0
  79. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/resources/devboxes/disk_snapshots.py +0 -0
  80. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/resources/devboxes/executions.py +0 -0
  81. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/resources/devboxes/logs.py +0 -0
  82. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/resources/devboxes/lsp.py +0 -0
  83. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/resources/repositories.py +0 -0
  84. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/resources/scenarios/__init__.py +0 -0
  85. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/resources/scenarios/runs.py +0 -0
  86. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/resources/scenarios/scorers.py +0 -0
  87. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/resources/secrets.py +0 -0
  88. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/__init__.py +0 -0
  89. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/benchmark_create_params.py +0 -0
  90. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/benchmark_definitions_params.py +0 -0
  91. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/benchmark_list_params.py +0 -0
  92. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/benchmark_list_public_params.py +0 -0
  93. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/benchmark_run_list_view.py +0 -0
  94. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/benchmark_run_view.py +0 -0
  95. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/benchmark_start_run_params.py +0 -0
  96. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/benchmark_update_params.py +0 -0
  97. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/benchmark_view.py +0 -0
  98. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/benchmarks/__init__.py +0 -0
  99. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/benchmarks/run_list_params.py +0 -0
  100. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/benchmarks/run_list_scenario_runs_params.py +0 -0
  101. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/blueprint_build_log.py +0 -0
  102. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/blueprint_build_logs_list_view.py +0 -0
  103. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/blueprint_build_parameters.py +0 -0
  104. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/blueprint_create_params.py +0 -0
  105. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/blueprint_list_params.py +0 -0
  106. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/blueprint_list_view.py +0 -0
  107. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/blueprint_preview_params.py +0 -0
  108. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/blueprint_preview_view.py +0 -0
  109. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/blueprint_view.py +0 -0
  110. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devbox_async_execution_detail_view.py +0 -0
  111. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devbox_create_params.py +0 -0
  112. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devbox_create_ssh_key_response.py +0 -0
  113. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devbox_create_tunnel_params.py +0 -0
  114. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devbox_download_file_params.py +0 -0
  115. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devbox_execute_async_params.py +0 -0
  116. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devbox_execute_sync_params.py +0 -0
  117. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devbox_execution_detail_view.py +0 -0
  118. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devbox_list_disk_snapshots_params.py +0 -0
  119. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devbox_list_params.py +0 -0
  120. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devbox_list_view.py +0 -0
  121. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devbox_read_file_contents_params.py +0 -0
  122. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devbox_read_file_contents_response.py +0 -0
  123. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devbox_remove_tunnel_params.py +0 -0
  124. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devbox_snapshot_disk_async_params.py +0 -0
  125. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devbox_snapshot_disk_params.py +0 -0
  126. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devbox_snapshot_list_view.py +0 -0
  127. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devbox_snapshot_view.py +0 -0
  128. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devbox_tunnel_view.py +0 -0
  129. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devbox_update_params.py +0 -0
  130. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devbox_upload_file_params.py +0 -0
  131. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devbox_view.py +0 -0
  132. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devbox_write_file_contents_params.py +0 -0
  133. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/__init__.py +0 -0
  134. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/base_code_action.py +0 -0
  135. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/base_command.py +0 -0
  136. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/base_command_param.py +0 -0
  137. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/base_diagnostic.py +0 -0
  138. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/base_diagnostic_param.py +0 -0
  139. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/base_location.py +0 -0
  140. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/base_markup_content.py +0 -0
  141. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/base_parameter_information.py +0 -0
  142. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/base_range.py +0 -0
  143. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/base_range_param.py +0 -0
  144. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/base_signature.py +0 -0
  145. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/base_workspace_edit.py +0 -0
  146. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/base_workspace_edit_param.py +0 -0
  147. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/browser_create_params.py +0 -0
  148. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/browser_view.py +0 -0
  149. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/code_action_application_result.py +0 -0
  150. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/code_action_context_param.py +0 -0
  151. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/code_action_kind.py +0 -0
  152. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/code_action_trigger_kind.py +0 -0
  153. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/code_actions_response.py +0 -0
  154. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/code_description_param.py +0 -0
  155. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/code_segment_info_response.py +0 -0
  156. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/computer_create_params.py +0 -0
  157. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/computer_keyboard_interaction_params.py +0 -0
  158. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/computer_keyboard_interaction_response.py +0 -0
  159. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/computer_mouse_interaction_params.py +0 -0
  160. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/computer_mouse_interaction_response.py +0 -0
  161. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/computer_screen_interaction_params.py +0 -0
  162. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/computer_screen_interaction_response.py +0 -0
  163. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/computer_view.py +0 -0
  164. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/devbox_logs_list_view.py +0 -0
  165. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/devbox_snapshot_async_status_view.py +0 -0
  166. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/diagnostic_param.py +0 -0
  167. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/diagnostic_related_information_param.py +0 -0
  168. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/diagnostic_severity.py +0 -0
  169. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/diagnostic_tag.py +0 -0
  170. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/diagnostics_response.py +0 -0
  171. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/disk_snapshot_list_params.py +0 -0
  172. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/disk_snapshot_update_params.py +0 -0
  173. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/document_symbol.py +0 -0
  174. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/document_symbol_response.py +0 -0
  175. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/document_uri.py +0 -0
  176. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/execution_execute_async_params.py +0 -0
  177. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/execution_execute_sync_params.py +0 -0
  178. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/execution_retrieve_params.py +0 -0
  179. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/file_contents_response.py +0 -0
  180. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/file_definition_response.py +0 -0
  181. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/file_path.py +0 -0
  182. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/file_uri.py +0 -0
  183. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/formatting_response.py +0 -0
  184. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/health_status_response.py +0 -0
  185. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/integer.py +0 -0
  186. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/l_sp_any_param.py +0 -0
  187. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/location_param.py +0 -0
  188. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/log_list_params.py +0 -0
  189. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/lsp_apply_code_action_params.py +0 -0
  190. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/lsp_code_actions_params.py +0 -0
  191. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/lsp_diagnostics_params.py +0 -0
  192. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/lsp_document_symbols_params.py +0 -0
  193. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/lsp_file_definition_params.py +0 -0
  194. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/lsp_file_params.py +0 -0
  195. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/lsp_files_response.py +0 -0
  196. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/lsp_formatting_params.py +0 -0
  197. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/lsp_get_code_actions_for_diagnostic_params.py +0 -0
  198. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/lsp_get_code_actions_for_diagnostic_response.py +0 -0
  199. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/lsp_get_code_segment_info_params.py +0 -0
  200. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/lsp_get_signature_help_params.py +0 -0
  201. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/lsp_references_params.py +0 -0
  202. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/lsp_set_watch_directory_params.py +0 -0
  203. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/lsp_set_watch_directory_response.py +0 -0
  204. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/position.py +0 -0
  205. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/position_param.py +0 -0
  206. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/range.py +0 -0
  207. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/range_param.py +0 -0
  208. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/record_string_text_edit_array.py +0 -0
  209. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/record_string_text_edit_array_param.py +0 -0
  210. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/references_response.py +0 -0
  211. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/signature_help_response.py +0 -0
  212. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/symbol_kind.py +0 -0
  213. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/symbol_tag.py +0 -0
  214. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/symbol_type.py +0 -0
  215. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/text_edit.py +0 -0
  216. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/text_edit_param.py +0 -0
  217. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/u_ri.py +0 -0
  218. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/uinteger.py +0 -0
  219. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/devboxes/watched_file_response.py +0 -0
  220. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/input_context.py +0 -0
  221. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/input_context_param.py +0 -0
  222. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/repository_connection_list_view.py +0 -0
  223. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/repository_connection_view.py +0 -0
  224. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/repository_create_params.py +0 -0
  225. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/repository_inspection_details.py +0 -0
  226. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/repository_inspection_list_view.py +0 -0
  227. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/repository_list_params.py +0 -0
  228. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/repository_manifest_view.py +0 -0
  229. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/repository_refresh_params.py +0 -0
  230. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/scenario_create_params.py +0 -0
  231. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/scenario_definition_list_view.py +0 -0
  232. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/scenario_environment.py +0 -0
  233. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/scenario_environment_param.py +0 -0
  234. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/scenario_list_public_params.py +0 -0
  235. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/scenario_run_list_view.py +0 -0
  236. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/scenario_run_view.py +0 -0
  237. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/scenario_start_run_params.py +0 -0
  238. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/scenario_view.py +0 -0
  239. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/scenarios/__init__.py +0 -0
  240. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/scenarios/run_list_params.py +0 -0
  241. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/scenarios/scorer_create_params.py +0 -0
  242. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/scenarios/scorer_create_response.py +0 -0
  243. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/scenarios/scorer_list_params.py +0 -0
  244. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/scenarios/scorer_list_response.py +0 -0
  245. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/scenarios/scorer_retrieve_response.py +0 -0
  246. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/scenarios/scorer_update_params.py +0 -0
  247. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/scenarios/scorer_update_response.py +0 -0
  248. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/scenarios/scorer_validate_params.py +0 -0
  249. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/scenarios/scorer_validate_response.py +0 -0
  250. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/scoring_contract.py +0 -0
  251. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/scoring_contract_param.py +0 -0
  252. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/scoring_contract_result_view.py +0 -0
  253. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/scoring_function.py +0 -0
  254. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/scoring_function_param.py +0 -0
  255. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/scoring_function_result_view.py +0 -0
  256. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/secret_create_params.py +0 -0
  257. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/secret_list_view.py +0 -0
  258. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/secret_update_params.py +0 -0
  259. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/secret_view.py +0 -0
  260. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/shared/__init__.py +0 -0
  261. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/shared/after_idle.py +0 -0
  262. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/shared/code_mount_parameters.py +0 -0
  263. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/shared/launch_parameters.py +0 -0
  264. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/shared_params/__init__.py +0 -0
  265. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/shared_params/after_idle.py +0 -0
  266. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/shared_params/code_mount_parameters.py +0 -0
  267. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/src/runloop_api_client/types/shared_params/launch_parameters.py +0 -0
  268. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/tests/__init__.py +0 -0
  269. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/tests/api_resources/__init__.py +0 -0
  270. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/tests/api_resources/benchmarks/__init__.py +0 -0
  271. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/tests/api_resources/devboxes/__init__.py +0 -0
  272. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/tests/api_resources/scenarios/__init__.py +0 -0
  273. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/tests/sample_file.txt +0 -0
  274. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/tests/test_deepcopy.py +0 -0
  275. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/tests/test_extract_files.py +0 -0
  276. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/tests/test_files.py +0 -0
  277. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/tests/test_models.py +0 -0
  278. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/tests/test_qs.py +0 -0
  279. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/tests/test_required_args.py +0 -0
  280. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/tests/test_response.py +0 -0
  281. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/tests/test_streaming.py +0 -0
  282. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/tests/test_transform.py +0 -0
  283. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/tests/test_utils/test_proxy.py +0 -0
  284. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/tests/test_utils/test_typing.py +0 -0
  285. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/tests/utils.py +0 -0
  286. {runloop_api_client-0.42.0 → runloop_api_client-0.44.0}/uv.lock +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.44.0"
3
+ }
@@ -1,5 +1,51 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.44.0 (2025-06-21)
4
+
5
+ Full Changelog: [v0.43.0...v0.44.0](https://github.com/runloopai/api-client-python/compare/v0.43.0...v0.44.0)
6
+
7
+ ### Features
8
+
9
+ * **api:** api update ([8bd0a39](https://github.com/runloopai/api-client-python/commit/8bd0a3937ff3d5b3e03a34ab2fc291377bbc4203))
10
+ * **api:** api update ([8ebd055](https://github.com/runloopai/api-client-python/commit/8ebd055bb3760c7a01193df890ca7e56d7ff9c01))
11
+ * **client:** add support for aiohttp ([4237321](https://github.com/runloopai/api-client-python/commit/4237321688934fcc89a17588800ce33fb47d9633))
12
+
13
+
14
+ ### Bug Fixes
15
+
16
+ * **tests:** fix: tests which call HTTP endpoints directly with the example parameters ([038fe71](https://github.com/runloopai/api-client-python/commit/038fe71f5d0bee93bdcad12af69a8f5b09b6664f))
17
+
18
+
19
+ ### Chores
20
+
21
+ * **ci:** enable for pull requests ([f64b8a2](https://github.com/runloopai/api-client-python/commit/f64b8a2a52a28a86f25d8b8ad1998e9ce4dda542))
22
+ * **internal:** update conftest.py ([d840c86](https://github.com/runloopai/api-client-python/commit/d840c863eb3b080202874080e44b8ab0baa379c4))
23
+ * **readme:** update badges ([4b5af3f](https://github.com/runloopai/api-client-python/commit/4b5af3faf2f3cfbcee8474b864335eb0a4c0a78b))
24
+ * **tests:** add tests for httpx client instantiation & proxies ([938b9aa](https://github.com/runloopai/api-client-python/commit/938b9aa33ef7ae52809ca6e9111fc3265d70263d))
25
+
26
+
27
+ ### Documentation
28
+
29
+ * **client:** fix httpx.Timeout documentation reference ([b8df915](https://github.com/runloopai/api-client-python/commit/b8df91557df34f77ce5a6f85769305628d9f2a1d))
30
+
31
+ ## 0.43.0 (2025-06-14)
32
+
33
+ Full Changelog: [v0.42.0...v0.43.0](https://github.com/runloopai/api-client-python/compare/v0.42.0...v0.43.0)
34
+
35
+ ### Features
36
+
37
+ * **api:** api update ([695b29a](https://github.com/runloopai/api-client-python/commit/695b29a97bd2dcad3f90ee377ed0475a84ed1a2b))
38
+
39
+
40
+ ### Bug Fixes
41
+
42
+ * **client:** correctly parse binary response | stream ([1d815d4](https://github.com/runloopai/api-client-python/commit/1d815d468db24142174fe536c05dcd3ec49ee03f))
43
+
44
+
45
+ ### Chores
46
+
47
+ * **tests:** run tests in parallel ([fdeee42](https://github.com/runloopai/api-client-python/commit/fdeee42440c5df55af77cbad2423c7faab473dcd))
48
+
3
49
  ## 0.42.0 (2025-06-11)
4
50
 
5
51
  Full Changelog: [v0.41.0...v0.42.0](https://github.com/runloopai/api-client-python/compare/v0.41.0...v0.42.0)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: runloop_api_client
3
- Version: 0.42.0
3
+ Version: 0.44.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
@@ -27,11 +27,14 @@ Requires-Dist: httpx<1,>=0.23.0
27
27
  Requires-Dist: pydantic<3,>=1.9.0
28
28
  Requires-Dist: sniffio
29
29
  Requires-Dist: typing-extensions<5,>=4.10
30
+ Provides-Extra: aiohttp
31
+ Requires-Dist: aiohttp; extra == 'aiohttp'
32
+ Requires-Dist: httpx-aiohttp>=0.1.6; extra == 'aiohttp'
30
33
  Description-Content-Type: text/markdown
31
34
 
32
35
  # Runloop Python API library
33
36
 
34
- [![PyPI version](https://img.shields.io/pypi/v/runloop_api_client.svg)](https://pypi.org/project/runloop_api_client/)
37
+ [![PyPI version](https://github.com/runloopai/api-client-python/tree/main/<https://img.shields.io/pypi/v/runloop_api_client.svg?label=pypi%20(stable)>)](https://pypi.org/project/runloop_api_client/)
35
38
 
36
39
  The Runloop Python library provides convenient access to the Runloop REST API from any Python 3.8+
37
40
  application. The library includes type definitions for all request params and response fields,
@@ -95,6 +98,38 @@ asyncio.run(main())
95
98
 
96
99
  Functionality between the synchronous and asynchronous clients is otherwise identical.
97
100
 
101
+ ### With aiohttp
102
+
103
+ By default, the async client uses `httpx` for HTTP requests. However, for improved concurrency performance you may also use `aiohttp` as the HTTP backend.
104
+
105
+ You can enable this by installing `aiohttp`:
106
+
107
+ ```sh
108
+ # install from PyPI
109
+ pip install runloop_api_client[aiohttp]
110
+ ```
111
+
112
+ Then you can enable it by instantiating the client with `http_client=DefaultAioHttpClient()`:
113
+
114
+ ```python
115
+ import os
116
+ import asyncio
117
+ from runloop_api_client import DefaultAioHttpClient
118
+ from runloop_api_client import AsyncRunloop
119
+
120
+
121
+ async def main() -> None:
122
+ async with AsyncRunloop(
123
+ bearer_token=os.environ.get("RUNLOOP_API_KEY"), # This is the default and can be omitted
124
+ http_client=DefaultAioHttpClient(),
125
+ ) as client:
126
+ devbox_view = await client.devboxes.create()
127
+ print(devbox_view.id)
128
+
129
+
130
+ asyncio.run(main())
131
+ ```
132
+
98
133
  ## Using types
99
134
 
100
135
  Nested request parameters are [TypedDicts](https://docs.python.org/3/library/typing.html#typing.TypedDict). Responses are [Pydantic models](https://docs.pydantic.dev) which also provide helper methods for things like:
@@ -266,7 +301,7 @@ client.with_options(max_retries=5).devboxes.create()
266
301
  ### Timeouts
267
302
 
268
303
  By default requests time out after 1 minute. You can configure this with a `timeout` option,
269
- which accepts a float or an [`httpx.Timeout`](https://www.python-httpx.org/advanced/#fine-tuning-the-configuration) object:
304
+ which accepts a float or an [`httpx.Timeout`](https://www.python-httpx.org/advanced/timeouts/#fine-tuning-the-configuration) object:
270
305
 
271
306
  ```python
272
307
  from runloop_api_client import Runloop
@@ -1,6 +1,6 @@
1
1
  # Runloop Python API library
2
2
 
3
- [![PyPI version](https://img.shields.io/pypi/v/runloop_api_client.svg)](https://pypi.org/project/runloop_api_client/)
3
+ [![PyPI version](<https://img.shields.io/pypi/v/runloop_api_client.svg?label=pypi%20(stable)>)](https://pypi.org/project/runloop_api_client/)
4
4
 
5
5
  The Runloop Python library provides convenient access to the Runloop REST API from any Python 3.8+
6
6
  application. The library includes type definitions for all request params and response fields,
@@ -64,6 +64,38 @@ asyncio.run(main())
64
64
 
65
65
  Functionality between the synchronous and asynchronous clients is otherwise identical.
66
66
 
67
+ ### With aiohttp
68
+
69
+ By default, the async client uses `httpx` for HTTP requests. However, for improved concurrency performance you may also use `aiohttp` as the HTTP backend.
70
+
71
+ You can enable this by installing `aiohttp`:
72
+
73
+ ```sh
74
+ # install from PyPI
75
+ pip install runloop_api_client[aiohttp]
76
+ ```
77
+
78
+ Then you can enable it by instantiating the client with `http_client=DefaultAioHttpClient()`:
79
+
80
+ ```python
81
+ import os
82
+ import asyncio
83
+ from runloop_api_client import DefaultAioHttpClient
84
+ from runloop_api_client import AsyncRunloop
85
+
86
+
87
+ async def main() -> None:
88
+ async with AsyncRunloop(
89
+ bearer_token=os.environ.get("RUNLOOP_API_KEY"), # This is the default and can be omitted
90
+ http_client=DefaultAioHttpClient(),
91
+ ) as client:
92
+ devbox_view = await client.devboxes.create()
93
+ print(devbox_view.id)
94
+
95
+
96
+ asyncio.run(main())
97
+ ```
98
+
67
99
  ## Using types
68
100
 
69
101
  Nested request parameters are [TypedDicts](https://docs.python.org/3/library/typing.html#typing.TypedDict). Responses are [Pydantic models](https://docs.pydantic.dev) which also provide helper methods for things like:
@@ -235,7 +267,7 @@ client.with_options(max_retries=5).devboxes.create()
235
267
  ### Timeouts
236
268
 
237
269
  By default requests time out after 1 minute. You can configure this with a `timeout` option,
238
- which accepts a float or an [`httpx.Timeout`](https://www.python-httpx.org/advanced/#fine-tuning-the-configuration) object:
270
+ which accepts a float or an [`httpx.Timeout`](https://www.python-httpx.org/advanced/timeouts/#fine-tuning-the-configuration) object:
239
271
 
240
272
  ```python
241
273
  from runloop_api_client import Runloop
@@ -268,6 +268,7 @@ from runloop_api_client.types import (
268
268
  ScenarioEnvironment,
269
269
  ScenarioRunListView,
270
270
  ScenarioRunView,
271
+ ScenarioUpdateParameters,
271
272
  ScenarioView,
272
273
  ScoringContract,
273
274
  ScoringContractResultView,
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "runloop_api_client"
3
- version = "0.42.0"
3
+ version = "0.44.0"
4
4
  description = "The official Python library for the runloop API"
5
5
  dynamic = ["readme"]
6
6
  license = "MIT"
@@ -37,6 +37,8 @@ classifiers = [
37
37
  Homepage = "https://github.com/runloopai/api-client-python"
38
38
  Repository = "https://github.com/runloopai/api-client-python"
39
39
 
40
+ [project.optional-dependencies]
41
+ aiohttp = ["aiohttp", "httpx_aiohttp>=0.1.6"]
40
42
 
41
43
  [tool.rye]
42
44
  managed = true
@@ -54,6 +56,7 @@ dev-dependencies = [
54
56
  "importlib-metadata>=6.7.0",
55
57
  "rich>=13.7.1",
56
58
  "nest_asyncio==1.6.0",
59
+ "pytest-xdist>=3.6.1",
57
60
  ]
58
61
 
59
62
  [tool.rye.scripts]
@@ -125,7 +128,7 @@ replacement = '[\1](https://github.com/runloopai/api-client-python/tree/main/\g<
125
128
 
126
129
  [tool.pytest.ini_options]
127
130
  testpaths = ["tests"]
128
- addopts = "--tb=short"
131
+ addopts = "--tb=short -n auto"
129
132
  xfail_strict = true
130
133
  asyncio_mode = "auto"
131
134
  asyncio_default_fixture_loop_scope = "session"
@@ -10,6 +10,13 @@
10
10
  # universal: false
11
11
 
12
12
  -e file:.
13
+ aiohappyeyeballs==2.6.1
14
+ # via aiohttp
15
+ aiohttp==3.12.8
16
+ # via httpx-aiohttp
17
+ # via runloop-api-client
18
+ aiosignal==1.3.2
19
+ # via aiohttp
13
20
  annotated-types==0.6.0
14
21
  # via pydantic
15
22
  anyio==4.4.0
@@ -17,6 +24,10 @@ anyio==4.4.0
17
24
  # via runloop-api-client
18
25
  argcomplete==3.1.2
19
26
  # via nox
27
+ async-timeout==5.0.1
28
+ # via aiohttp
29
+ attrs==25.3.0
30
+ # via aiohttp
20
31
  certifi==2023.7.22
21
32
  # via httpcore
22
33
  # via httpx
@@ -30,18 +41,27 @@ distro==1.8.0
30
41
  exceptiongroup==1.2.2
31
42
  # via anyio
32
43
  # via pytest
44
+ execnet==2.1.1
45
+ # via pytest-xdist
33
46
  filelock==3.12.4
34
47
  # via virtualenv
48
+ frozenlist==1.6.2
49
+ # via aiohttp
50
+ # via aiosignal
35
51
  h11==0.14.0
36
52
  # via httpcore
37
53
  httpcore==1.0.2
38
54
  # via httpx
39
55
  httpx==0.28.1
56
+ # via httpx-aiohttp
40
57
  # via respx
41
58
  # via runloop-api-client
59
+ httpx-aiohttp==0.1.6
60
+ # via runloop-api-client
42
61
  idna==3.4
43
62
  # via anyio
44
63
  # via httpx
64
+ # via yarl
45
65
  importlib-metadata==7.0.0
46
66
  iniconfig==2.0.0
47
67
  # via pytest
@@ -49,6 +69,9 @@ markdown-it-py==3.0.0
49
69
  # via rich
50
70
  mdurl==0.1.2
51
71
  # via markdown-it-py
72
+ multidict==6.4.4
73
+ # via aiohttp
74
+ # via yarl
52
75
  mypy==1.14.1
53
76
  mypy-extensions==1.0.0
54
77
  # via mypy
@@ -63,6 +86,9 @@ platformdirs==3.11.0
63
86
  # via virtualenv
64
87
  pluggy==1.5.0
65
88
  # via pytest
89
+ propcache==0.3.1
90
+ # via aiohttp
91
+ # via yarl
66
92
  pydantic==2.10.3
67
93
  # via runloop-api-client
68
94
  pydantic-core==2.27.1
@@ -72,7 +98,9 @@ pygments==2.18.0
72
98
  pyright==1.1.399
73
99
  pytest==8.3.3
74
100
  # via pytest-asyncio
101
+ # via pytest-xdist
75
102
  pytest-asyncio==0.24.0
103
+ pytest-xdist==3.7.0
76
104
  python-dateutil==2.8.2
77
105
  # via time-machine
78
106
  pytz==2023.3.post1
@@ -93,6 +121,7 @@ tomli==2.0.2
93
121
  # via pytest
94
122
  typing-extensions==4.12.2
95
123
  # via anyio
124
+ # via multidict
96
125
  # via mypy
97
126
  # via pydantic
98
127
  # via pydantic-core
@@ -100,5 +129,7 @@ typing-extensions==4.12.2
100
129
  # via runloop-api-client
101
130
  virtualenv==20.24.5
102
131
  # via nox
132
+ yarl==1.20.0
133
+ # via aiohttp
103
134
  zipp==3.17.0
104
135
  # via importlib-metadata
@@ -10,11 +10,22 @@
10
10
  # universal: false
11
11
 
12
12
  -e file:.
13
+ aiohappyeyeballs==2.6.1
14
+ # via aiohttp
15
+ aiohttp==3.12.8
16
+ # via httpx-aiohttp
17
+ # via runloop-api-client
18
+ aiosignal==1.3.2
19
+ # via aiohttp
13
20
  annotated-types==0.6.0
14
21
  # via pydantic
15
22
  anyio==4.4.0
16
23
  # via httpx
17
24
  # via runloop-api-client
25
+ async-timeout==5.0.1
26
+ # via aiohttp
27
+ attrs==25.3.0
28
+ # via aiohttp
18
29
  certifi==2023.7.22
19
30
  # via httpcore
20
31
  # via httpx
@@ -22,15 +33,28 @@ distro==1.8.0
22
33
  # via runloop-api-client
23
34
  exceptiongroup==1.2.2
24
35
  # via anyio
36
+ frozenlist==1.6.2
37
+ # via aiohttp
38
+ # via aiosignal
25
39
  h11==0.14.0
26
40
  # via httpcore
27
41
  httpcore==1.0.2
28
42
  # via httpx
29
43
  httpx==0.28.1
44
+ # via httpx-aiohttp
45
+ # via runloop-api-client
46
+ httpx-aiohttp==0.1.6
30
47
  # via runloop-api-client
31
48
  idna==3.4
32
49
  # via anyio
33
50
  # via httpx
51
+ # via yarl
52
+ multidict==6.4.4
53
+ # via aiohttp
54
+ # via yarl
55
+ propcache==0.3.1
56
+ # via aiohttp
57
+ # via yarl
34
58
  pydantic==2.10.3
35
59
  # via runloop-api-client
36
60
  pydantic-core==2.27.1
@@ -40,6 +64,9 @@ sniffio==1.3.0
40
64
  # via runloop-api-client
41
65
  typing-extensions==4.12.2
42
66
  # via anyio
67
+ # via multidict
43
68
  # via pydantic
44
69
  # via pydantic-core
45
70
  # via runloop-api-client
71
+ yarl==1.20.0
72
+ # via aiohttp
@@ -26,7 +26,7 @@ from ._exceptions import (
26
26
  UnprocessableEntityError,
27
27
  APIResponseValidationError,
28
28
  )
29
- from ._base_client import DefaultHttpxClient, DefaultAsyncHttpxClient
29
+ from ._base_client import DefaultHttpxClient, DefaultAioHttpClient, DefaultAsyncHttpxClient
30
30
  from ._utils._logs import setup_logging as _setup_logging
31
31
 
32
32
  __all__ = [
@@ -68,6 +68,7 @@ __all__ = [
68
68
  "DEFAULT_CONNECTION_LIMITS",
69
69
  "DefaultHttpxClient",
70
70
  "DefaultAsyncHttpxClient",
71
+ "DefaultAioHttpClient",
71
72
  ]
72
73
 
73
74
  if not _t.TYPE_CHECKING:
@@ -1071,7 +1071,14 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
1071
1071
  ) -> ResponseT:
1072
1072
  origin = get_origin(cast_to) or cast_to
1073
1073
 
1074
- if inspect.isclass(origin) and issubclass(origin, BaseAPIResponse):
1074
+ if (
1075
+ inspect.isclass(origin)
1076
+ and issubclass(origin, BaseAPIResponse)
1077
+ # we only want to actually return the custom BaseAPIResponse class if we're
1078
+ # returning the raw response, or if we're not streaming SSE, as if we're streaming
1079
+ # SSE then `cast_to` doesn't actively reflect the type we need to parse into
1080
+ and (not stream or bool(response.request.headers.get(RAW_RESPONSE_HEADER)))
1081
+ ):
1075
1082
  if not issubclass(origin, APIResponse):
1076
1083
  raise TypeError(f"API Response types must subclass {APIResponse}; Received {origin}")
1077
1084
 
@@ -1282,6 +1289,24 @@ class _DefaultAsyncHttpxClient(httpx.AsyncClient):
1282
1289
  super().__init__(**kwargs)
1283
1290
 
1284
1291
 
1292
+ try:
1293
+ import httpx_aiohttp
1294
+ except ImportError:
1295
+
1296
+ class _DefaultAioHttpClient(httpx.AsyncClient):
1297
+ def __init__(self, **_kwargs: Any) -> None:
1298
+ raise RuntimeError("To use the aiohttp client you must have installed the package with the `aiohttp` extra")
1299
+ else:
1300
+
1301
+ class _DefaultAioHttpClient(httpx_aiohttp.HttpxAiohttpClient): # type: ignore
1302
+ def __init__(self, **kwargs: Any) -> None:
1303
+ kwargs.setdefault("timeout", DEFAULT_TIMEOUT)
1304
+ kwargs.setdefault("limits", DEFAULT_CONNECTION_LIMITS)
1305
+ kwargs.setdefault("follow_redirects", True)
1306
+
1307
+ super().__init__(**kwargs)
1308
+
1309
+
1285
1310
  if TYPE_CHECKING:
1286
1311
  DefaultAsyncHttpxClient = httpx.AsyncClient
1287
1312
  """An alias to `httpx.AsyncClient` that provides the same defaults that this SDK
@@ -1290,8 +1315,12 @@ if TYPE_CHECKING:
1290
1315
  This is useful because overriding the `http_client` with your own instance of
1291
1316
  `httpx.AsyncClient` will result in httpx's defaults being used, not ours.
1292
1317
  """
1318
+
1319
+ DefaultAioHttpClient = httpx.AsyncClient
1320
+ """An alias to `httpx.AsyncClient` that changes the default HTTP transport to `aiohttp`."""
1293
1321
  else:
1294
1322
  DefaultAsyncHttpxClient = _DefaultAsyncHttpxClient
1323
+ DefaultAioHttpClient = _DefaultAioHttpClient
1295
1324
 
1296
1325
 
1297
1326
  class AsyncHttpxClientWrapper(DefaultAsyncHttpxClient):
@@ -1574,7 +1603,14 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1574
1603
  ) -> ResponseT:
1575
1604
  origin = get_origin(cast_to) or cast_to
1576
1605
 
1577
- if inspect.isclass(origin) and issubclass(origin, BaseAPIResponse):
1606
+ if (
1607
+ inspect.isclass(origin)
1608
+ and issubclass(origin, BaseAPIResponse)
1609
+ # we only want to actually return the custom BaseAPIResponse class if we're
1610
+ # returning the raw response, or if we're not streaming SSE, as if we're streaming
1611
+ # SSE then `cast_to` doesn't actively reflect the type we need to parse into
1612
+ and (not stream or bool(response.request.headers.get(RAW_RESPONSE_HEADER)))
1613
+ ):
1578
1614
  if not issubclass(origin, AsyncAPIResponse):
1579
1615
  raise TypeError(f"API Response types must subclass {AsyncAPIResponse}; Received {origin}")
1580
1616
 
@@ -1,4 +1,4 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
  __title__ = "runloop_api_client"
4
- __version__ = "0.42.0" # x-release-please-version
4
+ __version__ = "0.44.0" # x-release-please-version
@@ -185,12 +185,12 @@ class ScenariosResource(SyncAPIResource):
185
185
  self,
186
186
  id: str,
187
187
  *,
188
- input_context: InputContextParam,
189
- name: str,
190
- scoring_contract: ScoringContractParam,
191
188
  environment_parameters: Optional[ScenarioEnvironmentParam] | NotGiven = NOT_GIVEN,
189
+ input_context: Optional[InputContextParam] | NotGiven = NOT_GIVEN,
192
190
  metadata: Optional[Dict[str, str]] | NotGiven = NOT_GIVEN,
191
+ name: Optional[str] | NotGiven = NOT_GIVEN,
193
192
  reference_output: Optional[str] | NotGiven = NOT_GIVEN,
193
+ scoring_contract: Optional[ScoringContractParam] | NotGiven = NOT_GIVEN,
194
194
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
195
195
  # The extra values given here take precedence over values defined on the client or passed to this method.
196
196
  extra_headers: Headers | None = None,
@@ -201,23 +201,24 @@ class ScenariosResource(SyncAPIResource):
201
201
  ) -> ScenarioView:
202
202
  """
203
203
  Update a Scenario, a repeatable AI coding evaluation test that defines the
204
- starting environment as well as evaluation success criteria.
204
+ starting environment as well as evaluation success criteria. Only provided
205
+ fields will be updated.
205
206
 
206
207
  Args:
207
- input_context: The input context for the Scenario.
208
-
209
- name: Name of the scenario.
210
-
211
- scoring_contract: The scoring contract for the Scenario.
212
-
213
208
  environment_parameters: The Environment in which the Scenario will run.
214
209
 
210
+ input_context: The input context for the Scenario.
211
+
215
212
  metadata: User defined metadata to attach to the scenario for organization.
216
213
 
214
+ name: Name of the scenario.
215
+
217
216
  reference_output: A string representation of the reference output to solve the scenario. Commonly
218
217
  can be the result of a git diff or a sequence of command actions to apply to the
219
218
  environment.
220
219
 
220
+ scoring_contract: The scoring contract for the Scenario.
221
+
221
222
  extra_headers: Send extra headers
222
223
 
223
224
  extra_query: Add additional query parameters to the request
@@ -234,12 +235,12 @@ class ScenariosResource(SyncAPIResource):
234
235
  f"/v1/scenarios/{id}",
235
236
  body=maybe_transform(
236
237
  {
237
- "input_context": input_context,
238
- "name": name,
239
- "scoring_contract": scoring_contract,
240
238
  "environment_parameters": environment_parameters,
239
+ "input_context": input_context,
241
240
  "metadata": metadata,
241
+ "name": name,
242
242
  "reference_output": reference_output,
243
+ "scoring_contract": scoring_contract,
243
244
  },
244
245
  scenario_update_params.ScenarioUpdateParams,
245
246
  ),
@@ -256,6 +257,7 @@ class ScenariosResource(SyncAPIResource):
256
257
  def list(
257
258
  self,
258
259
  *,
260
+ benchmark_id: str | NotGiven = NOT_GIVEN,
259
261
  limit: int | NotGiven = NOT_GIVEN,
260
262
  name: str | NotGiven = NOT_GIVEN,
261
263
  starting_after: str | NotGiven = NOT_GIVEN,
@@ -266,12 +268,13 @@ class ScenariosResource(SyncAPIResource):
266
268
  extra_body: Body | None = None,
267
269
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
268
270
  ) -> SyncScenariosCursorIDPage[ScenarioView]:
269
- """List all Scenarios matching filter.
271
+ """
272
+ List all Scenarios matching filter.
270
273
 
271
274
  Args:
272
- limit: The limit of items to return.
275
+ benchmark_id: Filter scenarios by benchmark ID.
273
276
 
274
- Default is 20.
277
+ limit: The limit of items to return. Default is 20.
275
278
 
276
279
  name: Query for Scenarios with a given name.
277
280
 
@@ -295,6 +298,7 @@ class ScenariosResource(SyncAPIResource):
295
298
  timeout=timeout,
296
299
  query=maybe_transform(
297
300
  {
301
+ "benchmark_id": benchmark_id,
298
302
  "limit": limit,
299
303
  "name": name,
300
304
  "starting_after": starting_after,
@@ -608,12 +612,12 @@ class AsyncScenariosResource(AsyncAPIResource):
608
612
  self,
609
613
  id: str,
610
614
  *,
611
- input_context: InputContextParam,
612
- name: str,
613
- scoring_contract: ScoringContractParam,
614
615
  environment_parameters: Optional[ScenarioEnvironmentParam] | NotGiven = NOT_GIVEN,
616
+ input_context: Optional[InputContextParam] | NotGiven = NOT_GIVEN,
615
617
  metadata: Optional[Dict[str, str]] | NotGiven = NOT_GIVEN,
618
+ name: Optional[str] | NotGiven = NOT_GIVEN,
616
619
  reference_output: Optional[str] | NotGiven = NOT_GIVEN,
620
+ scoring_contract: Optional[ScoringContractParam] | NotGiven = NOT_GIVEN,
617
621
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
618
622
  # The extra values given here take precedence over values defined on the client or passed to this method.
619
623
  extra_headers: Headers | None = None,
@@ -624,23 +628,24 @@ class AsyncScenariosResource(AsyncAPIResource):
624
628
  ) -> ScenarioView:
625
629
  """
626
630
  Update a Scenario, a repeatable AI coding evaluation test that defines the
627
- starting environment as well as evaluation success criteria.
631
+ starting environment as well as evaluation success criteria. Only provided
632
+ fields will be updated.
628
633
 
629
634
  Args:
630
- input_context: The input context for the Scenario.
631
-
632
- name: Name of the scenario.
633
-
634
- scoring_contract: The scoring contract for the Scenario.
635
-
636
635
  environment_parameters: The Environment in which the Scenario will run.
637
636
 
637
+ input_context: The input context for the Scenario.
638
+
638
639
  metadata: User defined metadata to attach to the scenario for organization.
639
640
 
641
+ name: Name of the scenario.
642
+
640
643
  reference_output: A string representation of the reference output to solve the scenario. Commonly
641
644
  can be the result of a git diff or a sequence of command actions to apply to the
642
645
  environment.
643
646
 
647
+ scoring_contract: The scoring contract for the Scenario.
648
+
644
649
  extra_headers: Send extra headers
645
650
 
646
651
  extra_query: Add additional query parameters to the request
@@ -657,12 +662,12 @@ class AsyncScenariosResource(AsyncAPIResource):
657
662
  f"/v1/scenarios/{id}",
658
663
  body=await async_maybe_transform(
659
664
  {
660
- "input_context": input_context,
661
- "name": name,
662
- "scoring_contract": scoring_contract,
663
665
  "environment_parameters": environment_parameters,
666
+ "input_context": input_context,
664
667
  "metadata": metadata,
668
+ "name": name,
665
669
  "reference_output": reference_output,
670
+ "scoring_contract": scoring_contract,
666
671
  },
667
672
  scenario_update_params.ScenarioUpdateParams,
668
673
  ),
@@ -679,6 +684,7 @@ class AsyncScenariosResource(AsyncAPIResource):
679
684
  def list(
680
685
  self,
681
686
  *,
687
+ benchmark_id: str | NotGiven = NOT_GIVEN,
682
688
  limit: int | NotGiven = NOT_GIVEN,
683
689
  name: str | NotGiven = NOT_GIVEN,
684
690
  starting_after: str | NotGiven = NOT_GIVEN,
@@ -689,12 +695,13 @@ class AsyncScenariosResource(AsyncAPIResource):
689
695
  extra_body: Body | None = None,
690
696
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
691
697
  ) -> AsyncPaginator[ScenarioView, AsyncScenariosCursorIDPage[ScenarioView]]:
692
- """List all Scenarios matching filter.
698
+ """
699
+ List all Scenarios matching filter.
693
700
 
694
701
  Args:
695
- limit: The limit of items to return.
702
+ benchmark_id: Filter scenarios by benchmark ID.
696
703
 
697
- Default is 20.
704
+ limit: The limit of items to return. Default is 20.
698
705
 
699
706
  name: Query for Scenarios with a given name.
700
707
 
@@ -718,6 +725,7 @@ class AsyncScenariosResource(AsyncAPIResource):
718
725
  timeout=timeout,
719
726
  query=maybe_transform(
720
727
  {
728
+ "benchmark_id": benchmark_id,
721
729
  "limit": limit,
722
730
  "name": name,
723
731
  "starting_after": starting_after,
@@ -8,6 +8,9 @@ __all__ = ["ScenarioListParams"]
8
8
 
9
9
 
10
10
  class ScenarioListParams(TypedDict, total=False):
11
+ benchmark_id: str
12
+ """Filter scenarios by benchmark ID."""
13
+
11
14
  limit: int
12
15
  """The limit of items to return. Default is 20."""
13
16