hud-python 0.4.36__py3-none-any.whl → 0.4.38__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.

Files changed (44) hide show
  1. hud/agents/__init__.py +2 -0
  2. hud/agents/lite_llm.py +72 -0
  3. hud/agents/openai_chat_generic.py +21 -7
  4. hud/cli/__init__.py +19 -4
  5. hud/cli/build.py +17 -2
  6. hud/cli/dev.py +1 -1
  7. hud/cli/eval.py +93 -13
  8. hud/cli/flows/tasks.py +197 -65
  9. hud/cli/init.py +1 -1
  10. hud/cli/push.py +9 -0
  11. hud/cli/rl/__init__.py +14 -4
  12. hud/cli/rl/celebrate.py +187 -0
  13. hud/cli/rl/config.py +15 -8
  14. hud/cli/rl/local_runner.py +44 -20
  15. hud/cli/rl/remote_runner.py +164 -87
  16. hud/cli/rl/viewer.py +141 -0
  17. hud/cli/rl/wait_utils.py +89 -0
  18. hud/cli/utils/env_check.py +196 -0
  19. hud/cli/utils/source_hash.py +108 -0
  20. hud/clients/base.py +1 -1
  21. hud/clients/fastmcp.py +1 -1
  22. hud/otel/config.py +1 -1
  23. hud/otel/context.py +2 -2
  24. hud/rl/vllm_adapter.py +1 -1
  25. hud/server/server.py +84 -13
  26. hud/server/tests/test_add_tool.py +60 -0
  27. hud/server/tests/test_context.py +128 -0
  28. hud/server/tests/test_mcp_server_handlers.py +44 -0
  29. hud/server/tests/test_mcp_server_integration.py +405 -0
  30. hud/server/tests/test_mcp_server_more.py +247 -0
  31. hud/server/tests/test_run_wrapper.py +53 -0
  32. hud/server/tests/test_server_extra.py +166 -0
  33. hud/server/tests/test_sigterm_runner.py +78 -0
  34. hud/shared/hints.py +1 -1
  35. hud/telemetry/job.py +2 -2
  36. hud/types.py +9 -2
  37. hud/utils/tasks.py +32 -24
  38. hud/utils/tests/test_version.py +1 -1
  39. hud/version.py +1 -1
  40. {hud_python-0.4.36.dist-info → hud_python-0.4.38.dist-info}/METADATA +14 -12
  41. {hud_python-0.4.36.dist-info → hud_python-0.4.38.dist-info}/RECORD +44 -30
  42. {hud_python-0.4.36.dist-info → hud_python-0.4.38.dist-info}/WHEEL +0 -0
  43. {hud_python-0.4.36.dist-info → hud_python-0.4.38.dist-info}/entry_points.txt +0 -0
  44. {hud_python-0.4.36.dist-info → hud_python-0.4.38.dist-info}/licenses/LICENSE +0 -0
hud/utils/tasks.py CHANGED
@@ -9,7 +9,7 @@ from hud.utils.hud_console import HUDConsole
9
9
  hud_console = HUDConsole()
10
10
 
11
11
 
12
- def load_tasks(tasks_input: str | list[dict]) -> list[Task]:
12
+ def load_tasks(tasks_input: str | list[dict], *, raw: bool = False) -> list[Task] | list[dict]:
13
13
  """Load tasks from various sources.
14
14
 
15
15
  Args:
@@ -18,16 +18,19 @@ def load_tasks(tasks_input: str | list[dict]) -> list[Task]:
18
18
  - Path to a JSONL file (one task per line)
19
19
  - HuggingFace dataset name (format: "username/dataset" or "username/dataset:split")
20
20
  - List of task dictionaries
21
- system_prompt: Default system prompt to use if not specified in task
21
+ raw: If True, return raw dicts without validation or env substitution
22
22
 
23
23
  Returns:
24
- List of validated HUD Task objects
24
+ - If raw=False (default): list[Task]
25
+ - If raw=True: list[dict]
25
26
  """
26
- tasks = []
27
+ tasks: list[Task] | list[dict] = []
27
28
 
28
29
  if isinstance(tasks_input, list):
29
30
  # Direct list of task dicts
30
31
  hud_console.info(f"Loading {len(tasks_input)} tasks from provided list")
32
+ if raw:
33
+ return [item for item in tasks_input if isinstance(item, dict)]
31
34
  for item in tasks_input:
32
35
  task = Task(**item)
33
36
  tasks.append(task)
@@ -36,7 +39,6 @@ def load_tasks(tasks_input: str | list[dict]) -> list[Task]:
36
39
  # Check if it's a file path
37
40
  if Path(tasks_input).exists():
38
41
  file_path = Path(tasks_input)
39
- hud_console.info(f"Loading tasks from file: {tasks_input}")
40
42
 
41
43
  with open(file_path) as f:
42
44
  # Handle JSON files (array of tasks)
@@ -46,31 +48,33 @@ def load_tasks(tasks_input: str | list[dict]) -> list[Task]:
46
48
  raise ValueError(
47
49
  f"JSON file must contain an array of tasks, got {type(data)}"
48
50
  )
49
-
51
+ if raw:
52
+ return [item for item in data if isinstance(item, dict)]
50
53
  for item in data:
51
54
  task = Task(**item)
52
55
  tasks.append(task)
53
56
 
54
57
  # Handle JSONL files (one task per line)
55
58
  else:
59
+ raw_items: list[dict] = []
56
60
  for line in f:
