runloop-api-client 0.29.0__tar.gz → 0.31.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 (280) hide show
  1. runloop_api_client-0.31.0/.release-please-manifest.json +3 -0
  2. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/CHANGELOG.md +48 -0
  3. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/PKG-INFO +6 -6
  4. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/README.md +5 -5
  5. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/api.md +22 -14
  6. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/pyproject.toml +3 -2
  7. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/requirements-dev.lock +1 -1
  8. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/_base_client.py +40 -2
  9. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/_models.py +1 -2
  10. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/_utils/_transform.py +47 -2
  11. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/_utils/_typing.py +3 -1
  12. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/_version.py +1 -1
  13. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/resources/benchmarks/benchmarks.py +32 -21
  14. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/resources/blueprints.py +92 -0
  15. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/resources/devboxes/devboxes.py +4 -4
  16. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/resources/scenarios/scenarios.py +45 -25
  17. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/resources/scenarios/scorers.py +4 -4
  18. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/__init__.py +9 -4
  19. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/benchmark_create_params.py +3 -0
  20. runloop_api_client-0.31.0/src/runloop_api_client/types/benchmark_create_response.py +26 -0
  21. runloop_api_client-0.31.0/src/runloop_api_client/types/benchmark_list_public_response.py +26 -0
  22. runloop_api_client-0.29.0/src/runloop_api_client/types/benchmark_view.py → runloop_api_client-0.31.0/src/runloop_api_client/types/benchmark_list_response.py +6 -3
  23. runloop_api_client-0.31.0/src/runloop_api_client/types/benchmark_retrieve_response.py +26 -0
  24. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/benchmark_run_view.py +18 -1
  25. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/blueprint_view.py +3 -0
  26. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/scenario_create_params.py +3 -0
  27. runloop_api_client-0.31.0/src/runloop_api_client/types/scenario_create_response.py +40 -0
  28. runloop_api_client-0.31.0/src/runloop_api_client/types/scenario_list_public_response.py +40 -0
  29. runloop_api_client-0.29.0/src/runloop_api_client/types/scenario_view.py → runloop_api_client-0.31.0/src/runloop_api_client/types/scenario_list_response.py +5 -2
  30. runloop_api_client-0.31.0/src/runloop_api_client/types/scenario_retrieve_response.py +40 -0
  31. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/scenario_run_view.py +1 -1
  32. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/scenario_update_params.py +3 -0
  33. runloop_api_client-0.31.0/src/runloop_api_client/types/scenario_update_response.py +40 -0
  34. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/scenarios/scorer_create_params.py +1 -1
  35. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/scenarios/scorer_update_params.py +1 -1
  36. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/shared/launch_parameters.py +6 -1
  37. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/shared_params/launch_parameters.py +6 -1
  38. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/tests/api_resources/scenarios/test_scorers.py +4 -2
  39. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/tests/api_resources/test_benchmarks.py +42 -31
  40. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/tests/api_resources/test_blueprints.py +84 -4
  41. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/tests/api_resources/test_devboxes.py +10 -8
  42. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/tests/api_resources/test_scenarios.py +69 -43
  43. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/tests/conftest.py +1 -1
  44. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/tests/test_client.py +1 -1
  45. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/tests/test_models.py +4 -1
  46. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/tests/test_transform.py +20 -1
  47. runloop_api_client-0.29.0/.release-please-manifest.json +0 -3
  48. runloop_api_client-0.29.0/src/runloop_api_client/types/benchmark_list_view.py +0 -19
  49. runloop_api_client-0.29.0/src/runloop_api_client/types/scenario_list_view.py +0 -19
  50. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/.gitignore +0 -0
  51. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/CONTRIBUTING.md +0 -0
  52. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/LICENSE +0 -0
  53. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/SECURITY.md +0 -0
  54. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/bin/check-release-environment +0 -0
  55. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/bin/publish-pypi +0 -0
  56. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/examples/.keep +0 -0
  57. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/mypy.ini +0 -0
  58. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/noxfile.py +0 -0
  59. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/release-please-config.json +0 -0
  60. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/requirements.lock +0 -0
  61. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop/lib/.keep +0 -0
  62. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/__init__.py +0 -0
  63. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/_client.py +0 -0
  64. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/_compat.py +0 -0
  65. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/_constants.py +0 -0
  66. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/_exceptions.py +0 -0
  67. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/_files.py +0 -0
  68. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/_qs.py +0 -0
  69. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/_resource.py +0 -0
  70. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/_response.py +0 -0
  71. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/_streaming.py +0 -0
  72. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/_types.py +0 -0
  73. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/_utils/__init__.py +0 -0
  74. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/_utils/_logs.py +0 -0
  75. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/_utils/_proxy.py +0 -0
  76. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/_utils/_reflection.py +0 -0
  77. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/_utils/_streams.py +0 -0
  78. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/_utils/_sync.py +0 -0
  79. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/_utils/_utils.py +0 -0
  80. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/lib/.keep +0 -0
  81. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/lib/polling.py +0 -0
  82. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/lib/polling_async.py +0 -0
  83. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/pagination.py +0 -0
  84. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/py.typed +0 -0
  85. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/resources/__init__.py +0 -0
  86. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/resources/benchmarks/__init__.py +0 -0
  87. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/resources/benchmarks/runs.py +0 -0
  88. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/resources/devboxes/__init__.py +0 -0
  89. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/resources/devboxes/browsers.py +0 -0
  90. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/resources/devboxes/computers.py +0 -0
  91. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/resources/devboxes/disk_snapshots.py +0 -0
  92. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/resources/devboxes/executions.py +0 -0
  93. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/resources/devboxes/logs.py +0 -0
  94. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/resources/devboxes/lsp.py +0 -0
  95. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/resources/repositories.py +0 -0
  96. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/resources/scenarios/__init__.py +0 -0
  97. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/resources/scenarios/runs.py +0 -0
  98. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/benchmark_list_params.py +0 -0
  99. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/benchmark_list_public_params.py +0 -0
  100. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/benchmark_run_list_view.py +0 -0
  101. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/benchmark_start_run_params.py +0 -0
  102. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/benchmarks/__init__.py +0 -0
  103. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/benchmarks/run_list_params.py +0 -0
  104. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/blueprint_build_log.py +0 -0
  105. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/blueprint_build_logs_list_view.py +0 -0
  106. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/blueprint_build_parameters.py +0 -0
  107. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/blueprint_create_params.py +0 -0
  108. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/blueprint_list_params.py +0 -0
  109. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/blueprint_list_view.py +0 -0
  110. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/blueprint_preview_params.py +0 -0
  111. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/blueprint_preview_view.py +0 -0
  112. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devbox_async_execution_detail_view.py +0 -0
  113. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devbox_create_params.py +0 -0
  114. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devbox_create_ssh_key_response.py +0 -0
  115. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devbox_create_tunnel_params.py +0 -0
  116. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devbox_download_file_params.py +0 -0
  117. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devbox_execute_async_params.py +0 -0
  118. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devbox_execute_sync_params.py +0 -0
  119. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devbox_execution_detail_view.py +0 -0
  120. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devbox_list_disk_snapshots_params.py +0 -0
  121. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devbox_list_params.py +0 -0
  122. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devbox_list_view.py +0 -0
  123. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devbox_read_file_contents_params.py +0 -0
  124. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devbox_read_file_contents_response.py +0 -0
  125. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devbox_remove_tunnel_params.py +0 -0
  126. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devbox_snapshot_disk_params.py +0 -0
  127. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devbox_snapshot_list_view.py +0 -0
  128. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devbox_snapshot_view.py +0 -0
  129. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devbox_tunnel_view.py +0 -0
  130. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devbox_update_params.py +0 -0
  131. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devbox_upload_file_params.py +0 -0
  132. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devbox_view.py +0 -0
  133. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devbox_write_file_contents_params.py +0 -0
  134. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/__init__.py +0 -0
  135. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/base_code_action.py +0 -0
  136. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/base_command.py +0 -0
  137. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/base_command_param.py +0 -0
  138. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/base_diagnostic.py +0 -0
  139. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/base_diagnostic_param.py +0 -0
  140. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/base_location.py +0 -0
  141. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/base_markup_content.py +0 -0
  142. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/base_parameter_information.py +0 -0
  143. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/base_range.py +0 -0
  144. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/base_range_param.py +0 -0
  145. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/base_signature.py +0 -0
  146. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/base_workspace_edit.py +0 -0
  147. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/base_workspace_edit_param.py +0 -0
  148. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/browser_create_params.py +0 -0
  149. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/browser_view.py +0 -0
  150. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/code_action_application_result.py +0 -0
  151. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/code_action_context_param.py +0 -0
  152. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/code_action_kind.py +0 -0
  153. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/code_action_trigger_kind.py +0 -0
  154. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/code_actions_response.py +0 -0
  155. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/code_description_param.py +0 -0
  156. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/code_segment_info_response.py +0 -0
  157. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/computer_create_params.py +0 -0
  158. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/computer_keyboard_interaction_params.py +0 -0
  159. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/computer_keyboard_interaction_response.py +0 -0
  160. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/computer_mouse_interaction_params.py +0 -0
  161. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/computer_mouse_interaction_response.py +0 -0
  162. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/computer_screen_interaction_params.py +0 -0
  163. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/computer_screen_interaction_response.py +0 -0
  164. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/computer_view.py +0 -0
  165. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/devbox_logs_list_view.py +0 -0
  166. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/diagnostic_param.py +0 -0
  167. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/diagnostic_related_information_param.py +0 -0
  168. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/diagnostic_severity.py +0 -0
  169. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/diagnostic_tag.py +0 -0
  170. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/diagnostics_response.py +0 -0
  171. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/disk_snapshot_list_params.py +0 -0
  172. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/disk_snapshot_update_params.py +0 -0
  173. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/document_symbol.py +0 -0
  174. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/document_symbol_response.py +0 -0
  175. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/document_uri.py +0 -0
  176. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/execution_execute_async_params.py +0 -0
  177. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/execution_execute_sync_params.py +0 -0
  178. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/execution_retrieve_params.py +0 -0
  179. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/file_contents_response.py +0 -0
  180. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/file_definition_response.py +0 -0
  181. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/file_path.py +0 -0
  182. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/file_uri.py +0 -0
  183. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/formatting_response.py +0 -0
  184. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/health_status_response.py +0 -0
  185. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/integer.py +0 -0
  186. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/l_sp_any_param.py +0 -0
  187. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/location_param.py +0 -0
  188. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/log_list_params.py +0 -0
  189. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/lsp_apply_code_action_params.py +0 -0
  190. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/lsp_code_actions_params.py +0 -0
  191. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/lsp_diagnostics_params.py +0 -0
  192. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/lsp_document_symbols_params.py +0 -0
  193. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/lsp_file_definition_params.py +0 -0
  194. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/lsp_file_params.py +0 -0
  195. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/lsp_files_response.py +0 -0
  196. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/lsp_formatting_params.py +0 -0
  197. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/lsp_get_code_actions_for_diagnostic_params.py +0 -0
  198. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/lsp_get_code_actions_for_diagnostic_response.py +0 -0
  199. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/lsp_get_code_segment_info_params.py +0 -0
  200. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/lsp_get_signature_help_params.py +0 -0
  201. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/lsp_references_params.py +0 -0
  202. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/lsp_set_watch_directory_params.py +0 -0
  203. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/lsp_set_watch_directory_response.py +0 -0
  204. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/position.py +0 -0
  205. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/position_param.py +0 -0
  206. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/range.py +0 -0
  207. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/range_param.py +0 -0
  208. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/record_string_text_edit_array.py +0 -0
  209. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/record_string_text_edit_array_param.py +0 -0
  210. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/references_response.py +0 -0
  211. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/signature_help_response.py +0 -0
  212. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/symbol_kind.py +0 -0
  213. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/symbol_tag.py +0 -0
  214. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/symbol_type.py +0 -0
  215. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/text_edit.py +0 -0
  216. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/text_edit_param.py +0 -0
  217. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/u_ri.py +0 -0
  218. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/uinteger.py +0 -0
  219. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/devboxes/watched_file_response.py +0 -0
  220. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/input_context.py +0 -0
  221. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/input_context_param.py +0 -0
  222. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/repository_connection_list_view.py +0 -0
  223. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/repository_connection_view.py +0 -0
  224. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/repository_create_params.py +0 -0
  225. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/repository_list_params.py +0 -0
  226. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/repository_version_details.py +0 -0
  227. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/repository_version_list_view.py +0 -0
  228. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/scenario_environment.py +0 -0
  229. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/scenario_environment_param.py +0 -0
  230. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/scenario_list_params.py +0 -0
  231. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/scenario_list_public_params.py +0 -0
  232. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/scenario_run_list_view.py +0 -0
  233. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/scenario_start_run_params.py +0 -0
  234. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/scenarios/__init__.py +0 -0
  235. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/scenarios/run_list_params.py +0 -0
  236. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/scenarios/scorer_create_response.py +0 -0
  237. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/scenarios/scorer_list_params.py +0 -0
  238. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/scenarios/scorer_list_response.py +0 -0
  239. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/scenarios/scorer_retrieve_response.py +0 -0
  240. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/scenarios/scorer_update_response.py +0 -0
  241. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/scenarios/scorer_validate_params.py +0 -0
  242. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/scenarios/scorer_validate_response.py +0 -0
  243. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/scoring_contract.py +0 -0
  244. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/scoring_contract_param.py +0 -0
  245. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/scoring_contract_result_view.py +0 -0
  246. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/scoring_function.py +0 -0
  247. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/scoring_function_param.py +0 -0
  248. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/scoring_function_result_view.py +0 -0
  249. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/shared/__init__.py +0 -0
  250. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/shared/after_idle.py +0 -0
  251. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/shared/code_mount_parameters.py +0 -0
  252. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/shared_params/__init__.py +0 -0
  253. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/shared_params/after_idle.py +0 -0
  254. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/src/runloop_api_client/types/shared_params/code_mount_parameters.py +0 -0
  255. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/tests/__init__.py +0 -0
  256. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/tests/api_resources/__init__.py +0 -0
  257. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/tests/api_resources/benchmarks/__init__.py +0 -0
  258. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/tests/api_resources/benchmarks/test_runs.py +0 -0
  259. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/tests/api_resources/devboxes/__init__.py +0 -0
  260. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/tests/api_resources/devboxes/test_browsers.py +0 -0
  261. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/tests/api_resources/devboxes/test_computers.py +0 -0
  262. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/tests/api_resources/devboxes/test_disk_snapshots.py +0 -0
  263. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/tests/api_resources/devboxes/test_executions.py +0 -0
  264. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/tests/api_resources/devboxes/test_logs.py +0 -0
  265. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/tests/api_resources/devboxes/test_lsp.py +0 -0
  266. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/tests/api_resources/scenarios/__init__.py +0 -0
  267. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/tests/api_resources/scenarios/test_runs.py +0 -0
  268. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/tests/api_resources/test_repositories.py +0 -0
  269. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/tests/sample_file.txt +0 -0
  270. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/tests/test_deepcopy.py +0 -0
  271. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/tests/test_extract_files.py +0 -0
  272. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/tests/test_files.py +0 -0
  273. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/tests/test_qs.py +0 -0
  274. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/tests/test_required_args.py +0 -0
  275. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/tests/test_response.py +0 -0
  276. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/tests/test_streaming.py +0 -0
  277. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/tests/test_utils/test_proxy.py +0 -0
  278. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/tests/test_utils/test_typing.py +0 -0
  279. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/tests/utils.py +0 -0
  280. {runloop_api_client-0.29.0 → runloop_api_client-0.31.0}/uv.lock +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.31.0"
