hud-python 0.4.71__tar.gz → 0.4.73__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 (323) hide show
  1. {hud_python-0.4.71 → hud_python-0.4.73}/PKG-INFO +2 -1
  2. {hud_python-0.4.71 → hud_python-0.4.73}/README.md +1 -0
  3. {hud_python-0.4.71 → hud_python-0.4.73}/hud/agents/gemini_cua.py +1 -1
  4. {hud_python-0.4.71 → hud_python-0.4.73}/hud/agents/misc/response_agent.py +2 -2
  5. {hud_python-0.4.71 → hud_python-0.4.73}/hud/agents/tests/test_gemini.py +2 -2
  6. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/__init__.py +6 -5
  7. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/eval.py +2 -2
  8. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/rft.py +119 -5
  9. {hud_python-0.4.71 → hud_python-0.4.73}/hud/datasets/runner.py +3 -0
  10. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/computer/openai.py +2 -0
  11. {hud_python-0.4.71 → hud_python-0.4.73}/hud/utils/tests/test_version.py +1 -1
  12. {hud_python-0.4.71 → hud_python-0.4.73}/hud/version.py +1 -1
  13. {hud_python-0.4.71 → hud_python-0.4.73}/pyproject.toml +1 -1
  14. {hud_python-0.4.71 → hud_python-0.4.73}/.gitignore +0 -0
  15. {hud_python-0.4.71 → hud_python-0.4.73}/LICENSE +0 -0
  16. {hud_python-0.4.71 → hud_python-0.4.73}/environments/README.md +0 -0
  17. {hud_python-0.4.71 → hud_python-0.4.73}/environments/blank/README.md +0 -0
  18. {hud_python-0.4.71 → hud_python-0.4.73}/environments/blank/environment/README.md +0 -0
  19. {hud_python-0.4.71 → hud_python-0.4.73}/environments/blank/environment/pyproject.toml +0 -0
  20. {hud_python-0.4.71 → hud_python-0.4.73}/environments/blank/server/README.md +0 -0
  21. {hud_python-0.4.71 → hud_python-0.4.73}/environments/blank/server/pyproject.toml +0 -0
  22. {hud_python-0.4.71 → hud_python-0.4.73}/environments/browser/README.md +0 -0
  23. {hud_python-0.4.71 → hud_python-0.4.73}/environments/browser/browser-base/README.md +0 -0
  24. {hud_python-0.4.71 → hud_python-0.4.73}/environments/browser/environment/2048/README.md +0 -0
  25. {hud_python-0.4.71 → hud_python-0.4.73}/environments/browser/environment/2048/backend/pyproject.toml +0 -0
  26. {hud_python-0.4.71 → hud_python-0.4.73}/environments/browser/environment/README.md +0 -0
  27. {hud_python-0.4.71 → hud_python-0.4.73}/environments/browser/environment/pyproject.toml +0 -0
  28. {hud_python-0.4.71 → hud_python-0.4.73}/environments/browser/environment/todo/README.md +0 -0
  29. {hud_python-0.4.71 → hud_python-0.4.73}/environments/browser/environment/todo/backend/pyproject.toml +0 -0
  30. {hud_python-0.4.71 → hud_python-0.4.73}/environments/browser/pyproject.toml +0 -0
  31. {hud_python-0.4.71 → hud_python-0.4.73}/environments/browser/server/pyproject.toml +0 -0
  32. {hud_python-0.4.71 → hud_python-0.4.73}/environments/deepresearch/README.md +0 -0
  33. {hud_python-0.4.71 → hud_python-0.4.73}/environments/deepresearch/environment/pyproject.toml +0 -0
  34. {hud_python-0.4.71 → hud_python-0.4.73}/environments/deepresearch/pyproject.toml +0 -0
  35. {hud_python-0.4.71 → hud_python-0.4.73}/environments/deepresearch/server/pyproject.toml +0 -0
  36. {hud_python-0.4.71 → hud_python-0.4.73}/environments/jupyter/README.md +0 -0
  37. {hud_python-0.4.71 → hud_python-0.4.73}/environments/jupyter/server/pyproject.toml +0 -0
  38. {hud_python-0.4.71 → hud_python-0.4.73}/environments/online_mind2web/README.md +0 -0
  39. {hud_python-0.4.71 → hud_python-0.4.73}/environments/online_mind2web/pyproject.toml +0 -0
  40. {hud_python-0.4.71 → hud_python-0.4.73}/environments/online_mind2web/src/hud_controller/providers/README.md +0 -0
  41. {hud_python-0.4.71 → hud_python-0.4.73}/environments/remote_browser/README.md +0 -0
  42. {hud_python-0.4.71 → hud_python-0.4.73}/environments/remote_browser/pyproject.toml +0 -0
  43. {hud_python-0.4.71 → hud_python-0.4.73}/environments/remote_browser/src/hud_controller/providers/README.md +0 -0
  44. {hud_python-0.4.71 → hud_python-0.4.73}/environments/rubrics/README.md +0 -0
  45. {hud_python-0.4.71 → hud_python-0.4.73}/environments/rubrics/environment/pyproject.toml +0 -0
  46. {hud_python-0.4.71 → hud_python-0.4.73}/environments/rubrics/pyproject.toml +0 -0
  47. {hud_python-0.4.71 → hud_python-0.4.73}/environments/rubrics/server/pyproject.toml +0 -0
  48. {hud_python-0.4.71 → hud_python-0.4.73}/environments/text_2048/README.md +0 -0
  49. {hud_python-0.4.71 → hud_python-0.4.73}/environments/text_2048/pyproject.toml +0 -0
  50. {hud_python-0.4.71 → hud_python-0.4.73}/examples/README.md +0 -0
  51. {hud_python-0.4.71 → hud_python-0.4.73}/hud/__init__.py +0 -0
  52. {hud_python-0.4.71 → hud_python-0.4.73}/hud/__main__.py +0 -0
  53. {hud_python-0.4.71 → hud_python-0.4.73}/hud/agents/__init__.py +0 -0
  54. {hud_python-0.4.71 → hud_python-0.4.73}/hud/agents/base.py +0 -0
  55. {hud_python-0.4.71 → hud_python-0.4.73}/hud/agents/claude.py +0 -0
  56. {hud_python-0.4.71 → hud_python-0.4.73}/hud/agents/gemini.py +0 -0
  57. {hud_python-0.4.71 → hud_python-0.4.73}/hud/agents/grounded_openai.py +0 -0
  58. {hud_python-0.4.71 → hud_python-0.4.73}/hud/agents/misc/__init__.py +0 -0
  59. {hud_python-0.4.71 → hud_python-0.4.73}/hud/agents/misc/integration_test_agent.py +0 -0
  60. {hud_python-0.4.71 → hud_python-0.4.73}/hud/agents/openai.py +0 -0
  61. {hud_python-0.4.71 → hud_python-0.4.73}/hud/agents/openai_chat.py +0 -0
  62. {hud_python-0.4.71 → hud_python-0.4.73}/hud/agents/operator.py +0 -0
  63. {hud_python-0.4.71 → hud_python-0.4.73}/hud/agents/tests/__init__.py +0 -0
  64. {hud_python-0.4.71 → hud_python-0.4.73}/hud/agents/tests/conftest.py +0 -0
  65. {hud_python-0.4.71 → hud_python-0.4.73}/hud/agents/tests/test_base.py +0 -0
  66. {hud_python-0.4.71 → hud_python-0.4.73}/hud/agents/tests/test_base_runtime.py +0 -0
  67. {hud_python-0.4.71 → hud_python-0.4.73}/hud/agents/tests/test_claude.py +0 -0
  68. {hud_python-0.4.71 → hud_python-0.4.73}/hud/agents/tests/test_client.py +0 -0
  69. {hud_python-0.4.71 → hud_python-0.4.73}/hud/agents/tests/test_grounded_openai_agent.py +0 -0
  70. {hud_python-0.4.71 → hud_python-0.4.73}/hud/agents/tests/test_openai.py +0 -0
  71. {hud_python-0.4.71 → hud_python-0.4.73}/hud/agents/tests/test_operator.py +0 -0
  72. {hud_python-0.4.71 → hud_python-0.4.73}/hud/agents/utils.py +0 -0
  73. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/__main__.py +0 -0
  74. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/analyze.py +0 -0
  75. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/build.py +0 -0
  76. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/clone.py +0 -0
  77. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/debug.py +0 -0
  78. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/dev.py +0 -0
  79. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/flows/__init__.py +0 -0
  80. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/flows/dev.py +0 -0
  81. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/flows/tasks.py +0 -0
  82. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/flows/tests/__init__.py +0 -0
  83. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/flows/tests/test_dev.py +0 -0
  84. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/get.py +0 -0
  85. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/init.py +0 -0
  86. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/list_func.py +0 -0
  87. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/pull.py +0 -0
  88. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/push.py +0 -0
  89. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/remove.py +0 -0
  90. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/rft_status.py +0 -0
  91. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/rl/__init__.py +0 -0
  92. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/rl/celebrate.py +0 -0
  93. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/rl/config.py +0 -0
  94. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/rl/display.py +0 -0
  95. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/rl/gpu.py +0 -0
  96. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/rl/gpu_utils.py +0 -0
  97. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/rl/local_runner.py +0 -0
  98. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/rl/presets.py +0 -0
  99. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/rl/remote_runner.py +0 -0
  100. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/rl/rl_api.py +0 -0
  101. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/rl/viewer.py +0 -0
  102. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/rl/vllm.py +0 -0
  103. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/rl/wait_utils.py +0 -0
  104. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/tests/__init__.py +0 -0
  105. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/tests/test_analyze.py +0 -0
  106. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/tests/test_analyze_metadata.py +0 -0
  107. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/tests/test_analyze_module.py +0 -0
  108. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/tests/test_build.py +0 -0
  109. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/tests/test_build_failure.py +0 -0
  110. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/tests/test_build_module.py +0 -0
  111. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/tests/test_cli_init.py +0 -0
  112. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/tests/test_cli_main.py +0 -0
  113. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/tests/test_cli_more_wrappers.py +0 -0
  114. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/tests/test_cli_root.py +0 -0
  115. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/tests/test_clone.py +0 -0
  116. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/tests/test_convert.py +0 -0
  117. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/tests/test_cursor.py +0 -0
  118. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/tests/test_debug.py +0 -0
  119. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/tests/test_dev.py +0 -0
  120. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/tests/test_eval.py +0 -0
  121. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/tests/test_init.py +0 -0
  122. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/tests/test_list_func.py +0 -0
  123. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/tests/test_main_module.py +0 -0
  124. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/tests/test_mcp_server.py +0 -0
  125. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/tests/test_pull.py +0 -0
  126. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/tests/test_push.py +0 -0
  127. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/tests/test_push_happy.py +0 -0
  128. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/tests/test_push_wrapper.py +0 -0
  129. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/tests/test_registry.py +0 -0
  130. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/tests/test_utils.py +0 -0
  131. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/utils/__init__.py +0 -0
  132. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/utils/config.py +0 -0
  133. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/utils/cursor.py +0 -0
  134. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/utils/docker.py +0 -0
  135. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/utils/env_check.py +0 -0
  136. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/utils/environment.py +0 -0
  137. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/utils/git.py +0 -0
  138. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/utils/interactive.py +0 -0
  139. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/utils/local_runner.py +0 -0
  140. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/utils/logging.py +0 -0
  141. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/utils/metadata.py +0 -0
  142. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/utils/package_runner.py +0 -0
  143. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/utils/registry.py +0 -0
  144. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/utils/remote_runner.py +0 -0
  145. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/utils/runner.py +0 -0
  146. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/utils/server.py +0 -0
  147. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/utils/source_hash.py +0 -0
  148. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/utils/tasks.py +0 -0
  149. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/utils/tests/__init__.py +0 -0
  150. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/utils/tests/test_config.py +0 -0
  151. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/utils/tests/test_docker.py +0 -0
  152. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/utils/tests/test_docker_hints.py +0 -0
  153. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/utils/tests/test_env_check.py +0 -0
  154. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/utils/tests/test_environment.py +0 -0
  155. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/utils/tests/test_git.py +0 -0
  156. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/utils/tests/test_interactive_module.py +0 -0
  157. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/utils/tests/test_local_runner.py +0 -0
  158. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/utils/tests/test_logging_utils.py +0 -0
  159. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/utils/tests/test_metadata.py +0 -0
  160. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/utils/tests/test_package_runner.py +0 -0
  161. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/utils/tests/test_registry_utils.py +0 -0
  162. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/utils/tests/test_remote_runner.py +0 -0
  163. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/utils/tests/test_runner_modules.py +0 -0
  164. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/utils/tests/test_source_hash.py +0 -0
  165. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/utils/tests/test_tasks.py +0 -0
  166. {hud_python-0.4.71 → hud_python-0.4.73}/hud/cli/utils/version_check.py +0 -0
  167. {hud_python-0.4.71 → hud_python-0.4.73}/hud/clients/README.md +0 -0
  168. {hud_python-0.4.71 → hud_python-0.4.73}/hud/clients/__init__.py +0 -0
  169. {hud_python-0.4.71 → hud_python-0.4.73}/hud/clients/base.py +0 -0
  170. {hud_python-0.4.71 → hud_python-0.4.73}/hud/clients/fastmcp.py +0 -0
  171. {hud_python-0.4.71 → hud_python-0.4.73}/hud/clients/mcp_use.py +0 -0
  172. {hud_python-0.4.71 → hud_python-0.4.73}/hud/clients/tests/__init__.py +0 -0
  173. {hud_python-0.4.71 → hud_python-0.4.73}/hud/clients/tests/test_client_integration.py +0 -0
  174. {hud_python-0.4.71 → hud_python-0.4.73}/hud/clients/tests/test_fastmcp.py +0 -0
  175. {hud_python-0.4.71 → hud_python-0.4.73}/hud/clients/tests/test_mcp_use_retry.py +0 -0
  176. {hud_python-0.4.71 → hud_python-0.4.73}/hud/clients/tests/test_protocol.py +0 -0
  177. {hud_python-0.4.71 → hud_python-0.4.73}/hud/clients/utils/__init__.py +0 -0
  178. {hud_python-0.4.71 → hud_python-0.4.73}/hud/clients/utils/mcp_use_retry.py +0 -0
  179. {hud_python-0.4.71 → hud_python-0.4.73}/hud/clients/utils/retry.py +0 -0
  180. {hud_python-0.4.71 → hud_python-0.4.73}/hud/clients/utils/retry_transport.py +0 -0
  181. {hud_python-0.4.71 → hud_python-0.4.73}/hud/datasets/__init__.py +0 -0
  182. {hud_python-0.4.71 → hud_python-0.4.73}/hud/datasets/tests/__init__.py +0 -0
  183. {hud_python-0.4.71 → hud_python-0.4.73}/hud/datasets/tests/test_runner.py +0 -0
  184. {hud_python-0.4.71 → hud_python-0.4.73}/hud/datasets/tests/test_utils.py +0 -0
  185. {hud_python-0.4.71 → hud_python-0.4.73}/hud/datasets/utils.py +0 -0
  186. {hud_python-0.4.71 → hud_python-0.4.73}/hud/misc/__init__.py +0 -0
  187. {hud_python-0.4.71 → hud_python-0.4.73}/hud/misc/claude_plays_pokemon.py +0 -0
  188. {hud_python-0.4.71 → hud_python-0.4.73}/hud/native/__init__.py +0 -0
  189. {hud_python-0.4.71 → hud_python-0.4.73}/hud/native/comparator.py +0 -0
  190. {hud_python-0.4.71 → hud_python-0.4.73}/hud/native/tests/__init__.py +0 -0
  191. {hud_python-0.4.71 → hud_python-0.4.73}/hud/native/tests/test_comparator.py +0 -0
  192. {hud_python-0.4.71 → hud_python-0.4.73}/hud/native/tests/test_native_init.py +0 -0
  193. {hud_python-0.4.71 → hud_python-0.4.73}/hud/otel/__init__.py +0 -0
  194. {hud_python-0.4.71 → hud_python-0.4.73}/hud/otel/collector.py +0 -0
  195. {hud_python-0.4.71 → hud_python-0.4.73}/hud/otel/config.py +0 -0
  196. {hud_python-0.4.71 → hud_python-0.4.73}/hud/otel/context.py +0 -0
  197. {hud_python-0.4.71 → hud_python-0.4.73}/hud/otel/exporters.py +0 -0
  198. {hud_python-0.4.71 → hud_python-0.4.73}/hud/otel/instrumentation.py +0 -0
  199. {hud_python-0.4.71 → hud_python-0.4.73}/hud/otel/processors.py +0 -0
  200. {hud_python-0.4.71 → hud_python-0.4.73}/hud/otel/tests/__init__.py +0 -0
  201. {hud_python-0.4.71 → hud_python-0.4.73}/hud/otel/tests/test_instrumentation.py +0 -0
  202. {hud_python-0.4.71 → hud_python-0.4.73}/hud/otel/tests/test_processors.py +0 -0
  203. {hud_python-0.4.71 → hud_python-0.4.73}/hud/py.typed +0 -0
  204. {hud_python-0.4.71 → hud_python-0.4.73}/hud/rl/README.md +0 -0
  205. {hud_python-0.4.71 → hud_python-0.4.73}/hud/rl/__init__.py +0 -0
  206. {hud_python-0.4.71 → hud_python-0.4.73}/hud/rl/actor.py +0 -0
  207. {hud_python-0.4.71 → hud_python-0.4.73}/hud/rl/buffer.py +0 -0
  208. {hud_python-0.4.71 → hud_python-0.4.73}/hud/rl/chat_template.jinja +0 -0
  209. {hud_python-0.4.71 → hud_python-0.4.73}/hud/rl/config.py +0 -0
  210. {hud_python-0.4.71 → hud_python-0.4.73}/hud/rl/distributed.py +0 -0
  211. {hud_python-0.4.71 → hud_python-0.4.73}/hud/rl/learner.py +0 -0
  212. {hud_python-0.4.71 → hud_python-0.4.73}/hud/rl/tests/__init__.py +0 -0
  213. {hud_python-0.4.71 → hud_python-0.4.73}/hud/rl/tests/test_learner.py +0 -0
  214. {hud_python-0.4.71 → hud_python-0.4.73}/hud/rl/train.py +0 -0
  215. {hud_python-0.4.71 → hud_python-0.4.73}/hud/rl/types.py +0 -0
  216. {hud_python-0.4.71 → hud_python-0.4.73}/hud/rl/utils/start_vllm_server.sh +0 -0
  217. {hud_python-0.4.71 → hud_python-0.4.73}/hud/rl/utils.py +0 -0
  218. {hud_python-0.4.71 → hud_python-0.4.73}/hud/rl/vllm_adapter.py +0 -0
  219. {hud_python-0.4.71 → hud_python-0.4.73}/hud/samples/__init__.py +0 -0
  220. {hud_python-0.4.71 → hud_python-0.4.73}/hud/samples/browser.py +0 -0
  221. {hud_python-0.4.71 → hud_python-0.4.73}/hud/server/__init__.py +0 -0
  222. {hud_python-0.4.71 → hud_python-0.4.73}/hud/server/context.py +0 -0
  223. {hud_python-0.4.71 → hud_python-0.4.73}/hud/server/helper/__init__.py +0 -0
  224. {hud_python-0.4.71 → hud_python-0.4.73}/hud/server/low_level.py +0 -0
  225. {hud_python-0.4.71 → hud_python-0.4.73}/hud/server/router.py +0 -0
  226. {hud_python-0.4.71 → hud_python-0.4.73}/hud/server/server.py +0 -0
  227. {hud_python-0.4.71 → hud_python-0.4.73}/hud/server/tests/__init__.py +0 -0
  228. {hud_python-0.4.71 → hud_python-0.4.73}/hud/server/tests/test_add_tool.py +0 -0
  229. {hud_python-0.4.71 → hud_python-0.4.73}/hud/server/tests/test_context.py +0 -0
  230. {hud_python-0.4.71 → hud_python-0.4.73}/hud/server/tests/test_mcp_server_handlers.py +0 -0
  231. {hud_python-0.4.71 → hud_python-0.4.73}/hud/server/tests/test_mcp_server_integration.py +0 -0
  232. {hud_python-0.4.71 → hud_python-0.4.73}/hud/server/tests/test_mcp_server_more.py +0 -0
  233. {hud_python-0.4.71 → hud_python-0.4.73}/hud/server/tests/test_run_wrapper.py +0 -0
  234. {hud_python-0.4.71 → hud_python-0.4.73}/hud/server/tests/test_server_extra.py +0 -0
  235. {hud_python-0.4.71 → hud_python-0.4.73}/hud/server/tests/test_sigterm_runner.py +0 -0
  236. {hud_python-0.4.71 → hud_python-0.4.73}/hud/settings.py +0 -0
  237. {hud_python-0.4.71 → hud_python-0.4.73}/hud/shared/__init__.py +0 -0
  238. {hud_python-0.4.71 → hud_python-0.4.73}/hud/shared/exceptions.py +0 -0
  239. {hud_python-0.4.71 → hud_python-0.4.73}/hud/shared/hints.py +0 -0
  240. {hud_python-0.4.71 → hud_python-0.4.73}/hud/shared/requests.py +0 -0
  241. {hud_python-0.4.71 → hud_python-0.4.73}/hud/shared/tests/__init__.py +0 -0
  242. {hud_python-0.4.71 → hud_python-0.4.73}/hud/shared/tests/test_exceptions.py +0 -0
  243. {hud_python-0.4.71 → hud_python-0.4.73}/hud/shared/tests/test_hints.py +0 -0
  244. {hud_python-0.4.71 → hud_python-0.4.73}/hud/shared/tests/test_requests.py +0 -0
  245. {hud_python-0.4.71 → hud_python-0.4.73}/hud/telemetry/__init__.py +0 -0
  246. {hud_python-0.4.71 → hud_python-0.4.73}/hud/telemetry/async_context.py +0 -0
  247. {hud_python-0.4.71 → hud_python-0.4.73}/hud/telemetry/instrument.py +0 -0
  248. {hud_python-0.4.71 → hud_python-0.4.73}/hud/telemetry/job.py +0 -0
  249. {hud_python-0.4.71 → hud_python-0.4.73}/hud/telemetry/replay.py +0 -0
  250. {hud_python-0.4.71 → hud_python-0.4.73}/hud/telemetry/tests/__init__.py +0 -0
  251. {hud_python-0.4.71 → hud_python-0.4.73}/hud/telemetry/tests/test_async_context.py +0 -0
  252. {hud_python-0.4.71 → hud_python-0.4.73}/hud/telemetry/tests/test_instrument.py +0 -0
  253. {hud_python-0.4.71 → hud_python-0.4.73}/hud/telemetry/tests/test_job.py +0 -0
  254. {hud_python-0.4.71 → hud_python-0.4.73}/hud/telemetry/tests/test_replay.py +0 -0
  255. {hud_python-0.4.71 → hud_python-0.4.73}/hud/telemetry/tests/test_trace.py +0 -0
  256. {hud_python-0.4.71 → hud_python-0.4.73}/hud/telemetry/trace.py +0 -0
  257. {hud_python-0.4.71 → hud_python-0.4.73}/hud/telemetry/utils.py +0 -0
  258. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/__init__.py +0 -0
  259. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/apply_patch.py +0 -0
  260. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/base.py +0 -0
  261. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/bash.py +0 -0
  262. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/computer/__init__.py +0 -0
  263. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/computer/anthropic.py +0 -0
  264. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/computer/gemini.py +0 -0
  265. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/computer/hud.py +0 -0
  266. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/computer/qwen.py +0 -0
  267. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/computer/settings.py +0 -0
  268. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/edit.py +0 -0
  269. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/executors/__init__.py +0 -0
  270. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/executors/base.py +0 -0
  271. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/executors/pyautogui.py +0 -0
  272. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/executors/tests/__init__.py +0 -0
  273. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/executors/tests/test_base_executor.py +0 -0
  274. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/executors/tests/test_pyautogui_executor.py +0 -0
  275. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/executors/xdo.py +0 -0
  276. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/grounding/__init__.py +0 -0
  277. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/grounding/config.py +0 -0
  278. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/grounding/grounded_tool.py +0 -0
  279. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/grounding/grounder.py +0 -0
  280. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/grounding/tests/__init__.py +0 -0
  281. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/grounding/tests/test_grounded_tool.py +0 -0
  282. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/jupyter.py +0 -0
  283. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/playwright.py +0 -0
  284. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/response.py +0 -0
  285. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/shell.py +0 -0
  286. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/submit.py +0 -0
  287. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/tests/__init__.py +0 -0
  288. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/tests/test_apply_patch.py +0 -0
  289. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/tests/test_base.py +0 -0
  290. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/tests/test_bash.py +0 -0
  291. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/tests/test_bash_extended.py +0 -0
  292. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/tests/test_computer.py +0 -0
  293. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/tests/test_computer_actions.py +0 -0
  294. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/tests/test_edit.py +0 -0
  295. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/tests/test_init.py +0 -0
  296. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/tests/test_jupyter_tool.py +0 -0
  297. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/tests/test_playwright_tool.py +0 -0
  298. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/tests/test_response.py +0 -0
  299. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/tests/test_shell.py +0 -0
  300. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/tests/test_submit.py +0 -0
  301. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/tests/test_tools.py +0 -0
  302. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/tests/test_tools_init.py +0 -0
  303. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/tests/test_types.py +0 -0
  304. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/tests/test_utils.py +0 -0
  305. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/types.py +0 -0
  306. {hud_python-0.4.71 → hud_python-0.4.73}/hud/tools/utils.py +0 -0
  307. {hud_python-0.4.71 → hud_python-0.4.73}/hud/types.py +0 -0
  308. {hud_python-0.4.71 → hud_python-0.4.73}/hud/utils/__init__.py +0 -0
  309. {hud_python-0.4.71 → hud_python-0.4.73}/hud/utils/hud_console.py +0 -0
  310. {hud_python-0.4.71 → hud_python-0.4.73}/hud/utils/mcp.py +0 -0
  311. {hud_python-0.4.71 → hud_python-0.4.73}/hud/utils/pretty_errors.py +0 -0
  312. {hud_python-0.4.71 → hud_python-0.4.73}/hud/utils/strict_schema.py +0 -0
  313. {hud_python-0.4.71 → hud_python-0.4.73}/hud/utils/tasks.py +0 -0
  314. {hud_python-0.4.71 → hud_python-0.4.73}/hud/utils/telemetry.py +0 -0
  315. {hud_python-0.4.71 → hud_python-0.4.73}/hud/utils/tests/__init__.py +0 -0
  316. {hud_python-0.4.71 → hud_python-0.4.73}/hud/utils/tests/test_init.py +0 -0
  317. {hud_python-0.4.71 → hud_python-0.4.73}/hud/utils/tests/test_mcp.py +0 -0
  318. {hud_python-0.4.71 → hud_python-0.4.73}/hud/utils/tests/test_pretty_errors.py +0 -0
  319. {hud_python-0.4.71 → hud_python-0.4.73}/hud/utils/tests/test_tasks.py +0 -0
  320. {hud_python-0.4.71 → hud_python-0.4.73}/hud/utils/tests/test_telemetry.py +0 -0
  321. {hud_python-0.4.71 → hud_python-0.4.73}/hud/utils/tests/test_tool_shorthand.py +0 -0
  322. {hud_python-0.4.71 → hud_python-0.4.73}/hud/utils/tool_shorthand.py +0 -0
  323. {hud_python-0.4.71 → hud_python-0.4.73}/hud/utils/types.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hud-python
