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.
- {hud_python-0.4.29 → hud_python-0.4.30}/PKG-INFO +1 -1
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/agents/base.py +12 -4
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/agents/openai_chat_generic.py +2 -1
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/rl/__init__.py +5 -1
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/rl/display.py +1 -1
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/rl/remote_runner.py +0 -1
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/native/comparator.py +6 -6
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/native/tests/test_comparator.py +8 -8
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/native/tests/test_native_init.py +12 -10
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/rl/README.md +2 -3
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/rl/learner.py +3 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/utils/tests/test_version.py +1 -1
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/version.py +1 -1
- {hud_python-0.4.29 → hud_python-0.4.30}/pyproject.toml +1 -1
- {hud_python-0.4.29 → hud_python-0.4.30}/.gitignore +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/LICENSE +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/README.md +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/environments/README.md +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/environments/browser/README.md +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/environments/browser/apps/2048/README.md +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/environments/browser/apps/2048/backend/pyproject.toml +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/environments/browser/apps/README.md +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/environments/browser/apps/todo/README.md +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/environments/browser/apps/todo/backend/pyproject.toml +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/environments/browser/pyproject.toml +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/environments/remote_browser/README.md +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/environments/remote_browser/pyproject.toml +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/environments/remote_browser/src/hud_controller/providers/README.md +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/environments/text_2048/README.md +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/environments/text_2048/pyproject.toml +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/examples/README.md +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/__init__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/__main__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/agents/__init__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/agents/claude.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/agents/grounded_openai.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/agents/langchain.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/agents/misc/__init__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/agents/misc/response_agent.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/agents/openai.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/agents/tests/__init__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/agents/tests/test_base.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/agents/tests/test_claude.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/agents/tests/test_client.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/agents/tests/test_grounded_openai_agent.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/agents/tests/test_openai.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/__init__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/__main__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/analyze.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/build.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/clone.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/debug.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/dev.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/eval.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/flows/__init__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/flows/tasks.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/get.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/init.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/list_func.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/pull.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/push.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/remove.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/rl/config.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/rl/gpu.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/rl/gpu_utils.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/rl/presets.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/rl/rl_api.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/rl/vllm.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/tests/__init__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/tests/test_analyze.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/tests/test_analyze_metadata.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/tests/test_build.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/tests/test_cli_init.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/tests/test_cli_main.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/tests/test_clone.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/tests/test_cursor.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/tests/test_debug.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/tests/test_list_func.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/tests/test_main_module.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/tests/test_mcp_server.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/tests/test_pull.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/tests/test_push.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/tests/test_registry.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/tests/test_utils.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/utils/__init__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/utils/cursor.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/utils/docker.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/utils/environment.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/utils/interactive.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/utils/logging.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/utils/metadata.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/utils/registry.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/utils/remote_runner.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/utils/runner.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/utils/server.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/cli/utils/tasks.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/clients/README.md +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/clients/__init__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/clients/base.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/clients/fastmcp.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/clients/mcp_use.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/clients/tests/__init__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/clients/tests/test_client_integration.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/clients/tests/test_fastmcp.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/clients/tests/test_mcp_use_retry.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/clients/tests/test_protocol.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/clients/utils/__init__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/clients/utils/mcp_use_retry.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/clients/utils/retry.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/clients/utils/retry_transport.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/datasets/__init__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/datasets/parallel.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/datasets/runner.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/datasets/utils.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/misc/__init__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/misc/claude_plays_pokemon.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/native/__init__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/native/tests/__init__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/otel/__init__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/otel/collector.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/otel/config.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/otel/context.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/otel/exporters.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/otel/instrumentation.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/otel/processors.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/otel/tests/__init__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/otel/tests/test_processors.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/py.typed +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/rl/__init__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/rl/actor.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/rl/buffer.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/rl/chat_template.jinja +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/rl/config.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/rl/distributed.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/rl/tests/__init__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/rl/tests/test_learner.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/rl/train.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/rl/types.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/rl/utils/start_vllm_server.sh +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/rl/utils.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/rl/vllm_adapter.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/server/__init__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/server/context.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/server/helper/__init__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/server/low_level.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/server/server.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/server/tests/__init__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/settings.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/shared/__init__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/shared/exceptions.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/shared/hints.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/shared/requests.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/shared/tests/__init__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/shared/tests/test_exceptions.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/shared/tests/test_requests.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/telemetry/__init__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/telemetry/instrument.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/telemetry/job.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/telemetry/replay.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/telemetry/tests/__init__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/telemetry/tests/test_replay.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/telemetry/tests/test_trace.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/telemetry/trace.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/__init__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/base.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/bash.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/computer/__init__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/computer/anthropic.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/computer/hud.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/computer/openai.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/computer/settings.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/edit.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/executors/__init__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/executors/base.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/executors/pyautogui.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/executors/tests/__init__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/executors/tests/test_base_executor.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/executors/tests/test_pyautogui_executor.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/executors/xdo.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/grounding/__init__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/grounding/config.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/grounding/grounded_tool.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/grounding/grounder.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/grounding/tests/__init__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/grounding/tests/test_grounded_tool.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/playwright.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/response.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/submit.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/tests/__init__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/tests/test_base.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/tests/test_bash.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/tests/test_bash_extended.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/tests/test_computer.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/tests/test_computer_actions.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/tests/test_edit.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/tests/test_init.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/tests/test_playwright_tool.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/tests/test_response.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/tests/test_tools.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/tests/test_tools_init.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/tests/test_utils.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/types.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/utils.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/types.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/utils/__init__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/utils/agent_factories.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/utils/async_utils.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/utils/group_eval.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/utils/hud_console.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/utils/mcp.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/utils/pretty_errors.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/utils/progress.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/utils/tasks.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/utils/telemetry.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/utils/tests/__init__.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/utils/tests/test_async_utils.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/utils/tests/test_init.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/utils/tests/test_mcp.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/utils/tests/test_progress.py +0 -0
- {hud_python-0.4.29 → hud_python-0.4.30}/hud/utils/tests/test_telemetry.py +0 -0
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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("
|
|
45
|
+
preset_table.add_column("Updates/hour", style="green")
|
|
46
46
|
|
|
47
47
|
for i, preset in enumerate(presets):
|
|
48
48
|
row = [
|
|
@@ -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
|
-
|
|
516
|
+
comparator = MCPServer(name="comparator")
|
|
517
517
|
|
|
518
518
|
# Register main tool
|
|
519
|
-
|
|
520
|
-
|
|
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
|
-
|
|
537
|
+
comparator.add_tool(AliasTool())
|
|
538
538
|
|
|
539
539
|
# Export for mounting
|
|
540
|
-
__all__ = ["
|
|
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
|
-
|
|
546
|
+
comparator.run()
|
|
@@ -11,7 +11,7 @@ from hud.native.comparator import (
|
|
|
11
11
|
ComparisonResult,
|
|
12
12
|
DataType,
|
|
13
13
|
auto_select_mode,
|
|
14
|
-
|
|
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
|
|
324
|
+
from hud.native.comparator import comparator
|
|
325
325
|
|
|
326
326
|
# Check that aliases are registered
|
|
327
|
-
tool_names = [t.name for t in
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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(
|
|
16
|
-
assert
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
79
|
-
assert hasattr(compare_tool, "
|
|
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
|
-
|
|
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:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{hud_python-0.4.29 → hud_python-0.4.30}/environments/browser/apps/2048/backend/pyproject.toml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{hud_python-0.4.29 → hud_python-0.4.30}/environments/browser/apps/todo/backend/pyproject.toml
RENAMED
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
{hud_python-0.4.29 → hud_python-0.4.30}/hud/tools/executors/tests/test_pyautogui_executor.py
RENAMED
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|