hud-python 0.4.51__py3-none-any.whl → 0.4.52__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 +13 -1
- hud/agents/base.py +5 -1
- hud/agents/lite_llm.py +1 -1
- hud/agents/tests/test_base.py +8 -16
- hud/cli/__init__.py +12 -22
- hud/cli/eval.py +53 -84
- hud/cli/tests/test_build.py +2 -1
- hud/cli/tests/test_eval.py +4 -0
- hud/cli/tests/test_mcp_server.py +1 -1
- hud/cli/utils/tasks.py +4 -1
- hud/cli/utils/version_check.py +257 -0
- hud/clients/base.py +1 -1
- hud/clients/mcp_use.py +3 -1
- hud/datasets/parallel.py +2 -2
- hud/datasets/runner.py +85 -24
- hud/otel/config.py +8 -6
- hud/otel/context.py +4 -4
- hud/otel/exporters.py +231 -57
- hud/rl/learner.py +1 -1
- hud/shared/exceptions.py +0 -5
- hud/shared/tests/test_exceptions.py +17 -16
- hud/telemetry/__init__.py +30 -6
- hud/telemetry/async_context.py +331 -0
- hud/telemetry/job.py +51 -12
- hud/telemetry/tests/test_trace.py +4 -4
- hud/telemetry/trace.py +16 -17
- hud/tools/computer/qwen.py +4 -1
- hud/tools/executors/base.py +4 -2
- hud/utils/task_tracking.py +223 -0
- hud/utils/tests/test_version.py +1 -1
- hud/version.py +1 -1
- {hud_python-0.4.51.dist-info → hud_python-0.4.52.dist-info}/METADATA +2 -1
- {hud_python-0.4.51.dist-info → hud_python-0.4.52.dist-info}/RECORD +36 -33
- {hud_python-0.4.51.dist-info → hud_python-0.4.52.dist-info}/WHEEL +0 -0
- {hud_python-0.4.51.dist-info → hud_python-0.4.52.dist-info}/entry_points.txt +0 -0
- {hud_python-0.4.51.dist-info → hud_python-0.4.52.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
"""Task tracking for async telemetry operations.
|
|
2
|
+
|
|
3
|
+
This module provides infrastructure to track async tasks created during
|
|
4
|
+
telemetry operations (status updates, metric logging) to ensure they
|
|
5
|
+
complete before process shutdown, preventing telemetry loss.
|
|
6
|
+
|
|
7
|
+
The task tracker maintains strong references to tasks and explicitly cleans
|
|
8
|
+
them up when they complete via callbacks. This ensures tasks are not garbage
|
|
9
|
+
collected before they finish executing.
|
|
10
|
+
|
|
11
|
+
Thread Safety:
|
|
12
|
+
Uses threading.Lock (not asyncio.Lock) because done callbacks run
|
|
13
|
+
synchronously and need to modify the task set safely.
|
|
14
|
+
|
|
15
|
+
Race Condition Prevention:
|
|
16
|
+
The wait_all() method uses a multi-pass approach to catch tasks that
|
|
17
|
+
are created while waiting for existing tasks to complete.
|
|
18
|
+
|
|
19
|
+
This is an internal module used by async context managers and cleanup
|
|
20
|
+
routines. Users typically don't interact with it directly.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
import asyncio
|
|
24
|
+
import contextlib
|
|
25
|
+
import logging
|
|
26
|
+
import threading
|
|
27
|
+
from collections.abc import Coroutine
|
|
28
|
+
from typing import Any
|
|
29
|
+
|
|
30
|
+
logger = logging.getLogger(__name__)
|
|
31
|
+
|
|
32
|
+
# Module exports
|
|
33
|
+
__all__ = ["TaskTracker", "track_task", "wait_all_tasks"]
|
|
34
|
+
|
|
35
|
+
# Global singleton task tracker
|
|
36
|
+
_global_tracker: "TaskTracker | None" = None
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class TaskTracker:
|
|
40
|
+
"""Tracks async tasks to ensure completion before shutdown.
|
|
41
|
+
|
|
42
|
+
Maintains a set of tasks with thread-safe access for both async code
|
|
43
|
+
and synchronous callbacks. Tasks are automatically removed when they
|
|
44
|
+
complete via done callbacks.
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
def __init__(self) -> None:
|
|
48
|
+
self._tasks: set[asyncio.Task] = set()
|
|
49
|
+
# Use threading.Lock for synchronous access from done callbacks
|
|
50
|
+
self._lock = threading.Lock()
|
|
51
|
+
|
|
52
|
+
def track_task(self, coro: Coroutine[Any, Any, Any], name: str = "task") -> asyncio.Task | None:
|
|
53
|
+
"""Create and track an async task.
|
|
54
|
+
|
|
55
|
+
Args:
|
|
56
|
+
coro: The coroutine to run
|
|
57
|
+
name: Descriptive name for debugging and logging
|
|
58
|
+
|
|
59
|
+
Returns:
|
|
60
|
+
The created asyncio.Task, or None if no event loop is available
|
|
61
|
+
"""
|
|
62
|
+
try:
|
|
63
|
+
task = asyncio.create_task(coro, name=name)
|
|
64
|
+
|
|
65
|
+
# Add task to tracking set (thread-safe)
|
|
66
|
+
with self._lock:
|
|
67
|
+
self._tasks.add(task)
|
|
68
|
+
task_count = len(self._tasks)
|
|
69
|
+
|
|
70
|
+
# Setup cleanup callback
|
|
71
|
+
def cleanup_callback(completed_task: asyncio.Task) -> None:
|
|
72
|
+
"""Remove completed task from tracking set and log failures."""
|
|
73
|
+
with self._lock:
|
|
74
|
+
self._tasks.discard(completed_task)
|
|
75
|
+
|
|
76
|
+
# Log exceptions outside lock to avoid blocking
|
|
77
|
+
with contextlib.suppress(Exception):
|
|
78
|
+
if not completed_task.cancelled():
|
|
79
|
+
with contextlib.suppress(Exception):
|
|
80
|
+
exc = completed_task.exception()
|
|
81
|
+
if exc:
|
|
82
|
+
logger.warning("Task '%s' failed: %s", name, exc)
|
|
83
|
+
|
|
84
|
+
task.add_done_callback(cleanup_callback)
|
|
85
|
+
logger.debug("Tracking task '%s' (total active: %d)", name, task_count)
|
|
86
|
+
return task
|
|
87
|
+
|
|
88
|
+
except RuntimeError as e:
|
|
89
|
+
# No event loop - fall back to fire_and_forget
|
|
90
|
+
logger.warning("Cannot track task '%s': %s", name, e)
|
|
91
|
+
from hud.utils.async_utils import fire_and_forget
|
|
92
|
+
|
|
93
|
+
fire_and_forget(coro, name)
|
|
94
|
+
return None
|
|
95
|
+
|
|
96
|
+
async def wait_all(self, *, timeout_seconds: float = 30.0) -> int:
|
|
97
|
+
"""Wait for all tracked tasks to complete.
|
|
98
|
+
|
|
99
|
+
Uses a multi-pass approach to handle race conditions where tasks are
|
|
100
|
+
added while waiting for existing tasks to complete. This ensures that
|
|
101
|
+
status updates created near the end of execution are still waited for.
|
|
102
|
+
|
|
103
|
+
Args:
|
|
104
|
+
timeout_seconds: Maximum time to wait in seconds
|
|
105
|
+
|
|
106
|
+
Returns:
|
|
107
|
+
Number of tasks that completed
|
|
108
|
+
"""
|
|
109
|
+
total_completed = 0
|
|
110
|
+
time_remaining = timeout_seconds
|
|
111
|
+
max_passes = 10 # Prevent infinite loops if tasks keep spawning
|
|
112
|
+
|
|
113
|
+
for pass_num in range(max_passes):
|
|
114
|
+
# Get snapshot of pending tasks (thread-safe)
|
|
115
|
+
with self._lock:
|
|
116
|
+
pending = [t for t in self._tasks if not t.done()]
|
|
117
|
+
|
|
118
|
+
if not pending:
|
|
119
|
+
if pass_num == 0:
|
|
120
|
+
logger.debug("No pending tasks to wait for")
|
|
121
|
+
else:
|
|
122
|
+
logger.debug("All tasks completed after %d passes", pass_num)
|
|
123
|
+
break
|
|
124
|
+
|
|
125
|
+
# Log progress
|
|
126
|
+
if pass_num == 0:
|
|
127
|
+
logger.info("Waiting for %d pending tasks...", len(pending))
|
|
128
|
+
else:
|
|
129
|
+
logger.debug("Pass %d: Waiting for %d tasks", pass_num + 1, len(pending))
|
|
130
|
+
|
|
131
|
+
# Wait for this batch (max 5s per pass to check for new tasks)
|
|
132
|
+
batch_timeout = min(time_remaining, 5.0) if time_remaining > 0 else 5.0
|
|
133
|
+
start_time = asyncio.get_event_loop().time()
|
|
134
|
+
|
|
135
|
+
try:
|
|
136
|
+
done, still_pending = await asyncio.wait(
|
|
137
|
+
pending, timeout=batch_timeout, return_when=asyncio.ALL_COMPLETED
|
|
138
|
+
)
|
|
139
|
+
except Exception as e:
|
|
140
|
+
logger.error("Error waiting for tasks: %s", e)
|
|
141
|
+
break
|
|
142
|
+
|
|
143
|
+
# Update timing
|
|
144
|
+
elapsed = asyncio.get_event_loop().time() - start_time
|
|
145
|
+
time_remaining -= elapsed
|
|
146
|
+
total_completed += len(done)
|
|
147
|
+
|
|
148
|
+
# Handle timeout
|
|
149
|
+
if still_pending:
|
|
150
|
+
if time_remaining <= 0:
|
|
151
|
+
logger.warning(
|
|
152
|
+
"%d tasks still pending after %ss timeout - cancelling",
|
|
153
|
+
len(still_pending),
|
|
154
|
+
timeout_seconds,
|
|
155
|
+
)
|
|
156
|
+
for task in still_pending:
|
|
157
|
+
task.cancel()
|
|
158
|
+
break
|
|
159
|
+
# Otherwise continue to next pass
|
|
160
|
+
else:
|
|
161
|
+
# All tasks from this batch completed, check for new ones
|
|
162
|
+
with self._lock:
|
|
163
|
+
new_pending = [t for t in self._tasks if not t.done()]
|
|
164
|
+
|
|
165
|
+
if not new_pending:
|
|
166
|
+
# No new tasks were added - we're done
|
|
167
|
+
break
|
|
168
|
+
# Otherwise loop to wait for the new tasks
|
|
169
|
+
|
|
170
|
+
if total_completed > 0:
|
|
171
|
+
logger.info("Completed %d tasks", total_completed)
|
|
172
|
+
|
|
173
|
+
return total_completed
|
|
174
|
+
|
|
175
|
+
def get_pending_count(self) -> int:
|
|
176
|
+
"""Get number of pending tasks (thread-safe)."""
|
|
177
|
+
with self._lock:
|
|
178
|
+
return sum(1 for t in self._tasks if not t.done())
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
def get_global_tracker() -> TaskTracker:
|
|
182
|
+
"""Get or create the global task tracker."""
|
|
183
|
+
global _global_tracker
|
|
184
|
+
if _global_tracker is None:
|
|
185
|
+
_global_tracker = TaskTracker()
|
|
186
|
+
return _global_tracker
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
def track_task(coro: Coroutine[Any, Any, Any], name: str = "task") -> asyncio.Task | None:
|
|
190
|
+
"""Create and track an async task for telemetry operations.
|
|
191
|
+
|
|
192
|
+
This is a convenience function that uses the global tracker to ensure
|
|
193
|
+
the task completes before shutdown. Used internally by async context
|
|
194
|
+
managers for status updates and metric logging.
|
|
195
|
+
|
|
196
|
+
Args:
|
|
197
|
+
coro: The coroutine to track
|
|
198
|
+
name: Descriptive name for debugging
|
|
199
|
+
|
|
200
|
+
Returns:
|
|
201
|
+
The created task, or None if no event loop is available
|
|
202
|
+
"""
|
|
203
|
+
tracker = get_global_tracker()
|
|
204
|
+
return tracker.track_task(coro, name)
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
async def wait_all_tasks(*, timeout_seconds: float = 30.0) -> int:
|
|
208
|
+
"""Wait for all tracked telemetry tasks to complete.
|
|
209
|
+
|
|
210
|
+
Ensures that all async telemetry operations (status updates, logs)
|
|
211
|
+
complete before the calling function returns, preventing telemetry loss.
|
|
212
|
+
|
|
213
|
+
Uses a multi-pass approach to handle race conditions where status updates
|
|
214
|
+
are created while waiting for other tasks to complete.
|
|
215
|
+
|
|
216
|
+
Args:
|
|
217
|
+
timeout_seconds: Maximum time to wait for tasks in seconds
|
|
218
|
+
|
|
219
|
+
Returns:
|
|
220
|
+
Number of tasks that completed
|
|
221
|
+
"""
|
|
222
|
+
tracker = get_global_tracker()
|
|
223
|
+
return await tracker.wait_all(timeout_seconds=timeout_seconds)
|
hud/utils/tests/test_version.py
CHANGED
hud/version.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: hud-python
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.52
|
|
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
|
|
@@ -48,6 +48,7 @@ Requires-Dist: opentelemetry-api>=1.34.1
|
|
|
48
48
|
Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.34.1
|
|
49
49
|
Requires-Dist: opentelemetry-instrumentation-mcp==0.47.0
|
|
50
50
|
Requires-Dist: opentelemetry-sdk>=1.34.1
|
|
51
|
+
Requires-Dist: packaging>=21.0
|
|
51
52
|
Requires-Dist: pathspec>=0.12.1
|
|
52
53
|
Requires-Dist: pillow>=11.1.0
|
|
53
54
|
Requires-Dist: prompt-toolkit==3.0.51
|
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
hud/__init__.py,sha256=
|
|
1
|
+
hud/__init__.py,sha256=0LQ9PyuU6yZx7Fxu8YJXKC1i3TTHjg3UrInThh759QE,653
|
|
2
2
|
hud/__main__.py,sha256=YR8Dq8OhINOsVfQ55PmRXXg4fEK84Rt_-rMtJ5rvhWo,145
|
|
3
3
|
hud/settings.py,sha256=disObWa-DgXzoDcCDp3y1dTPaNsbR0IvoMJL9Eg4zyo,3947
|
|
4
4
|
hud/types.py,sha256=KCVrglSG0VK-AUCFgG5CLgDcYqokvYgZG1r2Bsc-tBg,11155
|
|
5
|
-
hud/version.py,sha256=
|
|
5
|
+
hud/version.py,sha256=6eRuCjDlZn4_gfm4B_A9cRBz531OtlF4KrULLYylQVo,105
|
|
6
6
|
hud/agents/__init__.py,sha256=UoIkljWdbq4bM0LD-mSaw6w826EqdEjOk7r6glNYwYQ,286
|
|
7
|
-
hud/agents/base.py,sha256=
|
|
7
|
+
hud/agents/base.py,sha256=bv2eeBacvluIQDrcrbP6Ydj41i_9AXBA51x1y8mAC_g,31897
|
|
8
8
|
hud/agents/claude.py,sha256=0zje6de9_H-QlyDf05BnvtwoLPFnYgXhHgQGEAjwktU,16006
|
|
9
9
|
hud/agents/grounded_openai.py,sha256=UC_Z0BP1fvThB95cCYqvMgaQLYXFYB_8zlawwIphruY,11247
|
|
10
10
|
hud/agents/langchain.py,sha256=1EgCy8jfjunsWxlPC5XfvfLS6_XZVrIF1ZjtHcrvhYw,9584
|
|
11
|
-
hud/agents/lite_llm.py,sha256=
|
|
11
|
+
hud/agents/lite_llm.py,sha256=RW_VcMB-NIsxSfVhiQ2tvXSNQp3rTQg5h5Ax1b56bP0,2238
|
|
12
12
|
hud/agents/openai.py,sha256=O1xV1h1l-W8lmnmXqTYr5CwnmnaniMqOxAZbl2CTTng,14576
|
|
13
13
|
hud/agents/openai_chat_generic.py,sha256=_vAID9dZ_UxL0elYwafskRcsdrSsLsxJ4zPrP58oBiw,12151
|
|
14
14
|
hud/agents/misc/__init__.py,sha256=LbVpHl2bDtheGPixbRRKsEjujwzmrXs7sCS8u1sYfAk,219
|
|
15
15
|
hud/agents/misc/integration_test_agent.py,sha256=MYHsynQ_fooexxSGU_tN_zcQEUMrVCnlrdr6_KIj_Vw,2093
|
|
16
16
|
hud/agents/misc/response_agent.py,sha256=uMuRDkz5QgaMQliNzBRepond5sb7KyqIiKm3LstjVnw,3753
|
|
17
17
|
hud/agents/tests/__init__.py,sha256=W-O-_4i34d9TTyEHV-O_q1Ai1gLhzwDaaPo02_TWQIY,34
|
|
18
|
-
hud/agents/tests/test_base.py,sha256=
|
|
18
|
+
hud/agents/tests/test_base.py,sha256=JBd1C9V8XOVWy2q53aLlwhoIVQKulrawl8SUWbP0VrM,28420
|
|
19
19
|
hud/agents/tests/test_claude.py,sha256=0nZnfsbGoECvsLPdmaRnc9jVmrehVvc3kxeyiCQI2Cc,13807
|
|
20
20
|
hud/agents/tests/test_client.py,sha256=uikgh6yhjPPX2RBU4XJQMz1mNox9uXjuwsP8t93id18,13337
|
|
21
21
|
hud/agents/tests/test_grounded_openai_agent.py,sha256=VK8lUvHIjWicMX00VKPE-FZyjiJqTEhb80MuRRa9fVc,5437
|
|
22
22
|
hud/agents/tests/test_openai.py,sha256=dnAFAoBKZf-5dtDpj6UC3q7oZv2tdMFcniPU0emfImw,8020
|
|
23
|
-
hud/cli/__init__.py,sha256=
|
|
23
|
+
hud/cli/__init__.py,sha256=ICDXVcw5QBGbSESBujXjrD2k0muk8HsUozY_SxHkruM,41086
|
|
24
24
|
hud/cli/__main__.py,sha256=fDH7XITyuDITwSDIVwRso06aouADO0CzTHKqp5TOwJE,143
|
|
25
25
|
hud/cli/analyze.py,sha256=4u5oYfJMquOjT9PzzRTYVcTZDxDi0ilNP_g532_hpOU,14716
|
|
26
26
|
hud/cli/build.py,sha256=aFFWGtO1sQeTonvLsuMeDKG62IkakASbsP7FonGYuxc,22381
|
|
27
27
|
hud/cli/clone.py,sha256=AwVDIuhr8mHb1oT2Af2HrD25SiTdwATpE6zd93vzLgA,6099
|
|
28
28
|
hud/cli/debug.py,sha256=jtFW8J5F_3rhq1Hf1_SkJ7aLS3wjnyIs_LsC8k5cnzc,14200
|
|
29
29
|
hud/cli/dev.py,sha256=mZW66fbtnCHplwGf1UWy72qfVYXnjPBUqVFAOD4v9Hg,23012
|
|
30
|
-
hud/cli/eval.py,sha256=
|
|
30
|
+
hud/cli/eval.py,sha256=D6BXRNXlEpCHyyryaJTjPKUdHhFgETC-h8kqwYz9vTg,25524
|
|
31
31
|
hud/cli/get.py,sha256=sksKrdzBGZa7ZuSoQkc0haj-CvOGVSSikoVXeaUd3N4,6274
|
|
32
32
|
hud/cli/init.py,sha256=Iz0fcE8ao50xChCKwbapTwjAPRY0ZDqV6XHLsvCpRC4,9952
|
|
33
33
|
hud/cli/list_func.py,sha256=EVi2Vc3Lb3glBNJxFx4MPnZknZ4xmuJz1OFg_dc8a_E,7177
|
|
@@ -52,16 +52,16 @@ hud/cli/rl/wait_utils.py,sha256=FyIvqYWLOydANTetukoE5Rp2AOQi67qkiAlIJp4HpL8,2577
|
|
|
52
52
|
hud/cli/tests/__init__.py,sha256=ZrGVkmH7DHXGqOvjOSNGZeMYaFIRB2K8c6hwr8FPJ-8,68
|
|
53
53
|
hud/cli/tests/test_analyze.py,sha256=inbRvi7KJKoMYrcqXU6RSayoh7mAOGVrRknm6BLQFes,11055
|
|
54
54
|
hud/cli/tests/test_analyze_metadata.py,sha256=TP8rVRDFcdkZrdmKFIR9yUxuxiaAkc-6UmjV4vrJaJM,10025
|
|
55
|
-
hud/cli/tests/test_build.py,sha256=
|
|
55
|
+
hud/cli/tests/test_build.py,sha256=OZhEHZAMjn1LVyWNzNlawWnyyn8z2gk2VxSNvDZ4f1A,13624
|
|
56
56
|
hud/cli/tests/test_cli_init.py,sha256=_H0bAn5_skJ91Zj8P5P_wtZoPWvrN7jMhPZvmnnf0n8,11289
|
|
57
57
|
hud/cli/tests/test_cli_main.py,sha256=0wMho9p9NcGjp0jLiUtCQh_FYdbMaCJtSY3sBbSgPwA,697
|
|
58
58
|
hud/cli/tests/test_clone.py,sha256=oC2mf-41QQVc7ODJkjrWbVPNMB2fDW3nZ6jY6w93gvQ,4458
|
|
59
59
|
hud/cli/tests/test_cursor.py,sha256=ZfxAFKJesJ3UV1JBoASSRlv6BXbpvVEk_pjxUg1jnf4,9821
|
|
60
60
|
hud/cli/tests/test_debug.py,sha256=bQ76d_0HJfthHBSECmGNv499ZE57CIOKsanMlNfNHGk,18036
|
|
61
|
-
hud/cli/tests/test_eval.py,sha256=
|
|
61
|
+
hud/cli/tests/test_eval.py,sha256=9tsjHHA43IUiEy5AK3avdURZE3H3AFWTeeb87QW-R98,22329
|
|
62
62
|
hud/cli/tests/test_list_func.py,sha256=pkG4TtJJBMi9Xk8KBNFBlGcam7kwz01IRsjfQBL2PxM,10700
|
|
63
63
|
hud/cli/tests/test_main_module.py,sha256=6RhwCcdRSN2uQV6-adti40ZcLd3u-mPR1ai6wL64c6Y,1105
|
|
64
|
-
hud/cli/tests/test_mcp_server.py,sha256=
|
|
64
|
+
hud/cli/tests/test_mcp_server.py,sha256=2VYdxUVNhYq4BTXl1yJZWCZvYy7UZSUhYOcRhP1JccM,904
|
|
65
65
|
hud/cli/tests/test_pull.py,sha256=ToSJrlfn13pYnrWWt3W_S7qFFjwvoZC2UisrZVrxujo,13155
|
|
66
66
|
hud/cli/tests/test_push.py,sha256=V71KP5gEDo7Z9ccFpjidBjYliFg_KCfnZoZYbBXjguE,12875
|
|
67
67
|
hud/cli/tests/test_registry.py,sha256=-o9MvQTcBElteqrg0XW8Bg59KrHCt88ZyPqeaAlyyTg,9539
|
|
@@ -82,12 +82,13 @@ hud/cli/utils/remote_runner.py,sha256=OOSJ6wU_gS_hJaURDfxZcyekjIIwPQKGN_Pq64tin3
|
|
|
82
82
|
hud/cli/utils/runner.py,sha256=7HxVGa6OTflQnO0FSuRs273wnAmbm7cFRU9RTGL3-Wo,4390
|
|
83
83
|
hud/cli/utils/server.py,sha256=EE5DJ0RAmXCEjMcZycpAsAxxCj6sOdIsXqPh38kK2ew,7416
|
|
84
84
|
hud/cli/utils/source_hash.py,sha256=EDD3KC4pLGBVoSL5UTv1GvF2TAs2ThNHNOhP_5Sbub4,2979
|
|
85
|
-
hud/cli/utils/tasks.py,sha256=
|
|
85
|
+
hud/cli/utils/tasks.py,sha256=lX9SeM5XekrTBx2HWKMA0BQ7R3Q8jqGgi4G5vIHsnJM,994
|
|
86
|
+
hud/cli/utils/version_check.py,sha256=_e4H5Xxz2f9PVNSG8hAV_cJhS2zCX69RAodMRPTg-24,7279
|
|
86
87
|
hud/clients/README.md,sha256=XNE3mch95ozDgVqfwCGcrhlHY9CwT1GKfNANNboowto,3826
|
|
87
88
|
hud/clients/__init__.py,sha256=N5M_gZv4nP7dLRwpAiaqqaxyaLieGW6397FszeG7JGw,364
|
|
88
|
-
hud/clients/base.py,sha256=
|
|
89
|
+
hud/clients/base.py,sha256=Ywq3CzsWRx1cgwMDUCgSK_N1kxPfFTV7h-8Ah2cxDOw,14215
|
|
89
90
|
hud/clients/fastmcp.py,sha256=1xaAg7DwMcwt_GRx2n3OsZaX-UMEQCZCaLDK4cr2HhQ,9178
|
|
90
|
-
hud/clients/mcp_use.py,sha256=
|
|
91
|
+
hud/clients/mcp_use.py,sha256=2Pb8bhAEmD9TJYKb-2JbxmyIsh4ttE_pP-kldrt6AH0,14750
|
|
91
92
|
hud/clients/tests/__init__.py,sha256=sKOtJFFa4mDIXh1U6O8ZUHjigE8CiRMQ2PzJTIBZuVE,33
|
|
92
93
|
hud/clients/tests/test_client_integration.py,sha256=kohU6jfCNfwSnAushHeB1_CmDlRfQc7VBL0GEdJYSeI,4198
|
|
93
94
|
hud/clients/tests/test_fastmcp.py,sha256=4q3TzDjuieTZa89taiNJIrzbUncNkYOG4MaubypA21k,13030
|
|
@@ -98,8 +99,8 @@ hud/clients/utils/mcp_use_retry.py,sha256=knsgOTR3YFXshmPFfPQE6K6C5GpR1ZBJe2J7oz
|
|
|
98
99
|
hud/clients/utils/retry.py,sha256=mMs2T_mAlb8AYhSqMR4AmCw7838gqCC4mdG3zjMAYM4,5744
|
|
99
100
|
hud/clients/utils/retry_transport.py,sha256=Rsq25eiKKt_pM1bas78QEZvO0illK97X_3opmaS3A3w,6809
|
|
100
101
|
hud/datasets/__init__.py,sha256=-g05iDy76CU4JiRHjKBBhgh3STtiIjmWhUfPqgf5hJE,697
|
|
101
|
-
hud/datasets/parallel.py,sha256=
|
|
102
|
-
hud/datasets/runner.py,sha256=
|
|
102
|
+
hud/datasets/parallel.py,sha256=3V2jCOQxh_JesUYyNv8kPjLpddL5zuvQfMswiVYEUgo,25429
|
|
103
|
+
hud/datasets/runner.py,sha256=fHsblKzi0mEk5PDkpTWnRMjbCFrld4UcwrBCYIR4M1s,7517
|
|
103
104
|
hud/datasets/utils.py,sha256=hdZfjWH5l3FVJaWBSHEEpjujAG7DqEam_vHgslL8MLs,4279
|
|
104
105
|
hud/misc/__init__.py,sha256=m_pprQQ-G-Y0Sd0NEiR8MtAMbElnuFZ2OWT8TXrw7c4,43
|
|
105
106
|
hud/misc/claude_plays_pokemon.py,sha256=IthAkjDVr2Q-GNvX-QLJyMzN7-0pHqqJbagGNv2m7yo,10453
|
|
@@ -110,9 +111,9 @@ hud/native/tests/test_comparator.py,sha256=pDch3r3xDi2o5YXF_bkoLfIdHcCjse3foAaqy
|
|
|
110
111
|
hud/native/tests/test_native_init.py,sha256=Z-2dinbQYEkrbCcfBrBOLGdpXtWWOtkfPzp7ZKri68Y,2839
|
|
111
112
|
hud/otel/__init__.py,sha256=ii17ayoWiS5vAhA7UAmZ8TkmP52gs2pWyHsD46-uYbE,1003
|
|
112
113
|
hud/otel/collector.py,sha256=jLZymZ8r7xt2VDuWexfbnT7PY1-0aiyLMgjBy8KDY1M,4497
|
|
113
|
-
hud/otel/config.py,sha256=
|
|
114
|
-
hud/otel/context.py,sha256=
|
|
115
|
-
hud/otel/exporters.py,sha256=
|
|
114
|
+
hud/otel/config.py,sha256=rqw4gaQCqJNEFWO_AfyqwgZVia706qJP0UveNSgDVSg,7037
|
|
115
|
+
hud/otel/context.py,sha256=DLP89aGlo-sTO0f4t80EvIXNaXA2FQXdOrlrkWJ6bVU,19102
|
|
116
|
+
hud/otel/exporters.py,sha256=k0yfUppMbcJ3IfNH3cc_u1hdR54qnnkT7lQjxO3I06g,21470
|
|
116
117
|
hud/otel/instrumentation.py,sha256=fsFG9W89RdewFDxWKN9Ft4GUb7WbIKpfucTc16WxaZU,5093
|
|
117
118
|
hud/otel/processors.py,sha256=-gGRbwifplcExDQBLfx_9tqWreDImULJNcENgO9q7VU,4700
|
|
118
119
|
hud/otel/tests/__init__.py,sha256=VNJKBMaxTtbn7trW-1Ph50zCvCok_wTSGcI1HD6GOLA,43
|
|
@@ -124,7 +125,7 @@ hud/rl/buffer.py,sha256=z47HOjOBJx3umUzzUfdtq_N4ZoJ8FMBPkX8YQKBtd3A,15457
|
|
|
124
125
|
hud/rl/chat_template.jinja,sha256=XTdzI8oFGEcSA-exKxyHaprwRDmX5Am1KEb0VxvUc6U,4965
|
|
125
126
|
hud/rl/config.py,sha256=sCU56mjtgJpu_C0TXqpT14v1LmZv0ntmUjgNkFamTPA,5713
|
|
126
127
|
hud/rl/distributed.py,sha256=1k65Qhd9Coh4dyra8TMTExO-tabyRS_wZqh7SO3kuxo,3650
|
|
127
|
-
hud/rl/learner.py,sha256=
|
|
128
|
+
hud/rl/learner.py,sha256=pdS_5_5KItQ8k0EVO4PX7ExDSDkQMoxAZJ5WvI-J7Kw,27239
|
|
128
129
|
hud/rl/train.py,sha256=d0Ldg_ZXhiMwdpB5yidMK-LY6X__CWBhVqglQ-3EnvU,15589
|
|
129
130
|
hud/rl/types.py,sha256=lrLKo7iaqodYth2EyeuOQfLiuzXfYM2eJjPmpObrD7c,3965
|
|
130
131
|
hud/rl/utils.py,sha256=IsgVUUibxnUzb32a4mu1sYrgJC1CwoG9E-Dd5y5VDOA,19115
|
|
@@ -150,20 +151,21 @@ hud/server/tests/test_run_wrapper.py,sha256=EdwxMWCIHAp8t-l6VUeMOMhPRLTWjEVfTyys
|
|
|
150
151
|
hud/server/tests/test_server_extra.py,sha256=MAmIrFwQWMFAP2AT6h1kbExZGxEvJZLq1bxvS7guQFE,5489
|
|
151
152
|
hud/server/tests/test_sigterm_runner.py,sha256=HTM_0DAxA2exGYj7LK4udxMGXHZhY9LDZaKkHhQMu_Y,2610
|
|
152
153
|
hud/shared/__init__.py,sha256=IPxPCqtPLguryN-nBq78Sakypw2bRiE2iHv3SXG8YRk,139
|
|
153
|
-
hud/shared/exceptions.py,sha256=
|
|
154
|
+
hud/shared/exceptions.py,sha256=seDNhHX12UptJlQgmNwBFrUHm3sIBXg_-waqyvNgFQk,11856
|
|
154
155
|
hud/shared/hints.py,sha256=aa1CtBzsxLHRSZBFCXH00uY-1j2_7WLxYFwAy-neibE,5086
|
|
155
156
|
hud/shared/requests.py,sha256=HWrPp7nBSK4jhv9wqZdFiNrVaaxV0vWS8fcgGtoztBc,9479
|
|
156
157
|
hud/shared/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
157
|
-
hud/shared/tests/test_exceptions.py,sha256=
|
|
158
|
+
hud/shared/tests/test_exceptions.py,sha256=02UiYzqWqEtbrHxazZ1SBrOJL7-IXxWmeaU7n1Zf904,15565
|
|
158
159
|
hud/shared/tests/test_requests.py,sha256=nKFcSN1sjrOouVU2xik9lE5Wxapy3EWsO8iIXrM_Sts,9114
|
|
159
|
-
hud/telemetry/__init__.py,sha256=
|
|
160
|
+
hud/telemetry/__init__.py,sha256=oYJ9fiaiwUGzfMH0qBixX74uSpAR_hyhl8Y-REjmNak,1396
|
|
161
|
+
hud/telemetry/async_context.py,sha256=SjL1VNFdXmy_4t_gIbZslQ1Ea5vYC9Ibv9xeqr9elXw,11139
|
|
160
162
|
hud/telemetry/instrument.py,sha256=m3u6YK02PTk39Jr4L3se7l-cYyKx0maCaqf5Z5JqWNA,14096
|
|
161
|
-
hud/telemetry/job.py,sha256=
|
|
163
|
+
hud/telemetry/job.py,sha256=3W9KHLfBR13IYZvll496P9F6a9HUXCthFMY-MJLi7EA,13278
|
|
162
164
|
hud/telemetry/replay.py,sha256=YW17s314s5Wy6Rl8MXHqg1FU8EF9_XcHBMJI0rrkyS4,2306
|
|
163
|
-
hud/telemetry/trace.py,sha256=
|
|
165
|
+
hud/telemetry/trace.py,sha256=9zNfLIHM1UwfkUX23LmqUcIGX2hPzfHz_x2_G-DY-NA,5049
|
|
164
166
|
hud/telemetry/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
165
167
|
hud/telemetry/tests/test_replay.py,sha256=eREc6qgSJDRT1pOPdyhiEoEJ9H2yT1ospaU1RvTKlvg,1328
|
|
166
|
-
hud/telemetry/tests/test_trace.py,sha256=
|
|
168
|
+
hud/telemetry/tests/test_trace.py,sha256=EJ5j8gbTTGdVm3NXhrC7r-5dwNSNfW0a-8-wxo-Jow4,2512
|
|
167
169
|
hud/tools/__init__.py,sha256=i6lE0GxYcPnlLLd-55ryCCHo7o9anC4RfqkuYFXvzMQ,1009
|
|
168
170
|
hud/tools/base.py,sha256=IxpnEHfxUtgz1k_w-09l65KKpDV3tQu4WdF3nZDsdwU,17854
|
|
169
171
|
hud/tools/bash.py,sha256=1jl7cpB1ApGXn7Hy8zghJ2fXugEol6UeN0aYUSiM2EQ,5189
|
|
@@ -177,10 +179,10 @@ hud/tools/computer/__init__.py,sha256=QCdQG94XmKTCSOVkJI2e7NOP4bfpyAEkgEI9RQ-zbg
|
|
|
177
179
|
hud/tools/computer/anthropic.py,sha256=oJfNMnjNFAn9mW1xY1nbWnTY2IqwFqdDR0mWSf8lu-s,17352
|
|
178
180
|
hud/tools/computer/hud.py,sha256=v2VdLMsc8-3J4_k2vpcZRr_RJzXsxdVNs6IfbCL-WTc,16466
|
|
179
181
|
hud/tools/computer/openai.py,sha256=QEsF45LWOHftDrAoIOnCFZZT1cL--s-ArSov5aluWb8,11189
|
|
180
|
-
hud/tools/computer/qwen.py,sha256=
|
|
182
|
+
hud/tools/computer/qwen.py,sha256=K8FZfy664fQW6DXxeWTr2AorKIGxr9h_AeL-0vEYws8,18578
|
|
181
183
|
hud/tools/computer/settings.py,sha256=GUvi9y3JtA2u-l1dkGcMH8kHSKOPlxTOnHaG0ocv_gI,3347
|
|
182
184
|
hud/tools/executors/__init__.py,sha256=jHxfus9SLhkL6YGtebR5RyKYyVAix3yu5EkUp2Q27Kg,732
|
|
183
|
-
hud/tools/executors/base.py,sha256=
|
|
185
|
+
hud/tools/executors/base.py,sha256=mF_aiVoVkasoUi8hDyEtXMWbHKd4imKeFFJLJmQsjSY,14636
|
|
184
186
|
hud/tools/executors/pyautogui.py,sha256=Gw3x2yw7x9xJ1uhYLxkOkArPnUQagUN1AZgBZ7YgbWo,22362
|
|
185
187
|
hud/tools/executors/xdo.py,sha256=UF53DbMX-bRGiHd-O7cCJmCrVaYuP83xiJggER7HcDk,18137
|
|
186
188
|
hud/tools/executors/tests/__init__.py,sha256=opFpGSH6cEqIZgt9izXd3Yt85pC7xkxiYmOZQTHf4AY,32
|
|
@@ -213,6 +215,7 @@ hud/utils/hud_console.py,sha256=ms2lXk3ZhYNmpGb0Dn902SKJBYfqo8Aa9DzkkC-xGSI,2359
|
|
|
213
215
|
hud/utils/mcp.py,sha256=pMadd7A0DH6Y_aWywKU8jVYu2pRHGPEndV2ZQFrrj60,2888
|
|
214
216
|
hud/utils/pretty_errors.py,sha256=WGeL4CTHtlA6KgPuV_JSX5l6H4-xbuTp6Y6tw1bkiFg,2430
|
|
215
217
|
hud/utils/progress.py,sha256=suikwFM8sdSfkV10nAOEaInDhG4XKgOSvFePg4jSj1A,5927
|
|
218
|
+
hud/utils/task_tracking.py,sha256=QsW8UqVqyjz5tl_qi65SaulOz7Zc-8hQMbafpVESyeU,8113
|
|
216
219
|
hud/utils/tasks.py,sha256=7i36ck84gz1GZxhn9jryMBvKgMmcvLVu1YH5n3Y23-c,4985
|
|
217
220
|
hud/utils/telemetry.py,sha256=hrVIx2rUjSGyy9IVxTZ_3Jii83PiHjyFRd5ls2whimM,1863
|
|
218
221
|
hud/utils/tool_shorthand.py,sha256=_haLgK3yazLR2Y0jlEHUUQjw9uZCxi9yTipAwdOAJ70,2148
|
|
@@ -222,10 +225,10 @@ hud/utils/tests/test_init.py,sha256=2QLQSGgyP9wJhOvPCusm_zjJad0qApOZi1BXpxcdHXQ,
|
|
|
222
225
|
hud/utils/tests/test_mcp.py,sha256=0pUa16mL-bqbZDXp5NHBnt1gO5o10BOg7zTMHZ1DNPM,4023
|
|
223
226
|
hud/utils/tests/test_progress.py,sha256=QSF7Kpi03Ff_l3mAeqW9qs1nhK50j9vBiSobZq7T4f4,7394
|
|
224
227
|
hud/utils/tests/test_telemetry.py,sha256=5jl7bEx8C8b-FfFUko5pf4UY-mPOR-9HaeL98dGtVHM,2781
|
|
225
|
-
hud/utils/tests/test_version.py,sha256=
|
|
228
|
+
hud/utils/tests/test_version.py,sha256=xbDp54OYQbjZS-l8yLfDbe9oY3L9FssclDNNznXVU2A,160
|
|
226
229
|
hud/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
227
|
-
hud_python-0.4.
|
|
228
|
-
hud_python-0.4.
|
|
229
|
-
hud_python-0.4.
|
|
230
|
-
hud_python-0.4.
|
|
231
|
-
hud_python-0.4.
|
|
230
|
+
hud_python-0.4.52.dist-info/METADATA,sha256=AeVDqBO6y829yPVcjpQv86phfPCcuuUTRhbuStw16go,22306
|
|
231
|
+
hud_python-0.4.52.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
232
|
+
hud_python-0.4.52.dist-info/entry_points.txt,sha256=jJbodNFg1m0-CDofe5AHvB4zKBq7sSdP97-ohaQ3ae4,63
|
|
233
|
+
hud_python-0.4.52.dist-info/licenses/LICENSE,sha256=yIzBheVUf86FC1bztAcr7RYWWNxyd3B-UJQ3uddg1HA,1078
|
|
234
|
+
hud_python-0.4.52.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|