hud-python 0.4.28__py3-none-any.whl → 0.4.30__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 (77) hide show
  1. hud/__init__.py +2 -1
  2. hud/agents/base.py +81 -45
  3. hud/agents/claude.py +8 -4
  4. hud/agents/openai_chat_generic.py +66 -40
  5. hud/agents/tests/test_base.py +0 -4
  6. hud/agents/tests/test_openai.py +1 -1
  7. hud/cli/__init__.py +182 -52
  8. hud/cli/dev.py +8 -9
  9. hud/cli/eval.py +317 -119
  10. hud/cli/flows/__init__.py +0 -0
  11. hud/cli/flows/tasks.py +0 -0
  12. hud/cli/get.py +160 -0
  13. hud/cli/rl/__init__.py +567 -71
  14. hud/cli/rl/config.py +94 -0
  15. hud/cli/rl/display.py +133 -0
  16. hud/cli/rl/gpu.py +63 -0
  17. hud/cli/rl/gpu_utils.py +318 -0
  18. hud/cli/rl/presets.py +96 -0
  19. hud/cli/rl/remote_runner.py +347 -0
  20. hud/cli/rl/rl_api.py +150 -0
  21. hud/cli/rl/vllm.py +177 -0
  22. hud/cli/tests/test_analyze_metadata.py +0 -1
  23. hud/cli/utils/tasks.py +26 -0
  24. hud/clients/base.py +21 -23
  25. hud/clients/mcp_use.py +36 -44
  26. hud/clients/tests/test_mcp_use_retry.py +10 -10
  27. hud/datasets/__init__.py +4 -3
  28. hud/datasets/{execution/parallel.py → parallel.py} +1 -1
  29. hud/datasets/{execution/runner.py → runner.py} +1 -1
  30. hud/datasets/utils.py +1 -1
  31. hud/native/comparator.py +6 -6
  32. hud/native/tests/test_comparator.py +8 -8
  33. hud/native/tests/test_native_init.py +13 -11
  34. hud/otel/config.py +1 -1
  35. hud/otel/instrumentation.py +35 -0
  36. hud/rl/README.md +30 -0
  37. hud/rl/__init__.py +1 -0
  38. hud/rl/actor.py +174 -0
  39. hud/rl/buffer.py +371 -0
  40. hud/rl/chat_template.jinja +101 -0
  41. hud/rl/config.py +184 -0
  42. hud/rl/distributed.py +95 -0
  43. hud/rl/learner.py +589 -0
  44. hud/rl/tests/__init__.py +1 -0
  45. hud/rl/tests/test_learner.py +171 -0
  46. hud/rl/train.py +354 -0
  47. hud/rl/types.py +101 -0
  48. hud/rl/utils/start_vllm_server.sh +30 -0
  49. hud/rl/utils.py +524 -0
  50. hud/rl/vllm_adapter.py +125 -0
  51. hud/settings.py +6 -0
  52. hud/telemetry/__init__.py +2 -1
  53. hud/telemetry/job.py +46 -3
  54. hud/telemetry/tests/test_trace.py +3 -3
  55. hud/telemetry/trace.py +85 -13
  56. hud/tools/tests/test_computer.py +3 -3
  57. hud/tools/tests/test_computer_actions.py +1 -1
  58. hud/types.py +123 -2
  59. hud/utils/group_eval.py +223 -0
  60. hud/utils/hud_console.py +113 -13
  61. hud/utils/tasks.py +119 -0
  62. hud/utils/tests/test_version.py +1 -1
  63. hud/version.py +1 -1
  64. {hud_python-0.4.28.dist-info → hud_python-0.4.30.dist-info}/METADATA +20 -2
  65. {hud_python-0.4.28.dist-info → hud_python-0.4.30.dist-info}/RECORD +68 -48
  66. hud/cli/hf.py +0 -406
  67. hud/cli/rl/README.md +0 -243
  68. hud/cli/rl/init.py +0 -370
  69. hud/cli/rl/pod.py +0 -501
  70. hud/cli/rl/ssh.py +0 -322
  71. hud/cli/rl/train.py +0 -562
  72. hud/cli/rl/utils.py +0 -165
  73. hud/datasets/execution/__init__.py +0 -13
  74. hud/datasets/task.py +0 -116
  75. {hud_python-0.4.28.dist-info → hud_python-0.4.30.dist-info}/WHEEL +0 -0
  76. {hud_python-0.4.28.dist-info → hud_python-0.4.30.dist-info}/entry_points.txt +0 -0
  77. {hud_python-0.4.28.dist-info → hud_python-0.4.30.dist-info}/licenses/LICENSE +0 -0
hud/utils/hud_console.py CHANGED
@@ -16,7 +16,9 @@ Color Palette:
16
16
  from __future__ import annotations
17
17
 
18
18
  import logging
19
- from typing import Any
19
+ import time
20
+ import traceback
21
+ from typing import TYPE_CHECKING, Any, Literal, Self
20
22
 
21
23
  import questionary
22
24
  import typer
@@ -24,11 +26,14 @@ from rich.console import Console
24
26
  from rich.panel import Panel
25
27
  from rich.table import Table
26
28
 
29
+ if TYPE_CHECKING:
30
+ from rich.status import Status
27
31
  # HUD Brand Colors - Optimized for both light and dark modes
28
32
  GOLD = "rgb(192,150,12)" # #c0960c - Primary brand color
29
33
  RED = "rgb(220,50,47)" # Slightly muted red that works on both backgrounds
30
34
  GREEN = "rgb(133,153,0)" # Slightly muted green that works on both backgrounds
31
35
  DIM = "bright_black" # Grey that's visible on both light and dark backgrounds
36
+ YELLOW = "yellow"
32
37
  TEXT = "bright_white" # Off-white that's readable on dark, not too bright on light
33
38
  SECONDARY = "rgb(108,113,196)" # Muted blue-purple for secondary text
34
39
 
@@ -85,7 +90,11 @@ class HUDConsole:
85
90
  stderr: If True, output to stderr (default), otherwise stdout
86
91
  """
87
92
  console = self._stderr_console if stderr else self._stdout_console
88
- console.print(f"[{RED}]❌ {message}[/{RED}]")
93
+ tb = traceback.format_exc()
94
+ if "NoneType: None" not in tb:
95
+ console.print(f"[{RED} not bold]❌ {message}\n{tb}[/{RED} not bold]")
96
+ else:
97
+ console.print(f"[{RED} not bold]❌ {message}[/{RED} not bold]")
89
98
 
90
99
  def warning(self, message: str, stderr: bool = True) -> None:
91
100
  """Print a warning message.
@@ -95,7 +104,7 @@ class HUDConsole:
95
104
  stderr: If True, output to stderr (default), otherwise stdout
96
105
  """
97
106
  console = self._stderr_console if stderr else self._stdout_console
98
- console.print(f"[rgb(181,137,0)]⚠️ {message}[/rgb(181,137,0)]")
107
+ console.print(f"⚠️ [{YELLOW} not bold]{message}[/{YELLOW} not bold]")
99
108
 
100
109
  def info(self, message: str, stderr: bool = True) -> None:
101
110
  """Print an info message.