57
61
  line = line.strip()
58
- if line: # Skip empty lines
59
- item = json.loads(line)
60
-
61
- # Handle case where line contains an array of tasks
62
- if isinstance(item, list):
63
- for task_item in item:
64
- task = Task(**task_item)
65
- tasks.append(task)
66
- # Handle normal case where line contains a single task object
67
- elif isinstance(item, dict):
68
- task = Task(**item)
69
- tasks.append(task)
70
- else:
71
- raise ValueError(
72
- f"Invalid JSONL format: expected dict or list of dicts, got {type(item)}" # noqa: E501
73
- )
62
+ if not line:
63
+ continue
64
+ item = json.loads(line)
65
+ if isinstance(item, list):
66
+ raw_items.extend([it for it in item if isinstance(it, dict)])
67
+ elif isinstance(item, dict):
68
+ raw_items.append(item)
69
+ else:
70
+ raise ValueError(
71
+ f"Invalid JSONL format: expected dict or list of dicts, got {type(item)}" # noqa: E501
72
+ )
73
+ if raw:
74
+ return raw_items
75
+ for it in raw_items:
76
+ task = Task(**it)
77
+ tasks.append(task)
74
78
 
75
79
  # Check if it's a HuggingFace dataset
76
80
  elif "/" in tasks_input:
@@ -88,6 +92,7 @@ def load_tasks(tasks_input: str | list[dict]) -> list[Task]:
88
92
  dataset = load_dataset(dataset_name, split=split)
89
93
 
90
94
  # Convert dataset rows to Task objects
95
+ raw_rows: list[dict] = []
91
96
  for item in dataset:
92
97
  if not isinstance(item, dict):