3
- Version: 0.4.71
3
+ Version: 0.4.73
4
4
  Summary: SDK for the HUD platform.
5
5
  Project-URL: Homepage, https://github.com/hud-evals/hud-python
6
6
  Project-URL: Bug Tracker, https://github.com/hud-evals/hud-python/issues
@@ -131,6 +131,7 @@ OSS RL environment + evals toolkit. Wrap software as environments, run benchmark
131
131
  [![Discord](https://img.shields.io/discord/1327447144772407390?label=Discord&logo=discord&style=flat-square)](https://discord.gg/wkjtmHYYjm)
132
132
  [![X Follow](https://img.shields.io/twitter/follow/hud_evals?style=social)](https://x.com/intent/user?screen_name=hud_evals)
133
133
  [![Shop](https://img.shields.io/badge/_-white.svg?label=shop&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxMAAAsTAQCanBgAAAF6SURBVChTlZA9ixNhFIWf8yaTpFHRRMXCKpAZhCAYFvwoLHZhwUKw9A9YCJb+Bq0sxGbBQrTxX1j41dvIRAjGZbdwRUUGIzPMeyw2swS3WZ/ynHvP5VylafoAWAd+5Xm+wX+SpukmcMf29RDCZrD9BViz3f53+CjYngKZpD5A2/Y7SQBMJpOkKIprdV1vdzqdHzHGblmW9Ww2+5pl2TmAxWKxmM/nP8fj8cmqqtZijJ9sb0u6ABBWjh0riuIt8CqE8LGu66e2d5MkeQ8QY3xme7fb7T4ZjUbrZVl+jjFuSXoEXGxCDgIl9WzfAO5LSmzvNB771R6vzG4Bx0MIt/M8vwV8aLyDQNt70+n0G1AspaTxVln+aghQluVsKbvxVysflT9NQK/XO7R/SGiQ9Nt2aftElmWXJd1kv0kbeANQVdWl4XB4XtJouXaqNRgMHkrqS+r0+/3XwD1JXdungRfAVWBi+6WkK8D3EMJz22cl3W21WgNgx3YAzvwFd0Chdq03gKUAAAAASUVORK5CYII=&style=social)](https://shop.hud.ai)
134
+ [![Scarf](https://static.scarf.sh/a.png?x-pxid=6530ff33-4945-452b-81f9-626872593933)](https://scarf.sh)
134
135
 
135
136
 
136
137
  ### Are you an enterprise building agents?
@@ -14,6 +14,7 @@ OSS RL environment + evals toolkit. Wrap software as environments, run benchmark
14
14
  [![Discord](https://img.shields.io/discord/1327447144772407390?label=Discord&logo=discord&style=flat-square)](https://discord.gg/wkjtmHYYjm)
15
15
  [![X Follow](https://img.shields.io/twitter/follow/hud_evals?style=social)](https://x.com/intent/user?screen_name=hud_evals)
16
16
  [![Shop](https://img.shields.io/badge/_-white.svg?label=shop&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxMAAAsTAQCanBgAAAF6SURBVChTlZA9ixNhFIWf8yaTpFHRRMXCKpAZhCAYFvwoLHZhwUKw9A9YCJb+Bq0sxGbBQrTxX1j41dvIRAjGZbdwRUUGIzPMeyw2swS3WZ/ynHvP5VylafoAWAd+5Xm+wX+SpukmcMf29RDCZrD9BViz3f53+CjYngKZpD5A2/Y7SQBMJpOkKIprdV1vdzqdHzHGblmW9Ww2+5pl2TmAxWKxmM/nP8fj8cmqqtZijJ9sb0u6ABBWjh0riuIt8CqE8LGu66e2d5MkeQ8QY3xme7fb7T4ZjUbrZVl+jjFuSXoEXGxCDgIl9WzfAO5LSmzvNB771R6vzG4Bx0MIt/M8vwV8aLyDQNt70+n0G1AspaTxVln+aghQluVsKbvxVysflT9NQK/XO7R/SGiQ9Nt2aftElmWXJd1kv0kbeANQVdWl4XB4XtJouXaqNRgMHkrqS+r0+/3XwD1JXdungRfAVWBi+6WkK8D3EMJz22cl3W21WgNgx3YAzvwFd0Chdq03gKUAAAAASUVORK5CYII=&style=social)](https://shop.hud.ai)
17
+ [![Scarf](https://static.scarf.sh/a.png?x-pxid=6530ff33-4945-452b-81f9-626872593933)](https://scarf.sh)
17
18
 
18
19
 
19
20
  ### Are you an enterprise building agents?
@@ -62,7 +62,7 @@ class GeminiCUAConfig(GeminiConfig):
62
62
  model_config = ConfigDict(arbitrary_types_allowed=True)
63
63
 
64
64
  model_name: str = "GeminiCUA"
65
- checkpoint_name: str = "gemini-2.5-computer-use-preview-10-2025"
65
+ checkpoint_name: str = "gemini-2.5-computer-use-preview"
66
66
  excluded_predefined_functions: list[str] = Field(default_factory=list)
67
67
 
68
68
 
@@ -37,14 +37,14 @@ class ResponseAgent:
37
37
 
38
38
  def __init__(
39
39
  self,
40
- model: str = "openai/gpt-4o",
40
+ model: str = "gpt-4o",
41
41
  system_prompt: str | None = None,
42
42
  ) -> None:
43
43
  """
44
44
  Initialize the ResponseAgent.
45
45
 
46
46
  Args:
47
- model: The model to use via HUD inference gateway (default: "openai/gpt-4o-mini").
47
+ model: The model to use via HUD inference gateway (default: "gpt-4o").
48
48
  Supports any model available through inference.hud.ai.
49
49
  system_prompt: Optional custom system prompt for determining responses.
50
50
  """
@@ -317,12 +317,12 @@ class TestGeminiCUAAgent:
317
317
  agent = GeminiCUAAgent.create(
318
318
  mcp_client=mock_mcp_client_gemini_computer,
319
319
  model_client=mock_gemini_client,
320
- checkpoint_name="gemini-2.5-computer-use-preview-10-2025",
320
+ checkpoint_name="gemini-2.5-computer-use-preview",
321
321
  validate_api_key=False, # Skip validation in tests
322
322
  )
323
323
 
324
324
  assert agent.model_name == "GeminiCUA"
325
- assert agent.config.checkpoint_name == "gemini-2.5-computer-use-preview-10-2025"
325
+ assert agent.config.checkpoint_name == "gemini-2.5-computer-use-preview"
326
326
  assert agent.gemini_client == mock_gemini_client
327
327
 
328
328
  @pytest.mark.asyncio
@@ -560,10 +560,11 @@ def rft_run(
560
560
  ...,
561
561
  help="Path to tasks file (JSON/JSONL)",
562
562
  ),
563
- provider: str = typer.Option(
564
- "openai",
565
- "--provider",
566
- help="Provider to use (e.g., openai)",
563
+ model_id: str | None = typer.Option(
564
+ None,
565
+ "--model-id",
566
+ "-m",
567
+ help="Model ID to train (skip interactive selection)",
567
568
  ),
568
569
  reasoning_effort: str = typer.Option(
569
570
  "medium",
@@ -586,10 +587,10 @@ def rft_run(
586
587
  """Launch an RFT training job."""
587
588
  rft_command(
588
589
  tasks_file=tasks_file,
589
- provider=provider,
590
590
  reasoning_effort=reasoning_effort,
591
591
  verbose=verbose,
592
592
  yes=yes,
593
+ model_id=model_id,
593
594
  )
594
595
 
595
596
 
@@ -54,7 +54,7 @@ _AGENT_PRESETS: list[AgentPreset] = [
54
54
  AgentPreset(
55
55
  "Gemini CUA (Gemini Computer Use)",
56
56
  AgentType.GEMINI_CUA,
57
- "gemini-2.5-computer-use-preview-10-2025",
57
+ "gemini-2.5-computer-use-preview",
58
58
  ),
59
59
  # HUD Gateway presets (models via HUD Inference API)
60
60
  AgentPreset(
@@ -66,7 +66,7 @@ _AGENT_PRESETS: list[AgentPreset] = [
66
66
  AgentPreset(
67
67
  "GLM-4.5V (Z-AI)",
68
68
  AgentType.OPENAI_COMPATIBLE,
69
- "glm-4.5v",
69
+ "z-ai/glm-4.5v",
70
70
  {"openai_compatible": {"base_url": settings.hud_gateway_url, "model_name": "GLM"}},
71
71
  ),
72
72
  ]
@@ -3,8 +3,10 @@ from __future__ import annotations
3
3
  import logging
4
4
  from typing import Any
5
5
 
6
+ import httpx
6
7
  import typer
7
8
  from rich.console import Console
9
+ from rich.table import Table
8
10
 
9
11
  from hud.settings import settings
10
12
  from hud.utils.hud_console import HUDConsole
@@ -39,12 +41,86 @@ def _patch_mcp_urls_to_staging(tasks: list[dict[str, Any]]) -> list[dict[str, An
39
41
  return [patch_value(task) for task in tasks]
40
42
 
41
43
 
44
+ def _fetch_models() -> list[dict[str, Any]]:
45
+ """Fetch trainable models from the HUD API for the user's team."""
46
+ url = f"{settings.hud_api_url}/models/"
47
+ headers = {
48
+ "Authorization": f"Bearer {settings.api_key}",
49
+ "x-api-key": settings.api_key or "",
50
+ }
51
+ params = {"team_only": "true", "limit": 200}
52
+
53
+ try:
54
+ with httpx.Client(timeout=30.0) as client:
55
+ resp = client.get(url, headers=headers, params=params)
56
+ resp.raise_for_status()
57
+ data = resp.json()
58
+ return data.get("models", [])
59
+ except httpx.HTTPStatusError as e:
60
+ hud_console.error(f"Failed to fetch models: {e.response.status_code}")
61
+ if e.response.status_code == 401:
62
+ hud_console.hint("Check that your HUD_API_KEY is valid")
63
+ raise typer.Exit(1) from e
64
+ except httpx.RequestError as e:
65
+ hud_console.error(f"Connection error while fetching models: {e}")
66
+ raise typer.Exit(1) from e
67
+
68
+
69
+ def _select_model(models: list[dict[str, Any]]) -> dict[str, Any]:
70
+ """Display models and let user select one for training."""
71
+ # Filter to only trainable models that are ready
72
+ trainable_models = [
73
+ m
74
+ for m in models
75
+ if m.get("is_trainable", False)
76
+ and m.get("status") == "ready"
77
+ and not m.get("public", False)
78
+ and m.get("model_name") is not None
79
+ ]
80
+
81
+ if not trainable_models:
82
+ hud_console.error("No trainable models found in your team.")
83
+ hud_console.hint("Fork a trainable model at https://api.hud.so/models to start training.")
84
+ raise typer.Exit(1)
85
+
86
+ # Display models in a table
87
+ hud_console.section_title("Available Trainable Models")
88
+ table = Table(show_header=True, header_style="bold")
89
+ table.add_column("#", style="dim", width=4)
90
+ table.add_column("Name", style="bold")
91
+ table.add_column("Status")
92
+ table.add_column("Provider")
93
+
94
+ for i, model in enumerate(trainable_models, 1):
95
+ provider_name = (
96
+ model.get("provider", {}).get("name", "unknown") if model.get("provider") else "unknown"
97
+ )
98
+ table.add_row(
99
+ str(i),
100
+ model.get("name", "unnamed"),
101
+ model.get("status", "unknown"),
102
+ provider_name,
103
+ )
104
+
105
+ hud_console.console.print(table)
106
+ hud_console.print("")
107
+
108
+ # Build choices for selection
109
+ choices = [
110
+ {"name": f"{m.get('name', 'unnamed')} ({m.get('base_model', 'unknown')})", "value": m}
111
+ for m in trainable_models
112
+ ]
113
+
114
+ selected: dict[str, Any] = hud_console.select("Select a model to train:", choices) # type: ignore[assignment]
115
+ return selected
116
+
117
+
42
118
  def rft_command(
43
119
  tasks_file: str,
44
- provider: str = "openai",
45
120
  reasoning_effort: str = "medium",
46
121
  verbose: bool = False,
47
122
  yes: bool = False,
123
+ model_id: str | None = None,
48
124
  ) -> None:
49
125
  """
50
126
  Run Reinforcement Fine-Tuning (RFT) via the HUD RL service.
@@ -57,6 +133,47 @@ def rft_command(
57
133
  hud_console.info("Run 'hud set HUD_API_KEY=...' or export it.")
58
134
  raise typer.Exit(1)
59
135
 
136
+ # Model selection
137
+ selected_model_id: str
138
+ if model_id:
139
+ # Use provided model_id directly
140
+ selected_model_id = model_id
141
+ hud_console.info(f"Using provided model ID: {selected_model_id}")
142
+ else:
143
+ # Fetch and let user select a model
144
+ hud_console.section_title("Fetching available models")
145
+ hud_console.info("Loading models from your team...")
146
+ models = _fetch_models()
147
+
148
+ if yes:
149
+ # Auto-select first trainable model in non-interactive mode
150
+ trainable_models = [
151
+ m
152
+ for m in models
153
+ if m.get("is_trainable", False)
154
+ and m.get("status") == "ready"
155
+ and not m.get("public", False)
156
+ and m.get("model_name") is not None
157
+ ]
158
+ if not trainable_models:
159
+ hud_console.error("No trainable models found in your team.")
160
+ hud_console.hint(
161
+ "Fork a trainable model at https://api.hud.so/models to start training."
162
+ )
163
+ raise typer.Exit(1)
164
+ selected_model = trainable_models[0]
165
+ hud_console.info(
166
+ f"Auto-selected first trainable model (--yes mode): "
167
+ f"{selected_model.get('name', 'unnamed')}"
168
+ )
169
+ else:
170
+ selected_model = _select_model(models)
171
+
172
+ selected_model_id = selected_model["id"]
173
+ hud_console.success(
174
+ f"Selected model: {selected_model.get('name', 'unnamed')} (ID: {selected_model_id})"
175
+ )
176
+
60
177
  # Preflight check: Convert tasks to remote if needed
61
178
  hud_console.section_title("Preparing tasks for remote training")
62
179
  try:
@@ -153,8 +270,7 @@ def rft_command(
153
270
 
154
271
  # Prepare payload
155
272
  payload = {
156
- "provider": provider,
157
- "base_model": "o4-mini-2025-04-16",
273
+ "model_id": selected_model_id,
158
274
  "dataset": {"tasks": tasks},
159
275
  "config": {"parameters": {"reasoning_effort": reasoning_effort}},
160
276
  }
@@ -162,8 +278,6 @@ def rft_command(
162
278
  # Send request to service
163
279
  hud_console.section_title("Submitting RFT job")
164
280
 
165
- import httpx
166
-
167
281
  base_url = settings.hud_rl_url
168
282
  url = f"{base_url}/training/jobs"
169
283
 
@@ -29,6 +29,7 @@ async def run_single_task(
29
29
  job_id: str | None = None,
30
30
  task_id: str | None = None,
31
31
  group_id: str | None = None,
32
+ trace_id: str | None = None,
32
33
  trace_name: str | None = None,
33
34
  metadata: dict[str, Any] | None = None,
34
35
  ) -> Trace:
@@ -46,6 +47,7 @@ async def run_single_task(
46
47
  job_id: Job ID for telemetry grouping
47
48
  task_id: Task ID for telemetry
48
49
  group_id: Group ID for variance estimation runs
50
+ trace_id: Trace ID for telemetry (auto-generated if not provided)
49
51
  trace_name: Name for the trace (defaults to task prompt)
50
52
  metadata: Additional trace metadata
51
53
 
@@ -59,6 +61,7 @@ async def run_single_task(
59
61
  job_id=job_id,
60
62
  task_id=task_id,
61
63
  group_id=group_id,
64
+ trace_id=trace_id,
62
65
  attrs=metadata or {},
63
66
  ):
64
67
  agent = agent_type.cls.create(**(agent_params or {}))
@@ -22,6 +22,8 @@ logger = logging.getLogger(__name__)
22
22
  class Coordinate(BaseModel):
23
23
  """A coordinate point with x and y values."""
24
24
 
25
+ model_config = {"extra": "forbid"} # Ensures additionalProperties: false in JSON schema
26
+
25
27
  x: int = Field(..., description="X coordinate")
26
28
  y: int = Field(..., description="Y coordinate")
27
29
 
@@ -5,4 +5,4 @@ def test_import():
5
5
  """Test that the package can be imported."""
6
6
  import hud
7
7
 
8
- assert hud.__version__ == "0.4.71"
8
+ assert hud.__version__ == "0.4.73"
@@ -4,4 +4,4 @@ Version information for the HUD SDK.
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
- __version__ = "0.4.71"
7
+ __version__ = "0.4.73"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "hud-python"
3
- version = "0.4.71"
3
+ version = "0.4.73"
4
4
  description = "SDK for the HUD platform."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11, <3.13"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes