hud-python 0.4.45__tar.gz → 0.4.47__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 (247) hide show
  1. {hud_python-0.4.45 → hud_python-0.4.47}/PKG-INFO +1 -1
  2. {hud_python-0.4.45 → hud_python-0.4.47}/hud/rl/config.py +1 -0
  3. {hud_python-0.4.45 → hud_python-0.4.47}/hud/rl/distributed.py +1 -1
  4. {hud_python-0.4.45 → hud_python-0.4.47}/hud/rl/learner.py +20 -10
  5. {hud_python-0.4.45 → hud_python-0.4.47}/hud/rl/train.py +12 -0
  6. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/base.py +37 -1
  7. {hud_python-0.4.45 → hud_python-0.4.47}/hud/utils/tests/test_version.py +1 -1
  8. {hud_python-0.4.45 → hud_python-0.4.47}/hud/version.py +1 -1
  9. {hud_python-0.4.45 → hud_python-0.4.47}/pyproject.toml +1 -1
  10. {hud_python-0.4.45 → hud_python-0.4.47}/.gitignore +0 -0
  11. {hud_python-0.4.45 → hud_python-0.4.47}/LICENSE +0 -0
  12. {hud_python-0.4.45 → hud_python-0.4.47}/README.md +0 -0
  13. {hud_python-0.4.45 → hud_python-0.4.47}/environments/README.md +0 -0
  14. {hud_python-0.4.45 → hud_python-0.4.47}/environments/blank/README.md +0 -0
  15. {hud_python-0.4.45 → hud_python-0.4.47}/environments/blank/controller/README.md +0 -0
  16. {hud_python-0.4.45 → hud_python-0.4.47}/environments/blank/environment/README.md +0 -0
  17. {hud_python-0.4.45 → hud_python-0.4.47}/environments/blank/pyproject.toml +0 -0
  18. {hud_python-0.4.45 → hud_python-0.4.47}/environments/browser/README.md +0 -0
  19. {hud_python-0.4.45 → hud_python-0.4.47}/environments/browser/environment/2048/README.md +0 -0
  20. {hud_python-0.4.45 → hud_python-0.4.47}/environments/browser/environment/2048/backend/pyproject.toml +0 -0
  21. {hud_python-0.4.45 → hud_python-0.4.47}/environments/browser/environment/README.md +0 -0
  22. {hud_python-0.4.45 → hud_python-0.4.47}/environments/browser/environment/todo/README.md +0 -0
  23. {hud_python-0.4.45 → hud_python-0.4.47}/environments/browser/environment/todo/backend/pyproject.toml +0 -0
  24. {hud_python-0.4.45 → hud_python-0.4.47}/environments/browser/pyproject.toml +0 -0
  25. {hud_python-0.4.45 → hud_python-0.4.47}/environments/deepresearch/pyproject.toml +0 -0
  26. {hud_python-0.4.45 → hud_python-0.4.47}/environments/remote_browser/README.md +0 -0
  27. {hud_python-0.4.45 → hud_python-0.4.47}/environments/remote_browser/pyproject.toml +0 -0
  28. {hud_python-0.4.45 → hud_python-0.4.47}/environments/remote_browser/src/hud_controller/providers/README.md +0 -0
  29. {hud_python-0.4.45 → hud_python-0.4.47}/environments/text_2048/README.md +0 -0
  30. {hud_python-0.4.45 → hud_python-0.4.47}/environments/text_2048/pyproject.toml +0 -0
  31. {hud_python-0.4.45 → hud_python-0.4.47}/examples/README.md +0 -0
  32. {hud_python-0.4.45 → hud_python-0.4.47}/hud/__init__.py +0 -0
  33. {hud_python-0.4.45 → hud_python-0.4.47}/hud/__main__.py +0 -0
  34. {hud_python-0.4.45 → hud_python-0.4.47}/hud/agents/__init__.py +0 -0
  35. {hud_python-0.4.45 → hud_python-0.4.47}/hud/agents/base.py +0 -0
  36. {hud_python-0.4.45 → hud_python-0.4.47}/hud/agents/claude.py +0 -0
  37. {hud_python-0.4.45 → hud_python-0.4.47}/hud/agents/grounded_openai.py +0 -0
  38. {hud_python-0.4.45 → hud_python-0.4.47}/hud/agents/langchain.py +0 -0
  39. {hud_python-0.4.45 → hud_python-0.4.47}/hud/agents/lite_llm.py +0 -0
  40. {hud_python-0.4.45 → hud_python-0.4.47}/hud/agents/misc/__init__.py +0 -0
  41. {hud_python-0.4.45 → hud_python-0.4.47}/hud/agents/misc/integration_test_agent.py +0 -0
  42. {hud_python-0.4.45 → hud_python-0.4.47}/hud/agents/misc/response_agent.py +0 -0
  43. {hud_python-0.4.45 → hud_python-0.4.47}/hud/agents/openai.py +0 -0
  44. {hud_python-0.4.45 → hud_python-0.4.47}/hud/agents/openai_chat_generic.py +0 -0
  45. {hud_python-0.4.45 → hud_python-0.4.47}/hud/agents/tests/__init__.py +0 -0
  46. {hud_python-0.4.45 → hud_python-0.4.47}/hud/agents/tests/test_base.py +0 -0
  47. {hud_python-0.4.45 → hud_python-0.4.47}/hud/agents/tests/test_claude.py +0 -0
  48. {hud_python-0.4.45 → hud_python-0.4.47}/hud/agents/tests/test_client.py +0 -0
  49. {hud_python-0.4.45 → hud_python-0.4.47}/hud/agents/tests/test_grounded_openai_agent.py +0 -0
  50. {hud_python-0.4.45 → hud_python-0.4.47}/hud/agents/tests/test_openai.py +0 -0
  51. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/__init__.py +0 -0
  52. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/__main__.py +0 -0
  53. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/analyze.py +0 -0
  54. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/build.py +0 -0
  55. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/clone.py +0 -0
  56. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/debug.py +0 -0
  57. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/dev.py +0 -0
  58. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/eval.py +0 -0
  59. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/flows/__init__.py +0 -0
  60. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/flows/tasks.py +0 -0
  61. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/get.py +0 -0
  62. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/init.py +0 -0
  63. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/list_func.py +0 -0
  64. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/pull.py +0 -0
  65. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/push.py +0 -0
  66. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/remove.py +0 -0
  67. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/rl/__init__.py +0 -0
  68. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/rl/celebrate.py +0 -0
  69. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/rl/config.py +0 -0
  70. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/rl/display.py +0 -0
  71. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/rl/gpu.py +0 -0
  72. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/rl/gpu_utils.py +0 -0
  73. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/rl/local_runner.py +0 -0
  74. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/rl/presets.py +0 -0
  75. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/rl/remote_runner.py +0 -0
  76. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/rl/rl_api.py +0 -0
  77. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/rl/viewer.py +0 -0
  78. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/rl/vllm.py +0 -0
  79. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/rl/wait_utils.py +0 -0
  80. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/tests/__init__.py +0 -0
  81. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/tests/test_analyze.py +0 -0
  82. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/tests/test_analyze_metadata.py +0 -0
  83. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/tests/test_build.py +0 -0
  84. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/tests/test_cli_init.py +0 -0
  85. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/tests/test_cli_main.py +0 -0
  86. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/tests/test_clone.py +0 -0
  87. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/tests/test_cursor.py +0 -0
  88. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/tests/test_debug.py +0 -0
  89. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/tests/test_list_func.py +0 -0
  90. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/tests/test_main_module.py +0 -0
  91. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/tests/test_mcp_server.py +0 -0
  92. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/tests/test_pull.py +0 -0
  93. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/tests/test_push.py +0 -0
  94. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/tests/test_registry.py +0 -0
  95. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/tests/test_utils.py +0 -0
  96. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/utils/__init__.py +0 -0
  97. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/utils/config.py +0 -0
  98. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/utils/cursor.py +0 -0
  99. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/utils/docker.py +0 -0
  100. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/utils/env_check.py +0 -0
  101. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/utils/environment.py +0 -0
  102. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/utils/interactive.py +0 -0
  103. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/utils/local_runner.py +0 -0
  104. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/utils/logging.py +0 -0
  105. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/utils/metadata.py +0 -0
  106. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/utils/package_runner.py +0 -0
  107. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/utils/registry.py +0 -0
  108. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/utils/remote_runner.py +0 -0
  109. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/utils/runner.py +0 -0
  110. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/utils/server.py +0 -0
  111. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/utils/source_hash.py +0 -0
  112. {hud_python-0.4.45 → hud_python-0.4.47}/hud/cli/utils/tasks.py +0 -0
  113. {hud_python-0.4.45 → hud_python-0.4.47}/hud/clients/README.md +0 -0
  114. {hud_python-0.4.45 → hud_python-0.4.47}/hud/clients/__init__.py +0 -0
  115. {hud_python-0.4.45 → hud_python-0.4.47}/hud/clients/base.py +0 -0
  116. {hud_python-0.4.45 → hud_python-0.4.47}/hud/clients/fastmcp.py +0 -0
  117. {hud_python-0.4.45 → hud_python-0.4.47}/hud/clients/mcp_use.py +0 -0
  118. {hud_python-0.4.45 → hud_python-0.4.47}/hud/clients/tests/__init__.py +0 -0
  119. {hud_python-0.4.45 → hud_python-0.4.47}/hud/clients/tests/test_client_integration.py +0 -0
  120. {hud_python-0.4.45 → hud_python-0.4.47}/hud/clients/tests/test_fastmcp.py +0 -0
  121. {hud_python-0.4.45 → hud_python-0.4.47}/hud/clients/tests/test_mcp_use_retry.py +0 -0
  122. {hud_python-0.4.45 → hud_python-0.4.47}/hud/clients/tests/test_protocol.py +0 -0
  123. {hud_python-0.4.45 → hud_python-0.4.47}/hud/clients/utils/__init__.py +0 -0
  124. {hud_python-0.4.45 → hud_python-0.4.47}/hud/clients/utils/mcp_use_retry.py +0 -0
  125. {hud_python-0.4.45 → hud_python-0.4.47}/hud/clients/utils/retry.py +0 -0
  126. {hud_python-0.4.45 → hud_python-0.4.47}/hud/clients/utils/retry_transport.py +0 -0
  127. {hud_python-0.4.45 → hud_python-0.4.47}/hud/datasets/__init__.py +0 -0
  128. {hud_python-0.4.45 → hud_python-0.4.47}/hud/datasets/parallel.py +0 -0
  129. {hud_python-0.4.45 → hud_python-0.4.47}/hud/datasets/runner.py +0 -0
  130. {hud_python-0.4.45 → hud_python-0.4.47}/hud/datasets/utils.py +0 -0
  131. {hud_python-0.4.45 → hud_python-0.4.47}/hud/misc/__init__.py +0 -0
  132. {hud_python-0.4.45 → hud_python-0.4.47}/hud/misc/claude_plays_pokemon.py +0 -0
  133. {hud_python-0.4.45 → hud_python-0.4.47}/hud/native/__init__.py +0 -0
  134. {hud_python-0.4.45 → hud_python-0.4.47}/hud/native/comparator.py +0 -0
  135. {hud_python-0.4.45 → hud_python-0.4.47}/hud/native/tests/__init__.py +0 -0
  136. {hud_python-0.4.45 → hud_python-0.4.47}/hud/native/tests/test_comparator.py +0 -0
  137. {hud_python-0.4.45 → hud_python-0.4.47}/hud/native/tests/test_native_init.py +0 -0
  138. {hud_python-0.4.45 → hud_python-0.4.47}/hud/otel/__init__.py +0 -0
  139. {hud_python-0.4.45 → hud_python-0.4.47}/hud/otel/collector.py +0 -0
  140. {hud_python-0.4.45 → hud_python-0.4.47}/hud/otel/config.py +0 -0
  141. {hud_python-0.4.45 → hud_python-0.4.47}/hud/otel/context.py +0 -0
  142. {hud_python-0.4.45 → hud_python-0.4.47}/hud/otel/exporters.py +0 -0
  143. {hud_python-0.4.45 → hud_python-0.4.47}/hud/otel/instrumentation.py +0 -0
  144. {hud_python-0.4.45 → hud_python-0.4.47}/hud/otel/processors.py +0 -0
  145. {hud_python-0.4.45 → hud_python-0.4.47}/hud/otel/tests/__init__.py +0 -0
  146. {hud_python-0.4.45 → hud_python-0.4.47}/hud/otel/tests/test_processors.py +0 -0
  147. {hud_python-0.4.45 → hud_python-0.4.47}/hud/py.typed +0 -0
  148. {hud_python-0.4.45 → hud_python-0.4.47}/hud/rl/README.md +0 -0
  149. {hud_python-0.4.45 → hud_python-0.4.47}/hud/rl/__init__.py +0 -0
  150. {hud_python-0.4.45 → hud_python-0.4.47}/hud/rl/actor.py +0 -0
  151. {hud_python-0.4.45 → hud_python-0.4.47}/hud/rl/buffer.py +0 -0
  152. {hud_python-0.4.45 → hud_python-0.4.47}/hud/rl/chat_template.jinja +0 -0
  153. {hud_python-0.4.45 → hud_python-0.4.47}/hud/rl/tests/__init__.py +0 -0
  154. {hud_python-0.4.45 → hud_python-0.4.47}/hud/rl/tests/test_learner.py +0 -0
  155. {hud_python-0.4.45 → hud_python-0.4.47}/hud/rl/types.py +0 -0
  156. {hud_python-0.4.45 → hud_python-0.4.47}/hud/rl/utils/start_vllm_server.sh +0 -0
  157. {hud_python-0.4.45 → hud_python-0.4.47}/hud/rl/utils.py +0 -0
  158. {hud_python-0.4.45 → hud_python-0.4.47}/hud/rl/vllm_adapter.py +0 -0
  159. {hud_python-0.4.45 → hud_python-0.4.47}/hud/samples/__init__.py +0 -0
  160. {hud_python-0.4.45 → hud_python-0.4.47}/hud/samples/browser.py +0 -0
  161. {hud_python-0.4.45 → hud_python-0.4.47}/hud/server/__init__.py +0 -0
  162. {hud_python-0.4.45 → hud_python-0.4.47}/hud/server/context.py +0 -0
  163. {hud_python-0.4.45 → hud_python-0.4.47}/hud/server/helper/__init__.py +0 -0
  164. {hud_python-0.4.45 → hud_python-0.4.47}/hud/server/low_level.py +0 -0
  165. {hud_python-0.4.45 → hud_python-0.4.47}/hud/server/server.py +0 -0
  166. {hud_python-0.4.45 → hud_python-0.4.47}/hud/server/tests/__init__.py +0 -0
  167. {hud_python-0.4.45 → hud_python-0.4.47}/hud/server/tests/test_add_tool.py +0 -0
  168. {hud_python-0.4.45 → hud_python-0.4.47}/hud/server/tests/test_context.py +0 -0
  169. {hud_python-0.4.45 → hud_python-0.4.47}/hud/server/tests/test_mcp_server_handlers.py +0 -0
  170. {hud_python-0.4.45 → hud_python-0.4.47}/hud/server/tests/test_mcp_server_integration.py +0 -0
  171. {hud_python-0.4.45 → hud_python-0.4.47}/hud/server/tests/test_mcp_server_more.py +0 -0
  172. {hud_python-0.4.45 → hud_python-0.4.47}/hud/server/tests/test_run_wrapper.py +0 -0
  173. {hud_python-0.4.45 → hud_python-0.4.47}/hud/server/tests/test_server_extra.py +0 -0
  174. {hud_python-0.4.45 → hud_python-0.4.47}/hud/server/tests/test_sigterm_runner.py +0 -0
  175. {hud_python-0.4.45 → hud_python-0.4.47}/hud/settings.py +0 -0
  176. {hud_python-0.4.45 → hud_python-0.4.47}/hud/shared/__init__.py +0 -0
  177. {hud_python-0.4.45 → hud_python-0.4.47}/hud/shared/exceptions.py +0 -0
  178. {hud_python-0.4.45 → hud_python-0.4.47}/hud/shared/hints.py +0 -0
  179. {hud_python-0.4.45 → hud_python-0.4.47}/hud/shared/requests.py +0 -0
  180. {hud_python-0.4.45 → hud_python-0.4.47}/hud/shared/tests/__init__.py +0 -0
  181. {hud_python-0.4.45 → hud_python-0.4.47}/hud/shared/tests/test_exceptions.py +0 -0
  182. {hud_python-0.4.45 → hud_python-0.4.47}/hud/shared/tests/test_requests.py +0 -0
  183. {hud_python-0.4.45 → hud_python-0.4.47}/hud/telemetry/__init__.py +0 -0
  184. {hud_python-0.4.45 → hud_python-0.4.47}/hud/telemetry/instrument.py +0 -0
  185. {hud_python-0.4.45 → hud_python-0.4.47}/hud/telemetry/job.py +0 -0
  186. {hud_python-0.4.45 → hud_python-0.4.47}/hud/telemetry/replay.py +0 -0
  187. {hud_python-0.4.45 → hud_python-0.4.47}/hud/telemetry/tests/__init__.py +0 -0
  188. {hud_python-0.4.45 → hud_python-0.4.47}/hud/telemetry/tests/test_replay.py +0 -0
  189. {hud_python-0.4.45 → hud_python-0.4.47}/hud/telemetry/tests/test_trace.py +0 -0
  190. {hud_python-0.4.45 → hud_python-0.4.47}/hud/telemetry/trace.py +0 -0
  191. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/__init__.py +0 -0
  192. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/bash.py +0 -0
  193. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/computer/__init__.py +0 -0
  194. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/computer/anthropic.py +0 -0
  195. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/computer/hud.py +0 -0
  196. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/computer/openai.py +0 -0
  197. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/computer/settings.py +0 -0
  198. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/edit.py +0 -0
  199. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/executors/__init__.py +0 -0
  200. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/executors/base.py +0 -0
  201. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/executors/pyautogui.py +0 -0
  202. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/executors/tests/__init__.py +0 -0
  203. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/executors/tests/test_base_executor.py +0 -0
  204. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/executors/tests/test_pyautogui_executor.py +0 -0
  205. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/executors/xdo.py +0 -0
  206. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/grounding/__init__.py +0 -0
  207. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/grounding/config.py +0 -0
  208. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/grounding/grounded_tool.py +0 -0
  209. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/grounding/grounder.py +0 -0
  210. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/grounding/tests/__init__.py +0 -0
  211. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/grounding/tests/test_grounded_tool.py +0 -0
  212. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/playwright.py +0 -0
  213. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/response.py +0 -0
  214. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/submit.py +0 -0
  215. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/tests/__init__.py +0 -0
  216. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/tests/test_base.py +0 -0
  217. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/tests/test_bash.py +0 -0
  218. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/tests/test_bash_extended.py +0 -0
  219. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/tests/test_computer.py +0 -0
  220. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/tests/test_computer_actions.py +0 -0
  221. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/tests/test_edit.py +0 -0
  222. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/tests/test_init.py +0 -0
  223. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/tests/test_playwright_tool.py +0 -0
  224. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/tests/test_response.py +0 -0
  225. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/tests/test_tools.py +0 -0
  226. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/tests/test_tools_init.py +0 -0
  227. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/tests/test_utils.py +0 -0
  228. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/types.py +0 -0
  229. {hud_python-0.4.45 → hud_python-0.4.47}/hud/tools/utils.py +0 -0
  230. {hud_python-0.4.45 → hud_python-0.4.47}/hud/types.py +0 -0
  231. {hud_python-0.4.45 → hud_python-0.4.47}/hud/utils/__init__.py +0 -0
  232. {hud_python-0.4.45 → hud_python-0.4.47}/hud/utils/agent_factories.py +0 -0
  233. {hud_python-0.4.45 → hud_python-0.4.47}/hud/utils/async_utils.py +0 -0
  234. {hud_python-0.4.45 → hud_python-0.4.47}/hud/utils/group_eval.py +0 -0
  235. {hud_python-0.4.45 → hud_python-0.4.47}/hud/utils/hud_console.py +0 -0
  236. {hud_python-0.4.45 → hud_python-0.4.47}/hud/utils/mcp.py +0 -0
  237. {hud_python-0.4.45 → hud_python-0.4.47}/hud/utils/pretty_errors.py +0 -0
  238. {hud_python-0.4.45 → hud_python-0.4.47}/hud/utils/progress.py +0 -0
  239. {hud_python-0.4.45 → hud_python-0.4.47}/hud/utils/tasks.py +0 -0
  240. {hud_python-0.4.45 → hud_python-0.4.47}/hud/utils/telemetry.py +0 -0
  241. {hud_python-0.4.45 → hud_python-0.4.47}/hud/utils/tests/__init__.py +0 -0
  242. {hud_python-0.4.45 → hud_python-0.4.47}/hud/utils/tests/test_async_utils.py +0 -0
  243. {hud_python-0.4.45 → hud_python-0.4.47}/hud/utils/tests/test_init.py +0 -0
  244. {hud_python-0.4.45 → hud_python-0.4.47}/hud/utils/tests/test_mcp.py +0 -0
  245. {hud_python-0.4.45 → hud_python-0.4.47}/hud/utils/tests/test_progress.py +0 -0
  246. {hud_python-0.4.45 → hud_python-0.4.47}/hud/utils/tests/test_telemetry.py +0 -0
  247. {hud_python-0.4.45 → hud_python-0.4.47}/hud/utils/tool_shorthand.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hud-python
3
- Version: 0.4.45
3
+ Version: 0.4.47
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
@@ -57,6 +57,7 @@ class ModelConfig:
57
57
  attn_implementation: str = "flash_attention_2"
58
58
  use_liger: bool = True
59
59
  gradient_checkpointing: bool = True
60
+ adapter_path: str | None = None # Path to existing LoRA adapter to load as baseline
60
61
 
61
62
 
62
63
  @dataclass
@@ -81,7 +81,7 @@ def broadcast_object(obj: Any, src: int = 0) -> Any:
81
81
  return obj
82
82
 
83
83
  obj_list = [obj] if dist.get_rank() == src else [None]
84
- dist.broadcast_object_list(obj_list, src=src, device=torch.device("cpu"))
84
+ dist.broadcast_object_list(obj_list, src=src) #, device=torch.device("cpu"))
85
85
  return obj_list[0]
86
86
 
87
87
 
@@ -146,17 +146,27 @@ class GRPOLearner:
146
146
  policy.gradient_checkpointing_enable()
147
147
  self.log("Gradient checkpointing enabled for memory efficiency")
148
148
 
149
- # Add LoRA adapters
150
- lora_config = LoraConfig(
151
- r=model_cfg.lora_r,
152
- lora_alpha=model_cfg.lora_alpha,
153
- lora_dropout=model_cfg.lora_dropout,
154
- task_type="CAUSAL_LM",
155
- bias="none",
156
- target_modules=list(model_cfg.target_modules),
157
- )
149
+ # Add LoRA adapters or load existing adapter
158
150
  policy.config.use_cache = False
159
- policy = get_peft_model(policy, lora_config)
151
+
152
+ if model_cfg.adapter_path:
153
+ # Load existing adapter as baseline
154
+ self.log(f"Loading existing LoRA adapter from: {model_cfg.adapter_path}")
155
+ from peft import PeftModel
156
+ policy = PeftModel.from_pretrained(policy, model_cfg.adapter_path)
157
+ # Enable adapter training
158
+ policy.train()
159
+ else:
160
+ # Create new LoRA adapter
161
+ lora_config = LoraConfig(
162
+ r=model_cfg.lora_r,
163
+ lora_alpha=model_cfg.lora_alpha,
164
+ lora_dropout=model_cfg.lora_dropout,
165
+ task_type="CAUSAL_LM",
166
+ bias="none",
167
+ target_modules=list(model_cfg.target_modules),
168
+ )
169
+ policy = get_peft_model(policy, lora_config)
160
170
 
161
171
  # Wrap with DDP if in distributed mode
162
172
  if self.world_size > 1:
@@ -95,6 +95,18 @@ async def train(config: Config, tasks: list[Task]) -> None:
95
95
  if is_main_process()
96
96
  else None
97
97
  )
98
+
99
+ # Load initial adapter if provided
100
+ if is_main_process() and config.model.adapter_path and vllm:
101
+ hud_console.info(f"Loading baseline adapter from: {config.model.adapter_path}")
102
+ success = vllm.load_adapter(config.model.base_model, config.model.adapter_path)
103
+ if success and actor is not None:
104
+ hud_console.info("Successfully loaded baseline adapter as 'base_model'")
105
+ # Update actor to use the loaded adapter
106
+ actor.update_adapter(config.model.base_model)
107
+ else:
108
+ hud_console.error("Failed to load baseline adapter")
109
+ exit(1)
98
110
 
