hud-python 0.4.55__tar.gz → 0.4.57__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.55 → hud_python-0.4.57}/PKG-INFO +1 -1
- hud_python-0.4.57/environments/rubrics/README.md +182 -0
- hud_python-0.4.57/environments/rubrics/environment/pyproject.toml +18 -0
- hud_python-0.4.57/environments/rubrics/pyproject.toml +19 -0
- hud_python-0.4.57/environments/rubrics/server/pyproject.toml +19 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/__init__.py +1 -1
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/dev.py +24 -4
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/flows/dev.py +6 -17
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/init.py +3 -1
- hud_python-0.4.57/hud/cli/tests/test_convert.py +367 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/utils/version_check.py +7 -6
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/clients/base.py +28 -2
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/clients/fastmcp.py +2 -2
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/clients/mcp_use.py +2 -2
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/clients/tests/test_protocol.py +9 -3
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/server/server.py +59 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/utils/tests/test_version.py +1 -1
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/version.py +1 -1
- {hud_python-0.4.55 → hud_python-0.4.57}/pyproject.toml +1 -1
- {hud_python-0.4.55 → hud_python-0.4.57}/.gitignore +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/LICENSE +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/README.md +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/environments/README.md +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/environments/blank/README.md +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/environments/blank/environment/README.md +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/environments/blank/environment/pyproject.toml +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/environments/blank/server/README.md +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/environments/blank/server/pyproject.toml +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/environments/browser/README.md +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/environments/browser/environment/2048/README.md +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/environments/browser/environment/2048/backend/pyproject.toml +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/environments/browser/environment/README.md +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/environments/browser/environment/pyproject.toml +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/environments/browser/environment/todo/README.md +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/environments/browser/environment/todo/backend/pyproject.toml +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/environments/browser/pyproject.toml +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/environments/browser/server/pyproject.toml +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/environments/deepresearch/README.md +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/environments/deepresearch/environment/pyproject.toml +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/environments/deepresearch/pyproject.toml +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/environments/deepresearch/server/pyproject.toml +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/environments/remote_browser/README.md +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/environments/remote_browser/pyproject.toml +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/environments/remote_browser/src/hud_controller/providers/README.md +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/environments/text_2048/README.md +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/environments/text_2048/pyproject.toml +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/examples/README.md +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/__main__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/agents/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/agents/base.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/agents/claude.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/agents/grounded_openai.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/agents/langchain.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/agents/lite_llm.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/agents/misc/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/agents/misc/integration_test_agent.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/agents/misc/response_agent.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/agents/openai.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/agents/openai_chat_generic.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/agents/tests/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/agents/tests/test_base.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/agents/tests/test_base_runtime.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/agents/tests/test_claude.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/agents/tests/test_client.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/agents/tests/test_grounded_openai_agent.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/agents/tests/test_openai.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/agents/utils.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/__main__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/analyze.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/build.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/clone.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/debug.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/eval.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/flows/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/flows/tasks.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/get.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/list_func.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/pull.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/push.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/remove.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/rl/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/rl/celebrate.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/rl/config.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/rl/display.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/rl/gpu.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/rl/gpu_utils.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/rl/local_runner.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/rl/presets.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/rl/remote_runner.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/rl/rl_api.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/rl/viewer.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/rl/vllm.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/rl/wait_utils.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/tests/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/tests/test_analyze.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/tests/test_analyze_metadata.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/tests/test_analyze_module.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/tests/test_build.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/tests/test_build_failure.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/tests/test_build_module.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/tests/test_cli_init.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/tests/test_cli_main.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/tests/test_cli_more_wrappers.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/tests/test_cli_root.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/tests/test_clone.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/tests/test_cursor.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/tests/test_debug.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/tests/test_eval.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/tests/test_list_func.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/tests/test_main_module.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/tests/test_mcp_server.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/tests/test_pull.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/tests/test_push.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/tests/test_push_happy.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/tests/test_push_wrapper.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/tests/test_registry.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/tests/test_utils.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/utils/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/utils/config.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/utils/cursor.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/utils/docker.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/utils/env_check.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/utils/environment.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/utils/interactive.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/utils/local_runner.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/utils/logging.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/utils/metadata.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/utils/package_runner.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/utils/registry.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/utils/remote_runner.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/utils/runner.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/utils/server.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/utils/source_hash.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/utils/tasks.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/utils/tests/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/utils/tests/test_config.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/utils/tests/test_docker.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/utils/tests/test_docker_hints.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/utils/tests/test_env_check.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/utils/tests/test_environment.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/utils/tests/test_interactive_module.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/utils/tests/test_local_runner.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/utils/tests/test_logging_utils.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/utils/tests/test_metadata.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/utils/tests/test_package_runner.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/utils/tests/test_registry_utils.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/utils/tests/test_remote_runner.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/utils/tests/test_runner_modules.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/utils/tests/test_source_hash.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/cli/utils/tests/test_tasks.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/clients/README.md +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/clients/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/clients/tests/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/clients/tests/test_client_integration.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/clients/tests/test_fastmcp.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/clients/tests/test_mcp_use_retry.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/clients/utils/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/clients/utils/mcp_use_retry.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/clients/utils/retry.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/clients/utils/retry_transport.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/datasets/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/datasets/parallel.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/datasets/runner.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/datasets/tests/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/datasets/tests/test_runner.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/datasets/tests/test_utils.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/datasets/utils.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/misc/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/misc/claude_plays_pokemon.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/native/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/native/comparator.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/native/tests/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/native/tests/test_comparator.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/native/tests/test_native_init.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/otel/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/otel/collector.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/otel/config.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/otel/context.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/otel/exporters.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/otel/instrumentation.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/otel/processors.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/otel/tests/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/otel/tests/test_instrumentation.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/otel/tests/test_processors.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/py.typed +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/rl/README.md +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/rl/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/rl/actor.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/rl/buffer.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/rl/chat_template.jinja +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/rl/config.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/rl/distributed.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/rl/learner.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/rl/tests/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/rl/tests/test_learner.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/rl/train.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/rl/types.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/rl/utils/start_vllm_server.sh +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/rl/utils.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/rl/vllm_adapter.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/samples/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/samples/browser.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/server/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/server/context.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/server/helper/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/server/low_level.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/server/router.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/server/tests/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/server/tests/test_add_tool.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/server/tests/test_context.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/server/tests/test_mcp_server_handlers.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/server/tests/test_mcp_server_integration.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/server/tests/test_mcp_server_more.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/server/tests/test_run_wrapper.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/server/tests/test_server_extra.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/server/tests/test_sigterm_runner.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/settings.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/shared/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/shared/exceptions.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/shared/hints.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/shared/requests.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/shared/tests/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/shared/tests/test_exceptions.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/shared/tests/test_hints.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/shared/tests/test_requests.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/telemetry/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/telemetry/async_context.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/telemetry/instrument.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/telemetry/job.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/telemetry/replay.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/telemetry/tests/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/telemetry/tests/test_async_context.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/telemetry/tests/test_instrument.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/telemetry/tests/test_job.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/telemetry/tests/test_replay.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/telemetry/tests/test_trace.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/telemetry/trace.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/base.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/bash.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/computer/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/computer/anthropic.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/computer/hud.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/computer/openai.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/computer/qwen.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/computer/settings.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/edit.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/executors/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/executors/base.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/executors/pyautogui.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/executors/tests/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/executors/tests/test_base_executor.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/executors/tests/test_pyautogui_executor.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/executors/xdo.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/grounding/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/grounding/config.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/grounding/grounded_tool.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/grounding/grounder.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/grounding/tests/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/grounding/tests/test_grounded_tool.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/playwright.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/response.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/submit.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/tests/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/tests/test_base.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/tests/test_bash.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/tests/test_bash_extended.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/tests/test_computer.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/tests/test_computer_actions.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/tests/test_edit.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/tests/test_init.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/tests/test_playwright_tool.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/tests/test_response.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/tests/test_submit.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/tests/test_tools.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/tests/test_tools_init.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/tests/test_types.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/tests/test_utils.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/types.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/tools/utils.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/types.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/utils/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/utils/agent_factories.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/utils/async_utils.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/utils/group_eval.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/utils/hud_console.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/utils/mcp.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/utils/pretty_errors.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/utils/progress.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/utils/task_tracking.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/utils/tasks.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/utils/telemetry.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/utils/tests/__init__.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/utils/tests/test_agent_factories.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/utils/tests/test_async_utils.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/utils/tests/test_init.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/utils/tests/test_mcp.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/utils/tests/test_pretty_errors.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/utils/tests/test_progress.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/utils/tests/test_tasks.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/utils/tests/test_telemetry.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/utils/tests/test_tool_shorthand.py +0 -0
- {hud_python-0.4.55 → hud_python-0.4.57}/hud/utils/tool_shorthand.py +0 -0
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
# Rubrics Environment
|
|
2
|
+
|
|
3
|
+
Web research environment powered by Exa API for searching and fetching content, with rubric-based evaluation for structured grading.
|
|
4
|
+
See [docs](https://docs.hud.so/build-environments) for the complete environment design workflow.
|
|
5
|
+
|
|
6
|
+
## Architecture
|
|
7
|
+
|
|
8
|
+
**`environment/`** - Manages Exa API integration and state
|
|
9
|
+
- Holds the Exa API key server-side
|
|
10
|
+
- Exposes HTTP endpoints `/search`, `/fetch`, `/answer`, `/evaluate` for research workflows
|
|
11
|
+
- Implements exponential backoff for rate limiting
|
|
12
|
+
|
|
13
|
+
**`server/`** - Wraps data in MCP tools
|
|
14
|
+
- Provides `search()`, `fetch()`, `answer()`, `evaluate()` tools for agents
|
|
15
|
+
- Agents and tasks interact only with these tools
|
|
16
|
+
|
|
17
|
+
**Why separate?** Edit tools for the agent or tasks without restarting the environment backend.
|
|
18
|
+
|
|
19
|
+
## Tools
|
|
20
|
+
|
|
21
|
+
- **`search(query: str)`** - Search the web using Exa API, returns list of results with titles and URLs
|
|
22
|
+
- **`fetch(url: str)`** - Fetch full content from a URL, returns summary, highlights, and text
|
|
23
|
+
- **`answer(final_answer: str)`** - Submit the final research answer
|
|
24
|
+
- **`evaluate(rubric: list[dict])`** - Evaluate submitted answer using a structured rubric with weighted requirements
|
|
25
|
+
|
|
26
|
+
### Rubric-Based Evaluation
|
|
27
|
+
|
|
28
|
+
The `evaluate` tool uses The LLM Data Company's [rubric](https://github.com/The-LLM-Data-Company/rubric/) package to grade answers against structured criteria with autograders.
|
|
29
|
+
|
|
30
|
+
## Setup
|
|
31
|
+
|
|
32
|
+
### Requirements
|
|
33
|
+
- Exa API key (get one at [exa.ai](https://exa.ai))
|
|
34
|
+
|
|
35
|
+
### Environment Variables
|
|
36
|
+
```bash
|
|
37
|
+
export EXA_API_KEY="your_exa_api_key_here"
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Development
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# Terminal 1 - Environment backend
|
|
44
|
+
cd environment
|
|
45
|
+
export EXA_API_KEY="your_key"
|
|
46
|
+
uv run uvicorn server:app --reload
|
|
47
|
+
|
|
48
|
+
# Terminal 2 - MCP server
|
|
49
|
+
cd server
|
|
50
|
+
uv run hud dev
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
The environment includes exponential backoff for rate limiting, so API calls will automatically retry on 429 errors.
|
|
54
|
+
|
|
55
|
+
In general, we recommend starting work on the environment backend first, then developing the MCP server to expose the right things to the agent.
|
|
56
|
+
|
|
57
|
+
For complex environments that require many dependencies, we recommend running `hud dev` in the environment root:
|
|
58
|
+
```bash
|
|
59
|
+
cd ..
|
|
60
|
+
export EXA_API_KEY="your_key"
|
|
61
|
+
hud dev
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Tasks & Evaluation
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
# Build first in the global folder with the Dockerfile (creates rubrics:0.1.0)
|
|
68
|
+
hud build
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Your `tasks.json` uses `docker run` to launch the environment:
|
|
72
|
+
|
|
73
|
+
```json
|
|
74
|
+
{
|
|
75
|
+
"prompt": "Research and answer: What is the capital of France?",
|
|
76
|
+
"mcp_config": {
|
|
77
|
+
"local": {
|
|
78
|
+
"command": "docker",
|
|
79
|
+
"args": ["run", "--rm", "-i", "-e", "EXA_API_KEY", "rubrics:latest"]
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
"evaluate_tool": {
|
|
83
|
+
"name": "evaluate",
|
|
84
|
+
"arguments": {
|
|
85
|
+
"rubric": [
|
|
86
|
+
{
|
|
87
|
+
"requirement": "Correctly identifies Paris as the capital of France",
|
|
88
|
+
"weight": 5
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"requirement": "Provides additional context about Paris (population, history, or geography)",
|
|
92
|
+
"weight": 10
|
|
93
|
+
}
|
|
94
|
+
]
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
**Note:** The `-e EXA_API_KEY` flag passes your local API key to the container.
|
|
101
|
+
|
|
102
|
+
**Commands:**
|
|
103
|
+
```bash
|
|
104
|
+
# Build first
|
|
105
|
+
hud build
|
|
106
|
+
|
|
107
|
+
# Test task locally
|
|
108
|
+
export EXA_API_KEY="your_key"
|
|
109
|
+
hud eval tasks.json
|
|
110
|
+
|
|
111
|
+
# Push environment for remote running
|
|
112
|
+
hud push
|
|
113
|
+
|
|
114
|
+
# Production RL training
|
|
115
|
+
hud rl tasks.json # Auto-converts docker→remote, builds & pushes if needed
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Publishing Your Environment
|
|
119
|
+
|
|
120
|
+
Once your environment is ready, you can share it with the community:
|
|
121
|
+
|
|
122
|
+
### 1. Push to Registry
|
|
123
|
+
```bash
|
|
124
|
+
# Build and push your environment (requires docker hub login and hud api key)
|
|
125
|
+
hud build
|
|
126
|
+
hud push
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### 2. Create a Dataset
|
|
130
|
+
|
|
131
|
+
Create a dataset on HuggingFace with your tasks:
|
|
132
|
+
|
|
133
|
+
**Option A: Upload manually**
|
|
134
|
+
1. Upload your `tasks.json` to HuggingFace
|
|
135
|
+
2. Make sure it's **public** to appear on leaderboards
|
|
136
|
+
|
|
137
|
+
**Option B: Use the SDK**
|
|
138
|
+
```python
|
|
139
|
+
from hud.datasets import save_tasks
|
|
140
|
+
import json
|
|
141
|
+
|
|
142
|
+
# Load your tasks
|
|
143
|
+
with open("tasks.json") as f:
|
|
144
|
+
tasks = json.load(f)
|
|
145
|
+
|
|
146
|
+
# Push to HuggingFace
|
|
147
|
+
save_tasks(tasks, repo_id="your-org/your-dataset")
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### 3. Run and Track Performance
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
# Run Claude on your benchmark
|
|
154
|
+
hud eval "your-org/your-dataset" --agent claude
|
|
155
|
+
|
|
156
|
+
# View results at:
|
|
157
|
+
# hud.so/leaderboards/your-org/your-dataset
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
**Note**: Only public HuggingFace datasets appear as leaderboards!
|
|
161
|
+
|
|
162
|
+
📚 Learn more: [Creating Benchmarks](https://docs.hud.so/evaluate-agents/create-benchmarks) | [Leaderboards](https://docs.hud.so/evaluate-agents/leaderboards)
|
|
163
|
+
|
|
164
|
+
## Example Research Workflow
|
|
165
|
+
|
|
166
|
+
```python
|
|
167
|
+
# Agent searches for information
|
|
168
|
+
results = search("latest AI developments 2024")
|
|
169
|
+
|
|
170
|
+
# Agent fetches detailed content from top result
|
|
171
|
+
content = fetch(results[0]["url"])
|
|
172
|
+
|
|
173
|
+
# Agent submits final answer
|
|
174
|
+
answer("Based on research, AI developments in 2024 include...")
|
|
175
|
+
|
|
176
|
+
# Evaluate answer using rubric
|
|
177
|
+
result = evaluate(rubric=[
|
|
178
|
+
{"requirement": "Mentions at least 3 specific AI developments", "weight": 15},
|
|
179
|
+
{"requirement": "Includes dates or timeframes for developments", "weight": 5},
|
|
180
|
+
])
|
|
181
|
+
# Returns: {"reward": float, "info": {"report": [...]}, "done": True}
|
|
182
|
+
```
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "rubrics-environment"
|
|
3
|
+
version = "0.1.0"
|
|
4
|
+
description = "Backend service for Rubrics environment"
|
|
5
|
+
requires-python = ">=3.11"
|
|
6
|
+
dependencies = [
|
|
7
|
+
"fastapi>=0.104.1",
|
|
8
|
+
"uvicorn[standard]>=0.24.0",
|
|
9
|
+
"httpx>=0.24.0",
|
|
10
|
+
"rubric>=1.1.7",
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
[build-system]
|
|
14
|
+
requires = ["hatchling"]
|
|
15
|
+
build-backend = "hatchling.build"
|
|
16
|
+
|
|
17
|
+
[tool.hatch.build.targets.wheel]
|
|
18
|
+
packages = ["environment"]
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "rubrics"
|
|
3
|
+
version = "0.1.0"
|
|
4
|
+
description = "Rubrics HUD environment with HTTP backend (EXA on server)"
|
|
5
|
+
requires-python = ">=3.11"
|
|
6
|
+
dependencies = [ "hud-python==0.4.42", "fastapi>=0.104.1", "uvicorn[standard]>=0.24.0", "httpx>=0.24.0",]
|
|
7
|
+
|
|
8
|
+
[build-system]
|
|
9
|
+
requires = [ "hatchling",]
|
|
10
|
+
build-backend = "hatchling.build"
|
|
11
|
+
|
|
12
|
+
[tool.hud]
|
|
13
|
+
image = "rubrics:dev"
|
|
14
|
+
|
|
15
|
+
[tool.hatch.metadata]
|
|
16
|
+
allow-direct-references = true
|
|
17
|
+
|
|
18
|
+
[tool.hatch.build.targets.wheel]
|
|
19
|
+
packages = [ "controller", "environment",]
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "rubrics-mcp"
|
|
3
|
+
version = "0.1.0"
|
|
4
|
+
description = "MCP server for Rubrics environment"
|
|
5
|
+
requires-python = ">=3.11"
|
|
6
|
+
dependencies = [
|
|
7
|
+
"hud-python>=0.4.54",
|
|
8
|
+
"httpx>=0.24.0",
|
|
9
|
+
]
|
|
10
|
+
|
|
11
|
+
[build-system]
|
|
12
|
+
requires = ["hatchling"]
|
|
13
|
+
build-backend = "hatchling.build"
|
|
14
|
+
|
|
15
|
+
[tool.hatch.metadata]
|
|
16
|
+
allow-direct-references = true
|
|
17
|
+
|
|
18
|
+
[tool.hatch.build.targets.wheel]
|
|
19
|
+
packages = ["mcp"]
|
|
@@ -746,7 +746,7 @@ def init(
|
|
|
746
746
|
None,
|
|
747
747
|
"--preset",
|
|
748
748
|
"-p",
|
|
749
|
-
help="Preset to use: blank, deep-research, browser. If omitted, you'll choose interactively.", # noqa: E501
|
|
749
|
+
help="Preset to use: blank, deep-research, browser, rubrics. If omitted, you'll choose interactively.", # noqa: E501
|
|
750
750
|
),
|
|
751
751
|
directory: str = typer.Option(".", "--dir", "-d", help="Target directory"),
|
|
752
752
|
force: bool = typer.Option(False, "--force", "-f", help="Overwrite existing files"),
|
|
@@ -237,7 +237,7 @@ async def run_mcp_module(
|
|
|
237
237
|
|
|
238
238
|
from hud.cli.flows.dev import create_dynamic_trace
|
|
239
239
|
|
|
240
|
-
live_trace_url = await create_dynamic_trace(
|
|
240
|
+
_, live_trace_url = await create_dynamic_trace(
|
|
241
241
|
mcp_config=local_mcp_config,
|
|
242
242
|
build_status=False,
|
|
243
243
|
environment_name=mcp_server.name or "mcp-server",
|
|
@@ -608,7 +608,7 @@ def run_docker_dev_server(
|
|
|
608
608
|
"headers": {},
|
|
609
609
|
}
|
|
610
610
|
}
|
|
611
|
-
live_trace_url = _asy.run(
|
|
611
|
+
_, live_trace_url = _asy.run(
|
|
612
612
|
create_dynamic_trace(
|
|
613
613
|
mcp_config=local_mcp_config,
|
|
614
614
|
build_status=True,
|
|
@@ -661,13 +661,33 @@ def run_docker_dev_server(
|
|
|
661
661
|
# Create and run proxy with HUD helpers
|
|
662
662
|
async def run_proxy() -> None:
|
|
663
663
|
from fastmcp import FastMCP
|
|
664
|
+
from fastmcp.server.proxy import ProxyClient
|
|
664
665
|
|
|
665
|
-
# Create
|
|
666
|
-
|
|
666
|
+
# Create ProxyClient without custom log handler since we capture Docker logs directly
|
|
667
|
+
proxy_client = ProxyClient(mcp_config, name="HUD Docker Dev Proxy")
|
|
668
|
+
|
|
669
|
+
# Extract container name from docker args and store for logs endpoint
|
|
670
|
+
docker_cmd = mcp_config["docker"]["args"]
|
|
671
|
+
container_name = None
|
|
672
|
+
for i, arg in enumerate(docker_cmd):
|
|
673
|
+
if arg == "--name" and i + 1 < len(docker_cmd):
|
|
674
|
+
container_name = docker_cmd[i + 1]
|
|
675
|
+
break
|
|
676
|
+
|
|
677
|
+
if container_name:
|
|
678
|
+
# Store container name for logs endpoint to use
|
|
679
|
+
os.environ["_HUD_DEV_DOCKER_CONTAINER"] = container_name
|
|
680
|
+
hud_console.debug(f"Docker container: {container_name}")
|
|
681
|
+
|
|
682
|
+
# Create FastMCP proxy using the ProxyClient
|
|
683
|
+
fastmcp_proxy = FastMCP.as_proxy(proxy_client)
|
|
667
684
|
|
|
668
685
|
# Wrap in MCPServer to get /docs and REST wrappers
|
|
669
686
|
proxy = MCPServer(name="HUD Docker Dev Proxy")
|
|
670
687
|
|
|
688
|
+
# Enable logs endpoint on HTTP server
|
|
689
|
+
os.environ["_HUD_DEV_LOGS_PROVIDER"] = "enabled"
|
|
690
|
+
|
|
671
691
|
# Import all tools from the FastMCP proxy
|
|
672
692
|
await proxy.import_server(fastmcp_proxy)
|
|
673
693
|
|
|
@@ -18,7 +18,7 @@ async def create_dynamic_trace(
|
|
|
18
18
|
mcp_config: dict[str, dict[str, Any]],
|
|
19
19
|
build_status: bool,
|
|
20
20
|
environment_name: str,
|
|
21
|
-
) -> str | None:
|
|
21
|
+
) -> tuple[str | None, str | None]:
|
|
22
22
|
"""
|
|
23
23
|
Create a dynamic trace for HUD dev sessions when running in HTTP mode.
|
|
24
24
|
|
|
@@ -43,27 +43,16 @@ async def create_dynamic_trace(
|
|
|
43
43
|
api_key = settings.api_key
|
|
44
44
|
if not api_key:
|
|
45
45
|
logger.warning("Skipping dynamic trace creation; missing HUD_API_KEY")
|
|
46
|
-
return None
|
|
46
|
+
return None, None
|
|
47
47
|
|
|
48
48
|
try:
|
|
49
49
|
resp = await make_request("POST", url=url, json=payload, api_key=api_key)
|
|
50
50
|
# New API returns an id; construct the URL as https://hud.so/trace/{id}
|
|
51
|
-
trace_id =
|
|
52
|
-
if isinstance(resp, dict):
|
|
53
|
-
trace_id = resp.get("id")
|
|
54
|
-
if trace_id is None:
|
|
55
|
-
data = resp.get("data", {}) or {}
|
|
56
|
-
if isinstance(data, dict):
|
|
57
|
-
trace_id = data.get("id")
|
|
58
|
-
# Backcompat: if url is provided directly
|
|
59
|
-
if not trace_id:
|
|
60
|
-
direct_url = resp.get("url") or (resp.get("data", {}) or {}).get("url")
|
|
61
|
-
if isinstance(direct_url, str) and direct_url:
|
|
62
|
-
return direct_url
|
|
51
|
+
trace_id = resp.get("id")
|
|
63
52
|
|
|
64
53
|
if isinstance(trace_id, str) and trace_id:
|
|
65
|
-
return f"https://hud.so/trace/{trace_id}"
|
|
66
|
-
return None
|
|
54
|
+
return trace_id, f"https://hud.so/trace/{trace_id}"
|
|
55
|
+
return None, None
|
|
67
56
|
except Exception as e:
|
|
68
57
|
# Do not interrupt dev flow
|
|
69
58
|
try:
|
|
@@ -71,7 +60,7 @@ async def create_dynamic_trace(
|
|
|
71
60
|
logger.warning("Failed to create dynamic dev trace: %s | payload=%s", e, preview)
|
|
72
61
|
except Exception:
|
|
73
62
|
logger.warning("Failed to create dynamic dev trace: %s", e)
|
|
74
|
-
return None
|
|
63
|
+
return None, None
|
|
75
64
|
|
|
76
65
|
|
|
77
66
|
def show_dev_ui(
|
|
@@ -23,6 +23,7 @@ PRESET_MAP: dict[str, str | None] = {
|
|
|
23
23
|
"blank": "blank",
|
|
24
24
|
"deep-research": "deepresearch",
|
|
25
25
|
"browser": "browser",
|
|
26
|
+
"rubrics": "rubrics",
|
|
26
27
|
}
|
|
27
28
|
|
|
28
29
|
SKIP_DIR_NAMES = {"node_modules", "__pycache__", "dist", "build", ".next", ".git"}
|
|
@@ -91,6 +92,7 @@ def _prompt_for_preset() -> str:
|
|
|
91
92
|
{"name": "blank", "message": "blank"},
|
|
92
93
|
{"name": "deep-research", "message": "deep-research"},
|
|
93
94
|
{"name": "browser", "message": "browser"},
|
|
95
|
+
{"name": "rubrics", "message": "rubrics"},
|
|
94
96
|
]
|
|
95
97
|
display_choices = [c["message"] for c in choices]
|
|
96
98
|
selected = questionary.select(
|
|
@@ -194,7 +196,7 @@ def create_environment(
|
|
|
194
196
|
if preset_normalized not in PRESET_MAP:
|
|
195
197
|
hud_console.warning(
|
|
196
198
|
f"Unknown preset '{preset_normalized}', defaulting to 'blank' "
|
|
197
|
-
"(available: blank, deep-research, browser)"
|
|
199
|
+
"(available: blank, deep-research, browser, rubrics)"
|
|
198
200
|
)
|
|
199
201
|
preset_normalized = "blank"
|
|
200
202
|
|