3
+ }
@@ -1,5 +1,53 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.31.0 (2025-04-21)
4
+
5
+ Full Changelog: [v0.30.0...v0.31.0](https://github.com/runloopai/api-client-python/compare/v0.30.0...v0.31.0)
6
+
7
+ ### Features
8
+
9
+ * **api:** api update ([4c348b6](https://github.com/runloopai/api-client-python/commit/4c348b65cf8e0c59b1cc04122a2a53bc863e053b))
10
+
11
+
12
+ ### Chores
13
+
14
+ * **internal:** base client updates ([71a0a00](https://github.com/runloopai/api-client-python/commit/71a0a00703668b365cce28979bf052d2c1ce78a9))
15
+ * **internal:** bump pyright version ([950fe0d](https://github.com/runloopai/api-client-python/commit/950fe0d00ec77063e2a8b7dedba256e2878c41bb))
16
+ * **internal:** update models test ([def3490](https://github.com/runloopai/api-client-python/commit/def3490573a3b1b304287b54e30cd26fd86dc1ac))
17
+
18
+ ## 0.30.0 (2025-04-16)
19
+
20
+ Full Changelog: [v0.29.0...v0.30.0](https://github.com/runloopai/api-client-python/compare/v0.29.0...v0.30.0)
21
+
22
+ ### Features
23
+
24
+ * **api:** api update ([380287d](https://github.com/runloopai/api-client-python/commit/380287d31238c9cc1cf99a3c394f03141be6174d))
25
+ * **api:** api update ([e9857e8](https://github.com/runloopai/api-client-python/commit/e9857e86999295ef3a8507f69c61ea6ee2861908))
26
+ * **api:** api update ([#586](https://github.com/runloopai/api-client-python/issues/586)) ([eb6d1ba](https://github.com/runloopai/api-client-python/commit/eb6d1ba0b6420f256c8b40dbae75f8a51854d32d))
27
+
28
+
29
+ ### Bug Fixes
30
+
31
+ * **client:** correctly reuse idempotency key ([a6ba920](https://github.com/runloopai/api-client-python/commit/a6ba9201bf5012822ba97fdfdc48e96668a2d22e))
32
+ * **perf:** optimize some hot paths ([edf120c](https://github.com/runloopai/api-client-python/commit/edf120c4cfc3d0104c3735c6882787a039b21bce))
33
+ * **perf:** skip traversing types for NotGiven values ([bcb8823](https://github.com/runloopai/api-client-python/commit/bcb8823c114d7171745010f41442932657fc0b76))
34
+
35
+
36
+ ### Chores
37
+
38
+ * fix typos ([#582](https://github.com/runloopai/api-client-python/issues/582)) ([66d248c](https://github.com/runloopai/api-client-python/commit/66d248cf691f776d04df6aeb3273734bbf914a3b))
39
+ * **internal:** expand CI branch coverage ([0b68591](https://github.com/runloopai/api-client-python/commit/0b68591b8977c6863d75a464045a958809cca096))
40
+ * **internal:** reduce CI branch coverage ([58821a3](https://github.com/runloopai/api-client-python/commit/58821a3fc73f47ed0601a8fdbeaad79778765719))
41
+ * **internal:** remove trailing character ([#584](https://github.com/runloopai/api-client-python/issues/584)) ([65bacb7](https://github.com/runloopai/api-client-python/commit/65bacb71b584b8b1a3f998efb2d28102ffa98d74))
42
+ * **internal:** slight transform perf improvement ([#587](https://github.com/runloopai/api-client-python/issues/587)) ([ec630c4](https://github.com/runloopai/api-client-python/commit/ec630c44eefc52b89ce69277c9040fc93dd9241f))
43
+ * **internal:** update pyright settings ([487213d](https://github.com/runloopai/api-client-python/commit/487213dcc570b7d538fbff04b0a942cdbc6e97c6))
44
+ * slight wording improvement in README ([#588](https://github.com/runloopai/api-client-python/issues/588)) ([2eb6437](https://github.com/runloopai/api-client-python/commit/2eb643793ea4ce03000b5b4eae6f39843a74543b))
45
+
46
+
47
+ ### Documentation
48
+
49
+ * swap examples used in readme ([#585](https://github.com/runloopai/api-client-python/issues/585)) ([adf9a26](https://github.com/runloopai/api-client-python/commit/adf9a26a3890b7bd5899d191927ed97a9402c864))
50
+
3
51
  ## 0.29.0 (2025-03-25)
4
52
 
5
53
  Full Changelog: [v0.28.0...v0.29.0](https://github.com/runloopai/api-client-python/compare/v0.28.0...v0.29.0)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: runloop_api_client
3
- Version: 0.29.0
3
+ Version: 0.31.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
@@ -176,27 +176,27 @@ from runloop_api_client import Runloop
176
176
 
177
177
  client = Runloop()
178
178
 
179
- blueprint_view = client.blueprints.create(
180
- name="name",
179
+ devbox_view = client.devboxes.create(
181
180
  launch_parameters={
182
181
  "after_idle": {
183
182
  "idle_time_seconds": 0,
184
183
  "on_idle": "shutdown",
185
184
  },
185
+ "architecture": "x86_64",
186
186
  "available_ports": [0],
187
187
  "custom_cpu_cores": 0,
188
188
  "custom_gb_memory": 0,
189
189
  "keep_alive_time_seconds": 0,
190
190
  "launch_commands": ["string"],
191
- "resource_size_request": "SMALL",
191
+ "resource_size_request": "X_SMALL",
192
192
  },
193
193
  )
194
- print(blueprint_view.launch_parameters)
194
+ print(devbox_view.launch_parameters)
195
195
  ```
196
196
 
197
197
  ## File uploads
198
198
 
199
- Request parameters that correspond to file uploads can be passed as `bytes`, a [`PathLike`](https://docs.python.org/3/library/os.html#os.PathLike) instance or a tuple of `(filename, contents, media type)`.
199
+ Request parameters that correspond to file uploads can be passed as `bytes`, or a [`PathLike`](https://docs.python.org/3/library/os.html#os.PathLike) instance or a tuple of `(filename, contents, media type)`.
200
200
 
201
201
  ```python
202
202
  from pathlib import Path
@@ -145,27 +145,27 @@ from runloop_api_client import Runloop
145
145
 
146
146
  client = Runloop()
147
147
 
148
- blueprint_view = client.blueprints.create(
149
- name="name",
148
+ devbox_view = client.devboxes.create(
150
149
  launch_parameters={
151
150
  "after_idle": {
152
151
  "idle_time_seconds": 0,
153
152
  "on_idle": "shutdown",
154
153
  },
154
+ "architecture": "x86_64",
155
155
  "available_ports": [0],
156
156
  "custom_cpu_cores": 0,
157
157
  "custom_gb_memory": 0,
158
158
  "keep_alive_time_seconds": 0,
159
159
  "launch_commands": ["string"],
160
- "resource_size_request": "SMALL",
160
+ "resource_size_request": "X_SMALL",
161
161
  },
162
162
  )
163
- print(blueprint_view.launch_parameters)
163
+ print(devbox_view.launch_parameters)
164
164
  ```
165
165
 
166
166
  ## File uploads
167
167
 
168
- Request parameters that correspond to file uploads can be passed as `bytes`, a [`PathLike`](https://docs.python.org/3/library/os.html#os.PathLike) instance or a tuple of `(filename, contents, media type)`.
168
+ Request parameters that correspond to file uploads can be passed as `bytes`, or a [`PathLike`](https://docs.python.org/3/library/os.html#os.PathLike) instance or a tuple of `(filename, contents, media type)`.
169
169
 
170
170
  ```python
171
171
  from pathlib import Path
@@ -11,20 +11,22 @@ Types:
11
11
  ```python
12
12
  from runloop_api_client.types import (
13
13
  BenchmarkCreateParameters,
14
- BenchmarkListView,
15
14
  BenchmarkRunListView,
16
15
  BenchmarkRunView,
17
- BenchmarkView,
18
16
  StartBenchmarkRunParameters,
17
+ BenchmarkCreateResponse,
18
+ BenchmarkRetrieveResponse,
19
+ BenchmarkListResponse,
20
+ BenchmarkListPublicResponse,
19
21
  )
20
22
  ```
21
23
 
22
24
  Methods:
23
25
 
24
- - <code title="post /v1/benchmarks">client.benchmarks.<a href="./src/runloop_api_client/resources/benchmarks/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>
25
- - <code title="get /v1/benchmarks/{id}">client.benchmarks.<a href="./src/runloop_api_client/resources/benchmarks/benchmarks.py">retrieve</a>(id) -> <a href="./src/runloop_api_client/types/benchmark_view.py">BenchmarkView</a></code>
26
- - <code title="get /v1/benchmarks">client.benchmarks.<a href="./src/runloop_api_client/resources/benchmarks/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>
27
- - <code title="get /v1/benchmarks/list_public">client.benchmarks.<a href="./src/runloop_api_client/resources/benchmarks/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>
26
+ - <code title="post /v1/benchmarks">client.benchmarks.<a href="./src/runloop_api_client/resources/benchmarks/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_create_response.py">BenchmarkCreateResponse</a></code>
27
+ - <code title="get /v1/benchmarks/{id}">client.benchmarks.<a href="./src/runloop_api_client/resources/benchmarks/benchmarks.py">retrieve</a>(id) -> <a href="./src/runloop_api_client/types/benchmark_retrieve_response.py">BenchmarkRetrieveResponse</a></code>
28
+ - <code title="get /v1/benchmarks">client.benchmarks.<a href="./src/runloop_api_client/resources/benchmarks/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_list_response.py">SyncBenchmarksCursorIDPage[BenchmarkListResponse]</a></code>
29
+ - <code title="get /v1/benchmarks/list_public">client.benchmarks.<a href="./src/runloop_api_client/resources/benchmarks/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_list_public_response.py">SyncBenchmarksCursorIDPage[BenchmarkListPublicResponse]</a></code>
28
30
  - <code title="post /v1/benchmarks/start_run">client.benchmarks.<a href="./src/runloop_api_client/resources/benchmarks/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>
29
31
 
30
32
  ## Runs
@@ -47,6 +49,7 @@ from runloop_api_client.types import (
47
49
  BlueprintListView,
48
50
  BlueprintPreviewView,
49
51
  BlueprintView,
52
+ BlueprintDeleteResponse,
50
53
  )
51
54
  ```
52
55
 
@@ -55,6 +58,7 @@ Methods:
55
58
  - <code title="post /v1/blueprints">client.blueprints.<a href="./src/runloop_api_client/resources/blueprints.py">create</a>(\*\*<a href="src/runloop_api_client/types/blueprint_create_params.py">params</a>) -> <a href="./src/runloop_api_client/types/blueprint_view.py">BlueprintView</a></code>
56
59
  - <code title="get /v1/blueprints/{id}">client.blueprints.<a href="./src/runloop_api_client/resources/blueprints.py">retrieve</a>(id) -> <a href="./src/runloop_api_client/types/blueprint_view.py">BlueprintView</a></code>
57
60
  - <code title="get /v1/blueprints">client.blueprints.<a href="./src/runloop_api_client/resources/blueprints.py">list</a>(\*\*<a href="src/runloop_api_client/types/blueprint_list_params.py">params</a>) -> <a href="./src/runloop_api_client/types/blueprint_view.py">SyncBlueprintsCursorIDPage[BlueprintView]</a></code>
61
+ - <code title="post /v1/blueprints/{id}/delete">client.blueprints.<a href="./src/runloop_api_client/resources/blueprints.py">delete</a>(id) -> <a href="./src/runloop_api_client/types/blueprint_delete_response.py">object</a></code>
58
62
  - <code title="get /v1/blueprints/{id}/logs">client.blueprints.<a href="./src/runloop_api_client/resources/blueprints.py">logs</a>(id) -> <a href="./src/runloop_api_client/types/blueprint_build_logs_list_view.py">BlueprintBuildLogsListView</a></code>
59
63
  - <code title="post /v1/blueprints/preview">client.blueprints.<a href="./src/runloop_api_client/resources/blueprints.py">preview</a>(\*\*<a href="src/runloop_api_client/types/blueprint_preview_params.py">params</a>) -> <a href="./src/runloop_api_client/types/blueprint_preview_view.py">BlueprintPreviewView</a></code>
60
64
 
@@ -75,6 +79,7 @@ from runloop_api_client.types import (
75
79
  DevboxDeleteDiskSnapshotResponse,
76
80
  DevboxKeepAliveResponse,
77
81
  DevboxReadFileContentsResponse,
82
+ DevboxRemoveTunnelResponse,
78
83
  DevboxUploadFileResponse,
79
84
  )
80
85
  ```
@@ -94,7 +99,7 @@ Methods:
94
99
  - <code title="post /v1/devboxes/{id}/keep_alive">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">keep_alive</a>(id) -> <a href="./src/runloop_api_client/types/devbox_keep_alive_response.py">object</a></code>
95
100
  - <code title="get /v1/devboxes/disk_snapshots">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">list_disk_snapshots</a>(\*\*<a href="src/runloop_api_client/types/devbox_list_disk_snapshots_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_snapshot_view.py">SyncDiskSnapshotsCursorIDPage[DevboxSnapshotView]</a></code>
96
101
  - <code title="post /v1/devboxes/{id}/read_file_contents">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">read_file_contents</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_read_file_contents_params.py">params</a>) -> str</code>
97
- - <code title="post /v1/devboxes/{id}/remove_tunnel">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">remove_tunnel</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_remove_tunnel_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_tunnel_view.py">DevboxTunnelView</a></code>
102
+ - <code title="post /v1/devboxes/{id}/remove_tunnel">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">remove_tunnel</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_remove_tunnel_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_remove_tunnel_response.py">object</a></code>
98
103
  - <code title="post /v1/devboxes/{id}/resume">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">resume</a>(id) -> <a href="./src/runloop_api_client/types/devbox_view.py">DevboxView</a></code>
99
104
  - <code title="post /v1/devboxes/{id}/shutdown">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">shutdown</a>(id) -> <a href="./src/runloop_api_client/types/devbox_view.py">DevboxView</a></code>
100
105
  - <code title="post /v1/devboxes/{id}/snapshot_disk">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">snapshot_disk</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_snapshot_disk_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_snapshot_view.py">DevboxSnapshotView</a></code>
@@ -262,25 +267,28 @@ from runloop_api_client.types import (
262
267
  InputContext,
263
268
  ScenarioCreateParameters,
264
269
  ScenarioEnvironment,
265
- ScenarioListView,
266
270
  ScenarioRunListView,
267
271
  ScenarioRunView,
268
- ScenarioView,
269
272
  ScoringContract,
270
273
  ScoringContractResultView,
271
274
  ScoringFunction,
272
275
  ScoringFunctionResultView,
273
276
  StartScenarioRunParameters,
277
+ ScenarioCreateResponse,
278
+ ScenarioRetrieveResponse,
279
+ ScenarioUpdateResponse,
280
+ ScenarioListResponse,
281
+ ScenarioListPublicResponse,
274
282
  )
275
283
  ```
276
284
 
277
285
  Methods:
278
286
 
279
- - <code title="post /v1/scenarios">client.scenarios.<a href="./src/runloop_api_client/resources/scenarios/scenarios.py">create</a>(\*\*<a href="src/runloop_api_client/types/scenario_create_params.py">params</a>) -> <a href="./src/runloop_api_client/types/scenario_view.py">ScenarioView</a></code>
280
- - <code title="get /v1/scenarios/{id}">client.scenarios.<a href="./src/runloop_api_client/resources/scenarios/scenarios.py">retrieve</a>(id) -> <a href="./src/runloop_api_client/types/scenario_view.py">ScenarioView</a></code>
281
- - <code title="post /v1/scenarios/{id}">client.scenarios.<a href="./src/runloop_api_client/resources/scenarios/scenarios.py">update</a>(id, \*\*<a href="src/runloop_api_client/types/scenario_update_params.py">params</a>) -> <a href="./src/runloop_api_client/types/scenario_view.py">ScenarioView</a></code>
282
- - <code title="get /v1/scenarios">client.scenarios.<a href="./src/runloop_api_client/resources/scenarios/scenarios.py">list</a>(\*\*<a href="src/runloop_api_client/types/scenario_list_params.py">params</a>) -> <a href="./src/runloop_api_client/types/scenario_view.py">SyncScenariosCursorIDPage[ScenarioView]</a></code>
283
- - <code title="get /v1/scenarios/list_public">client.scenarios.<a href="./src/runloop_api_client/resources/scenarios/scenarios.py">list_public</a>(\*\*<a href="src/runloop_api_client/types/scenario_list_public_params.py">params</a>) -> <a href="./src/runloop_api_client/types/scenario_view.py">SyncScenariosCursorIDPage[ScenarioView]</a></code>
287
+ - <code title="post /v1/scenarios">client.scenarios.<a href="./src/runloop_api_client/resources/scenarios/scenarios.py">create</a>(\*\*<a href="src/runloop_api_client/types/scenario_create_params.py">params</a>) -> <a href="./src/runloop_api_client/types/scenario_create_response.py">ScenarioCreateResponse</a></code>
288
+ - <code title="get /v1/scenarios/{id}">client.scenarios.<a href="./src/runloop_api_client/resources/scenarios/scenarios.py">retrieve</a>(id) -> <a href="./src/runloop_api_client/types/scenario_retrieve_response.py">ScenarioRetrieveResponse</a></code>
289
+ - <code title="post /v1/scenarios/{id}">client.scenarios.<a href="./src/runloop_api_client/resources/scenarios/scenarios.py">update</a>(id, \*\*<a href="src/runloop_api_client/types/scenario_update_params.py">params</a>) -> <a href="./src/runloop_api_client/types/scenario_update_response.py">ScenarioUpdateResponse</a></code>
290
+ - <code title="get /v1/scenarios">client.scenarios.<a href="./src/runloop_api_client/resources/scenarios/scenarios.py">list</a>(\*\*<a href="src/runloop_api_client/types/scenario_list_params.py">params</a>) -> <a href="./src/runloop_api_client/types/scenario_list_response.py">SyncScenariosCursorIDPage[ScenarioListResponse]</a></code>
291
+ - <code title="get /v1/scenarios/list_public">client.scenarios.<a href="./src/runloop_api_client/resources/scenarios/scenarios.py">list_public</a>(\*\*<a href="src/runloop_api_client/types/scenario_list_public_params.py">params</a>) -> <a href="./src/runloop_api_client/types/scenario_list_public_response.py">SyncScenariosCursorIDPage[ScenarioListPublicResponse]</a></code>
284
292
  - <code title="post /v1/scenarios/start_run">client.scenarios.<a href="./src/runloop_api_client/resources/scenarios/scenarios.py">start_run</a>(\*\*<a href="src/runloop_api_client/types/scenario_start_run_params.py">params</a>) -> <a href="./src/runloop_api_client/types/scenario_run_view.py">ScenarioRunView</a></code>
285
293
 
286
294
  ## Runs
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "runloop_api_client"
3
- version = "0.29.0"
3
+ version = "0.31.0"
4
4
  description = "The official Python library for the runloop API"
5
5
  dynamic = ["readme"]
6
6
  license = "MIT"
@@ -42,7 +42,7 @@ Repository = "https://github.com/runloopai/api-client-python"
42
42
  managed = true
43
43
  # version pins are in requirements-dev.lock
44
44
  dev-dependencies = [
45
- "pyright>=1.1.359",
45
+ "pyright==1.1.399",
46
46
  "mypy",
47
47
  "respx",
48
48
  "pytest",
@@ -147,6 +147,7 @@ exclude = [
147
147
  ]
148
148
 
149
149
  reportImplicitOverride = true
150
+ reportOverlappingOverload = false
150
151
 
151
152
  reportImportCycles = false
152
153
  reportPrivateUsage = false
@@ -69,7 +69,7 @@ pydantic-core==2.27.1
69
69
  # via pydantic
70
70
  pygments==2.18.0
71
71
  # via rich
72
- pyright==1.1.392.post0
72
+ pyright==1.1.399
73
73
  pytest==8.3.3
74
74
  # via pytest-asyncio
75
75
  pytest-asyncio==0.24.0
@@ -98,7 +98,11 @@ _StreamT = TypeVar("_StreamT", bound=Stream[Any])
98
98
  _AsyncStreamT = TypeVar("_AsyncStreamT", bound=AsyncStream[Any])
99
99
 
100
100
  if TYPE_CHECKING:
101
- from httpx._config import DEFAULT_TIMEOUT_CONFIG as HTTPX_DEFAULT_TIMEOUT
101
+ from httpx._config import (
102
+ DEFAULT_TIMEOUT_CONFIG, # pyright: ignore[reportPrivateImportUsage]
103
+ )
104
+
105
+ HTTPX_DEFAULT_TIMEOUT = DEFAULT_TIMEOUT_CONFIG
102
106
  else:
103
107
  try:
104
108
  from httpx._config import DEFAULT_TIMEOUT_CONFIG as HTTPX_DEFAULT_TIMEOUT
@@ -115,6 +119,7 @@ class PageInfo:
115
119
 
116
120
  url: URL | NotGiven
117
121
  params: Query | NotGiven
122
+ json: Body | NotGiven
118
123
 
119
124
  @overload
120
125
  def __init__(
@@ -130,19 +135,30 @@ class PageInfo:
130
135
  params: Query,
131
136
  ) -> None: ...
132
137
 
138
+ @overload
139
+ def __init__(
140
+ self,
141
+ *,
142
+ json: Body,
143
+ ) -> None: ...
144
+
133
145
  def __init__(
134
146
  self,
135
147
  *,
136
148
  url: URL | NotGiven = NOT_GIVEN,
149
+ json: Body | NotGiven = NOT_GIVEN,
137
150
  params: Query | NotGiven = NOT_GIVEN,
138
151
  ) -> None:
139
152
  self.url = url
153
+ self.json = json
140
154
  self.params = params
141
155
 
142
156
  @override
143
157
  def __repr__(self) -> str:
144
158
  if self.url:
145
159
  return f"{self.__class__.__name__}(url={self.url})"
160
+ if self.json:
161
+ return f"{self.__class__.__name__}(json={self.json})"
146
162
  return f"{self.__class__.__name__}(params={self.params})"
147
163
 
148
164
 
@@ -191,6 +207,19 @@ class BasePage(GenericModel, Generic[_T]):
191
207
  options.url = str(url)
192
208
  return options
193
209
 
210
+ if not isinstance(info.json, NotGiven):
211
+ if not is_mapping(info.json):
212
+ raise TypeError("Pagination is only supported with mappings")
213
+
214
+ if not options.json_data:
215
+ options.json_data = {**info.json}
216
+ else:
217
+ if not is_mapping(options.json_data):
218
+ raise TypeError("Pagination is only supported with mappings")
219
+
220
+ options.json_data = {**options.json_data, **info.json}
221
+ return options
222
+
194
223
  raise ValueError("Unexpected PageInfo state")
195
224
 
196
225
 
@@ -409,7 +438,8 @@ class BaseClient(Generic[_HttpxClientT, _DefaultStreamT]):
409
438
 
410
439
  idempotency_header = self._idempotency_header
411
440
  if idempotency_header and options.method.lower() != "get" and idempotency_header not in headers:
412
- headers[idempotency_header] = options.idempotency_key or self._idempotency_key()
441
+ options.idempotency_key = options.idempotency_key or self._idempotency_key()
442
+ headers[idempotency_header] = options.idempotency_key
413
443
 
414
444
  # Don't set these headers if they were already set or removed by the caller. We check
415
445
  # `custom_headers`, which can contain `Omit()`, instead of `headers` to account for the removal case.
@@ -943,6 +973,10 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
943
973
  request = self._build_request(options, retries_taken=retries_taken)
944
974
  self._prepare_request(request)
945
975
 
976
+ if options.idempotency_key:
977
+ # ensure the idempotency key is reused between requests
978
+ input_options.idempotency_key = options.idempotency_key
979
+
946
980
  kwargs: HttpxSendArgs = {}
947
981
  if self.custom_auth is not None:
948
982
  kwargs["auth"] = self.custom_auth
@@ -1475,6 +1509,10 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1475
1509
  request = self._build_request(options, retries_taken=retries_taken)
1476
1510
  await self._prepare_request(request)
1477
1511
 
1512
+ if options.idempotency_key:
1513
+ # ensure the idempotency key is reused between requests
1514
+ input_options.idempotency_key = options.idempotency_key
1515
+
1478
1516
  kwargs: HttpxSendArgs = {}
1479
1517
  if self.custom_auth is not None:
1480
1518
  kwargs["auth"] = self.custom_auth
@@ -19,7 +19,6 @@ from typing_extensions import (
19
19
  )
20
20
 
21
21
  import pydantic
22
- import pydantic.generics
23
22
  from pydantic.fields import FieldInfo
24
23
 
25
24
  from ._types import (
@@ -681,7 +680,7 @@ def set_pydantic_config(typ: Any, config: pydantic.ConfigDict) -> None:
681
680
  setattr(typ, "__pydantic_config__", config) # noqa: B010
682
681
 
683
682
 
684
- # our use of subclasssing here causes weirdness for type checkers,
683
+ # our use of subclassing here causes weirdness for type checkers,
685
684
  # so we just pretend that we don't subclass
686
685
  if TYPE_CHECKING:
687
686
  GenericModel = BaseModel
@@ -5,13 +5,15 @@ import base64
5
5
  import pathlib
6
6
  from typing import Any, Mapping, TypeVar, cast
7
7
  from datetime import date, datetime
8
- from typing_extensions import Literal, get_args, override, get_type_hints
8
+ from typing_extensions import Literal, get_args, override, get_type_hints as _get_type_hints
9
9
 
10
10
  import anyio
11
11
  import pydantic
12
12
 
13
13
  from ._utils import (
14
14
  is_list,
15
+ is_given,
16
+ lru_cache,
15
17
  is_mapping,
16
18
  is_iterable,
17
19
  )
@@ -108,6 +110,7 @@ def transform(
108
110
  return cast(_T, transformed)
109
111
 
110
112
 
113
+ @lru_cache(maxsize=8096)
111
114
  def _get_annotated_type(type_: type) -> type | None:
112
115
  """If the given type is an `Annotated` type then it is returned, if not `None` is returned.
113
116
 
@@ -126,7 +129,7 @@ def _get_annotated_type(type_: type) -> type | None:
126
129
  def _maybe_transform_key(key: str, type_: type) -> str:
127
130
  """Transform the given `data` based on the annotations provided in `type_`.
128
131
 
129
- Note: this function only looks at `Annotated` types that contain `PropertInfo` metadata.
132
+ Note: this function only looks at `Annotated` types that contain `PropertyInfo` metadata.
130
133
  """
131
134
  annotated_type = _get_annotated_type(type_)
132
135
  if annotated_type is None:
@@ -142,6 +145,10 @@ def _maybe_transform_key(key: str, type_: type) -> str:
142
145
  return key
143
146
 
144
147
 
148
+ def _no_transform_needed(annotation: type) -> bool:
149
+ return annotation == float or annotation == int
150
+
151
+
145
152
  def _transform_recursive(
146
153
  data: object,
147
154
  *,
@@ -184,6 +191,15 @@ def _transform_recursive(
184
191
  return cast(object, data)
185
192
 
186
193
  inner_type = extract_type_arg(stripped_type, 0)
194
+ if _no_transform_needed(inner_type):
195
+ # for some types there is no need to transform anything, so we can get a small
196
+ # perf boost from skipping that work.
197
+ #
198
+ # but we still need to convert to a list to ensure the data is json-serializable
199
+ if is_list(data):
200
+ return data
201
+ return list(data)
202
+
187
203
  return [_transform_recursive(d, annotation=annotation, inner_type=inner_type) for d in data]
188
204
 
189
205
  if is_union_type(stripped_type):
@@ -245,6 +261,11 @@ def _transform_typeddict(
245
261
  result: dict[str, object] = {}
246
262
  annotations = get_type_hints(expected_type, include_extras=True)
247
263
  for key, value in data.items():
264
+ if not is_given(value):
265
+ # we don't need to include `NotGiven` values here as they'll
266
+ # be stripped out before the request is sent anyway
267
+ continue
268
+
248
269
  type_ = annotations.get(key)
249
270
  if type_ is None:
250
271
  # we do not have a type annotation for this field, leave it as is
@@ -332,6 +353,15 @@ async def _async_transform_recursive(
332
353
  return cast(object, data)
333
354
 
334
355
  inner_type = extract_type_arg(stripped_type, 0)
356
+ if _no_transform_needed(inner_type):
357
+ # for some types there is no need to transform anything, so we can get a small
358
+ # perf boost from skipping that work.
359
+ #
360
+ # but we still need to convert to a list to ensure the data is json-serializable
361
+ if is_list(data):
362
+ return data
363
+ return list(data)
364
+
335
365
  return [await _async_transform_recursive(d, annotation=annotation, inner_type=inner_type) for d in data]
336
366
 
337
367
  if is_union_type(stripped_type):
@@ -393,6 +423,11 @@ async def _async_transform_typeddict(
393
423
  result: dict[str, object] = {}
394
424
  annotations = get_type_hints(expected_type, include_extras=True)
395
425
  for key, value in data.items():
426
+ if not is_given(value):
427
+ # we don't need to include `NotGiven` values here as they'll
428
+ # be stripped out before the request is sent anyway
429
+ continue
430
+
396
431
  type_ = annotations.get(key)
397
432
  if type_ is None:
398
433
  # we do not have a type annotation for this field, leave it as is
@@ -400,3 +435,13 @@ async def _async_transform_typeddict(
400
435
  else:
401
436
  result[_maybe_transform_key(key, type_)] = await _async_transform_recursive(value, annotation=type_)
402
437
  return result
438
+
439
+
440
+ @lru_cache(maxsize=8096)
441
+ def get_type_hints(
442
+ obj: Any,
443
+ globalns: dict[str, Any] | None = None,
444
+ localns: Mapping[str, Any] | None = None,
445
+ include_extras: bool = False,
446
+ ) -> dict[str, Any]:
447
+ return _get_type_hints(obj, globalns=globalns, localns=localns, include_extras=include_extras)
@@ -13,6 +13,7 @@ from typing_extensions import (
13
13
  get_origin,
14
14
  )
15
15
 
16
+ from ._utils import lru_cache
16
17
  from .._types import InheritsGeneric
17
18
  from .._compat import is_union as _is_union
18
19
 
@@ -66,6 +67,7 @@ def is_type_alias_type(tp: Any, /) -> TypeIs[typing_extensions.TypeAliasType]:
66
67
 
67
68
 
68
69
  # Extracts T from Annotated[T, ...] or from Required[Annotated[T, ...]]
70
+ @lru_cache(maxsize=8096)
69
71
  def strip_annotated_type(typ: type) -> type:
70
72
  if is_required_type(typ) or is_annotated_type(typ):
71
73
  return strip_annotated_type(cast(type, get_args(typ)[0]))
@@ -108,7 +110,7 @@ def extract_type_var_from_base(
108
110
  ```
109
111
  """
110
112
  cls = cast(object, get_origin(typ) or typ)
111
- if cls in generic_bases:
113
+ if cls in generic_bases: # pyright: ignore[reportUnnecessaryContains]
112
114
  # we're given the class directly
113
115
  return extract_type_arg(typ, index)
114
116
 
@@ -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.29.0" # x-release-please-version
4
+ __version__ = "0.31.0" # x-release-please-version