99
111
  # Training state
100
112
  step = 0
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from abc import ABC, abstractmethod
4
- from typing import TYPE_CHECKING, Any, cast
4
+ from typing import TYPE_CHECKING, Any, cast, Awaitable
5
5
 
6
6
  from fastmcp import FastMCP
7
7
 
@@ -16,6 +16,8 @@ if TYPE_CHECKING:
16
16
  # Basic result types for tools
17
17
  BaseResult = list[ContentBlock] | EvaluationResult
18
18
 
19
+ import logging
20
+ logger = logging.getLogger(__name__)
19
21
 
20
22
  class BaseTool(ABC):
21
23
  """
@@ -58,6 +60,10 @@ class BaseTool(ABC):
58
60
  self.title = title or self.__class__.__name__.replace("Tool", "").replace("_", " ").title()
59
61
  self.description = description or (self.__doc__.strip() if self.__doc__ else None)
60
62
  self.meta = meta
63
+ self._callbacks: dict[
64
+ str,
65
+ list[Callable[..., Awaitable[Any]]],
66
+ ] = {} # {"event_name": [callback_functions]}
61
67
 
62
68
  # Expose attributes FastMCP expects when registering an instance directly
63
69
  self.__name__ = self.name # FastMCP uses fn.__name__ if name param omitted
@@ -100,6 +106,36 @@ class BaseTool(ABC):
100
106
  )
101
107
  return self._mcp_tool
102
108
 
109
+ def add_callback(self, event_type: str, callback: Callable[..., Awaitable[Any]]):
110
+ """Register a callback function for specific event
111
+
112
+ Args:
113
+ event_type: (Required) Specific event name to trigger callback
114
+ e.g. "after_click", "before_navigate"
115
+ callback: (Required) Async function to call. Must be defined by `async def f(...)`
116
+ """
117
+ if event_type not in self._callbacks:
118
+ self._callbacks[event_type] = []
119
+ self._callbacks[event_type].append(callback)
120
+
121
+ def remove_callback(self, event_type: str, callback: Callable[..., Awaitable[Any]]):
122
+ """Remove a registered callback
123
+ Args:
124
+ event_type: (Required) Specific event name to trigger callback
125
+ e.g. "after_click", "before_navigate"
126
+ callback: (Required) Function to remove from callback list.
127
+ """
128
+ if (event_type in self._callbacks) and (callback in self._callbacks[event_type]):
129
+ self._callbacks[event_type].remove(callback)
130
+
131
+ async def _trigger_callbacks(self, event_type: str, **kwargs):
132
+ """Trigger all registered callback functions of an event type"""
133
+ callback_list = self._callbacks.get(event_type, [])
134
+ for callback in callback_list:
135
+ try:
136
+ await callback(**kwargs)
137
+ except Exception as e:
138
+ logger.warning(f"Callback failed for {event_type}: {e}")
103
139
 
104
140
  # Prefix for internal tool names
105
141
  _INTERNAL_PREFIX = "int_"
@@ -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.45"
8
+ assert hud.__version__ == "0.4.47"
@@ -4,4 +4,4 @@ Version information for the HUD SDK.
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
- __version__ = "0.4.45"
7
+ __version__ = "0.4.47"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "hud-python"
3
- version = "0.4.45"
3
+ version = "0.4.47"
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