hud-python 0.4.29__tar.gz → 0.4.30__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.

Potentially problematic release.


This version of hud-python might be problematic. Click here for more details.

Files changed (220) hide show
  1. {hud_python-0.4.29 → hud_python-0.4.30}/PKG-INFO +1 -1
  2. {hud_python-0.4.29 → hud_python-0.4.30}/hud/agents/base.py +12 -4
  3. {hud_python-0.4.29 → hud_python-0.4.30}/hud/agents/openai_chat_generic.py +2 -1
  4. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/rl/__init__.py +5 -1
  5. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/rl/display.py +1 -1
  6. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/rl/remote_runner.py +0 -1
  7. {hud_python-0.4.29 → hud_python-0.4.30}/hud/native/comparator.py +6 -6
  8. {hud_python-0.4.29 → hud_python-0.4.30}/hud/native/tests/test_comparator.py +8 -8
  9. {hud_python-0.4.29 → hud_python-0.4.30}/hud/native/tests/test_native_init.py +12 -10
  10. {hud_python-0.4.29 → hud_python-0.4.30}/hud/rl/README.md +2 -3
  11. {hud_python-0.4.29 → hud_python-0.4.30}/hud/rl/learner.py +3 -0
  12. {hud_python-0.4.29 → hud_python-0.4.30}/hud/utils/tests/test_version.py +1 -1
  13. {hud_python-0.4.29 → hud_python-0.4.30}/hud/version.py +1 -1
  14. {hud_python-0.4.29 → hud_python-0.4.30}/pyproject.toml +1 -1
  15. {hud_python-0.4.29 → hud_python-0.4.30}/.gitignore +0 -0
  16. {hud_python-0.4.29 → hud_python-0.4.30}/LICENSE +0 -0
  17. {hud_python-0.4.29 → hud_python-0.4.30}/README.md +0 -0
  18. {hud_python-0.4.29 → hud_python-0.4.30}/environments/README.md +0 -0
  19. {hud_python-0.4.29 → hud_python-0.4.30}/environments/browser/README.md +0 -0
  20. {hud_python-0.4.29 → hud_python-0.4.30}/environments/browser/apps/2048/README.md +0 -0
  21. {hud_python-0.4.29 → hud_python-0.4.30}/environments/browser/apps/2048/backend/pyproject.toml +0 -0
  22. {hud_python-0.4.29 → hud_python-0.4.30}/environments/browser/apps/README.md +0 -0
  23. {hud_python-0.4.29 → hud_python-0.4.30}/environments/browser/apps/todo/README.md +0 -0
  24. {hud_python-0.4.29 → hud_python-0.4.30}/environments/browser/apps/todo/backend/pyproject.toml +0 -0
  25. {hud_python-0.4.29 → hud_python-0.4.30}/environments/browser/pyproject.toml +0 -0
  26. {hud_python-0.4.29 → hud_python-0.4.30}/environments/remote_browser/README.md +0 -0
  27. {hud_python-0.4.29 → hud_python-0.4.30}/environments/remote_browser/pyproject.toml +0 -0
  28. {hud_python-0.4.29 → hud_python-0.4.30}/environments/remote_browser/src/hud_controller/providers/README.md +0 -0
  29. {hud_python-0.4.29 → hud_python-0.4.30}/environments/text_2048/README.md +0 -0
  30. {hud_python-0.4.29 → hud_python-0.4.30}/environments/text_2048/pyproject.toml +0 -0
  31. {hud_python-0.4.29 → hud_python-0.4.30}/examples/README.md +0 -0
  32. {hud_python-0.4.29 → hud_python-0.4.30}/hud/__init__.py +0 -0
  33. {hud_python-0.4.29 → hud_python-0.4.30}/hud/__main__.py +0 -0
  34. {hud_python-0.4.29 → hud_python-0.4.30}/hud/agents/__init__.py +0 -0
  35. {hud_python-0.4.29 → hud_python-0.4.30}/hud/agents/claude.py +0 -0
  36. {hud_python-0.4.29 → hud_python-0.4.30}/hud/agents/grounded_openai.py +0 -0
  37. {hud_python-0.4.29 → hud_python-0.4.30}/hud/agents/langchain.py +0 -0
  38. {hud_python-0.4.29 → hud_python-0.4.30}/hud/agents/misc/__init__.py +0 -0
  39. {hud_python-0.4.29 → hud_python-0.4.30}/hud/agents/misc/response_agent.py +0 -0
  40. {hud_python-0.4.29 → hud_python-0.4.30}/hud/agents/openai.py +0 -0
  41. {hud_python-0.4.29 → hud_python-0.4.30}/hud/agents/tests/__init__.py +0 -0
  42. {hud_python-0.4.29 → hud_python-0.4.30}/hud/agents/tests/test_base.py +0 -0
  43. {hud_python-0.4.29 → hud_python-0.4.30}/hud/agents/tests/test_claude.py +0 -0
  44. {hud_python-0.4.29 → hud_python-0.4.30}/hud/agents/tests/test_client.py +0 -0
  45. {hud_python-0.4.29 → hud_python-0.4.30}/hud/agents/tests/test_grounded_openai_agent.py +0 -0
  46. {hud_python-0.4.29 → hud_python-0.4.30}/hud/agents/tests/test_openai.py +0 -0
  47. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/__init__.py +0 -0
  48. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/__main__.py +0 -0
  49. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/analyze.py +0 -0
  50. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/build.py +0 -0
  51. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/clone.py +0 -0
  52. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/debug.py +0 -0
  53. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/dev.py +0 -0
  54. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/eval.py +0 -0
  55. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/flows/__init__.py +0 -0
  56. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/flows/tasks.py +0 -0
  57. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/get.py +0 -0
  58. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/init.py +0 -0
  59. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/list_func.py +0 -0
  60. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/pull.py +0 -0
  61. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/push.py +0 -0
  62. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/remove.py +0 -0
  63. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/rl/config.py +0 -0
  64. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/rl/gpu.py +0 -0
  65. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/rl/gpu_utils.py +0 -0
  66. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/rl/presets.py +0 -0
  67. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/rl/rl_api.py +0 -0
  68. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/rl/vllm.py +0 -0
  69. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/tests/__init__.py +0 -0
  70. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/tests/test_analyze.py +0 -0
  71. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/tests/test_analyze_metadata.py +0 -0
  72. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/tests/test_build.py +0 -0
  73. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/tests/test_cli_init.py +0 -0
  74. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/tests/test_cli_main.py +0 -0
  75. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/tests/test_clone.py +0 -0
  76. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/tests/test_cursor.py +0 -0
  77. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/tests/test_debug.py +0 -0
  78. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/tests/test_list_func.py +0 -0
  79. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/tests/test_main_module.py +0 -0
  80. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/tests/test_mcp_server.py +0 -0
  81. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/tests/test_pull.py +0 -0
  82. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/tests/test_push.py +0 -0
  83. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/tests/test_registry.py +0 -0
  84. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/tests/test_utils.py +0 -0
  85. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/utils/__init__.py +0 -0
  86. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/utils/cursor.py +0 -0
  87. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/utils/docker.py +0 -0
  88. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/utils/environment.py +0 -0
  89. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/utils/interactive.py +0 -0
  90. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/utils/logging.py +0 -0
  91. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/utils/metadata.py +0 -0
  92. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/utils/registry.py +0 -0
  93. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/utils/remote_runner.py +0 -0
  94. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/utils/runner.py +0 -0
  95. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/utils/server.py +0 -0
  96. {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/utils/tasks.py +0 -0
  97. {hud_python-0.4.29 → hud_python-0.4.30}/hud/clients/README.md +0 -0
  98. {hud_python-0.4.29 → hud_python-0.4.30}/hud/clients/__init__.py +0 -0
  99. {hud_python-0.4.29 → hud_python-0.4.30}/hud/clients/base.py +0 -0
  100. {hud_python-0.4.29 → hud_python-0.4.30}/hud/clients/fastmcp.py +0 -0
  101. {hud_python-0.4.29 → hud_python-0.4.30}/hud/clients/mcp_use.py +0 -0
  102. {hud_python-0.4.29 → hud_python-0.4.30}/hud/clients/tests/__init__.py +0 -0
  103. {hud_python-0.4.29 → hud_python-0.4.30}/hud/clients/tests/test_client_integration.py +0 -0
  104. {hud_python-0.4.29 → hud_python-0.4.30}/hud/clients/tests/test_fastmcp.py +0 -0
  105. {hud_python-0.4.29 → hud_python-0.4.30}/hud/clients/tests/test_mcp_use_retry.py +0 -0
  106. {hud_python-0.4.29 → hud_python-0.4.30}/hud/clients/tests/test_protocol.py +0 -0
  107. {hud_python-0.4.29 → hud_python-0.4.30}/hud/clients/utils/__init__.py +0 -0
  108. {hud_python-0.4.29 → hud_python-0.4.30}/hud/clients/utils/mcp_use_retry.py +0 -0
  109. {hud_python-0.4.29 → hud_python-0.4.30}/hud/clients/utils/retry.py +0 -0
  110. {hud_python-0.4.29 → hud_python-0.4.30}/hud/clients/utils/retry_transport.py +0 -0
  111. {hud_python-0.4.29 → hud_python-0.4.30}/hud/datasets/__init__.py +0 -0
  112. {hud_python-0.4.29 → hud_python-0.4.30}/hud/datasets/parallel.py +0 -0
  113. {hud_python-0.4.29 → hud_python-0.4.30}/hud/datasets/runner.py +0 -0
  114. {hud_python-0.4.29 → hud_python-0.4.30}/hud/datasets/utils.py +0 -0
  115. {hud_python-0.4.29 → hud_python-0.4.30}/hud/misc/__init__.py +0 -0
  116. {hud_python-0.4.29 → hud_python-0.4.30}/hud/misc/claude_plays_pokemon.py +0 -0
  117. {hud_python-0.4.29 → hud_python-0.4.30}/hud/native/__init__.py +0 -0
  118. {hud_python-0.4.29 → hud_python-0.4.30}/hud/native/tests/__init__.py +0 -0
  119. {hud_python-0.4.29 → hud_python-0.4.30}/hud/otel/__init__.py +0 -0
  120. {hud_python-0.4.29 → hud_python-0.4.30}/hud/otel/collector.py +0 -0
  121. {hud_python-0.4.29 → hud_python-0.4.30}/hud/otel/config.py +0 -0
  122. {hud_python-0.4.29 → hud_python-0.4.30}/hud/otel/context.py +0 -0
  123. {hud_python-0.4.29 → hud_python-0.4.30}/hud/otel/exporters.py +0 -0
  124. {hud_python-0.4.29 → hud_python-0.4.30}/hud/otel/instrumentation.py +0 -0
  125. {hud_python-0.4.29 → hud_python-0.4.30}/hud/otel/processors.py +0 -0
  126. {hud_python-0.4.29 → hud_python-0.4.30}/hud/otel/tests/__init__.py +0 -0
  127. {hud_python-0.4.29 → hud_python-0.4.30}/hud/otel/tests/test_processors.py +0 -0
  128. {hud_python-0.4.29 → hud_python-0.4.30}/hud/py.typed +0 -0
  129. {hud_python-0.4.29 → hud_python-0.4.30}/hud/rl/__init__.py +0 -0
  130. {hud_python-0.4.29 → hud_python-0.4.30}/hud/rl/actor.py +0 -0
  131. {hud_python-0.4.29 → hud_python-0.4.30}/hud/rl/buffer.py +0 -0
  132. {hud_python-0.4.29 → hud_python-0.4.30}/hud/rl/chat_template.jinja +0 -0
  133. {hud_python-0.4.29 → hud_python-0.4.30}/hud/rl/config.py +0 -0
  134. {hud_python-0.4.29 → hud_python-0.4.30}/hud/rl/distributed.py +0 -0
  135. {hud_python-0.4.29 → hud_python-0.4.30}/hud/rl/tests/__init__.py +0 -0
  136. {hud_python-0.4.29 → hud_python-0.4.30}/hud/rl/tests/test_learner.py +0 -0
  137. {hud_python-0.4.29 → hud_python-0.4.30}/hud/rl/train.py +0 -0
  138. {hud_python-0.4.29 → hud_python-0.4.30}/hud/rl/types.py +0 -0
  139. {hud_python-0.4.29 → hud_python-0.4.30}/hud/rl/utils/start_vllm_server.sh +0 -0
  140. {hud_python-0.4.29 → hud_python-0.4.30}/hud/rl/utils.py +0 -0
  141. {hud_python-0.4.29 → hud_python-0.4.30}/hud/rl/vllm_adapter.py +0 -0
  142. {hud_python-0.4.29 → hud_python-0.4.30}/hud/server/__init__.py +0 -0
  143. {hud_python-0.4.29 → hud_python-0.4.30}/hud/server/context.py +0 -0
  144. {hud_python-0.4.29 → hud_python-0.4.30}/hud/server/helper/__init__.py +0 -0
  145. {hud_python-0.4.29 → hud_python-0.4.30}/hud/server/low_level.py +0 -0
  146. {hud_python-0.4.29 → hud_python-0.4.30}/hud/server/server.py +0 -0
  147. {hud_python-0.4.29 → hud_python-0.4.30}/hud/server/tests/__init__.py +0 -0
  148. {hud_python-0.4.29 → hud_python-0.4.30}/hud/settings.py +0 -0
  149. {hud_python-0.4.29 → hud_python-0.4.30}/hud/shared/__init__.py +0 -0
  150. {hud_python-0.4.29 → hud_python-0.4.30}/hud/shared/exceptions.py +0 -0
  151. {hud_python-0.4.29 → hud_python-0.4.30}/hud/shared/hints.py +0 -0
  152. {hud_python-0.4.29 → hud_python-0.4.30}/hud/shared/requests.py +0 -0
  153. {hud_python-0.4.29 → hud_python-0.4.30}/hud/shared/tests/__init__.py +0 -0
  154. {hud_python-0.4.29 → hud_python-0.4.30}/hud/shared/tests/test_exceptions.py +0 -0
  155. {hud_python-0.4.29 → hud_python-0.4.30}/hud/shared/tests/test_requests.py +0 -0
  156. {hud_python-0.4.29 → hud_python-0.4.30}/hud/telemetry/__init__.py +0 -0
  157. {hud_python-0.4.29 → hud_python-0.4.30}/hud/telemetry/instrument.py +0 -0
  158. {hud_python-0.4.29 → hud_python-0.4.30}/hud/telemetry/job.py +0 -0
  159. {hud_python-0.4.29 → hud_python-0.4.30}/hud/telemetry/replay.py +0 -0
  160. {hud_python-0.4.29 → hud_python-0.4.30}/hud/telemetry/tests/__init__.py +0 -0
  161. {hud_python-0.4.29 → hud_python-0.4.30}/hud/telemetry/tests/test_replay.py +0 -0
  162. {hud_python-0.4.29 → hud_python-0.4.30}/hud/telemetry/tests/test_trace.py +0 -0
  163. {hud_python-0.4.29 → hud_python-0.4.30}/hud/telemetry/trace.py +0 -0
  164. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/__init__.py +0 -0
  165. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/base.py +0 -0
  166. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/bash.py +0 -0
  167. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/computer/__init__.py +0 -0
  168. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/computer/anthropic.py +0 -0
  169. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/computer/hud.py +0 -0
  170. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/computer/openai.py +0 -0
  171. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/computer/settings.py +0 -0
  172. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/edit.py +0 -0
  173. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/executors/__init__.py +0 -0
  174. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/executors/base.py +0 -0
  175. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/executors/pyautogui.py +0 -0
  176. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/executors/tests/__init__.py +0 -0
  177. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/executors/tests/test_base_executor.py +0 -0
  178. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/executors/tests/test_pyautogui_executor.py +0 -0
  179. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/executors/xdo.py +0 -0
  180. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/grounding/__init__.py +0 -0
  181. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/grounding/config.py +0 -0
  182. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/grounding/grounded_tool.py +0 -0
  183. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/grounding/grounder.py +0 -0
  184. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/grounding/tests/__init__.py +0 -0
  185. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/grounding/tests/test_grounded_tool.py +0 -0
  186. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/playwright.py +0 -0
  187. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/response.py +0 -0
  188. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/submit.py +0 -0
  189. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/tests/__init__.py +0 -0
  190. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/tests/test_base.py +0 -0
  191. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/tests/test_bash.py +0 -0
  192. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/tests/test_bash_extended.py +0 -0
  193. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/tests/test_computer.py +0 -0
  194. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/tests/test_computer_actions.py +0 -0
  195. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/tests/test_edit.py +0 -0
  196. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/tests/test_init.py +0 -0
  197. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/tests/test_playwright_tool.py +0 -0
  198. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/tests/test_response.py +0 -0
  199. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/tests/test_tools.py +0 -0
  200. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/tests/test_tools_init.py +0 -0
  201. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/tests/test_utils.py +0 -0
  202. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/types.py +0 -0
  203. {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/utils.py +0 -0
  204. {hud_python-0.4.29 → hud_python-0.4.30}/hud/types.py +0 -0
  205. {hud_python-0.4.29 → hud_python-0.4.30}/hud/utils/__init__.py +0 -0
  206. {hud_python-0.4.29 → hud_python-0.4.30}/hud/utils/agent_factories.py +0 -0
  207. {hud_python-0.4.29 → hud_python-0.4.30}/hud/utils/async_utils.py +0 -0
  208. {hud_python-0.4.29 → hud_python-0.4.30}/hud/utils/group_eval.py +0 -0
  209. {hud_python-0.4.29 → hud_python-0.4.30}/hud/utils/hud_console.py +0 -0
  210. {hud_python-0.4.29 → hud_python-0.4.30}/hud/utils/mcp.py +0 -0
  211. {hud_python-0.4.29 → hud_python-0.4.30}/hud/utils/pretty_errors.py +0 -0
  212. {hud_python-0.4.29 → hud_python-0.4.30}/hud/utils/progress.py +0 -0
  213. {hud_python-0.4.29 → hud_python-0.4.30}/hud/utils/tasks.py +0 -0
  214. {hud_python-0.4.29 → hud_python-0.4.30}/hud/utils/telemetry.py +0 -0
  215. {hud_python-0.4.29 → hud_python-0.4.30}/hud/utils/tests/__init__.py +0 -0
  216. {hud_python-0.4.29 → hud_python-0.4.30}/hud/utils/tests/test_async_utils.py +0 -0
  217. {hud_python-0.4.29 → hud_python-0.4.30}/hud/utils/tests/test_init.py +0 -0
  218. {hud_python-0.4.29 → hud_python-0.4.30}/hud/utils/tests/test_mcp.py +0 -0
  219. {hud_python-0.4.29 → hud_python-0.4.30}/hud/utils/tests/test_progress.py +0 -0
  220. {hud_python-0.4.29 → hud_python-0.4.30}/hud/utils/tests/test_telemetry.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hud-python
3
- Version: 0.4.29
3
+ Version: 0.4.30
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
@@ -153,16 +153,24 @@ class MCPAgent(ABC):
153
153
  if task.setup_tool:
154
154
  if isinstance(task.setup_tool, list):
155
155
  for tool in task.setup_tool:
156
- if self.agent_tools and tool.name not in self.agent_tools:
156
+ if not self.agent_tools or (
157
+ self.agent_tools and tool.name not in self.agent_tools
158
+ ):
157
159
  self.lifecycle_tools.append(tool.name)
158
- elif self.agent_tools and task.setup_tool.name not in self.agent_tools:
160
+ elif not self.agent_tools or (
161
+ self.agent_tools and task.setup_tool.name not in self.agent_tools
162
+ ):
159
163
  self.lifecycle_tools.append(task.setup_tool.name)
160
164
  if task.evaluate_tool:
161
165
  if isinstance(task.evaluate_tool, list):
162
166
  for tool in task.evaluate_tool:
163
- if self.agent_tools and tool.name not in self.agent_tools:
167
+ if not self.agent_tools or (
168
+ self.agent_tools and tool.name not in self.agent_tools
169
+ ):
164
170
  self.lifecycle_tools.append(tool.name)
165
- elif self.agent_tools and task.evaluate_tool.name not in self.agent_tools:
171
+ elif not self.agent_tools or (
172
+ self.agent_tools and task.evaluate_tool.name not in self.agent_tools
173
+ ):
166
174
  self.lifecycle_tools.append(task.evaluate_tool.name)
167
175
  if task.system_prompt:
168
176
  self.system_prompt += "\n\n" + task.system_prompt
@@ -230,7 +230,8 @@ class GenericOpenAIChatAgent(MCPAgent):
230
230
  if msg.tool_calls:
231
231
  for tc in msg.tool_calls:
232
232
  if tc.function.name is not None: # type: ignore
233
- tool_calls.extend(self._oai_to_mcp(tc))
233
+ # _oai_to_mcp returns a single MCPToolCall; append it
234
+ tool_calls.append(self._oai_to_mcp(tc)) # noqa: PERF401
234
235
 
235
236
  # Only stop on length (token limit), never on "stop"
236
237
  done = choice.finish_reason == "length"
@@ -131,7 +131,11 @@ def rl_command(
131
131
  if not tasks_file:
132
132
  tasks_file = find_tasks_file(tasks_file)
133
133
  if not tasks_file:
134
- console.print("[red]❌ No tasks file found in current directory[/red]")
134
+ hud_console.warning("No tasks file found in current directory")
135
+ hud_console.hint(
136
+ "Download a HF dataset using `hud get <dataset_name>` (e.g., `hud get hud-evals/2048-basic`)" # noqa: E501
137
+ )
138
+ hud_console.hint("or create a tasks file manually.")
135
139
  raise typer.Exit(1)
136
140
 
137
141
  # Handle remote execution
@@ -42,7 +42,7 @@ def display_preset_table(presets: list[dict[str, Any]], gpu_memory_gb: float) ->
42
42
  # Add time columns for A100
43
43
  if gpu_memory_gb >= 40:
44
44
  preset_table.add_column("Tasks/hour", style="green")
45
- preset_table.add_column("Steps/hour", style="green")
45
+ preset_table.add_column("Updates/hour", style="green")
46
46
 
47
47
  for i, preset in enumerate(presets):
48
48
  row = [
@@ -298,7 +298,6 @@ def run_remote_training(
298
298
  {"name": "✏️ Review configuration", "value": "edit"},
299
299
  {"name": "❌ Cancel", "value": "cancel"},
300
300
  ],
301
- default=0,
302
301
  )
303
302
 
304
303
  if edit_choice == "cancel":
@@ -513,11 +513,11 @@ def make_alias_tool(name: str, preset_mode: ComparisonMode, description: str) ->
513
513
 
514
514
 
515
515
  # Create MCP server
516
- comparator_server = MCPServer(name="comparator")
516
+ comparator = MCPServer(name="comparator")
517
517
 
518
518
  # Register main tool
519
- comparator_server.add_tool(SubmitTool())
520
- comparator_server.add_tool(CompareTool())
519
+ comparator.add_tool(SubmitTool())
520
+ comparator.add_tool(CompareTool())
521
521
 
522
522
  # Register aliases - these are just thin wrappers
523
523
  ALIASES = [
@@ -534,13 +534,13 @@ ALIASES = [
534
534
 
535
535
  for name, mode, desc in ALIASES:
536
536
  AliasTool = make_alias_tool(name, mode, desc)
537
- comparator_server.add_tool(AliasTool())
537
+ comparator.add_tool(AliasTool())
538
538
 
539
539
  # Export for mounting
540
- __all__ = ["comparator_server"]
540
+ __all__ = ["comparator"]
541
541
 
542
542
 
543
543
  if __name__ == "__main__":
544
544
  # Run as standalone server
545
545
  logger.info("Starting Comparator MCP Server...")
546
- comparator_server.run()
546
+ comparator.run()
@@ -11,7 +11,7 @@ from hud.native.comparator import (
11
11
  ComparisonResult,
12
12
  DataType,
13
13
  auto_select_mode,
14
- comparator_server,
14
+ comparator,
15
15
  detect_type,
16
16
  extract_boolean,
17
17
  extract_json,
@@ -321,10 +321,10 @@ class TestAliasTools:
321
321
  @pytest.mark.asyncio
322
322
  async def test_aliases_work(self):
323
323
  """Test that aliases are properly registered and work."""
324
- from hud.native.comparator import comparator_server
324
+ from hud.native.comparator import comparator
325
325
 
326
326
  # Check that aliases are registered
327
- tool_names = [t.name for t in comparator_server._tool_manager._tools.values()]
327
+ tool_names = [t.name for t in comparator._tool_manager._tools.values()]
328
328
 
329
329
  expected_aliases = [
330
330
  "compare_exact",
@@ -433,7 +433,7 @@ class TestAliasPreprocessing:
433
433
  @pytest.mark.asyncio
434
434
  async def test_json_alias_preprocessing(self):
435
435
  """Test JSON extraction in compare_json tool."""
436
- tools = {t.name: t for t in comparator_server._tool_manager._tools.values()}
436
+ tools = {t.name: t for t in comparator._tool_manager._tools.values()}
437
437
  json_tool = tools["compare_json"]
438
438
 
439
439
  assert isinstance(json_tool, FunctionTool)
@@ -448,7 +448,7 @@ class TestAliasPreprocessing:
448
448
  @pytest.mark.asyncio
449
449
  async def test_numeric_alias_preprocessing(self):
450
450
  """Test number extraction in numeric tools."""
451
- tools = {t.name: t for t in comparator_server._tool_manager._tools.values()}
451
+ tools = {t.name: t for t in comparator._tool_manager._tools.values()}
452
452
 
453
453
  # Float tool
454
454
  float_tool = tools["compare_float"]
@@ -471,7 +471,7 @@ class TestAliasPreprocessing:
471
471
  @pytest.mark.asyncio
472
472
  async def test_boolean_alias_preprocessing(self):
473
473
  """Test boolean extraction in compare_boolean tool."""
474
- tools = {t.name: t for t in comparator_server._tool_manager._tools.values()}
474
+ tools = {t.name: t for t in comparator._tool_manager._tools.values()}
475
475
  bool_tool = tools["compare_boolean"]
476
476
 
477
477
  assert isinstance(bool_tool, FunctionTool)
@@ -485,7 +485,7 @@ class TestAliasPreprocessing:
485
485
  @pytest.mark.asyncio
486
486
  async def test_list_alias_preprocessing(self):
487
487
  """Test list extraction in compare_list tool."""
488
- tools = {t.name: t for t in comparator_server._tool_manager._tools.values()}
488
+ tools = {t.name: t for t in comparator._tool_manager._tools.values()}
489
489
  list_tool = tools["compare_list"]
490
490
 
491
491
  assert isinstance(list_tool, FunctionTool)
@@ -499,7 +499,7 @@ class TestAliasPreprocessing:
499
499
  @pytest.mark.asyncio
500
500
  async def test_complex_llm_output(self):
501
501
  """Test extraction from complex LLM outputs with reasoning."""
502
- tools = {t.name: t for t in comparator_server._tool_manager._tools.values()}
502
+ tools = {t.name: t for t in comparator._tool_manager._tools.values()}
503
503
  json_tool = tools["compare_json"]
504
504
 
505
505
  llm_output = """
@@ -8,12 +8,12 @@ class TestNativeInit:
8
8
 
9
9
  def test_comparator_server_import(self):
10
10
  """Test that comparator server can be imported."""
11
- from hud.native.comparator import comparator_server
11
+ from hud.native.comparator import comparator
12
12
  from hud.server import MCPServer
13
13
 
14
14
  # Verify comparator is an MCPServer instance
15
- assert isinstance(comparator_server, MCPServer)
16
- assert comparator_server.name == "comparator"
15
+ assert isinstance(comparator, MCPServer)
16
+ assert comparator.name == "comparator"
17
17
 
18
18
  def test_all_exports(self):
19
19
  """Test that __all__ is properly defined."""
@@ -31,11 +31,11 @@ class TestNativeInit:
31
31
 
32
32
  def test_comparator_tools_registered(self):
33
33
  """Test that comparator server has tools registered."""
34
- from hud.native.comparator import comparator_server
34
+ from hud.native.comparator import comparator
35
35
 
36
36
  # The server should have tools registered
37
37
  # We can check that the tool manager has tools
38
- tool_names = [t.name for t in comparator_server._tool_manager._tools.values()]
38
+ tool_names = [t.name for t in comparator._tool_manager._tools.values()]
39
39
 
40
40
  # Should have the main compare tool
41
41
  assert "compare" in tool_names
@@ -64,16 +64,18 @@ class TestNativeInit:
64
64
 
65
65
  def test_comparator_tool_functionality(self):
66
66
  """Test that we can get the CompareTool from the comparator."""
67
- from hud.native.comparator import comparator_server
68
- from hud.tools import BaseTool
67
+ from hud.native.comparator import comparator
69
68
 
70
69
  # Get the compare tool
71
70
  compare_tool = None
72
- for tool in comparator_server._tool_manager._tools.values():
71
+ for tool in comparator._tool_manager._tools.values():
73
72
  if tool.name == "compare":
74
73
  compare_tool = tool
75
74
  break
76
75
 
77
76
  assert compare_tool is not None
78
- assert isinstance(compare_tool, BaseTool)
79
- assert hasattr(compare_tool, "__call__")
77
+ # FastMCP wraps tools as FunctionTool instances
78
+ assert hasattr(compare_tool, "name")
79
+ assert compare_tool.name == "compare"
80
+ # FunctionTool has a 'fn' attribute for the callable
81
+ assert hasattr(compare_tool, "fn") or hasattr(compare_tool, "__call__")
@@ -1,6 +1,6 @@
1
1
  We suggest running hud rl (or with the --local flag) for optimal hyperparameters and native HuggingFace running.
2
2
 
3
- Install:
3
+ However, to run this independently, sping up an instance with at least 2 GPUs and run:
4
4
  ```bash
5
5
  sudo apt-get update -y && sudo apt-get install -y cuda-toolkit-12-6
6
6
  uv pip install -e .[rl]
@@ -8,8 +8,7 @@ uv pip install ninja
8
8
  uv pip install flash-attn --no-build-isolation
9
9
  ```
10
10
 
11
-
12
- However, if you want to run the training directly, launch a vllm server with:
11
+ Launch a vllm server with:
13
12
  ```bash
14
13
  export VLLM_ALLOW_RUNTIME_LORA_UPDATING=True
15
14
  export TOKENIZERS_PARALLELISM=false
@@ -103,10 +103,12 @@ class GRPOLearner:
103
103
 
104
104
  # Load processor/tokenizer based on model type
105
105
  if is_vl_model:
106
+ # Some environments require remote code for Qwen2.5-VL processors
106
107
  processor = AutoProcessor.from_pretrained(
107
108
  model_cfg.base_model,
108
109
  min_pixels=model_cfg.min_pixels,
109
110
  max_pixels=model_cfg.max_pixels,
111
+ trust_remote_code=True,
110
112
  )
111
113
  else:
112
114
  processor = AutoTokenizer.from_pretrained(model_cfg.base_model)
@@ -123,6 +125,7 @@ class GRPOLearner:
123
125
  model_cfg.base_model,
124
126
  torch_dtype=torch.bfloat16,
125
127
  attn_implementation=attn_implementation,
128
+ trust_remote_code=True,
126
129
  )
127
130
  self.log(f"Using {attn_implementation} for attention")
128
131
  except (ImportError, ValueError) as e:
@@ -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.29"
8
+ assert hud.__version__ == "0.4.30"
@@ -4,4 +4,4 @@ Version information for the HUD SDK.
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
- __version__ = "0.4.29"
7
+ __version__ = "0.4.30"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "hud-python"
3
- version = "0.4.29"
3
+ version = "0.4.30"
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
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