hud-python 0.3.5__py3-none-any.whl → 0.4.1__py3-none-any.whl
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/__init__.py +22 -89
- hud/agents/__init__.py +15 -0
- hud/agents/art.py +101 -0
- hud/agents/base.py +599 -0
- hud/{mcp → agents}/claude.py +373 -321
- hud/{mcp → agents}/langchain.py +250 -250
- hud/agents/misc/__init__.py +7 -0
- hud/{agent → agents}/misc/response_agent.py +80 -80
- hud/{mcp → agents}/openai.py +352 -334
- hud/agents/openai_chat_generic.py +154 -0
- hud/{mcp → agents}/tests/__init__.py +1 -1
- hud/agents/tests/test_base.py +742 -0
- hud/agents/tests/test_claude.py +324 -0
- hud/{mcp → agents}/tests/test_client.py +363 -324
- hud/{mcp → agents}/tests/test_openai.py +237 -238
- hud/cli/__init__.py +617 -0
- hud/cli/__main__.py +8 -0
- hud/cli/analyze.py +371 -0
- hud/cli/analyze_metadata.py +230 -0
- hud/cli/build.py +427 -0
- hud/cli/clone.py +185 -0
- hud/cli/cursor.py +92 -0
- hud/cli/debug.py +392 -0
- hud/cli/docker_utils.py +83 -0
- hud/cli/init.py +281 -0
- hud/cli/interactive.py +353 -0
- hud/cli/mcp_server.py +756 -0
- hud/cli/pull.py +336 -0
- hud/cli/push.py +370 -0
- hud/cli/remote_runner.py +311 -0
- hud/cli/runner.py +160 -0
- hud/cli/tests/__init__.py +3 -0
- hud/cli/tests/test_analyze.py +284 -0
- hud/cli/tests/test_cli_init.py +265 -0
- hud/cli/tests/test_cli_main.py +27 -0
- hud/cli/tests/test_clone.py +142 -0
- hud/cli/tests/test_cursor.py +253 -0
- hud/cli/tests/test_debug.py +453 -0
- hud/cli/tests/test_mcp_server.py +139 -0
- hud/cli/tests/test_utils.py +388 -0
- hud/cli/utils.py +263 -0
- hud/clients/README.md +143 -0
- hud/clients/__init__.py +16 -0
- hud/clients/base.py +379 -0
- hud/clients/fastmcp.py +222 -0
- hud/clients/mcp_use.py +278 -0
- hud/clients/tests/__init__.py +1 -0
- hud/clients/tests/test_client_integration.py +111 -0
- hud/clients/tests/test_fastmcp.py +342 -0
- hud/clients/tests/test_protocol.py +188 -0
- hud/clients/utils/__init__.py +1 -0
- hud/clients/utils/retry_transport.py +160 -0
- hud/datasets.py +322 -192
- hud/misc/__init__.py +1 -0
- hud/{agent → misc}/claude_plays_pokemon.py +292 -283
- hud/otel/__init__.py +35 -0
- hud/otel/collector.py +142 -0
- hud/otel/config.py +164 -0
- hud/otel/context.py +536 -0
- hud/otel/exporters.py +366 -0
- hud/otel/instrumentation.py +97 -0
- hud/otel/processors.py +118 -0
- hud/otel/tests/__init__.py +1 -0
- hud/otel/tests/test_processors.py +197 -0
- hud/server/__init__.py +5 -5
- hud/server/context.py +114 -0
- hud/server/helper/__init__.py +5 -0
- hud/server/low_level.py +132 -0
- hud/server/server.py +166 -0
- hud/server/tests/__init__.py +3 -0
- hud/settings.py +73 -79
- hud/shared/__init__.py +5 -0
- hud/{exceptions.py → shared/exceptions.py} +180 -180
- hud/{server → shared}/requests.py +264 -264
- hud/shared/tests/test_exceptions.py +157 -0
- hud/{server → shared}/tests/test_requests.py +275 -275
- hud/telemetry/__init__.py +25 -30
- hud/telemetry/instrument.py +379 -0
- hud/telemetry/job.py +309 -141
- hud/telemetry/replay.py +74 -0
- hud/telemetry/trace.py +83 -0
- hud/tools/__init__.py +33 -34
- hud/tools/base.py +365 -65
- hud/tools/bash.py +161 -137
- hud/tools/computer/__init__.py +15 -13
- hud/tools/computer/anthropic.py +437 -420
- hud/tools/computer/hud.py +376 -334
- hud/tools/computer/openai.py +295 -292
- hud/tools/computer/settings.py +82 -0
- hud/tools/edit.py +314 -290
- hud/tools/executors/__init__.py +30 -30
- hud/tools/executors/base.py +539 -532
- hud/tools/executors/pyautogui.py +621 -619
- hud/tools/executors/tests/__init__.py +1 -1
- hud/tools/executors/tests/test_base_executor.py +338 -338
- hud/tools/executors/tests/test_pyautogui_executor.py +165 -165
- hud/tools/executors/xdo.py +511 -503
- hud/tools/{playwright_tool.py → playwright.py} +412 -379
- hud/tools/tests/__init__.py +3 -3
- hud/tools/tests/test_base.py +282 -0
- hud/tools/tests/test_bash.py +158 -152
- hud/tools/tests/test_bash_extended.py +197 -0
- hud/tools/tests/test_computer.py +425 -52
- hud/tools/tests/test_computer_actions.py +34 -34
- hud/tools/tests/test_edit.py +259 -240
- hud/tools/tests/test_init.py +27 -27
- hud/tools/tests/test_playwright_tool.py +183 -183
- hud/tools/tests/test_tools.py +145 -157
- hud/tools/tests/test_utils.py +156 -156
- hud/tools/types.py +72 -0
- hud/tools/utils.py +50 -50
- hud/types.py +136 -89
- hud/utils/__init__.py +10 -16
- hud/utils/async_utils.py +65 -0
- hud/utils/design.py +168 -0
- hud/utils/mcp.py +55 -0
- hud/utils/progress.py +149 -149
- hud/utils/telemetry.py +66 -66
- hud/utils/tests/test_async_utils.py +173 -0
- hud/utils/tests/test_init.py +17 -21
- hud/utils/tests/test_progress.py +261 -225
- hud/utils/tests/test_telemetry.py +82 -37
- hud/utils/tests/test_version.py +8 -8
- hud/version.py +7 -7
- hud_python-0.4.1.dist-info/METADATA +476 -0
- hud_python-0.4.1.dist-info/RECORD +132 -0
- hud_python-0.4.1.dist-info/entry_points.txt +3 -0
- {hud_python-0.3.5.dist-info → hud_python-0.4.1.dist-info}/licenses/LICENSE +21 -21
- hud/adapters/__init__.py +0 -8
- hud/adapters/claude/__init__.py +0 -5
- hud/adapters/claude/adapter.py +0 -180
- hud/adapters/claude/tests/__init__.py +0 -1
- hud/adapters/claude/tests/test_adapter.py +0 -519
- hud/adapters/common/__init__.py +0 -6
- hud/adapters/common/adapter.py +0 -178
- hud/adapters/common/tests/test_adapter.py +0 -289
- hud/adapters/common/types.py +0 -446
- hud/adapters/operator/__init__.py +0 -5
- hud/adapters/operator/adapter.py +0 -108
- hud/adapters/operator/tests/__init__.py +0 -1
- hud/adapters/operator/tests/test_adapter.py +0 -370
- hud/agent/__init__.py +0 -19
- hud/agent/base.py +0 -126
- hud/agent/claude.py +0 -271
- hud/agent/langchain.py +0 -215
- hud/agent/misc/__init__.py +0 -3
- hud/agent/operator.py +0 -268
- hud/agent/tests/__init__.py +0 -1
- hud/agent/tests/test_base.py +0 -202
- hud/env/__init__.py +0 -11
- hud/env/client.py +0 -35
- hud/env/docker_client.py +0 -349
- hud/env/environment.py +0 -446
- hud/env/local_docker_client.py +0 -358
- hud/env/remote_client.py +0 -212
- hud/env/remote_docker_client.py +0 -292
- hud/gym.py +0 -130
- hud/job.py +0 -773
- hud/mcp/__init__.py +0 -17
- hud/mcp/base.py +0 -631
- hud/mcp/client.py +0 -312
- hud/mcp/tests/test_base.py +0 -512
- hud/mcp/tests/test_claude.py +0 -294
- hud/task.py +0 -149
- hud/taskset.py +0 -237
- hud/telemetry/_trace.py +0 -347
- hud/telemetry/context.py +0 -230
- hud/telemetry/exporter.py +0 -575
- hud/telemetry/instrumentation/__init__.py +0 -3
- hud/telemetry/instrumentation/mcp.py +0 -259
- hud/telemetry/instrumentation/registry.py +0 -59
- hud/telemetry/mcp_models.py +0 -270
- hud/telemetry/tests/__init__.py +0 -1
- hud/telemetry/tests/test_context.py +0 -210
- hud/telemetry/tests/test_trace.py +0 -312
- hud/tools/helper/README.md +0 -56
- hud/tools/helper/__init__.py +0 -9
- hud/tools/helper/mcp_server.py +0 -78
- hud/tools/helper/server_initialization.py +0 -115
- hud/tools/helper/utils.py +0 -58
- hud/trajectory.py +0 -94
- hud/utils/agent.py +0 -37
- hud/utils/common.py +0 -256
- hud/utils/config.py +0 -120
- hud/utils/deprecation.py +0 -115
- hud/utils/misc.py +0 -53
- hud/utils/tests/test_common.py +0 -277
- hud/utils/tests/test_config.py +0 -129
- hud_python-0.3.5.dist-info/METADATA +0 -284
- hud_python-0.3.5.dist-info/RECORD +0 -120
- /hud/{adapters/common → shared}/tests/__init__.py +0 -0
- {hud_python-0.3.5.dist-info → hud_python-0.4.1.dist-info}/WHEEL +0 -0
hud/version.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Version information for the HUD SDK.
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
from __future__ import annotations
|
|
6
|
-
|
|
7
|
-
__version__ = "0.
|
|
1
|
+
"""
|
|
2
|
+
Version information for the HUD SDK.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
__version__ = "0.4.1"
|
|
@@ -0,0 +1,476 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: hud-python
|
|
3
|
+
Version: 0.4.1
|
|
4
|
+
Summary: SDK for the HUD platform.
|
|
5
|
+
Project-URL: Homepage, https://github.com/hud-evals/hud-python
|
|
6
|
+
Project-URL: Bug Tracker, https://github.com/hud-evals/hud-python/issues
|
|
7
|
+
Project-URL: Documentation, https://docs.hud.so
|
|
8
|
+
Author-email: HUD SDK <founders@hud.so>
|
|
9
|
+
License: MIT License
|
|
10
|
+
|
|
11
|
+
Copyright (c) 2025 Human Union Data, Inc
|
|
12
|
+
|
|
13
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
14
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
15
|
+
in the Software without restriction, including without limitation the rights
|
|
16
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
17
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
18
|
+
furnished to do so, subject to the following conditions:
|
|
19
|
+
|
|
20
|
+
The above copyright notice and this permission notice shall be included in all
|
|
21
|
+
copies or substantial portions of the Software.
|
|
22
|
+
|
|
23
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
24
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
25
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
26
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
27
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
28
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
29
|
+
SOFTWARE.
|
|
30
|
+
License-File: LICENSE
|
|
31
|
+
Classifier: Development Status :: 4 - Beta
|
|
32
|
+
Classifier: Intended Audience :: Developers
|
|
33
|
+
Classifier: Programming Language :: Python :: 3
|
|
34
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
35
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
36
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
37
|
+
Requires-Python: <3.14,>=3.11
|
|
38
|
+
Requires-Dist: fastmcp>=2.11.2
|
|
39
|
+
Requires-Dist: httpx<1,>=0.23.0
|
|
40
|
+
Requires-Dist: hud-mcp-python-sdk>=0.1.0
|
|
41
|
+
Requires-Dist: opentelemetry-api>=1.34.1
|
|
42
|
+
Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.34.1
|
|
43
|
+
Requires-Dist: opentelemetry-instrumentation-mcp>=0.44.1
|
|
44
|
+
Requires-Dist: opentelemetry-sdk>=1.34.1
|
|
45
|
+
Requires-Dist: pathspec>=0.12.1
|
|
46
|
+
Requires-Dist: pydantic-settings<3,>=2
|
|
47
|
+
Requires-Dist: pydantic<3,>=2
|
|
48
|
+
Requires-Dist: questionary>=1.10.0
|
|
49
|
+
Requires-Dist: rich>=13.0.0
|
|
50
|
+
Requires-Dist: toml>=0.10.2
|
|
51
|
+
Requires-Dist: typer>=0.9.0
|
|
52
|
+
Requires-Dist: watchfiles>=0.21.0
|
|
53
|
+
Requires-Dist: wrapt>=1.14.0
|
|
54
|
+
Provides-Extra: agent
|
|
55
|
+
Requires-Dist: anthropic; extra == 'agent'
|
|
56
|
+
Requires-Dist: datasets>=2.14.0; extra == 'agent'
|
|
57
|
+
Requires-Dist: dotenv>=0.9.9; extra == 'agent'
|
|
58
|
+
Requires-Dist: hud-mcp-use-python-sdk>=0.1.0; extra == 'agent'
|
|
59
|
+
Requires-Dist: langchain; extra == 'agent'
|
|
60
|
+
Requires-Dist: langchain-anthropic; extra == 'agent'
|
|
61
|
+
Requires-Dist: langchain-openai; extra == 'agent'
|
|
62
|
+
Requires-Dist: numpy>=1.24.0; extra == 'agent'
|
|
63
|
+
Requires-Dist: openai; extra == 'agent'
|
|
64
|
+
Provides-Extra: dev
|
|
65
|
+
Requires-Dist: aiodocker>=0.24.0; extra == 'dev'
|
|
66
|
+
Requires-Dist: anthropic; extra == 'dev'
|
|
67
|
+
Requires-Dist: datasets>=2.14.0; extra == 'dev'
|
|
68
|
+
Requires-Dist: dotenv>=0.9.9; extra == 'dev'
|
|
69
|
+
Requires-Dist: hud-mcp-use-python-sdk>=0.1.0; extra == 'dev'
|
|
70
|
+
Requires-Dist: inspect-ai>=0.3.80; extra == 'dev'
|
|
71
|
+
Requires-Dist: ipykernel; extra == 'dev'
|
|
72
|
+
Requires-Dist: ipython<9; extra == 'dev'
|
|
73
|
+
Requires-Dist: jupyter-client; extra == 'dev'
|
|
74
|
+
Requires-Dist: jupyter-core; extra == 'dev'
|
|
75
|
+
Requires-Dist: langchain; extra == 'dev'
|
|
76
|
+
Requires-Dist: langchain-anthropic; extra == 'dev'
|
|
77
|
+
Requires-Dist: langchain-openai; extra == 'dev'
|
|
78
|
+
Requires-Dist: numpy>=1.24.0; extra == 'dev'
|
|
79
|
+
Requires-Dist: openai; extra == 'dev'
|
|
80
|
+
Requires-Dist: pillow>=11.1.0; extra == 'dev'
|
|
81
|
+
Requires-Dist: playwright; extra == 'dev'
|
|
82
|
+
Requires-Dist: pyautogui>=0.9.54; extra == 'dev'
|
|
83
|
+
Requires-Dist: pyright==1.1.401; extra == 'dev'
|
|
84
|
+
Requires-Dist: pytest-asyncio; extra == 'dev'
|
|
85
|
+
Requires-Dist: pytest-cov; extra == 'dev'
|
|
86
|
+
Requires-Dist: pytest-mock; extra == 'dev'
|
|
87
|
+
Requires-Dist: pytest<9,>=8.1.1; extra == 'dev'
|
|
88
|
+
Requires-Dist: ruff>=0.11.8; extra == 'dev'
|
|
89
|
+
Requires-Dist: setuptools; extra == 'dev'
|
|
90
|
+
Requires-Dist: textdistance<5,>=4.5.0; extra == 'dev'
|
|
91
|
+
Description-Content-Type: text/markdown
|
|
92
|
+
|
|
93
|
+
<div align="left">
|
|
94
|
+
<picture>
|
|
95
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/hud-evals/hud-python/main/docs/logo/hud_logo_dark.svg">
|
|
96
|
+
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/hud-evals/hud-python/main/docs/logo/hud_logo.svg">
|
|
97
|
+
<img src="https://raw.githubusercontent.com/hud-evals/hud-python/main/docs/logo/hud_logo.svg" alt="HUD" width="150" style="margin-bottom: 24px;"/>
|
|
98
|
+
</picture>
|
|
99
|
+
</div>
|
|
100
|
+
|
|
101
|
+
OSS RL environment + evals toolkit. Wrap software as environments, run benchmarks, and train with RL – locally or at scale.
|
|
102
|
+
|
|
103
|
+
[](https://pypi.org/project/hud-python/)
|
|
104
|
+
[](LICENSE)
|
|
105
|
+
[](https://cursor.com/en/install-mcp?name=docs-hud-python&config=eyJ1cmwiOiJodHRwczovL2RvY3MuaHVkLnNvL21jcCJ9)
|
|
106
|
+
[](https://discord.gg/wkjtmHYYjm)
|
|
107
|
+
[](https://x.com/intent/user?screen_name=hud_evals)
|
|
108
|
+
[](https://shop.hud.so)
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
### Are you a startup building agents?
|
|
112
|
+
|
|
113
|
+
[📅 Hop on a call](https://cal.com/jay-ram-z6st6w/demo) or [📧 founders@hud.so](mailto:founders@hud.so)
|
|
114
|
+
|
|
115
|
+
## Highlights
|
|
116
|
+
|
|
117
|
+
- 🚀 **[MCP-native connectivity](https://docs.hud.so/core-concepts/mcp-protocol)** – any agent can call any hud environment.
|
|
118
|
+
- ⚡️ **[Live telemetry](https://app.hud.so)** – inspect every tool call, observation, and reward in real time.
|
|
119
|
+
- 🗂️ **[Public benchmarks](https://app.hud.so/leaderboards)** – OSWorld-Verified, SheetBench-50, and more.
|
|
120
|
+
- 🌱 **[Reinforcement learning built-in](rl/)** – Verifiers gym pipelines for GRPO training.
|
|
121
|
+
- 🌐 **[Cloud browsers](environments/remote_browser/)** – AnchorBrowser, Steel, BrowserBase integrations for browser automation.
|
|
122
|
+
- 🛠️ **[Hot-reload dev loop](environments/README.md#phase-5-hot-reload-development-with-cursor-agent)** – `hud dev` for iterating on environments without rebuilds.
|
|
123
|
+
|
|
124
|
+
> We welcome contributors and feature requests – open an issue or hop on a call to discuss improvements!
|
|
125
|
+
|
|
126
|
+
## Installation
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
# Core installation - MCP servers, telemetry, basic tools for environment design
|
|
130
|
+
pip install hud-python
|
|
131
|
+
|
|
132
|
+
# Agent installation - Adds AI providers, datasets
|
|
133
|
+
pip install "hud-python[agent]"
|
|
134
|
+
|
|
135
|
+
# CLI utilities
|
|
136
|
+
uv tool install hud-python
|
|
137
|
+
# uv tool update-shell
|
|
138
|
+
|
|
139
|
+
# From source (latest)
|
|
140
|
+
git clone https://github.com/hud-evals/hud-python
|
|
141
|
+
pip install -e "hud-python[dev]"
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
> See [docs.hud.so](https://docs.hud.so), or add docs to any MCP client:
|
|
145
|
+
> `claude mcp add docs-hud https://docs.hud.so/mcp`
|
|
146
|
+
|
|
147
|
+
## Quickstart
|
|
148
|
+
|
|
149
|
+
For a tutorial that explains the agent and evaluation design, run ([see quickstart docs](https://docs.hud.so/quickstart)):
|
|
150
|
+
|
|
151
|
+
```python
|
|
152
|
+
uvx hud-python quickstart
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
Or just write your own agent loop (more [examples here](examples/)):
|
|
156
|
+
|
|
157
|
+
```python
|
|
158
|
+
import asyncio, hud, os
|
|
159
|
+
from hud.settings import settings
|
|
160
|
+
from hud.clients import MCPClient
|
|
161
|
+
from hud.agents import ClaudeAgent
|
|
162
|
+
from hud.datasets import Task # See docs: https://docs.hud.so/reference/tasks
|
|
163
|
+
|
|
164
|
+
async def main() -> None:
|
|
165
|
+
with hud.trace("Quick Start 2048"): # All telemetry works for any MCP-based agent (see https://app.hud.so)
|
|
166
|
+
task = {
|
|
167
|
+
"prompt": "Reach 64 in 2048.",
|
|
168
|
+
"mcp_config": {
|
|
169
|
+
"hud": {
|
|
170
|
+
"url": "https://mcp.hud.so/v3/mcp", # HUD's cloud MCP server (see https://docs.hud.so/core-concepts/architecture)
|
|
171
|
+
"headers": {
|
|
172
|
+
"Authorization": f"Bearer {settings.api_key}", # Get your key at https://app.hud.so
|
|
173
|
+
"Mcp-Image": "hudpython/hud-text-2048:v1.2" # Docker image from https://hub.docker.com/u/hudpython
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
},
|
|
177
|
+
"evaluate_tool": {"name": "evaluate", "arguments": {"name": "max_number", "arguments": {"target": 64}}},
|
|
178
|
+
}
|
|
179
|
+
task = Task(**task)
|
|
180
|
+
|
|
181
|
+
# 1. Define the client explicitly:
|
|
182
|
+
client = MCPClient(mcp_config=task.mcp_config)
|
|
183
|
+
agent = ClaudeAgent(
|
|
184
|
+
mcp_client=client,
|
|
185
|
+
model="claude-sonnet-4-20250514", # requires ANTHROPIC_API_KEY
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
result = await agent.run(task)
|
|
189
|
+
|
|
190
|
+
# 2. Or just:
|
|
191
|
+
# result = await ClaudeAgent().run(task)
|
|
192
|
+
|
|
193
|
+
print(f"Reward: {result.reward}")
|
|
194
|
+
await client.shutdown()
|
|
195
|
+
|
|
196
|
+
asyncio.run(main())
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
> Every HUD environment is MCP-based and interactable from anywhere. Requires `HUD_API_KEY` and `ANTHROPIC_API_KEY`.
|
|
200
|
+
|
|
201
|
+
## Reinforcement Learning with GRPO
|
|
202
|
+
|
|
203
|
+
This is a Qwen-2.5-3B agent training a policy on the [`text-2048`](environments/text_2048/) environment using [Verifiers](rl/verifiers/):
|
|
204
|
+
|
|
205
|
+

|
|
206
|
+
|
|
207
|
+
To start training, check out the [`rl/README.md`](rl/README.md) folder:
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
git clone https://github.com/hud-evals/hud-python
|
|
211
|
+
cd hud-python
|
|
212
|
+
python rl/verifiers/train_2048.py
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
Any hud MCP environment and evaluation works with our RL pipeline. Even our remote configurations!
|
|
216
|
+
|
|
217
|
+
> The [`rl/README.md`](rl/README.md) walks you through several examples of RL training and takes less than 15 minutes to set up for your custom agent!
|
|
218
|
+
|
|
219
|
+
## Benchmarking Agents
|
|
220
|
+
|
|
221
|
+
This is Claude Computer Use running on our proprietary financial analyst benchmark [SheetBench-50](https://huggingface.co/datasets/hud-evals/SheetBench-50):
|
|
222
|
+
|
|
223
|
+

|
|
224
|
+
|
|
225
|
+
> [See this trace on _app.hud.so_](https://app.hud.so/trace/9e212e9e-3627-4f1f-9eb5-c6d03c59070a)
|
|
226
|
+
|
|
227
|
+
This example runs the full dataset (only takes ~20 minutes) using [run_evaluation.py](examples/run_evaluation.py):
|
|
228
|
+
|
|
229
|
+
```bash
|
|
230
|
+
python examples/run_evaluation.py hud-evals/SheetBench-50 --full --agent claude
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
Or in code:
|
|
234
|
+
|
|
235
|
+
```python
|
|
236
|
+
import asyncio
|
|
237
|
+
from hud.datasets import run_dataset
|
|
238
|
+
from hud.agents import ClaudeAgent
|
|
239
|
+
|
|
240
|
+
results = await run_dataset(
|
|
241
|
+
name="My SheetBench-50 Evaluation",
|
|
242
|
+
dataset="hud-evals/SheetBench-50", # <-- HuggingFace dataset
|
|
243
|
+
agent_class=ClaudeAgent, # <-- Your custom agent can replace this (see https://docs.hud.so/evaluate-agents/create-agents)
|
|
244
|
+
agent_config={"model": "claude-sonnet-4-20250514"},
|
|
245
|
+
max_concurrent=50,
|
|
246
|
+
max_steps=30,
|
|
247
|
+
)
|
|
248
|
+
print(f"Average reward: {sum(r.reward for r in results) / len(results):.2f}")
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
> Running a dataset creates a job and streams results to the [app.hud.so](https://app.hud.so) platform for analysis and [leaderboard submission](https://docs.hud.so/evaluate-agents/leaderboards).
|
|
252
|
+
|
|
253
|
+
## Building Environments (MCP)
|
|
254
|
+
|
|
255
|
+
This is how you can make any environment into an interactable one in 5 steps:
|
|
256
|
+
|
|
257
|
+
1. Define MCP server layer using [`MCPServer`](https://docs.hud.so/reference/environments)
|
|
258
|
+
|
|
259
|
+
```python
|
|
260
|
+
from hud.server import MCPServer
|
|
261
|
+
from hud.tools import HudComputerTool
|
|
262
|
+
|
|
263
|
+
mcp = MCPServer("My Environment")
|
|
264
|
+
|
|
265
|
+
# Add hud tools (see all tools: https://docs.hud.so/reference/tools)
|
|
266
|
+
mcp.add_tool(HudComputerTool())
|
|
267
|
+
|
|
268
|
+
# Or custom tools (see https://docs.hud.so/build-environments/adapting-software)
|
|
269
|
+
@mcp.tool("launch_app"):
|
|
270
|
+
def launch_app(name: str = "Gmail")
|
|
271
|
+
...
|
|
272
|
+
|
|
273
|
+
if __name__ == "__main__":
|
|
274
|
+
mcp.run()
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
2. Write a simple Dockerfile that installs packages and runs:
|
|
278
|
+
|
|
279
|
+
```python
|
|
280
|
+
CMD ["python", "-m", "hud_controller.server"]
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
And build the image:
|
|
284
|
+
|
|
285
|
+
```bash
|
|
286
|
+
hud build # runs docker build under the hood
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
Or run it in interactible mode
|
|
290
|
+
|
|
291
|
+
```bash
|
|
292
|
+
hud dev
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
3. Debug it with the CLI to see if it launches:
|
|
296
|
+
|
|
297
|
+
```console
|
|
298
|
+
$ hud debug my-name/my-environment:latest
|
|
299
|
+
|
|
300
|
+
✓ Phase 1: Docker image exists
|
|
301
|
+
✓ Phase 2: MCP server responds to initialize
|
|
302
|
+
✓ Phase 3: Tools are discoverable
|
|
303
|
+
✓ Phase 4: Basic tool execution works
|
|
304
|
+
✓ Phase 5: Parallel performance is good
|
|
305
|
+
|
|
306
|
+
Progress: [█████████████████████] 5/5 phases (100%)
|
|
307
|
+
✅ All phases completed successfully!
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
Analyze it to see if all tools appear:
|
|
311
|
+
|
|
312
|
+
```console
|
|
313
|
+
$ hud analyze hudpython/hud-remote-browser:latest
|
|
314
|
+
⠏ ✓ Analysis complete
|
|
315
|
+
...
|
|
316
|
+
Tools
|
|
317
|
+
├── Regular Tools
|
|
318
|
+
│ ├── computer
|
|
319
|
+
│ │ └── Control computer with mouse, keyboard, and screenshots
|
|
320
|
+
...
|
|
321
|
+
└── Hub Tools
|
|
322
|
+
├── setup
|
|
323
|
+
│ ├── navigate_to_url
|
|
324
|
+
│ ├── set_cookies
|
|
325
|
+
│ ├── ...
|
|
326
|
+
└── evaluate
|
|
327
|
+
├── url_match
|
|
328
|
+
├── page_contains
|
|
329
|
+
├── cookie_exists
|
|
330
|
+
├── ...
|
|
331
|
+
|
|
332
|
+
📡 Telemetry Data
|
|
333
|
+
Live URL https://live.anchorbrowser.io?sessionId=abc123def456
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
4. When the tests pass, push it up to the docker registry:
|
|
337
|
+
|
|
338
|
+
```bash
|
|
339
|
+
hud push # needs docker login, hud api key
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
5. Now you can use `mcp.hud.so` to launch 100s of instances of this environment in parallel with any agent, and see everything live on [app.hud.so](https://app.hud.so):
|
|
343
|
+
|
|
344
|
+
```python
|
|
345
|
+
from hud.agents import ClaudeAgent
|
|
346
|
+
|
|
347
|
+
result = await ClaudeAgent().run({ # See all agents: https://docs.hud.so/reference/agents
|
|
348
|
+
"prompt": "Please explore this environment",
|
|
349
|
+
"mcp_config": {
|
|
350
|
+
"my-environment": {
|
|
351
|
+
"url": "https://mcp.hud.so/v3/mcp",
|
|
352
|
+
"headers": {
|
|
353
|
+
"Authorization": f"Bearer {os.getenv('HUD_API_KEY')}",
|
|
354
|
+
"Mcp-Image": "my-name/my-environment:latest"
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
# "my-environment": { # or use hud run which wraps local and remote running
|
|
358
|
+
# "cmd": "hud",
|
|
359
|
+
# "args": [
|
|
360
|
+
# "run",
|
|
361
|
+
# "my-name/my-environment:latest",
|
|
362
|
+
# ]
|
|
363
|
+
# }
|
|
364
|
+
}
|
|
365
|
+
})
|
|
366
|
+
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
> See the full environment design guide and common pitfalls in [`environments/README.md`](environments/README.md)
|
|
370
|
+
|
|
371
|
+
## Leaderboards & benchmarks
|
|
372
|
+
|
|
373
|
+
All leaderboards are publicly available on [app.hud.so/leaderboards](https://app.hud.so/leaderboards) (see [docs](https://docs.hud.so/evaluate-agents/leaderboards))
|
|
374
|
+
|
|
375
|
+

|
|
376
|
+
|
|
377
|
+
We highly suggest running 3-5 evaluations per dataset for the most consistent results across multiple jobs.
|
|
378
|
+
|
|
379
|
+
Using the [`run_dataset`](https://docs.hud.so/reference/tasks#run_dataset) function with a HuggingFace dataset automatically assigns your job to that leaderboard page, and allows you to create a scorecard out of it:
|
|
380
|
+
|
|
381
|
+
## Architecture
|
|
382
|
+
|
|
383
|
+
```mermaid
|
|
384
|
+
%%{init: {"theme": "neutral", "themeVariables": {"fontSize": "14px"}} }%%
|
|
385
|
+
graph LR
|
|
386
|
+
subgraph "Platform"
|
|
387
|
+
Dashboard["📊 app.hud.so"]
|
|
388
|
+
API["🔌 mcp.hud.so"]
|
|
389
|
+
end
|
|
390
|
+
|
|
391
|
+
subgraph "hud"
|
|
392
|
+
Agent["🤖 Agent"]
|
|
393
|
+
Task["📋 Task"]
|
|
394
|
+
SDK["📦 SDK"]
|
|
395
|
+
end
|
|
396
|
+
|
|
397
|
+
subgraph "Environments"
|
|
398
|
+
LocalEnv["🖥️ Local Docker<br/>(Development)"]
|
|
399
|
+
RemoteEnv["☁️ Remote Docker<br/>(100s Parallel)"]
|
|
400
|
+
end
|
|
401
|
+
|
|
402
|
+
subgraph "otel"
|
|
403
|
+
Trace["📡 Traces & Metrics"]
|
|
404
|
+
end
|
|
405
|
+
|
|
406
|
+
Dataset["📚 Dataset<br/>(HuggingFace)"]
|
|
407
|
+
|
|
408
|
+
AnyMCP["🔗 Any MCP Client<br/>(Cursor, Claude, Custom)"]
|
|
409
|
+
|
|
410
|
+
Agent <--> SDK
|
|
411
|
+
Task --> SDK
|
|
412
|
+
Dataset <-.-> Task
|
|
413
|
+
SDK <-->|"MCP"| LocalEnv
|
|
414
|
+
SDK <-->|"MCP"| API
|
|
415
|
+
API <-->|"MCP"| RemoteEnv
|
|
416
|
+
SDK --> Trace
|
|
417
|
+
Trace --> Dashboard
|
|
418
|
+
AnyMCP -->|"MCP"| API
|
|
419
|
+
|
|
420
|
+
style Dashboard fill:#e0e7ff,stroke:#6366f1,stroke-width:2px
|
|
421
|
+
style SDK fill:#fef3c7,stroke:#f59e0b,stroke-width:2px
|
|
422
|
+
style RemoteEnv fill:#d1fae5,stroke:#10b981,stroke-width:2px
|
|
423
|
+
style AnyMCP fill:#fce7f3,stroke:#ec4899,stroke-width:2px,stroke-dasharray: 5 5
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
## CLI reference
|
|
427
|
+
|
|
428
|
+
| Command | Purpose | Docs |
|
|
429
|
+
| ----------------------- | ------------------------------------------ | ---- |
|
|
430
|
+
| [`hud init`](https://docs.hud.so/reference/cli/init) | Create new environment with boilerplate. | [📖](https://docs.hud.so/reference/cli/init) |
|
|
431
|
+
| [`hud dev`](https://docs.hud.so/reference/cli/dev) | Hot-reload development with Docker. | [📖](https://docs.hud.so/reference/cli/dev) |
|
|
432
|
+
| [`hud build`](https://docs.hud.so/reference/cli/build) | Build image and generate lock file. | [📖](https://docs.hud.so/reference/cli/build) |
|
|
433
|
+
| [`hud push`](https://docs.hud.so/reference/cli/push) | Share environment to registry. | [📖](https://docs.hud.so/reference/cli/push) |
|
|
434
|
+
| [`hud pull <target>`](https://docs.hud.so/reference/cli/pull) | Get environment from registry. | [📖](https://docs.hud.so/reference/cli/pull) |
|
|
435
|
+
| [`hud analyze <image>`](https://docs.hud.so/reference/cli/analyze) | Discover tools, resources, and metadata. | [📖](https://docs.hud.so/reference/cli/analyze) |
|
|
436
|
+
| [`hud debug <image>`](https://docs.hud.so/reference/cli/debug) | Five-phase health check of an environment. | [📖](https://docs.hud.so/reference/cli/debug) |
|
|
437
|
+
| [`hud run <image>`](https://docs.hud.so/reference/cli/run) | Run MCP server locally or remotely. | [📖](https://docs.hud.so/reference/cli/run) |
|
|
438
|
+
|
|
439
|
+
## Roadmap
|
|
440
|
+
|
|
441
|
+
- Merging our forks in to the main `mcp`, `mcp_use`, `verifiers` repositories
|
|
442
|
+
- Helpers for building new environments (see [current guide](environments/README.md))
|
|
443
|
+
- Integrations with every major agent framework
|
|
444
|
+
- Evaluation environment registry
|
|
445
|
+
- Native RL training to hud environments (see [current RL support](rl/))
|
|
446
|
+
- MCP opentelemetry standard
|
|
447
|
+
|
|
448
|
+
## Contributing
|
|
449
|
+
|
|
450
|
+
We welcome contributions! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
|
|
451
|
+
|
|
452
|
+
Key areas:
|
|
453
|
+
- [Environment examples](environments/) - Add new MCP environments
|
|
454
|
+
- [Agent implementations](hud/agents/) - Add support for new LLM providers
|
|
455
|
+
- [Tool library](hud/tools/) - Extend the built-in tool collection
|
|
456
|
+
- [RL training](rl/) - Improve reinforcement learning pipelines
|
|
457
|
+
|
|
458
|
+
Thanks to all our contributors!
|
|
459
|
+
|
|
460
|
+
<a href="https://github.com/hud-evals/hud-python/graphs/contributors">
|
|
461
|
+
<img src="https://contrib.rocks/image?repo=hud-evals/hud-python&max=50" />
|
|
462
|
+
</a>
|
|
463
|
+
|
|
464
|
+
## Citation
|
|
465
|
+
|
|
466
|
+
```bibtex
|
|
467
|
+
@software{hud2025agentevalplatform,
|
|
468
|
+
author = {HUD and Jay Ram and Lorenss Martinsons and Parth Patel and Oskars Putans and Govind Pimpale and Mayank Singamreddy and Nguyen Nhat Minh},
|
|
469
|
+
title = {HUD: An Evaluation Platform for Agents},
|
|
470
|
+
date = {2025-04},
|
|
471
|
+
url = {https://github.com/hud-evals/hud-python},
|
|
472
|
+
langid = {en}
|
|
473
|
+
}
|
|
474
|
+
```
|
|
475
|
+
|
|
476
|
+
> **License**: HUD is released under the MIT License – see the [LICENSE](LICENSE) file for details.
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
hud/__init__.py,sha256=g2ounE6q48MfCsMm-4UfoC__d0KLz1O3e_arCHFQgBk,419
|
|
2
|
+
hud/datasets.py,sha256=bDIWbuu2eshsxl4RvtxZkb4k28NevIBaKUsk8v6pDQk,12214
|
|
3
|
+
hud/settings.py,sha256=-GEBsb60PwhikCQlFgD1DiuNWgOjFmFVhqK7iTwcvac,2112
|
|
4
|
+
hud/types.py,sha256=li7HCCzIH8FfIGEgO2GFmAHpwCCUfBT-NbXloVVkJAY,4373
|
|
5
|
+
hud/version.py,sha256=JvdmARn-wCmKr0LMLqNvVkCz8MF01kl1VDUCZC2oDgw,111
|
|
6
|
+
hud/agents/__init__.py,sha256=2F7aXfCROLXreVTxWoJNlTZeP8MSY7eZUom1ZSITlsU,349
|
|
7
|
+
hud/agents/art.py,sha256=GE31q7XcnP8qo7Uu1VJCCG5RaiKVf53WIubtdqUPmIU,3574
|
|
8
|
+
hud/agents/base.py,sha256=CHZj73_gwcWcuUIv4fT_1PH2Ac5EnizYV4rBa10JdVE,22857
|
|
9
|
+
hud/agents/claude.py,sha256=2EozkHZS9M2b7Z1sMb07CFeftfnHdSO8W1aDn-rGVGE,14646
|
|
10
|
+
hud/agents/langchain.py,sha256=Hnm6QuGNMhHZklZG3AlqwiMJzz9a8MVaoZlMdyzXUTw,9379
|
|
11
|
+
hud/agents/openai.py,sha256=FK76A49cNdXfOjIETZjzXT8hz7mcjgWwrsA3wZq0D4M,14675
|
|
12
|
+
hud/agents/openai_chat_generic.py,sha256=0u4UYJ-e8Whfa8N2pr1FkaAOBjn3XmWwMGDfHILJg8E,5476
|
|
13
|
+
hud/agents/misc/__init__.py,sha256=TU61TvmQPfJmmEx_EpBGd2aS7dwwnoq1-_VLT6Lav8c,143
|
|
14
|
+
hud/agents/misc/response_agent.py,sha256=e1QcFa9EvnX3VqtZyg5IS2CopycgTb0yIWZIOMTooxI,3116
|
|
15
|
+
hud/agents/tests/__init__.py,sha256=XgsNKhAkOnpWn9cNjbRQEfUolyVVTNWRHdDZW5elbGQ,35
|
|
16
|
+
hud/agents/tests/test_base.py,sha256=Ey6KkgNtvRoIpL9Ihl9vRfhZE4-Er9TAZULvvk-PXPU,29712
|
|
17
|
+
hud/agents/tests/test_claude.py,sha256=0usXXDfSaM3YclvDuHACuUV--hzM81FvML0XVN7zRew,13393
|
|
18
|
+
hud/agents/tests/test_client.py,sha256=s5WPSymwbRGWJIjSwjqQRHEwIWRiqKAquZBFMnQSpTk,14271
|
|
19
|
+
hud/agents/tests/test_openai.py,sha256=9Wuz33TG5j2HjwmzDxxc5Hx3SCW0p2eyRwNDbzrcA4A,9263
|
|
20
|
+
hud/cli/__init__.py,sha256=sUEa1FEfD0MN351Pq6UezBf2oUOAxiBf2pEM1GrzC8g,22351
|
|
21
|
+
hud/cli/__main__.py,sha256=5GJaExX_tzkQsendVrSrBNzUz9yEFx4nkyME8A9-g1Y,151
|
|
22
|
+
hud/cli/analyze.py,sha256=UQV0NQ6QqbeiG4d4wcnixAaihNWGQSILpMxIGKtahgU,14787
|
|
23
|
+
hud/cli/analyze_metadata.py,sha256=Vdrj-tXmLa32a7v4YOhGZd6HML_gtrObHdalLaFDsbE,8492
|
|
24
|
+
hud/cli/build.py,sha256=_5DjYU7Z-F-Izj9N_fxmbN41PBzo6CsGc6TyxDAaTcY,14690
|
|
25
|
+
hud/cli/clone.py,sha256=nc10s8qm4943fvC5f4ASDHVJ7-A_J6cWkyuwiPuBPbo,6284
|
|
26
|
+
hud/cli/cursor.py,sha256=hyaArxYpiVENzjPYQAit7cwNjEdTDaCpftX0A1fC_zw,3101
|
|
27
|
+
hud/cli/debug.py,sha256=ZAHMaNjyYosi40bhid_hrCaFCw4Uu7DrTn7F6uhgN54,14005
|
|
28
|
+
hud/cli/docker_utils.py,sha256=FQLmSJZLLYl5fq4H0sekP0_0u6FK-53IXIbPn9zpAbI,2778
|
|
29
|
+
hud/cli/init.py,sha256=AgUGFYyUqSlCNNJiXd3p7Z_eOL8nJIfx3ais-9qDucs,7953
|
|
30
|
+
hud/cli/interactive.py,sha256=ewO-ipLNR9Q16OteAAouSa_2_FNSH3OO3vMxXBJQyQI,13216
|
|
31
|
+
hud/cli/mcp_server.py,sha256=E5CsIHz5mxoFyfXfZ2UQxirlsLgF9bvzdbl_nu6LATw,28873
|
|
32
|
+
hud/cli/pull.py,sha256=Y5XMOPPIgJ2agZyLgjHYMAJ_HDUiOE1LJka-s_5zMak,12275
|
|
33
|
+
hud/cli/push.py,sha256=IkuIO6g6EmTzjCOB0eZ1DB5KLN7-yu5xQ2Cb2whVkJ8,14533
|
|
34
|
+
hud/cli/remote_runner.py,sha256=8iH9ez11Xd9R2lsbArn517MVICogsYcyCMkXA_fe2TQ,9716
|
|
35
|
+
hud/cli/runner.py,sha256=5526x2hC_cd7MSvDPtMVsDIAjVPXHMpre0KO3CChkQY,5048
|
|
36
|
+
hud/cli/utils.py,sha256=rKnjcgJ3Fm844qardCrQPQ_PFVtad9JIXQhUEOHhl0A,9104
|
|
37
|
+
hud/cli/tests/__init__.py,sha256=umGvkKfARyrB1JzEDuK7WDbkMzK5PeTV1CeTZ5g4Ado,71
|
|
38
|
+
hud/cli/tests/test_analyze.py,sha256=XjnfHTepphZ4cSTPngeTfEv_0qrr2olagmRbOgfUw2Y,11255
|
|
39
|
+
hud/cli/tests/test_cli_init.py,sha256=UBMQ7T-3rCL8i01fuDJWaJlQc7Hn79xyz9ArqTcLxD4,11554
|
|
40
|
+
hud/cli/tests/test_cli_main.py,sha256=METXVbD9ir3QLnCODjbJTO_ph5Lk0ID48AbVy5nuJKI,724
|
|
41
|
+
hud/cli/tests/test_clone.py,sha256=7JBeXk-n6S_iuUiRUmayEv-L7NRypyY_2KeMs_OcksA,4600
|
|
42
|
+
hud/cli/tests/test_cursor.py,sha256=71Nt0TABTwLTaeW9XhAxQFikhuHKLJjZddk87JFQvxU,10068
|
|
43
|
+
hud/cli/tests/test_debug.py,sha256=VQlwZq_x10NPZpSf1CbvIpMs1NgaZKTXPqKfX5MCMUg,18481
|
|
44
|
+
hud/cli/tests/test_mcp_server.py,sha256=6v9-5_iNDTf3WLFWUevS_brv1puG7U0GDpTx4szwcGo,4517
|
|
45
|
+
hud/cli/tests/test_utils.py,sha256=DZfe-0xoX_VGQO-mSZr7xca0WBl6z_9Eai_7OxjzuUI,13854
|
|
46
|
+
hud/clients/README.md,sha256=ypuNGE97Bv-1c--DIiy7mh-yUVITsEKn-CBgDvLs4J4,3969
|
|
47
|
+
hud/clients/__init__.py,sha256=_mdxGF3pnuFB0tpVKpNZ9lz27iKSOa2-ck3NjHHFg_Y,344
|
|
48
|
+
hud/clients/base.py,sha256=tYHwoCArNSdc6tCSbGoDDdKw_IVitNIHxF2mk94FB3Y,13876
|
|
49
|
+
hud/clients/fastmcp.py,sha256=mF1ZZHburlpzNdZZ1ndZCaF_0jVT7-ot2sqmZXK49Vo,9389
|
|
50
|
+
hud/clients/mcp_use.py,sha256=38_-yfNC-zhHbqmV2HRmBpMd-fTbB22DO0PnJPd7A50,11302
|
|
51
|
+
hud/clients/tests/__init__.py,sha256=FSkZn2zN5p4DQTMcv6RppiboIxG-9wSUoPpB5kw06g8,34
|
|
52
|
+
hud/clients/tests/test_client_integration.py,sha256=he-Vtmo84G7HuNSk1harEwcBli_K5T9ttQaH2MKGgDU,4309
|
|
53
|
+
hud/clients/tests/test_fastmcp.py,sha256=GsjUk708KqOzPgQwphQL7WCJiimO_1xitrbq-5aD3p4,13372
|
|
54
|
+
hud/clients/tests/test_protocol.py,sha256=XJc8lXqypiHwFhfw_rtb2-IQ3Gr9z2PCsEi1OGgfqaQ,6828
|
|
55
|
+
hud/clients/utils/__init__.py,sha256=xAbMuwsQcOOAZEQhgqVBGud3MjRjZ0tOapAu6ZYR4YQ,33
|
|
56
|
+
hud/clients/utils/retry_transport.py,sha256=G1XURBZ7E2rSYlkpnCbUNcQ2r4GgOB1Hltn5FHQyxj8,5518
|
|
57
|
+
hud/misc/__init__.py,sha256=J_MuFkCEhMBQxBq17nArf5xLSEu_CJ5CZ1w7LiTtq2U,44
|
|
58
|
+
hud/misc/claude_plays_pokemon.py,sha256=F_UZs-R02zLXF4lwn-nrQzWq5Q1ThSXL5g3hqFEqxQE,10745
|
|
59
|
+
hud/otel/__init__.py,sha256=cdyHWKzbtoJ5GEzk7rd-ltcxbwMU7fXm05vkNeiPyqw,1038
|
|
60
|
+
hud/otel/collector.py,sha256=ciVvQWOoCTmYxN4s89Js0rlIX1mDBJ37PFlCD4wYLJU,4639
|
|
61
|
+
hud/otel/config.py,sha256=_e0Tv0jJLY_S2_42mB_kAmUKw0J5BIynXj8YLF1XrUI,6413
|
|
62
|
+
hud/otel/context.py,sha256=qv4UD3V28y-R8FdoBnTIGe5-XzW_rIShhZVtup71cR0,18310
|
|
63
|
+
hud/otel/exporters.py,sha256=xCeHJUa1ECp0ah7VTR3juw4fX4PXzTKb7yRC3tTUbR8,14612
|
|
64
|
+
hud/otel/instrumentation.py,sha256=c9hyDN8PLN8KOhIVMalVI8fUePwaYLbaKilOmHpKvzM,3672
|
|
65
|
+
hud/otel/processors.py,sha256=h-ls0clNuJuCnY02m42y4g8GJBWQaHV3G2RhmveimMk,4733
|
|
66
|
+
hud/otel/tests/__init__.py,sha256=f9huyxi7QPIKzfEb3MWK4fX7r89efj5TBkPrufjXFGI,44
|
|
67
|
+
hud/otel/tests/test_processors.py,sha256=382MfEGtlwTyor9A4RQt16wrjvYrB_vG7LgJxScTkl8,6975
|
|
68
|
+
hud/server/__init__.py,sha256=MxGejM5W1He05H3nJ43cxxOtDuzcgBjYOHqdh2rIEIc,96
|
|
69
|
+
hud/server/context.py,sha256=ZcL1qtyRfcJpjtuHp1vO4RyFhdHXa1LZlPbLjTT7fhw,3324
|
|
70
|
+
hud/server/low_level.py,sha256=_WruJbbCcNlkyy-7gr_MrDPSO1QNOrt8BbajJR_uzUM,4833
|
|
71
|
+
hud/server/server.py,sha256=IBOi5xSZKgPHd7f6dDR2DKDDrYKJk1_W2RfuiZmT9tA,6534
|
|
72
|
+
hud/server/helper/__init__.py,sha256=GCY5_s45JLSr-J5E4qU11LCgKttfXeZCGbh2ny_fwY8,121
|
|
73
|
+
hud/server/tests/__init__.py,sha256=x985KPu1Zpfn_trs3bpfqzMFbNy6kHMLgnqUYudnzfs,52
|
|
74
|
+
hud/shared/__init__.py,sha256=gHamPuurfbeoaTT2dgfADcq_uF5-1izq4t3cfM_BFYc,144
|
|
75
|
+
hud/shared/exceptions.py,sha256=lTMqw0JoAvGN1Pws3Dqr9h0-AjPIamrO8fmRHRBmVdc,5696
|
|
76
|
+
hud/shared/requests.py,sha256=ulxNvhSTqCDMoPO8F4LeZQrNyCK5rXrYbeNUGBZ9XTg,9112
|
|
77
|
+
hud/shared/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
78
|
+
hud/shared/tests/test_exceptions.py,sha256=acJ7UxoFUtsBipOLptlIZ70Jbu8cJ-nMoUuOpWhSGqQ,5472
|
|
79
|
+
hud/shared/tests/test_requests.py,sha256=2agIf4CHdlT2Dyg6hewaLoENP5FAP0hZZMXCUim_9Rc,9389
|
|
80
|
+
hud/telemetry/__init__.py,sha256=6GneOGX3LDlJxzGCweyHNuJAISqBdO0VpIXHuV8ShZc,688
|
|
81
|
+
hud/telemetry/instrument.py,sha256=gDy7BnNSqn4SEQLEeVE2KypY4J-apJ17tJ3-eRUgy5k,14475
|
|
82
|
+
hud/telemetry/job.py,sha256=7kvKnGPuIhfwbcJl2W-NV4gSaT0vgKXrJsMFsVdCFf8,10307
|
|
83
|
+
hud/telemetry/replay.py,sha256=Cug9SjYFbo_jKpaImFrVVhJP5CjLM3f1JLnkA72zD8E,2380
|
|
84
|
+
hud/telemetry/trace.py,sha256=rbSgUhBDLW8gMVXwzMobZhzhIRWhn2gEQpNySnFwDOY,2291
|
|
85
|
+
hud/tools/__init__.py,sha256=ddNZX6Fc_TIc29w2sqKgAFftV6QmJiVQ_umrAXUkT0U,938
|
|
86
|
+
hud/tools/base.py,sha256=A1Gkln2ffEz7P9ON97UhdJPqpXWqonk4EyK6LIyymsY,15349
|
|
87
|
+
hud/tools/bash.py,sha256=SDh4cUs21JyLpyurWkzkPmgelS-Ln6-gB245p-TJStk,5370
|
|
88
|
+
hud/tools/edit.py,sha256=I6XYEinmPQeHFPR4A-3NJEUqDCoUBsedULgWTe2d8iU,13059
|
|
89
|
+
hud/tools/playwright.py,sha256=NlXpUX2ap2aL7lVc3T1Ltz_YxJYOj10xG6kZmaWmW3o,15419
|
|
90
|
+
hud/tools/types.py,sha256=CrI6zRuV2Z2m9i0aHgun-XIPesjsfHZVCE8a80fbF5Y,2806
|
|
91
|
+
hud/tools/utils.py,sha256=j-ctal4VQIbeNo35xhNkRlVhivo728qCqhscj9so600,1497
|
|
92
|
+
hud/tools/computer/__init__.py,sha256=Xiq1tm8kefysfKnThPdtG4kjeymt_WhFCfznzI79YEY,382
|
|
93
|
+
hud/tools/computer/anthropic.py,sha256=fHR5G9fPnuEOfK9cY8vSIUh_iLMM2wiqyBLbqI_ch0o,17789
|
|
94
|
+
hud/tools/computer/hud.py,sha256=LFxNG8kZ5W5fpLcdIYIUevi1QgJp8HnN4BfH3Bjrvrs,16616
|
|
95
|
+
hud/tools/computer/openai.py,sha256=4QJd4iSMXY1st4t6GNqWFWFIxGT3gsqlCUR-7Te5BiE,11484
|
|
96
|
+
hud/tools/computer/settings.py,sha256=idtGZhxcS3CnjV2s15oUjBAtQJqNmL7zcvwj-v9NexU,2845
|
|
97
|
+
hud/tools/executors/__init__.py,sha256=kNC6SfuYhMsucG4FDPcZF0vAUe0rdm0sU3sNlLyjl2M,762
|
|
98
|
+
hud/tools/executors/base.py,sha256=I3xUlPJ2dmRm71hwws8cw_DjeUqmUu2ngFPu-TDFgO8,15020
|
|
99
|
+
hud/tools/executors/pyautogui.py,sha256=YgNQgScqRqz93rq-jVZcetVY5x_xNcq7NtekCYnp8Ro,22982
|
|
100
|
+
hud/tools/executors/xdo.py,sha256=4tHBszgyu8NYDaSYAnOG6apXrhjMzme00dn0SzCiqC4,18647
|
|
101
|
+
hud/tools/executors/tests/__init__.py,sha256=1Q_W-8SYskdnFgDbixa9acQtKIvXNapAGBtf2XaTSBU,33
|
|
102
|
+
hud/tools/executors/tests/test_base_executor.py,sha256=9RkuuK3Ard8xhXeFBi0f-FWN0bbWZKMliuOVZ9JFOyk,12806
|
|
103
|
+
hud/tools/executors/tests/test_pyautogui_executor.py,sha256=0DjSPdV0ELBBLWtNRNBt0vzFZsPNdem_ksj93pwdjR8,6805
|
|
104
|
+
hud/tools/tests/__init__.py,sha256=x985KPu1Zpfn_trs3bpfqzMFbNy6kHMLgnqUYudnzfs,52
|
|
105
|
+
hud/tools/tests/test_base.py,sha256=JGG4mVJviNQOCX4aXA4w3BvcBs_u95sWIXjNXn9d0vI,9265
|
|
106
|
+
hud/tools/tests/test_bash.py,sha256=V-GO9BDlteB5ajvkGFV8U0XbYgyD4CkwPIwU5M7b7ws,5271
|
|
107
|
+
hud/tools/tests/test_bash_extended.py,sha256=304cMWbal7P3xmMTCEK2Cf2liekuw8rMUZJ1VVbUG7o,7197
|
|
108
|
+
hud/tools/tests/test_computer.py,sha256=RIbqWqPHt-mR_YOPvmW-qHANm_EjqShAMmArjNh0eSI,16819
|
|
109
|
+
hud/tools/tests/test_computer_actions.py,sha256=gLTGPaSPUB8Lki2NJo9wHQ_sHQLH8hbVrB2siXZWj2w,1228
|
|
110
|
+
hud/tools/tests/test_edit.py,sha256=mM-2yUDBvxKBCbpnh-y6zuqmwYeqKJokdKnsTViNsb4,9993
|
|
111
|
+
hud/tools/tests/test_init.py,sha256=UnJ8JH5L_-DSeHN62UaOwPm_84wAU1SQB4S54tDUgBY,725
|
|
112
|
+
hud/tools/tests/test_playwright_tool.py,sha256=6fboZgV5sJnh7LlySyfrlBFuYSISloWXgppUjsbEuFg,6919
|
|
113
|
+
hud/tools/tests/test_tools.py,sha256=3fCd410-vzb8HAo_hwkh4mFafECNh3EFBHZTV5jFw3s,4708
|
|
114
|
+
hud/tools/tests/test_utils.py,sha256=THSY74_qK9KkToihgSsi49EpS8BpQ_xaW0cbtvM2sFM,5652
|
|
115
|
+
hud/utils/__init__.py,sha256=KwQ4kTeMXYKATJL49GpxY8QD504ZKeK4ngn46VnU8wA,174
|
|
116
|
+
hud/utils/async_utils.py,sha256=H6kFzadsUXrPU76kGE03OAzhr-4-S_dKG2hEF-Q3XIQ,2474
|
|
117
|
+
hud/utils/design.py,sha256=HD35wwgYnItxr-aOC93MAO_IEGwSIsVtE2WOfbitd58,5155
|
|
118
|
+
hud/utils/mcp.py,sha256=8YrJHbU8fJd6RY4O0jQjTIyv62Ofe0qlTFyVK5S7cEc,1902
|
|
119
|
+
hud/utils/progress.py,sha256=iJFvYxd3tPXlk0TW6hcVarXn_KEJnwFWLIchMqaZuKc,6076
|
|
120
|
+
hud/utils/telemetry.py,sha256=hgydhxQzsE-f_MAq1ZQRTEETts506apsyfP5yGVYiYY,1929
|
|
121
|
+
hud/utils/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
122
|
+
hud/utils/tests/test_async_utils.py,sha256=Sraje4i83CcCEmMtLQQA5GKS8BKXsPZ1uPp-fkDXnFM,6118
|
|
123
|
+
hud/utils/tests/test_init.py,sha256=jKwlbj7tz9tOpgBe9cffFGAIsVS47KYkW7DnygcRqYA,400
|
|
124
|
+
hud/utils/tests/test_progress.py,sha256=8kcinr6u6vgvLSWZ4rZlNWz4vL835SUIFwmZj11Q4Qg,7655
|
|
125
|
+
hud/utils/tests/test_telemetry.py,sha256=DNoGqq7zs1fjKA9GsmvT1U8FlekHAVwYD4pxSJvLgYs,2863
|
|
126
|
+
hud/utils/tests/test_version.py,sha256=vwgyzM9FUBbH9by_fUwTmBPLEoQ0cgqZZ_jtEsH-x2E,167
|
|
127
|
+
hud/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
128
|
+
hud_python-0.4.1.dist-info/METADATA,sha256=Re8FIOUusD1B4-jkdb3lyTJNOwXld4L-BRDMhs8H-CY,19554
|
|
129
|
+
hud_python-0.4.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
130
|
+
hud_python-0.4.1.dist-info/entry_points.txt,sha256=jJbodNFg1m0-CDofe5AHvB4zKBq7sSdP97-ohaQ3ae4,63
|
|
131
|
+
hud_python-0.4.1.dist-info/licenses/LICENSE,sha256=bskFRICmpDj1GtBpnuisjMR6mtQZtkPnRCtTz1CMMB0,1099
|
|
132
|
+
hud_python-0.4.1.dist-info/RECORD,,
|