@@ -105,7 +114,7 @@ class HUDConsole:
105
114
  stderr: If True, output to stderr (default), otherwise stdout
106
115
  """
107
116
  console = self._stderr_console if stderr else self._stdout_console
108
- console.print(f"[{TEXT}]{message}[/{TEXT}]")
117
+ console.print(f"[{TEXT} not bold]{message}[/{TEXT} not bold]")
109
118
 
110
119
  def print(self, message: str, stderr: bool = True) -> None:
111
120
  """Print a message.
@@ -126,7 +135,9 @@ class HUDConsole:
126
135
  stderr: If True, output to stderr (default), otherwise stdout
127
136
  """
128
137
  console = self._stderr_console if stderr else self._stdout_console
129
- console.print(f"[{DIM}]{label}[/{DIM}] [{TEXT}]{value}[/{TEXT}]")
138
+ console.print(
139
+ f"[{DIM} not bold][default]{label}[/default][/{DIM} not bold] [default]{value}[/default]" # noqa: E501
140
+ )
130
141
 
131
142
  def link(self, url: str, stderr: bool = True) -> None:
132
143
  """Print an underlined link.
@@ -150,7 +161,7 @@ class HUDConsole:
150
161
  console.print(f"[{TEXT}]{json_str}[/{TEXT}]")
151
162
 
152
163
  def key_value_table(
153
- self, data: dict[str, str], show_header: bool = False, stderr: bool = True
164
+ self, data: dict[str, str | int | float], show_header: bool = False, stderr: bool = True
154
165
  ) -> None:
155
166
  """Print a key-value table.
156
167
 
@@ -164,7 +175,7 @@ class HUDConsole:
164
175
  table.add_column("Value")
165
176
 
166
177
  for key, value in data.items():
167
- table.add_row(key, value)
178
+ table.add_row(key, str(value))
168
179
 
169
180
  console = self._stderr_console if stderr else self._stdout_console
170
181
  console.print(table)
@@ -210,7 +221,7 @@ class HUDConsole:
210
221
  stderr: If True, output to stderr (default), otherwise stdout
211
222
  """
212
223
  console = self._stderr_console if stderr else self._stdout_console
213
- console.print(f"\n[rgb(181,137,0)]💡 Hint: {hint}[/rgb(181,137,0)]")
224
+ console.print(f"[rgb(181,137,0)]💡 Hint: {hint}[/rgb(181,137,0)]")
214
225
 
215
226
  def status_item(
216
227
  self,
@@ -305,7 +316,7 @@ class HUDConsole:
305
316
  if response_json and not details.get("Response"):
306
317
  details["Response JSON"] = str(response_json)
307
318
  if details:
308
- self.key_value_table(details, show_header=False, stderr=stderr)
319
+ self.key_value_table(details, show_header=False, stderr=stderr) # type: ignore
309
320
 
310
321
  # Structured hints, if available
311
322
  hints = getattr(error, "hints", None)
@@ -315,7 +326,7 @@ class HUDConsole:
315
326
 
316
327
  render_hints(hints, design=self)
317
328
  except Exception as render_error:
318
- self.debug(f"Failed to render hints: {render_error}")
329
+ self.debug_log(f"Failed to render hints: {render_error}")
319
330
 
320
331
  # Standard support hint
321
332
  self.render_support_hint(stderr=stderr)
@@ -336,9 +347,35 @@ class HUDConsole:
336
347
  else:
337
348
  self._logger.setLevel(logging.WARNING)
338
349
 
350
+ @property
351
+ def prefix(self) -> str:
352
+ """Get the metadata of the current file."""
353
+ metadata = self._logger.findCaller(stacklevel=3)
354
+ return f"{metadata[0]}:{metadata[1]} in {metadata[2]} | "
355
+
339
356
  # Logging-aware methods that check logging levels before printing
357
+ def log(
358
+ self,
359
+ message: str,
360
+ level: Literal["info", "debug", "warning", "error"] = "info",
361
+ stderr: bool = True,
362
+ ) -> None:
363
+ """Print a message based on the logging level."""
364
+ prefix = self.prefix
365
+ if level == "info":
366
+ self.info_log(f"{prefix}{message}", stderr=stderr)
367
+ elif level == "debug":
368
+ self.debug_log(f"{prefix}{message}", stderr=stderr)
369
+ elif level == "warning":
370
+ self.warning_log(f"{prefix}{message}", stderr=stderr)
371
+ elif level == "error":
372
+ self.error_log(f"{prefix}{message}", stderr=stderr)
340
373
 
341
374
  def debug(self, message: str, stderr: bool = True) -> None:
375
+ """Print a debug message."""
376
+ self.debug_log(message, stderr=stderr)
377
+
378
+ def debug_log(self, message: str, stderr: bool = True) -> None:
342
379
  """Print a debug message only if DEBUG logging is enabled.
343
380
 
344
381
  Args:
@@ -346,7 +383,7 @@ class HUDConsole:
346
383
  stderr: If True, output to stderr (default), otherwise stdout
347
384
  """
348
385
  if self._logger.isEnabledFor(logging.DEBUG):
349
- self.dim_info("[DEBUG]", message, stderr=stderr)
386
+ self.dim_info(message, "", stderr=stderr)
350
387
 
351
388
  def info_log(self, message: str, stderr: bool = True) -> None:
352
389
  """Print an info message only if INFO logging is enabled.
@@ -368,6 +405,25 @@ class HUDConsole:
368
405
  if self._logger.isEnabledFor(logging.INFO):
369
406
  self.progress_message(message, stderr=stderr)
370
407
 
408
+ def progress(self, initial: str = "", stderr: bool = True) -> _ProgressContext:
409
+ """Create a progress context manager for inline updates.
410
+
411
+ Args:
412
+ initial: Initial message to display
413
+ stderr: If True, output to stderr (default), otherwise stdout
414
+
415
+ Returns:
416
+ A context manager that provides update() method
417
+
418
+ Example:
419
+ with console.progress("Processing...") as progress:
420
+ for i in range(10):
421
+ progress.update(f"Processing item {i+1}/10")
422
+ """
423
+ return _ProgressContext(
424
+ console=self._stderr_console if stderr else self._stdout_console, initial=initial
425
+ )
426
+
371
427
  def success_log(self, message: str, stderr: bool = True) -> None:
372
428
  """Print a success message only if INFO logging is enabled.
373
429
 
@@ -402,7 +458,7 @@ class HUDConsole:
402
458
  self,
403
459
  message: str,
404
460
  choices: list[str | dict[str, Any]] | list[str],
405
- default: str | None = None,
461
+ default: int | None = None,
406
462
  ) -> str:
407
463
  """Interactive selection with arrow key navigation.
408
464
 
@@ -428,6 +484,7 @@ class HUDConsole:
428
484
  result = questionary.select(
429
485
  message,
430
486
  choices=q_choices,
487
+ default=q_choices[default] if default is not None else None,
431
488
  instruction="(Use ↑/↓ arrows, Enter to select)",
432
489
  ).ask()
433
490
 
@@ -481,6 +538,49 @@ class HUDConsole:
481
538
  else:
482
539
  return f" [{GREEN}]✓[/{GREEN}] [{TEXT}]{content}[/{TEXT}]"
483
540
 
541
+ def confirm(self, message: str, default: bool = True) -> bool:
542
+ """Print a confirmation message.
543
+
544
+ Args:
545
+ message: The confirmation message
546
+ default: If True, the default choice is True
547
+ """
548
+ return questionary.confirm(message, default=default).ask()
549
+
550
+
551
+ # Global design instance for convenience
552
+ class _ProgressContext:
553
+ """Context manager for inline progress updates."""
554
+
555
+ def __init__(self, console: Console, initial: str = "") -> None:
556
+ self.console = console
557
+ self.initial = initial
558
+ self.status: Status | None = None
559
+ self.start_time: float | None = None
560
+
561
+ def __enter__(self) -> Self:
562
+ self.status = self.console.status(self.initial)
563
+ self.status.__enter__()
564
+ self.start_time = time.time()
565
+ return self
566
+
567
+ def __exit__(self, exc_type: object, exc_val: object, exc_tb: object) -> None:
568
+ if self.status:
569
+ self.status.__exit__(exc_type, exc_val, exc_tb) # type: ignore
570
+
571
+ def update(self, message: str, with_elapsed: bool = True) -> None:
572
+ """Update the progress message.
573
+
574
+ Args:
575
+ message: New message to display
576
+ with_elapsed: If True, append elapsed time to message
577
+ """
578
+ if self.status:
579
+ if with_elapsed and self.start_time:
580
+ elapsed = time.time() - self.start_time
581
+ self.status.update(f"{message} [{elapsed:.1f}s]")
582
+ else:
583
+ self.status.update(message)
584
+
484
585
 
485
- # Global hud_console instance for convenience
486
586
  hud_console = HUDConsole()
hud/utils/tasks.py ADDED
@@ -0,0 +1,119 @@
1
+ from __future__ import annotations
2
+
3
+ import json
4
+ from pathlib import Path
5
+
6
+ from hud.types import Task
7
+ from hud.utils.hud_console import HUDConsole
8
+
9
+ hud_console = HUDConsole()
10
+
11
+
12
+ def load_tasks(tasks_input: str | list[dict]) -> list[Task]:
13
+ """Load tasks from various sources.
14
+
15
+ Args:
16
+ tasks_input: Either:
17
+ - Path to a JSON file (array of tasks)
18
+ - Path to a JSONL file (one task per line)
19
+ - HuggingFace dataset name (format: "username/dataset" or "username/dataset:split")
20
+ - List of task dictionaries
21
+ system_prompt: Default system prompt to use if not specified in task
22
+
23
+ Returns:
24
+ List of validated HUD Task objects
25
+ """
26
+ tasks = []
27
+
28
+ if isinstance(tasks_input, list):
29
+ # Direct list of task dicts
30
+ hud_console.info(f"Loading {len(tasks_input)} tasks from provided list")
31
+ for item in tasks_input:
32
+ task = Task(**item)
33
+ tasks.append(task)
34
+
35
+ elif isinstance(tasks_input, str):
36
+ # Check if it's a file path
37
+ if Path(tasks_input).exists():
38
+ file_path = Path(tasks_input)
39
+ hud_console.info(f"Loading tasks from file: {tasks_input}")
40
+
41
+ with open(file_path) as f:
42
+ # Handle JSON files (array of tasks)
43
+ if file_path.suffix.lower() == ".json":
44
+ data = json.load(f)
45
+ if not isinstance(data, list):
46
+ raise ValueError(
47
+ f"JSON file must contain an array of tasks, got {type(data)}"
48
+ )
49
+
50
+ for item in data:
51
+ task = Task(**item)
52
+ tasks.append(task)
53
+
54
+ # Handle JSONL files (one task per line)
55
+ else:
56
+ for line in f:
57
+ 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
+ )
74
+
75
+ # Check if it's a HuggingFace dataset
76
+ elif "/" in tasks_input:
77
+ hud_console.info(f"Loading tasks from HuggingFace dataset: {tasks_input}")
78
+ try:
79
+ from datasets import load_dataset
80
+
81
+ # Parse dataset name and optional split
82
+ if ":" in tasks_input:
83
+ dataset_name, split = tasks_input.split(":", 1)
84
+ else:
85
+ dataset_name = tasks_input
86
+ split = "train" # Default split
87
+
88
+ dataset = load_dataset(dataset_name, split=split)
89
+
90
+ # Convert dataset rows to Task objects
91
+ for item in dataset:
92
+ if not isinstance(item, dict):
93
+ raise ValueError(
94
+ f"Invalid HuggingFace dataset: expected dict, got {type(item)}"
95
+ )
96
+ if not item["mcp_config"] or not item["prompt"]:
97
+ raise ValueError(
98
+ f"Invalid HuggingFace dataset: expected mcp_config and prompt, got {item}" # noqa: E501
99
+ )
100
+ task = Task(**item)
101
+ tasks.append(task)
102
+
103
+ except ImportError as e:
104
+ raise ImportError(
105
+ "Please install 'datasets' to load from HuggingFace: uv pip install datasets"
106
+ ) from e
107
+ except Exception as e:
108
+ raise ValueError(f"Failed to load HuggingFace dataset '{tasks_input}': {e}") from e
109
+
110
+ else:
111
+ raise ValueError(
112
+ f"Invalid tasks input: '{tasks_input}' is neither a file path nor a HuggingFace dataset" # noqa: E501
113
+ )
114
+
115
+ else:
116
+ raise TypeError(f"tasks_input must be str or list, got {type(tasks_input)}")
117
+
118
+ hud_console.info(f"Loaded {len(tasks)} tasks")
119
+ 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.28"
8
+ assert hud.__version__ == "0.4.30"
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.28"
7
+ __version__ = "0.4.30"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hud-python
3
- Version: 0.4.28
3
+ Version: 0.4.30
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
@@ -34,7 +34,7 @@ Classifier: Programming Language :: Python :: 3
34
34
  Classifier: Programming Language :: Python :: 3.11
35
35
  Classifier: Programming Language :: Python :: 3.12
36
36
  Classifier: Programming Language :: Python :: 3.13
37
- Requires-Python: <3.14,>=3.11
37
+ Requires-Python: <3.13,>=3.11
38
38
  Requires-Dist: httpx<1,>=0.23.0
39
39
  Requires-Dist: hud-fastmcp-python-sdk>=0.1.2
40
40
  Requires-Dist: hud-mcp-python-sdk>=3.13.2
@@ -107,6 +107,24 @@ Requires-Dist: pytest<9,>=8.1.1; extra == 'dev'
107
107
  Requires-Dist: ruff>=0.11.8; extra == 'dev'
108
108
  Requires-Dist: setuptools; extra == 'dev'
109
109
  Requires-Dist: textdistance<5,>=4.5.0; extra == 'dev'
110
+ Provides-Extra: rl
111
+ Requires-Dist: anthropic; extra == 'rl'
112
+ Requires-Dist: bitsandbytes>=0.41.0; (sys_platform == 'linux') and extra == 'rl'
113
+ Requires-Dist: datasets>=2.14.0; extra == 'rl'
114
+ Requires-Dist: dotenv>=0.9.9; extra == 'rl'
115
+ Requires-Dist: ipykernel; extra == 'rl'
116
+ Requires-Dist: ipython<9; extra == 'rl'
117
+ Requires-Dist: jupyter-client; extra == 'rl'
118
+ Requires-Dist: jupyter-core; extra == 'rl'
119
+ Requires-Dist: langchain; extra == 'rl'
120
+ Requires-Dist: langchain-anthropic; extra == 'rl'
121
+ Requires-Dist: langchain-openai; extra == 'rl'
122
+ Requires-Dist: liger-kernel>=0.5.0; (sys_platform == 'linux') and extra == 'rl'
123
+ Requires-Dist: numpy>=1.24.0; extra == 'rl'
124
+ Requires-Dist: openai; extra == 'rl'
125
+ Requires-Dist: peft>=0.17.1; extra == 'rl'
126
+ Requires-Dist: pillow>=11.1.0; extra == 'rl'
127
+ Requires-Dist: vllm==0.10.1.1; extra == 'rl'
110
128
  Description-Content-Type: text/markdown
111
129
 
112
130
  <div align="left">
@@ -1,47 +1,51 @@
1
- hud/__init__.py,sha256=KU7G-_Mj6Mjf7trXA6X0ufN6QUmqhVi19NKbnNIvD74,532
1
+ hud/__init__.py,sha256=JMDFUE1pP0J1Xl_miBdt7ERvoffZmTzSFe8yxz512A8,552
2
2
  hud/__main__.py,sha256=YR8Dq8OhINOsVfQ55PmRXXg4fEK84Rt_-rMtJ5rvhWo,145
3
- hud/settings.py,sha256=bgq_zstNGlan7UDZOiElY8Aw5ZU4xL7Ds5HP_Xzph1A,2535
4
- hud/types.py,sha256=jta4Hgj_rBdIMcf7mz0tsdgfA1pssp327bxcT6Mfp00,6107
5
- hud/version.py,sha256=89QOTPvRwlNJ6Y_Os8BjeaDJSUTq_pBvSkeP0o_yOMY,105
3
+ hud/settings.py,sha256=sMS31iW1m-5VpWk-Blhi5-obLcUA0fwxWE1GgJz-vqU,2708
4
+ hud/types.py,sha256=Cn9suZ_ZitLnxmnknfbCYVvmLsXRWI56kJ3LXtdfI6M,10157
5
+ hud/version.py,sha256=4eP4L4p9KEmmsjMwwEEDGX8nC__z95NS2DhdflB5qqw,105
6
6
  hud/agents/__init__.py,sha256=UoIkljWdbq4bM0LD-mSaw6w826EqdEjOk7r6glNYwYQ,286
7
- hud/agents/base.py,sha256=hUCFJZV3L69YFqMd2Room4WZmdmr6rxjiUvhf9cVXys,33811
8
- hud/agents/claude.py,sha256=yTVbSNMwNjF9qZAnwDSsgrscaenJpMGnGdW_4rFW_pY,15603
7
+ hud/agents/base.py,sha256=_u1zR3gXzZ1RlTCUYdMcvgHqdJBC4-AB1lZt0yBx8lg,35406
8
+ hud/agents/claude.py,sha256=wHiw8iAnjnRmZyKRKcOhagCDQMhz9Z6rlSBWqH1X--M,15781
9
9
  hud/agents/grounded_openai.py,sha256=U-FHjB2Nh1_o0gmlxY5F17lWJ3oHsNRIB2a7z-IKB64,11231
10
10
  hud/agents/langchain.py,sha256=1EgCy8jfjunsWxlPC5XfvfLS6_XZVrIF1ZjtHcrvhYw,9584
11
11
  hud/agents/openai.py,sha256=ovARRWNuHqKkZ2Q_OCYSVCIZckrh8XY2jUB2p2x1m88,14259
12
- hud/agents/openai_chat_generic.py,sha256=BDtMQnf9ddYN4fKy-CN9IotLyYvHGdZqjju5PODEnU4,10683
12
+ hud/agents/openai_chat_generic.py,sha256=H33CE8W3eYmQOJp8C5VcrvnG2AjBu02TWigHctEZNoI,11604
13
13
  hud/agents/misc/__init__.py,sha256=BYi4Ytp9b_vycpZFXnr5Oyw6ncKLNNGml8Jrb7bWUb4,136
14
14
  hud/agents/misc/response_agent.py,sha256=OJdQJ76jP9xxQxVYJ-qPcdBxvFr8ABcwbP1f1I5zU5A,3227
15
15
  hud/agents/tests/__init__.py,sha256=W-O-_4i34d9TTyEHV-O_q1Ai1gLhzwDaaPo02_TWQIY,34
16
- hud/agents/tests/test_base.py,sha256=F39ajSqASGUbPyPoWSY9KARFav62qNTK74W11Tr1Tg4,28970
16
+ hud/agents/tests/test_base.py,sha256=bDznxQDv2ickRkw98joH9zfuZT6ItHbmWvQ67iboa4g,28733
17
17
  hud/agents/tests/test_claude.py,sha256=wqEKlzEvx8obz1sSm4NY0j-Zyt1qWNfDOmRqYIuAEd0,13069
18
18
  hud/agents/tests/test_client.py,sha256=uikgh6yhjPPX2RBU4XJQMz1mNox9uXjuwsP8t93id18,13337
19
19
  hud/agents/tests/test_grounded_openai_agent.py,sha256=VK8lUvHIjWicMX00VKPE-FZyjiJqTEhb80MuRRa9fVc,5437
20
- hud/agents/tests/test_openai.py,sha256=lhHowQyLp09oDVwBUjUECoPeH01F16i4O9YIHeugK6E,7028
21
- hud/cli/__init__.py,sha256=-32_tNDsFc38AMAvJFcHg38EVS5PN3n6pjW7eN2Nxj4,36259
20
+ hud/agents/tests/test_openai.py,sha256=1S5IZuc3O3moSp70gqVGjc6m-_b49dCfz2fgX5IGvl4,7036
21
+ hud/cli/__init__.py,sha256=aAqoGtdoSP8omcmKqiLp8OhxHr4nCXGupGUwhNAOEQM,40119
22
22
  hud/cli/__main__.py,sha256=fDH7XITyuDITwSDIVwRso06aouADO0CzTHKqp5TOwJE,143
23
23
  hud/cli/analyze.py,sha256=4u5oYfJMquOjT9PzzRTYVcTZDxDi0ilNP_g532_hpOU,14716
24
24
  hud/cli/build.py,sha256=SsZLQKYyMvIikLaSPYmg7-S1iJn-KkWXURhniQ0Ifi8,18015
25
25
  hud/cli/clone.py,sha256=AwVDIuhr8mHb1oT2Af2HrD25SiTdwATpE6zd93vzLgA,6099
26
26
  hud/cli/debug.py,sha256=jtFW8J5F_3rhq1Hf1_SkJ7aLS3wjnyIs_LsC8k5cnzc,14200
27
- hud/cli/dev.py,sha256=-T7s3aiEq0X_lA6xQHOP4evvgP2wO76OYdsL7eeVmJ8,31740
28
- hud/cli/eval.py,sha256=1Kifhr3tm2Md3r_lC1P9ET93P_eEB3is3MFu_Hg9GH4,15947
29
- hud/cli/hf.py,sha256=wbHNXEI5K17cA9micfeVG4KRbUiI3MymLKI7TO-tW5E,15446
27
+ hud/cli/dev.py,sha256=56vQdH9oe_XGnOcRcFbNIsLEoBnpCl1eANlRFUeddHQ,31734
28
+ hud/cli/eval.py,sha256=W_eY4uoIQwHcSCvxNaQeRfWC10uQA1UhBWiNQzQPuXM,22694
29
+ hud/cli/get.py,sha256=sksKrdzBGZa7ZuSoQkc0haj-CvOGVSSikoVXeaUd3N4,6274
30
30
  hud/cli/init.py,sha256=XswZB2ZnzdE0pxP1kRmO3bHfWGCrKAyrME34ZyPzs98,19715
31
31
  hud/cli/list_func.py,sha256=EVi2Vc3Lb3glBNJxFx4MPnZknZ4xmuJz1OFg_dc8a_E,7177
32
32
  hud/cli/pull.py,sha256=Vd1l1-IwskyACzhtC8Df1SYINUZEYmFxrLl0s9cNN6c,12151
33
33
  hud/cli/push.py,sha256=JXUxu1QGU7BPWb0erSJq42CIq0sLbaDAO42yYDcvA1g,18347
34
34
  hud/cli/remove.py,sha256=8vGQyXDqgtjz85_vtusoIG8zurH4RHz6z8UMevQRYM4,6861
35
- hud/cli/rl/README.md,sha256=3pqRZMrnwD-lJwWGCCNZNhGdZG6zyydLBOer0e8BkLw,5983
36
- hud/cli/rl/__init__.py,sha256=PISQwpkMX9JQYMBK5j8ziP8vbLit6Sh1b7a94MgogBU,3424
37
- hud/cli/rl/init.py,sha256=xm2hQisL1VVOnKu7cjOuEadwMnqHQjlr5ekbzoAd6dA,13996
38
- hud/cli/rl/pod.py,sha256=601aiVhUI7ihempzBW-KFqbuU4RFJT0PZAzE5OVFEX4,19411
39
- hud/cli/rl/ssh.py,sha256=cUsw_tUuuSJlYaQJSzdDQeixGoVwx3GvKYZIPkQOp1U,11755
40
- hud/cli/rl/train.py,sha256=YyUSVjRtq1Sqg7zvKMdUupbE9eQ5unZOOldw4JLAv8M,20284
41
- hud/cli/rl/utils.py,sha256=V28ihGb02bwYEYnvLJOYVMQSIiEGM1KjDJBr8Tkbn5I,4888
35
+ hud/cli/flows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
+ hud/cli/flows/tasks.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
+ hud/cli/rl/__init__.py,sha256=_7g1OLhAsDP5gtTSaD35byvlVEYi58K_rQOn_7Kvy-M,22894
38
+ hud/cli/rl/config.py,sha256=iNhCxotM33OEiP9gqPvn8A_AxrBVe6fcFCQTvc13xzA,2884
39
+ hud/cli/rl/display.py,sha256=hqJVGmO9csYinladhZwjF-GMvppYWngxDHajTyIJ_gM,5214
40
+ hud/cli/rl/gpu.py,sha256=peXS-NdUF5RyuSs0aZoCzGLboneBUpCy8f9f99WMrG0,2009
41
+ hud/cli/rl/gpu_utils.py,sha256=H5ckPwgj5EVP3yJ5eVihR5R7Y6Gp6pt8ZUfWCCwcLG4,11072
42
+ hud/cli/rl/presets.py,sha256=DzOO82xL5QyzdVtlX-Do1CODMvDz9ILMPapjU92jcZg,3051
43
+ hud/cli/rl/remote_runner.py,sha256=dOl6UBTJoE3lDGydETG1oXXRF44Bsy4JzeL62VxeMRM,12710
44
+ hud/cli/rl/rl_api.py,sha256=INJobvSa50ccR037u_GPsDa_9WboWyNwqEaoh9hcXj0,4306
45
+ hud/cli/rl/vllm.py,sha256=Gq_M6KsQArGz7FNIdemuM5mk16mu3xe8abpO2GCCuOE,6093
42
46
  hud/cli/tests/__init__.py,sha256=ZrGVkmH7DHXGqOvjOSNGZeMYaFIRB2K8c6hwr8FPJ-8,68
43
47
  hud/cli/tests/test_analyze.py,sha256=inbRvi7KJKoMYrcqXU6RSayoh7mAOGVrRknm6BLQFes,11055
44
- hud/cli/tests/test_analyze_metadata.py,sha256=PqeovqpPIitu3YkQ7LvzD9potNxoU_KvDXH4_-lvYFs,9992
48
+ hud/cli/tests/test_analyze_metadata.py,sha256=RtJ5PiOWu-AyOijLyZZwNfYazqwSMvtDS0krMMw0mak,9943
45
49
  hud/cli/tests/test_build.py,sha256=9B_-jkCDMsNNn087SWbPEJVsbD_D1u5Mv1gBIySPuhU,14409
46
50
  hud/cli/tests/test_cli_init.py,sha256=_H0bAn5_skJ91Zj8P5P_wtZoPWvrN7jMhPZvmnnf0n8,11289
47
51
  hud/cli/tests/test_cli_main.py,sha256=0wMho9p9NcGjp0jLiUtCQh_FYdbMaCJtSY3sBbSgPwA,697
@@ -66,42 +70,56 @@ hud/cli/utils/registry.py,sha256=p6IaWmhUbf0Yh6aGa3jIPoSFT2uJPTOVBLS0jpKDUqc,437
66
70
  hud/cli/utils/remote_runner.py,sha256=50Fqp7LG9dwiDyNM-LspNiKrSHmEo00C_Iuu5jg9mXU,9407
67
71
  hud/cli/utils/runner.py,sha256=7HxVGa6OTflQnO0FSuRs273wnAmbm7cFRU9RTGL3-Wo,4390
68
72
  hud/cli/utils/server.py,sha256=EE5DJ0RAmXCEjMcZycpAsAxxCj6sOdIsXqPh38kK2ew,7416
73
+ hud/cli/utils/tasks.py,sha256=bpH2mQkfgKUpgh1J0NtVxMxcM1jDZk2GAAPQMcqAUz4,826
69
74
  hud/clients/README.md,sha256=XNE3mch95ozDgVqfwCGcrhlHY9CwT1GKfNANNboowto,3826
70
75
  hud/clients/__init__.py,sha256=N5M_gZv4nP7dLRwpAiaqqaxyaLieGW6397FszeG7JGw,364
71
- hud/clients/base.py,sha256=vt9mRMZwZg2DtVxQmccR_VZZGamXhx3dvlFJPulbOd8,14131
76
+ hud/clients/base.py,sha256=Q4iJ78wxDYj_RTnj000ILetvhxZpGX2mubcfGzp3JYw,14207
72
77
  hud/clients/fastmcp.py,sha256=KJGi8bmds0Q6rHnkTXb_Hw9ZqWmSo0OfjW05SSuyEJU,9182
73
- hud/clients/mcp_use.py,sha256=TsIIItqmt93hcdW1hj2HlMPJppVo4JDoUuCqQ-ZBoBI,13521
78
+ hud/clients/mcp_use.py,sha256=DgQ5q868jutH5aiDu3NVNePPqlOI_0iTWKmIuqCEJQ0,13559
74
79
  hud/clients/tests/__init__.py,sha256=sKOtJFFa4mDIXh1U6O8ZUHjigE8CiRMQ2PzJTIBZuVE,33
75
80
  hud/clients/tests/test_client_integration.py,sha256=kohU6jfCNfwSnAushHeB1_CmDlRfQc7VBL0GEdJYSeI,4198
76
81
  hud/clients/tests/test_fastmcp.py,sha256=4q3TzDjuieTZa89taiNJIrzbUncNkYOG4MaubypA21k,13030
77
- hud/clients/tests/test_mcp_use_retry.py,sha256=v9vwKa9nrW0EYiWzkq_vpyju40NaOm3SBiJh8VJYX2E,13103
82
+ hud/clients/tests/test_mcp_use_retry.py,sha256=9FxLAz4L5Vv3OTtj4wdhRY23wDYALUpE12TYWl7fbJA,13299
78
83
  hud/clients/tests/test_protocol.py,sha256=aK4CS4g3j1D5jPo83ykzZuHUvcZFAulYtIq9T9Hb_fQ,6640
79
84
  hud/clients/utils/__init__.py,sha256=-zZjcKIWGj2tXbVDOW45UgoGghhLJzFQVZ6miKenuA4,595
80
85
  hud/clients/utils/mcp_use_retry.py,sha256=sBCjtgnAXiXASjzFF_AtBEtmizay0Fi0nPL6sVoooeI,6675
81
86
  hud/clients/utils/retry.py,sha256=mMs2T_mAlb8AYhSqMR4AmCw7838gqCC4mdG3zjMAYM4,5744
82
87
  hud/clients/utils/retry_transport.py,sha256=Rsq25eiKKt_pM1bas78QEZvO0illK97X_3opmaS3A3w,6809
83
- hud/datasets/__init__.py,sha256=74T4mrjELKtE04XkZKwU8QAJcg2wjqXLqRO9s4GlPr4,678
84
- hud/datasets/task.py,sha256=bDVLy4EOBfjiU4i8hrFqcQ3dc077vzVNRXIbyNXFnp8,3916
85
- hud/datasets/utils.py,sha256=3hKvZTkZuCRkTeITB86nNdA1dtHZAqFfAdSPMtcTUhs,4275
86
- hud/datasets/execution/__init__.py,sha256=4m1AEpMQaUSJFVN_iAXvY6zFttVgZKwE6oQtC0Rrk7U,330
87
- hud/datasets/execution/parallel.py,sha256=ZEMMmH018QXOL1QoD_AyspQkGs_41F-GB_mTgdXh6J4,25780
88
- hud/datasets/execution/runner.py,sha256=EEvb90vvAqFXXx8NyVKLfK5p-gtsfJqiFJAoqSjyfXg,4695
88
+ hud/datasets/__init__.py,sha256=-g05iDy76CU4JiRHjKBBhgh3STtiIjmWhUfPqgf5hJE,697
89
+ hud/datasets/parallel.py,sha256=m7_z2QwjaRuM9gJFYyiPIJUwrlTxZSvFMAd9L2IDZEo,25772
90
+ hud/datasets/runner.py,sha256=2KhGEDzYW_qrSCaNJmsKqiAYZE_-h5VaQ7kv8rSe7Fw,4687
91
+ hud/datasets/utils.py,sha256=hdZfjWH5l3FVJaWBSHEEpjujAG7DqEam_vHgslL8MLs,4279
89
92
  hud/misc/__init__.py,sha256=m_pprQQ-G-Y0Sd0NEiR8MtAMbElnuFZ2OWT8TXrw7c4,43
90
93
  hud/misc/claude_plays_pokemon.py,sha256=IthAkjDVr2Q-GNvX-QLJyMzN7-0pHqqJbagGNv2m7yo,10453
91
94
  hud/native/__init__.py,sha256=TqM0KaiQnDb2Nv1zOgpEMiLVq8JPd4j_aaK4rUZ0IiA,232
92
- hud/native/comparator.py,sha256=A16wFGINLHPyuD23e8sEYxhRwWCUBYzYLb6TpvzJG9c,18297
95
+ hud/native/comparator.py,sha256=GCHs7iZa0fB425es6vvG91UW4yrbY6-BsWdabYJaNA4,18255
93
96
  hud/native/tests/__init__.py,sha256=gBTLMm6w5f6D-02Se2WleYsEEYyFt95JDcFzp3C2L_k,40
94
- hud/native/tests/test_comparator.py,sha256=x1gFLXEDRIiJhH8tg5Rd3ptY-modYaHgSm6-hCJ1EdY,18568
95
- hud/native/tests/test_native_init.py,sha256=Is8fcDZimp1Oi2Bv4zavqM3KrpS86_DUXFnqc0AsCH0,2736
97
+ hud/native/tests/test_comparator.py,sha256=pDch3r3xDi2o5YXF_bkoLfIdHcCjse3foAaqyr7PzkQ,18512
98
+ hud/native/tests/test_native_init.py,sha256=Z-2dinbQYEkrbCcfBrBOLGdpXtWWOtkfPzp7ZKri68Y,2839
96
99
  hud/otel/__init__.py,sha256=ii17ayoWiS5vAhA7UAmZ8TkmP52gs2pWyHsD46-uYbE,1003
97
100
  hud/otel/collector.py,sha256=jLZymZ8r7xt2VDuWexfbnT7PY1-0aiyLMgjBy8KDY1M,4497
98
- hud/otel/config.py,sha256=BPEyINdlxjsTj-IOO7F_JXAqrbMEWNMuhi2GDGqB5Kk,6785
101
+ hud/otel/config.py,sha256=mricuAmtFd1yIfOYKw2aHI-u4piku0GXHWv6hjsWQLM,6806
99
102
  hud/otel/context.py,sha256=C9MvO99cRSNNDEDC7ehO3eoTPnb6J7AemUYvEp57yEU,17774
100
103
  hud/otel/exporters.py,sha256=RLAjWa8b2DJEU21740Idq4fmeIuabLEqGGUspcFDcH4,14331
101
- hud/otel/instrumentation.py,sha256=bBWxQ5vkiP-2WZ_2ztR5LAw0Wu02SZNKUgs5f-rU-ro,3734
104
+ hud/otel/instrumentation.py,sha256=fsFG9W89RdewFDxWKN9Ft4GUb7WbIKpfucTc16WxaZU,5093
102
105
  hud/otel/processors.py,sha256=-gGRbwifplcExDQBLfx_9tqWreDImULJNcENgO9q7VU,4700
103
106
  hud/otel/tests/__init__.py,sha256=VNJKBMaxTtbn7trW-1Ph50zCvCok_wTSGcI1HD6GOLA,43
104
107
  hud/otel/tests/test_processors.py,sha256=np0R4ssd9j6LJSJykJ5bNjl0POwNYNhgb7BqOZHwcMY,6778
108
+ hud/rl/README.md,sha256=uFRpNFaEY8paq9k1C4miF7AGnbqHTGAsPmpcf9JIEeA,1189
109
+ hud/rl/__init__.py,sha256=yYL7U1WV6L3mr3Hig48-4lhnryTaWj4nCXm4lG5vrYI,25
110
+ hud/rl/actor.py,sha256=0YChXyxCz1wVBQ9lKb7vSl64_HQ24-DmYqCCxuORzJc,6747
111
+ hud/rl/buffer.py,sha256=xz4FlvO9l945VsSS4lzRFMwH3rA9HafgbUfADSauXok,15210
112
+ hud/rl/chat_template.jinja,sha256=XTdzI8oFGEcSA-exKxyHaprwRDmX5Am1KEb0VxvUc6U,4965
113
+ hud/rl/config.py,sha256=PAKYPCsKl8yg_j3gJSE5SJUgLM7j0lFy0K_Vt4-otDM,5384
114
+ hud/rl/distributed.py,sha256=8avhrb0lHYkhW22Z7MfkqSnlczWj5jMrUMEtkcoCf74,2473
115
+ hud/rl/learner.py,sha256=FKIgIIghsNiDr_g090xokOO_BxNmTSj1O-TSJzIq_Uw,24703
116
+ hud/rl/train.py,sha256=oZQGo0Wvb2LSrhh-7FLOsGCvI4G4AjgAAvF9P0k9l1Q,13436
117
+ hud/rl/types.py,sha256=lrLKo7iaqodYth2EyeuOQfLiuzXfYM2eJjPmpObrD7c,3965
118
+ hud/rl/utils.py,sha256=IsgVUUibxnUzb32a4mu1sYrgJC1CwoG9E-Dd5y5VDOA,19115
119
+ hud/rl/vllm_adapter.py,sha256=TBNo5lyNzszg6ATk9JoEZAm-xk_tcUJmq9YXwF1NB5w,3961
120
+ hud/rl/tests/__init__.py,sha256=PXmD3Gs6xOAwaYKb4HnwZERDjX05N1QF-aU6ya0dBtE,27
121
+ hud/rl/tests/test_learner.py,sha256=qfSHFFROteRb98TjBuAKjFmZjCGfuWXPysVvTAWJ7wQ,6025
122
+ hud/rl/utils/start_vllm_server.sh,sha256=ThPokrLK_Qm_uh916fHXXBfMlw1TC97P57-AEI5MuOc,910
105
123
  hud/server/__init__.py,sha256=8LUwgsXO8xiViWP7uImDwcOsWLu01r5F4r8U8qH3rSY,91
106
124
  hud/server/context.py,sha256=6bCdSzv1FGyItu9472HbbYef279H7QuMGJDR8EtYg5Y,3210
107
125
  hud/server/low_level.py,sha256=XYs2pOJ9kN4OcJ6ahDmXM5mWkzq5wJLpKFInUYrWEok,4701
@@ -115,14 +133,14 @@ hud/shared/requests.py,sha256=HWrPp7nBSK4jhv9wqZdFiNrVaaxV0vWS8fcgGtoztBc,9479
115
133
  hud/shared/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
116
134
  hud/shared/tests/test_exceptions.py,sha256=bCKGqw2RwBmlGIMNpddzyfnWAOQwSIYB76r6iaBE2is,15761
117
135
  hud/shared/tests/test_requests.py,sha256=nKFcSN1sjrOouVU2xik9lE5Wxapy3EWsO8iIXrM_Sts,9114
118
- hud/telemetry/__init__.py,sha256=pPqkq4XekqJEkzwoCwGHGAv1NcytZ55yIB1aLxBpo6U,663
136
+ hud/telemetry/__init__.py,sha256=uWiloBMXgEzPRsRIOpiSBhcTxJDyHfBqTg7qi8kxSTc,683
119
137
  hud/telemetry/instrument.py,sha256=m3u6YK02PTk39Jr4L3se7l-cYyKx0maCaqf5Z5JqWNA,14096
120
- hud/telemetry/job.py,sha256=DSZU_yVpag4VOGkCC5egcjVYuZ02nuzMqFZCgJqcQvM,9998
138
+ hud/telemetry/job.py,sha256=0c4Z69uNDwMeY_c_JpyuBvwvYTYk1YIkwotbXo3TAS4,11593
121
139
  hud/telemetry/replay.py,sha256=YW17s314s5Wy6Rl8MXHqg1FU8EF9_XcHBMJI0rrkyS4,2306
122
- hud/telemetry/trace.py,sha256=gem9pcioNI71hLs18vNidv-7KAZBJAn35stjVvOu_Ic,2208
140
+ hud/telemetry/trace.py,sha256=N2b_kc1JQKqxGb0mQjJ2HQrAJR94_Ai-1UCIs3LdANI,4671
123
141
  hud/telemetry/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
124
142
  hud/telemetry/tests/test_replay.py,sha256=eREc6qgSJDRT1pOPdyhiEoEJ9H2yT1ospaU1RvTKlvg,1328
125
- hud/telemetry/tests/test_trace.py,sha256=uKPjVqJ7kSWhiLXxMVQjQ3PcuKM-ryNs38LNaJanByg,2477
143
+ hud/telemetry/tests/test_trace.py,sha256=0rxR77CjcStat3ILA9QAswieOJ3J_386QmjmNDp34oA,2486
126
144
  hud/tools/__init__.py,sha256=i6lE0GxYcPnlLLd-55ryCCHo7o9anC4RfqkuYFXvzMQ,1009
127
145
  hud/tools/base.py,sha256=4qm5LS3SAkrq_lyfToWYCN9tNvTHohKJNH2siHkE364,15824
128
146
  hud/tools/bash.py,sha256=LJViMGb3lTGBm_gequVVTM7ySh1Xh9bOOIZXU29Lmrw,5209
@@ -154,8 +172,8 @@ hud/tools/tests/__init__.py,sha256=eEYYkxX5Hz9woXVOBJ2H2_CQoEih0vH6nRt3sH2Z8v8,4
154
172
  hud/tools/tests/test_base.py,sha256=m6EelJ47F_hMqvRjrr6vEdiW1AtLgz3ZH1V1IUzTxzI,8983
155
173
  hud/tools/tests/test_bash.py,sha256=-g9a6sYgKKXRXmqYGYQBgpKEF_OlKE_uDDQXYMx6rT0,5113
156
174
  hud/tools/tests/test_bash_extended.py,sha256=G1pgl2e7_7ILYYS2FE6pTwI3_IPzmkPjBjGnxMGwGq8,7000
157
- hud/tools/tests/test_computer.py,sha256=BmrX2PV3wzHC4-xPJnWvenDV_kWt8LF8ia0kELBgHho,16394
158
- hud/tools/tests/test_computer_actions.py,sha256=YtUNFL7anhpXrcvg8EoUY1CqIV-TAAyaNFLZO9CiJ40,1194
175
+ hud/tools/tests/test_computer.py,sha256=6BglMqodHkUT7365Ub0HpFe9dWUBiD3rL7_eDUsP07k,16397
176
+ hud/tools/tests/test_computer_actions.py,sha256=gufOrd4pOgOv_dOKonRAYb1g_Ph0FBTisa61YgnFitw,1195
159
177
  hud/tools/tests/test_edit.py,sha256=pHw1MSs-P8mDKrwKUDW77vQfoMNwmbrEBt_MkKr2rE0,9734
160
178
  hud/tools/tests/test_init.py,sha256=fl4Tf4IUUFOKhdSRHu9GE4mkaTDiXw-2auxj4s84HuE,698
161
179
  hud/tools/tests/test_playwright_tool.py,sha256=TG0uieerc5wXq_JX66BLfXxphbSYGlDPhSbuoeizMu4,6737
@@ -166,10 +184,12 @@ hud/tools/tests/test_utils.py,sha256=qaujM1uyTMaKqWIeEgxty5GOFyfSUtrYCEHhmIazoy4
166
184
  hud/utils/__init__.py,sha256=nk9Re6ls2RudAWnAHDWYbLG28AwNF4qMFYf5xQIJhQA,181
167
185
  hud/utils/agent_factories.py,sha256=cvfXByqG6gOYHtm1VGeJjCpxoLxM4aJez8rH-AerP_A,3186
168
186
  hud/utils/async_utils.py,sha256=5cKrJcnaHV2eJNxeyx0r7fPcdPTDBK7kM9-nLaF51X4,2409
169
- hud/utils/hud_console.py,sha256=1JlIphJNtqS2cm4DsuQnvD0dJgyYD1Kf7575vPO0fz4,18202
187
+ hud/utils/group_eval.py,sha256=oaoBqlQN6g5gRQmuY_JmqM5bpuf2sFIgu4uDZ7X-3a0,8360
188
+ hud/utils/hud_console.py,sha256=ywTrzyNhWFoQN2PpzpDDKp_32b-ACDvfKQuWxDoF8iE,21898
170
189
  hud/utils/mcp.py,sha256=jvCWb5MXlMMObhrbYoiTlI-L9HNkEjLVx8GJ-HbdQ7U,2626
171
190
  hud/utils/pretty_errors.py,sha256=WGeL4CTHtlA6KgPuV_JSX5l6H4-xbuTp6Y6tw1bkiFg,2430
172
191
  hud/utils/progress.py,sha256=suikwFM8sdSfkV10nAOEaInDhG4XKgOSvFePg4jSj1A,5927
192
+ hud/utils/tasks.py,sha256=JwFIq0cpPMpMYnICUmx_G4CF6uy9MtiCmmmN7eA6FsA,4682
173
193
  hud/utils/telemetry.py,sha256=hrVIx2rUjSGyy9IVxTZ_3Jii83PiHjyFRd5ls2whimM,1863
174
194
  hud/utils/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
175
195
  hud/utils/tests/test_async_utils.py,sha256=RkdSnYErRV3Jn7dfg6CPlcE1RSUL__2B627oIqAyy1s,5945
@@ -177,10 +197,10 @@ hud/utils/tests/test_init.py,sha256=2QLQSGgyP9wJhOvPCusm_zjJad0qApOZi1BXpxcdHXQ,
177
197
  hud/utils/tests/test_mcp.py,sha256=0pUa16mL-bqbZDXp5NHBnt1gO5o10BOg7zTMHZ1DNPM,4023
178
198
  hud/utils/tests/test_progress.py,sha256=QSF7Kpi03Ff_l3mAeqW9qs1nhK50j9vBiSobZq7T4f4,7394
179
199
  hud/utils/tests/test_telemetry.py,sha256=5jl7bEx8C8b-FfFUko5pf4UY-mPOR-9HaeL98dGtVHM,2781
180
- hud/utils/tests/test_version.py,sha256=jpXPGbByROiksIVpav-giXCorz3uLaG22Ss4vMoW1Mg,160
200
+ hud/utils/tests/test_version.py,sha256=jpqi_MLI03sxvfOaaX6i6wE6qhR1oLlH1VDVqdtAj6U,160
181
201
  hud/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
182
- hud_python-0.4.28.dist-info/METADATA,sha256=nG7aOsDwvXyLtbOK2EE0aImGz5A3izdxplweL0YyGRA,20239
183
- hud_python-0.4.28.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
184
- hud_python-0.4.28.dist-info/entry_points.txt,sha256=jJbodNFg1m0-CDofe5AHvB4zKBq7sSdP97-ohaQ3ae4,63
185
- hud_python-0.4.28.dist-info/licenses/LICENSE,sha256=yIzBheVUf86FC1bztAcr7RYWWNxyd3B-UJQ3uddg1HA,1078
186
- hud_python-0.4.28.dist-info/RECORD,,
202
+ hud_python-0.4.30.dist-info/METADATA,sha256=u3lRTRb4gv7NfN8iEJoEPqLAizjXU_RBWNfPNfwXiJM,21069
203
+ hud_python-0.4.30.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
204
+ hud_python-0.4.30.dist-info/entry_points.txt,sha256=jJbodNFg1m0-CDofe5AHvB4zKBq7sSdP97-ohaQ3ae4,63
205
+ hud_python-0.4.30.dist-info/licenses/LICENSE,sha256=yIzBheVUf86FC1bztAcr7RYWWNxyd3B-UJQ3uddg1HA,1078
206
+ hud_python-0.4.30.dist-info/RECORD,,