93
98
  raise ValueError(
@@ -97,7 +102,11 @@ def load_tasks(tasks_input: str | list[dict]) -> list[Task]:
97
102
  raise ValueError(
98
103
  f"Invalid HuggingFace dataset: expected mcp_config and prompt, got {item}" # noqa: E501
99
104
  )
100
- task = Task(**item)
105
+ raw_rows.append(item)
106
+ if raw:
107
+ return raw_rows
108
+ for row in raw_rows:
109
+ task = Task(**row)
101
110
  tasks.append(task)
102
111
 
103
112
  except ImportError as e:
@@ -115,5 +124,4 @@ def load_tasks(tasks_input: str | list[dict]) -> list[Task]:
115
124
  else:
116
125
  raise TypeError(f"tasks_input must be str or list, got {type(tasks_input)}")
117
126
 
118
- hud_console.info(f"Loaded {len(tasks)} tasks")
119
127
  return tasks
@@ -5,4 +5,4 @@ def test_import():
5
5
  """Test that the package can be imported."""
6
6
  import hud
7
7
 
8
- assert hud.__version__ == "0.4.36"
8
+ assert hud.__version__ == "0.4.38"
hud/version.py CHANGED
@@ -4,4 +4,4 @@ Version information for the HUD SDK.
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
- __version__ = "0.4.36"
7
+ __version__ = "0.4.38"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hud-python
3
- Version: 0.4.36
3
+ Version: 0.4.38
4
4
  Summary: SDK for the HUD platform.
5
5
  Project-URL: Homepage, https://github.com/hud-evals/hud-python
6
6
  Project-URL: Bug Tracker, https://github.com/hud-evals/hud-python/issues
@@ -36,11 +36,13 @@ Classifier: Programming Language :: Python :: 3.12
36
36
  Classifier: Programming Language :: Python :: 3.13
37
37
  Requires-Python: <3.13,>=3.11
38
38
  Requires-Dist: anthropic
39
+ Requires-Dist: blessed>=1.20.0
39
40
  Requires-Dist: datasets>=2.14.0
40
41
  Requires-Dist: httpx<1,>=0.23.0
41
42
  Requires-Dist: hud-fastmcp-python-sdk>=0.1.2
42
43
  Requires-Dist: hud-mcp-python-sdk>=3.13.2
43
44
  Requires-Dist: hud-mcp-use-python-sdk==2.3.19
45
+ Requires-Dist: litellm>=1.55.0
44
46
  Requires-Dist: numpy>=1.24.0
45
47
  Requires-Dist: openai
46
48
  Requires-Dist: opentelemetry-api>=1.34.1
@@ -156,8 +158,8 @@ OSS RL environment + evals toolkit. Wrap software as environments, run benchmark
156
158
  ## Highlights
157
159
 
158
160
  - 🚀 **[MCP environment skeleton](https://docs.hud.so/core-concepts/mcp-protocol)** – any agent can call any environment.
159
- - ⚡️ **[Live telemetry](https://app.hud.so)** – inspect every tool call, observation, and reward in real time.
160
- - 🗂️ **[Public benchmarks](https://app.hud.so/leaderboards)** – OSWorld-Verified, SheetBench-50, and more.
161
+ - ⚡️ **[Live telemetry](https://hud.so)** – inspect every tool call, observation, and reward in real time.
162
+ - 🗂️ **[Public benchmarks](https://hud.so/leaderboards)** – OSWorld-Verified, SheetBench-50, and more.
161
163
  - 🌱 **[Reinforcement learning built-in](rl/)** – Verifiers gym pipelines for GRPO on any environment.
162
164
  - 🌐 **[Cloud browsers](environments/remote_browser/)** – AnchorBrowser, Steel, BrowserBase integrations for browser automation.
163
165
  - 🛠️ **[Hot-reload dev loop](environments/README.md#phase-5-hot-reload-development-with-cursor-agent)** – `hud dev` for iterating on environments without rebuilds.
@@ -203,14 +205,14 @@ from hud.agents import ClaudeAgent
203
205
  from hud.datasets import Task # See docs: https://docs.hud.so/reference/tasks
204
206
 
205
207
  async def main() -> None:
206
- with hud.trace("Quick Start 2048"): # All telemetry works for any MCP-based agent (see https://app.hud.so)
208
+ with hud.trace("Quick Start 2048"): # All telemetry works for any MCP-based agent (see https://hud.so)
207
209
  task = {
208
210
  "prompt": "Reach 64 in 2048.",
209
211
  "mcp_config": {
210
212
  "hud": {
211
213
  "url": "https://mcp.hud.so/v3/mcp", # HUD's cloud MCP server (see https://docs.hud.so/core-concepts/architecture)
212
214
  "headers": {
213
- "Authorization": f"Bearer {settings.api_key}", # Get your key at https://app.hud.so
215
+ "Authorization": f"Bearer {settings.api_key}", # Get your key at https://hud.so
214
216
  "Mcp-Image": "hudpython/hud-text-2048:v1.2" # Docker image from https://hub.docker.com/u/hudpython
215
217
  }
216
218
  }
@@ -237,7 +239,7 @@ async def main() -> None:
237
239
  asyncio.run(main())
238
240
  ```
239
241
 
240
- The above example let's the agent play 2048 ([See replay](https://app.hud.so/trace/6feed7bd-5f67-4d66-b77f-eb1e3164604f))
242
+ The above example let's the agent play 2048 ([See replay](https://hud.so/trace/6feed7bd-5f67-4d66-b77f-eb1e3164604f))
241
243
 
242
244
  ![Agent playing 2048](https://raw.githubusercontent.com/hud-evals/hud-python/main/docs/src/images/2048_1.gif)
243
245
 
@@ -268,7 +270,7 @@ Supports multi‑turn RL for both:
268
270
  - Language‑only models (e.g., `Qwen/Qwen2.5-7B-Instruct`)
269
271
  - Vision‑Language models (e.g., `Qwen/Qwen2.5-VL-3B-Instruct`)
270
272
 
271
- By default, `hud rl` provisions a persistant server and trainer in the cloud, streams telemetry to `app.hud.so`, and lets you monitor/manage models at `app.hud.so/models`. Use `--local` to run entirely on your machines (typically 2+ GPUs: one for vLLM, the rest for training).
273
+ By default, `hud rl` provisions a persistant server and trainer in the cloud, streams telemetry to `hud.so`, and lets you monitor/manage models at `hud.so/models`. Use `--local` to run entirely on your machines (typically 2+ GPUs: one for vLLM, the rest for training).
272
274
 
273
275
  Any HUD MCP environment and evaluation works with our RL pipeline (including remote configurations). See the guided docs: `https://docs.hud.so/train-agents/quickstart`.
274
276
 
@@ -278,7 +280,7 @@ This is Claude Computer Use running on our proprietary financial analyst benchma
278
280
 
279
281
  ![Trace screenshot](https://raw.githubusercontent.com/hud-evals/hud-python/main/docs/src/images/trace_sheet.gif)
280
282
 
281
- > [See this trace on _app.hud.so_](https://app.hud.so/trace/9e212e9e-3627-4f1f-9eb5-c6d03c59070a)
283
+ > [See this trace on _hud.so_](https://hud.so/trace/9e212e9e-3627-4f1f-9eb5-c6d03c59070a)
282
284
 
283
285
  This example runs the full dataset (only takes ~20 minutes) using [run_evaluation.py](examples/run_evaluation.py):
284
286
 
@@ -304,7 +306,7 @@ results = await run_dataset(
304
306
  print(f"Average reward: {sum(r.reward for r in results) / len(results):.2f}")
305
307
  ```
306
308
 
307
- > 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).
309
+ > Running a dataset creates a job and streams results to the [hud.so](https://hud.so) platform for analysis and [leaderboard submission](https://docs.hud.so/evaluate-agents/leaderboards).
308
310
 
309
311
  ## Building Environments (MCP)
310
312
 
@@ -395,7 +397,7 @@ Tools
395
397
  hud push # needs docker login, hud api key
396
398
  ```
397
399
 
398
- 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):
400
+ 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 [hud.so](https://hud.so):
399
401
 
400
402
  ```python
401
403
  from hud.agents import ClaudeAgent
@@ -426,7 +428,7 @@ result = await ClaudeAgent().run({ # See all agents: https://docs.hud.so/refere
426
428
 
427
429
  ## Leaderboards & benchmarks
428
430
 
429
- All leaderboards are publicly available on [app.hud.so/leaderboards](https://app.hud.so/leaderboards) (see [docs](https://docs.hud.so/evaluate-agents/leaderboards))
431
+ All leaderboards are publicly available on [hud.so/leaderboards](https://hud.so/leaderboards) (see [docs](https://docs.hud.so/evaluate-agents/leaderboards))
430
432
 
431
433
  ![Leaderboard](https://raw.githubusercontent.com/hud-evals/hud-python/main/docs/src/images/leaderboards_3.png)
432
434
 
@@ -440,7 +442,7 @@ Using the [`run_dataset`](https://docs.hud.so/reference/tasks#run_dataset) funct
440
442
  %%{init: {"theme": "neutral", "themeVariables": {"fontSize": "14px"}} }%%
441
443
  graph LR
442
444
  subgraph "Platform"
443
- Dashboard["📊 app.hud.so"]
445
+ Dashboard["📊 hud.so"]
444
446
  API["🔌 mcp.hud.so"]
445
447
  end
446
448
 
@@ -1,15 +1,16 @@
1
1
  hud/__init__.py,sha256=JMDFUE1pP0J1Xl_miBdt7ERvoffZmTzSFe8yxz512A8,552
2
2
  hud/__main__.py,sha256=YR8Dq8OhINOsVfQ55PmRXXg4fEK84Rt_-rMtJ5rvhWo,145
3
3
  hud/settings.py,sha256=disObWa-DgXzoDcCDp3y1dTPaNsbR0IvoMJL9Eg4zyo,3947
4
- hud/types.py,sha256=RtNM2fPU1NAujTmZLOydQIU-ybk3gVRCoJ2TM2hJOlw,10752
5
- hud/version.py,sha256=QvD3Kxp6mTnvL6PRc-jWAfX1KqPy6dGRkOd3_bXmXhI,105
6
- hud/agents/__init__.py,sha256=UoIkljWdbq4bM0LD-mSaw6w826EqdEjOk7r6glNYwYQ,286
4
+ hud/types.py,sha256=pmPj_8emfMIfEY_fRS8NgIJ56kCsolWSqQjyCzXDaGY,11072
5
+ hud/version.py,sha256=E6lKrJ0OC1I5_8qK0MIfYAgMaf4hV1-xPJbJJbnjleQ,105
6
+ hud/agents/__init__.py,sha256=d-t5-PHHDoEFCuhv-IrpixCu7syvrjqSrDekQ0SdFiM,335
7
7
  hud/agents/base.py,sha256=_u1zR3gXzZ1RlTCUYdMcvgHqdJBC4-AB1lZt0yBx8lg,35406
8
8
  hud/agents/claude.py,sha256=TGhm5gE2ltINDAdEsDxKuT9iGMQ5G87R6kmabU3KPt8,16101
9
9
  hud/agents/grounded_openai.py,sha256=U-FHjB2Nh1_o0gmlxY5F17lWJ3oHsNRIB2a7z-IKB64,11231
10
10
  hud/agents/langchain.py,sha256=1EgCy8jfjunsWxlPC5XfvfLS6_XZVrIF1ZjtHcrvhYw,9584
11
+ hud/agents/lite_llm.py,sha256=Nv2o541Q2MpaopR3P7ICoRzl0eHMLz0VzKctUrEU5nc,2232
11
12
  hud/agents/openai.py,sha256=O1xV1h1l-W8lmnmXqTYr5CwnmnaniMqOxAZbl2CTTng,14576
12
- hud/agents/openai_chat_generic.py,sha256=7n7timn3fvNRnL2xzWyOTeNTchej2r9cAL1mU6YnFdY,11605
13
+ hud/agents/openai_chat_generic.py,sha256=NDk_Bht_ePf8gfW1nuvlM6CXcntcRaJw4QzzAmxA6yc,12068
13
14
  hud/agents/misc/__init__.py,sha256=BYi4Ytp9b_vycpZFXnr5Oyw6ncKLNNGml8Jrb7bWUb4,136
14
15
  hud/agents/misc/response_agent.py,sha256=uMuRDkz5QgaMQliNzBRepond5sb7KyqIiKm3LstjVnw,3753
15
16
  hud/agents/tests/__init__.py,sha256=W-O-_4i34d9TTyEHV-O_q1Ai1gLhzwDaaPo02_TWQIY,34
@@ -18,32 +19,35 @@ hud/agents/tests/test_claude.py,sha256=0nZnfsbGoECvsLPdmaRnc9jVmrehVvc3kxeyiCQI2
18
19
  hud/agents/tests/test_client.py,sha256=uikgh6yhjPPX2RBU4XJQMz1mNox9uXjuwsP8t93id18,13337
19
20
  hud/agents/tests/test_grounded_openai_agent.py,sha256=VK8lUvHIjWicMX00VKPE-FZyjiJqTEhb80MuRRa9fVc,5437
20
21
  hud/agents/tests/test_openai.py,sha256=Npbdr0acgLExGLbrleXze-k3w9LHfmqzQjPk9TnjN68,7620
21
- hud/cli/__init__.py,sha256=_bJymobNdf_fHqAjhoC1J5t7lJwo6WDj969SJIIXElo,44908
22
+ hud/cli/__init__.py,sha256=urgZQiFle1i4InTOn6FmCK_KrpGYgkVppN3v2CM5YmQ,45409
22
23
  hud/cli/__main__.py,sha256=fDH7XITyuDITwSDIVwRso06aouADO0CzTHKqp5TOwJE,143
23
24
  hud/cli/analyze.py,sha256=4u5oYfJMquOjT9PzzRTYVcTZDxDi0ilNP_g532_hpOU,14716
24
- hud/cli/build.py,sha256=Zpe9LxQJ3MhmWxpbyQaheEc16kjX87UApyvwG8yxZ00,18781
25
+ hud/cli/build.py,sha256=h-4SAoe3j8Pth3mPYf26vh7q1Do5JADlvKKwkZrf2AU,19551
25
26
  hud/cli/clone.py,sha256=AwVDIuhr8mHb1oT2Af2HrD25SiTdwATpE6zd93vzLgA,6099
26
27
  hud/cli/debug.py,sha256=jtFW8J5F_3rhq1Hf1_SkJ7aLS3wjnyIs_LsC8k5cnzc,14200
27
- hud/cli/dev.py,sha256=VXNFDQjdsn6SLNYyNM3SsQH_vJ9QdfZo3COugmGvuJk,30670
28
- hud/cli/eval.py,sha256=Gyk-mJKRGeDBA_77hszsyHXcZDbDrWhW8pJZHwA3uQM,22795
28
+ hud/cli/dev.py,sha256=J0Q_ndHbQcXe64gMjXfqiccWYWpdiYWvTKbJhCAvlgI,30666
29
+ hud/cli/eval.py,sha256=d1RouB3rxP3axca2sRblNWZMNvHGP1EugST5fCJ-7tc,25790
29
30
  hud/cli/get.py,sha256=sksKrdzBGZa7ZuSoQkc0haj-CvOGVSSikoVXeaUd3N4,6274
30
- hud/cli/init.py,sha256=xReks9TF77kjjQKFs2l7iJ3AHUqmhbRkFJokyPitzSY,9795
31
+ hud/cli/init.py,sha256=2na19h0LxfGl35Z_uNOLNpjZrnhBkyltM-OOUkauopA,9793
31
32
  hud/cli/list_func.py,sha256=EVi2Vc3Lb3glBNJxFx4MPnZknZ4xmuJz1OFg_dc8a_E,7177
32
33
  hud/cli/pull.py,sha256=XGEZ8n60tbzLQP_8d9h7XYmzyCW0e2-Rkr3_tLG7jvw,12449
33
- hud/cli/push.py,sha256=0CXTGq0A4sQvWabd_EIPstqrlX7h6NxxjMNlktFoSwY,18486
34
+ hud/cli/push.py,sha256=DsXFrMtWBZ-HUxt6VoLihpklk8JJIe2gy-GA4AMg6Kw,18805
34
35
  hud/cli/remove.py,sha256=8vGQyXDqgtjz85_vtusoIG8zurH4RHz6z8UMevQRYM4,6861
35
36
  hud/cli/flows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
- hud/cli/flows/tasks.py,sha256=1WICQwHc1b3x7IcQZaC42f5ko6F6SsQ9F8-WslAaAh8,9021
37
- hud/cli/rl/__init__.py,sha256=BeqXdmzPwVBptz4j796XJRxSC5B_9tQta5aKd0jDMvo,5000
38
- hud/cli/rl/config.py,sha256=iNhCxotM33OEiP9gqPvn8A_AxrBVe6fcFCQTvc13xzA,2884
37
+ hud/cli/flows/tasks.py,sha256=0vqTd-pAVEqXYZUp2hntSXMu9JuCJkKZzJQ3YZ1r3AE,14564
38
+ hud/cli/rl/__init__.py,sha256=PuOOPr2Y7Xnn6e_DQHAZ_RzhfVOsKx_ikEFshQ5PeIg,5203
39
+ hud/cli/rl/celebrate.py,sha256=trGEJn3xebexlHwFVKPJKhRujVVV8sy7TQTJvRd2p9A,5947
40
+ hud/cli/rl/config.py,sha256=VZ8fiOI22Aw6YTRk7gj1ozpF-TU7NK8QWQgWFwMbNs0,3235
39
41
  hud/cli/rl/display.py,sha256=hqJVGmO9csYinladhZwjF-GMvppYWngxDHajTyIJ_gM,5214
40
42
  hud/cli/rl/gpu.py,sha256=peXS-NdUF5RyuSs0aZoCzGLboneBUpCy8f9f99WMrG0,2009
41
43
  hud/cli/rl/gpu_utils.py,sha256=H5ckPwgj5EVP3yJ5eVihR5R7Y6Gp6pt8ZUfWCCwcLG4,11072
42
- hud/cli/rl/local_runner.py,sha256=GssmDgCxGfFsi31aFj22vwCiwa9ELllEwQjbActxSXY,21514
44
+ hud/cli/rl/local_runner.py,sha256=NFsNmRZ4nenPnb45ZtdsILeICKEq11wmpLwq9E-a8ZE,22614
43
45
  hud/cli/rl/presets.py,sha256=DzOO82xL5QyzdVtlX-Do1CODMvDz9ILMPapjU92jcZg,3051
44
- hud/cli/rl/remote_runner.py,sha256=C2RrM4tgg-C1eNlW8QuRXWQ8bARIDFdWU1tGGJ4981E,13772
46
+ hud/cli/rl/remote_runner.py,sha256=UP1Y9LKTK7-RDc9wczAM15F_zdFi0atzgSceOmb2Vjc,17369
45
47
  hud/cli/rl/rl_api.py,sha256=INJobvSa50ccR037u_GPsDa_9WboWyNwqEaoh9hcXj0,4306
48
+ hud/cli/rl/viewer.py,sha256=ExQs1IX3T8x_9aBzc4JojZ779jmFvFTh7EjOYIHzYsU,4441
46
49
  hud/cli/rl/vllm.py,sha256=Gq_M6KsQArGz7FNIdemuM5mk16mu3xe8abpO2GCCuOE,6093
50
+ hud/cli/rl/wait_utils.py,sha256=FyIvqYWLOydANTetukoE5Rp2AOQi67qkiAlIJp4HpL8,2577
47
51
  hud/cli/tests/__init__.py,sha256=ZrGVkmH7DHXGqOvjOSNGZeMYaFIRB2K8c6hwr8FPJ-8,68
48
52
  hud/cli/tests/test_analyze.py,sha256=inbRvi7KJKoMYrcqXU6RSayoh7mAOGVrRknm6BLQFes,11055
49
53
  hud/cli/tests/test_analyze_metadata.py,sha256=RtJ5PiOWu-AyOijLyZZwNfYazqwSMvtDS0krMMw0mak,9943
@@ -64,6 +68,7 @@ hud/cli/utils/__init__.py,sha256=L6s0oNzY2LugGp9faodCPnjzM-ZUorUH05-HmYOq5hY,35
64
68
  hud/cli/utils/config.py,sha256=AnsN6FEa8V3jg3EWaqUJN38-UuYC6tVZxPfBb_5LFBs,2652
65
69
  hud/cli/utils/cursor.py,sha256=fy850p0rVp5k_1wwOCI7rK1SggbselJrywFInSQ2gio,3009
66
70
  hud/cli/utils/docker.py,sha256=oGVzPfp0Rn89o9d6tgSEziKy9GXFrYaWn_mjBmGRHe4,6326
71
+ hud/cli/utils/env_check.py,sha256=TqsmwgTfMDzfP0Ii50YxDkOP4_T5nqks9JMTxIq60-s,7095
67
72
  hud/cli/utils/environment.py,sha256=EfATQyAz8Jybj4N9QNaaADUrpiZ2JMp2elQYnAG9gU8,4371
68
73
  hud/cli/utils/interactive.py,sha256=sHhTjaImxlwlZ5_DTXb23Jwrjy5oJ7diB-8duhHbImU,16647
69
74
  hud/cli/utils/local_runner.py,sha256=jnPFoJu3sCq65LSUapKCkakdlEuz__96oJU_FfOYtEg,6542
@@ -74,11 +79,12 @@ hud/cli/utils/registry.py,sha256=p6IaWmhUbf0Yh6aGa3jIPoSFT2uJPTOVBLS0jpKDUqc,437
74
79
  hud/cli/utils/remote_runner.py,sha256=OOSJ6wU_gS_hJaURDfxZcyekjIIwPQKGN_Pq64tin3E,9505
75
80
  hud/cli/utils/runner.py,sha256=7HxVGa6OTflQnO0FSuRs273wnAmbm7cFRU9RTGL3-Wo,4390
76
81
  hud/cli/utils/server.py,sha256=EE5DJ0RAmXCEjMcZycpAsAxxCj6sOdIsXqPh38kK2ew,7416
82
+ hud/cli/utils/source_hash.py,sha256=zQX9Dd3RIumfepxVNBpNmV8DGcWJf8GDG6TMp7waY4k,2962
77
83
  hud/cli/utils/tasks.py,sha256=bpH2mQkfgKUpgh1J0NtVxMxcM1jDZk2GAAPQMcqAUz4,826
78
84
  hud/clients/README.md,sha256=XNE3mch95ozDgVqfwCGcrhlHY9CwT1GKfNANNboowto,3826
79
85
  hud/clients/__init__.py,sha256=N5M_gZv4nP7dLRwpAiaqqaxyaLieGW6397FszeG7JGw,364
80
- hud/clients/base.py,sha256=Q4iJ78wxDYj_RTnj000ILetvhxZpGX2mubcfGzp3JYw,14207
81
- hud/clients/fastmcp.py,sha256=KJGi8bmds0Q6rHnkTXb_Hw9ZqWmSo0OfjW05SSuyEJU,9182
86
+ hud/clients/base.py,sha256=yyQ4ctrXVyPps7Q_JGq2wilr1diNetWZ05wUJ4YCRng,14203
87
+ hud/clients/fastmcp.py,sha256=1xaAg7DwMcwt_GRx2n3OsZaX-UMEQCZCaLDK4cr2HhQ,9178
82
88
  hud/clients/mcp_use.py,sha256=WE_99LxilPnfYo2yXsxQOl3Rt8eNyYuvvIycVzpUzk0,14627
83
89
  hud/clients/tests/__init__.py,sha256=sKOtJFFa4mDIXh1U6O8ZUHjigE8CiRMQ2PzJTIBZuVE,33
84
90
  hud/clients/tests/test_client_integration.py,sha256=kohU6jfCNfwSnAushHeB1_CmDlRfQc7VBL0GEdJYSeI,4198
@@ -102,8 +108,8 @@ hud/native/tests/test_comparator.py,sha256=pDch3r3xDi2o5YXF_bkoLfIdHcCjse3foAaqy
102
108
  hud/native/tests/test_native_init.py,sha256=Z-2dinbQYEkrbCcfBrBOLGdpXtWWOtkfPzp7ZKri68Y,2839
103
109
  hud/otel/__init__.py,sha256=ii17ayoWiS5vAhA7UAmZ8TkmP52gs2pWyHsD46-uYbE,1003
104
110
  hud/otel/collector.py,sha256=jLZymZ8r7xt2VDuWexfbnT7PY1-0aiyLMgjBy8KDY1M,4497
105
- hud/otel/config.py,sha256=mricuAmtFd1yIfOYKw2aHI-u4piku0GXHWv6hjsWQLM,6806
106
- hud/otel/context.py,sha256=q7YIBb95UDMJvir8ds--YLpjW5dpAilntCtwsMJdZro,19124
111
+ hud/otel/config.py,sha256=PzyMOk_WYlJzVgZwQ_-F0DIlBbEy8Xt3ZA2e1QvFDes,6802
112
+ hud/otel/context.py,sha256=9kJ_99KWGDvqU2O_DjmTHPXmhNDsMhbk_AHNvcHXR5Q,19116
107
113
  hud/otel/exporters.py,sha256=RLAjWa8b2DJEU21740Idq4fmeIuabLEqGGUspcFDcH4,14331
108
114
  hud/otel/instrumentation.py,sha256=fsFG9W89RdewFDxWKN9Ft4GUb7WbIKpfucTc16WxaZU,5093
109
115
  hud/otel/processors.py,sha256=-gGRbwifplcExDQBLfx_9tqWreDImULJNcENgO9q7VU,4700
@@ -120,7 +126,7 @@ hud/rl/learner.py,sha256=FKIgIIghsNiDr_g090xokOO_BxNmTSj1O-TSJzIq_Uw,24703
120
126
  hud/rl/train.py,sha256=ZigkUKj-I1nsYmFByZprqaoDZ88LVDH-6auYneEPOsA,13555
121
127
  hud/rl/types.py,sha256=lrLKo7iaqodYth2EyeuOQfLiuzXfYM2eJjPmpObrD7c,3965
122
128
  hud/rl/utils.py,sha256=IsgVUUibxnUzb32a4mu1sYrgJC1CwoG9E-Dd5y5VDOA,19115
123
- hud/rl/vllm_adapter.py,sha256=O2_TdTGIyNr9zRGhCw18XWjOKYzEM3049wvlyL2x0sc,4751
129
+ hud/rl/vllm_adapter.py,sha256=2wnTfoXPI4C9EzhVxk0GU-ArLjX7hgXS0BndMwN8Ppg,4751
124
130
  hud/rl/tests/__init__.py,sha256=PXmD3Gs6xOAwaYKb4HnwZERDjX05N1QF-aU6ya0dBtE,27
125
131
  hud/rl/tests/test_learner.py,sha256=LfTwB626gWurYfZv91wk8ASETBNqrLh9i_GCMP4CB3E,6834
126
132
  hud/rl/utils/start_vllm_server.sh,sha256=ThPokrLK_Qm_uh916fHXXBfMlw1TC97P57-AEI5MuOc,910
@@ -129,19 +135,27 @@ hud/samples/browser.py,sha256=7LkzGx2G5dA8RogZwORnxxpVsxMV2gF18D_hGJIEow8,973
129
135
  hud/server/__init__.py,sha256=8LUwgsXO8xiViWP7uImDwcOsWLu01r5F4r8U8qH3rSY,91
130
136
  hud/server/context.py,sha256=6bCdSzv1FGyItu9472HbbYef279H7QuMGJDR8EtYg5Y,3210
131
137
  hud/server/low_level.py,sha256=XYs2pOJ9kN4OcJ6ahDmXM5mWkzq5wJLpKFInUYrWEok,4701
132
- hud/server/server.py,sha256=oX6jPYhJecbCcAINb_VAcWDG3wVShfbqA0FlEKZXV0o,17187
138
+ hud/server/server.py,sha256=epr-yZ7XpyOe-3EPXJy2DgfU3rYCMAEebM9icDotJN4,20132
133
139
  hud/server/helper/__init__.py,sha256=ZxO8VP3RZEBBp-q65VixuhzQgqEPSVzW0hEY9J9QqDA,116
134
140
  hud/server/tests/__init__.py,sha256=eEYYkxX5Hz9woXVOBJ2H2_CQoEih0vH6nRt3sH2Z8v8,49
141
+ hud/server/tests/test_add_tool.py,sha256=9Y59LJpow3BQ31Jg7fowhV7nAeyqude9Tap9tEs_vBE,1863
142
+ hud/server/tests/test_context.py,sha256=y1DoraXi7_Docm8WAyjUvMG8yVkm2E9HvY_a1Orpn_k,3693
143
+ hud/server/tests/test_mcp_server_handlers.py,sha256=MAH7EIXbvPlrAOmtsr9zL-n9a8HIwHktSTSx15GypRA,1410
144
+ hud/server/tests/test_mcp_server_integration.py,sha256=YhKo4SFRpyS4ysfUvvB_svmmntwZ8bx7sXHZUuYHbHw,13415
145
+ hud/server/tests/test_mcp_server_more.py,sha256=tlEMRO0GNy89EmurVdsaM2YPE157q44t3SfixhtrjDs,8292
146
+ hud/server/tests/test_run_wrapper.py,sha256=EdwxMWCIHAp8t-l6VUeMOMhPRLTWjEVfTyysafeUl4E,1805
147
+ hud/server/tests/test_server_extra.py,sha256=MAmIrFwQWMFAP2AT6h1kbExZGxEvJZLq1bxvS7guQFE,5489
148
+ hud/server/tests/test_sigterm_runner.py,sha256=HTM_0DAxA2exGYj7LK4udxMGXHZhY9LDZaKkHhQMu_Y,2610
135
149
  hud/shared/__init__.py,sha256=IPxPCqtPLguryN-nBq78Sakypw2bRiE2iHv3SXG8YRk,139
136
150
  hud/shared/exceptions.py,sha256=dhmt5KMciQ2fmV-yqXtTNO868k-WzuZae6w7dOk3M44,12144
137
- hud/shared/hints.py,sha256=ToKC9Xb9f_tX3lEmb_4NsgXyYFX2agY8fy1ZekckOyY,5090
151
+ hud/shared/hints.py,sha256=aa1CtBzsxLHRSZBFCXH00uY-1j2_7WLxYFwAy-neibE,5086
138
152
  hud/shared/requests.py,sha256=HWrPp7nBSK4jhv9wqZdFiNrVaaxV0vWS8fcgGtoztBc,9479
139
153
  hud/shared/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
140
154
  hud/shared/tests/test_exceptions.py,sha256=bCKGqw2RwBmlGIMNpddzyfnWAOQwSIYB76r6iaBE2is,15761
141
155
  hud/shared/tests/test_requests.py,sha256=nKFcSN1sjrOouVU2xik9lE5Wxapy3EWsO8iIXrM_Sts,9114
142
156
  hud/telemetry/__init__.py,sha256=uWiloBMXgEzPRsRIOpiSBhcTxJDyHfBqTg7qi8kxSTc,683
143
157
  hud/telemetry/instrument.py,sha256=m3u6YK02PTk39Jr4L3se7l-cYyKx0maCaqf5Z5JqWNA,14096
144
- hud/telemetry/job.py,sha256=0c4Z69uNDwMeY_c_JpyuBvwvYTYk1YIkwotbXo3TAS4,11593
158
+ hud/telemetry/job.py,sha256=LjspT-mSqQO2DnFL6h0ZkCkeMrrpjAuFVZnTJiOaDek,11585
145
159
  hud/telemetry/replay.py,sha256=YW17s314s5Wy6Rl8MXHqg1FU8EF9_XcHBMJI0rrkyS4,2306
146
160
  hud/telemetry/trace.py,sha256=N2b_kc1JQKqxGb0mQjJ2HQrAJR94_Ai-1UCIs3LdANI,4671
147
161
  hud/telemetry/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -195,7 +209,7 @@ hud/utils/hud_console.py,sha256=ywTrzyNhWFoQN2PpzpDDKp_32b-ACDvfKQuWxDoF8iE,2189
195
209
  hud/utils/mcp.py,sha256=pMadd7A0DH6Y_aWywKU8jVYu2pRHGPEndV2ZQFrrj60,2888
196
210
  hud/utils/pretty_errors.py,sha256=WGeL4CTHtlA6KgPuV_JSX5l6H4-xbuTp6Y6tw1bkiFg,2430
197
211
  hud/utils/progress.py,sha256=suikwFM8sdSfkV10nAOEaInDhG4XKgOSvFePg4jSj1A,5927
198
- hud/utils/tasks.py,sha256=JwFIq0cpPMpMYnICUmx_G4CF6uy9MtiCmmmN7eA6FsA,4682
212
+ hud/utils/tasks.py,sha256=4v8FvVhXXefbWFldf564XPCQIActYI3tmA510-SA4LE,4967
199
213
  hud/utils/telemetry.py,sha256=hrVIx2rUjSGyy9IVxTZ_3Jii83PiHjyFRd5ls2whimM,1863
200
214
  hud/utils/tool_shorthand.py,sha256=_haLgK3yazLR2Y0jlEHUUQjw9uZCxi9yTipAwdOAJ70,2148
201
215
  hud/utils/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -204,10 +218,10 @@ hud/utils/tests/test_init.py,sha256=2QLQSGgyP9wJhOvPCusm_zjJad0qApOZi1BXpxcdHXQ,
204
218
  hud/utils/tests/test_mcp.py,sha256=0pUa16mL-bqbZDXp5NHBnt1gO5o10BOg7zTMHZ1DNPM,4023
205
219
  hud/utils/tests/test_progress.py,sha256=QSF7Kpi03Ff_l3mAeqW9qs1nhK50j9vBiSobZq7T4f4,7394
206
220
  hud/utils/tests/test_telemetry.py,sha256=5jl7bEx8C8b-FfFUko5pf4UY-mPOR-9HaeL98dGtVHM,2781
207
- hud/utils/tests/test_version.py,sha256=zcyyaHUOoWsGplxJebBOV8TNKFX35RThsdSv-hSq8M0,160
221
+ hud/utils/tests/test_version.py,sha256=zB7fVvWtaILCMiFF9CR1cUjoxenx1JwAJ4pLtvenB9k,160
208
222
  hud/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
209
- hud_python-0.4.36.dist-info/METADATA,sha256=OO8BzYshkq20xZDLCfeSAtftxClBSOtjRIv0_o2O9GA,21787
210
- hud_python-0.4.36.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
211
- hud_python-0.4.36.dist-info/entry_points.txt,sha256=jJbodNFg1m0-CDofe5AHvB4zKBq7sSdP97-ohaQ3ae4,63
212
- hud_python-0.4.36.dist-info/licenses/LICENSE,sha256=yIzBheVUf86FC1bztAcr7RYWWNxyd3B-UJQ3uddg1HA,1078
213
- hud_python-0.4.36.dist-info/RECORD,,
223
+ hud_python-0.4.38.dist-info/METADATA,sha256=c0aRfIGc9E0w6FJTy-rStEz6wK_AoBf8C8F64AI4CUc,21785
224
+ hud_python-0.4.38.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
225
+ hud_python-0.4.38.dist-info/entry_points.txt,sha256=jJbodNFg1m0-CDofe5AHvB4zKBq7sSdP97-ohaQ3ae4,63
226
+ hud_python-0.4.38.dist-info/licenses/LICENSE,sha256=yIzBheVUf86FC1bztAcr7RYWWNxyd3B-UJQ3uddg1HA,1078
227
+ hud_python-0.4.38.dist-info/RECORD,,