hud-python 0.4.40__py3-none-any.whl → 0.4.42__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/agents/__init__.py CHANGED
@@ -2,14 +2,12 @@ from __future__ import annotations
2
2
 
3
3
  from .base import MCPAgent
4
4
  from .claude import ClaudeAgent
5
- from .lite_llm import LiteAgent
6
5
  from .openai import OperatorAgent
7
6
  from .openai_chat_generic import GenericOpenAIChatAgent
8
7
 
9
8
  __all__ = [
10
9
  "ClaudeAgent",
11
10
  "GenericOpenAIChatAgent",
12
- "LiteAgent",
13
11
  "MCPAgent",
14
12
  "OperatorAgent",
15
13
  ]
@@ -204,7 +204,9 @@ class GenericOpenAIChatAgent(MCPAgent):
204
204
 
205
205
  try:
206
206
  response = await self._invoke_chat_completion(
207
- messages=messages, tools=tools, extra=extra # type: ignore
207
+ messages=messages,
208
+ tools=tools, # type: ignore
209
+ extra=extra,
208
210
  )
209
211
  except Exception as e:
210
212
  error_content = f"Error getting response {e}"
hud/cli/flows/tasks.py CHANGED
@@ -212,14 +212,14 @@ def convert_tasks_to_remote(tasks_file: str) -> str:
212
212
  # Check if tasks already have remote URLs
213
213
  already_remote = _validate_tasks(tasks)
214
214
 
215
+ # If tasks already reference a remote MCP URL, do not require a local environment
216
+ # or attempt any image updates. Use the dataset as-is.
217
+ if already_remote:
218
+ return str(tasks_path)
219
+
215
220
  # Extract existing images from tasks
216
221
  existing_images = _extract_existing_images(tasks)
217
222
 
218
- # Load tasks (supports .json and .jsonl)
219
- if already_remote and not existing_images:
220
- # Tasks are remote but have no image references - just return as-is
221
- return str(tasks_path)
222
-
223
223
  # Locate environment
224
224
  env_dir = find_environment_dir(tasks_path)
225
225
  if not env_dir:
hud/cli/rl/gpu_utils.py CHANGED
@@ -253,6 +253,8 @@ def adjust_config_for_ddp(config: Config, num_gpus: int) -> Config:
253
253
  # Update max_parallel_episodes to match
254
254
  config.actor.max_parallel_episodes = config.training.batch_size
255
255
 
256
+ config.training.num_gpus = num_gpus
257
+
256
258
  # Log the adjustment
257
259
  from rich.console import Console
258
260
 
@@ -13,6 +13,7 @@ from pathlib import Path
13
13
  from rich.console import Console
14
14
 
15
15
  from hud.cli.rl.celebrate import show_confetti_async
16
+ from hud.cli.rl.gpu_utils import adjust_config_for_ddp
16
17
  from hud.cli.rl.viewer import show_json_interactive
17
18
  from hud.cli.rl.wait_utils import wait_for_enter_cancel_or_change
18
19
  from hud.utils.hud_console import hud_console
@@ -309,7 +310,7 @@ def run_remote_training(
309
310
  # console.print(gpu_table)
310
311
 
311
312
  if yes:
312
- gpu_choice = "A100" # Default GPU in yes mode
313
+ gpu_choice = "A100"
313
314
  hud_console.info(f"Auto-selecting GPU: {gpu_choice} 80GB (--yes mode)")
314
315
  else:
315
316
  gpu_choice = hud_console.select(
@@ -322,7 +323,7 @@ def run_remote_training(
322
323
  )
323
324
 
324
325
  if yes:
325
- num_gpus = 1 # Default to 1 GPU in yes mode
326
+ num_gpus = 2 # Default to 2 GPUs in yes mode
326
327
  hud_console.info(f"Auto-selecting {num_gpus} GPU(s) (--yes mode)")
327
328
  else:
328
329
  num_gpus = hud_console.select(
@@ -347,6 +348,10 @@ def run_remote_training(
347
348
  yes=yes,
348
349
  )
349
350
 
351
+ config = adjust_config_for_ddp(config, int(num_gpus))
352
+
353
+ config.training.gpu_type = gpu_choice
354
+
350
355
  # Use a short label for tasks (avoid full absolute paths)
351
356
  try:
352
357
  if tasks_file and Path(tasks_file).exists():
@@ -357,7 +362,7 @@ def run_remote_training(
357
362
  except Exception:
358
363
  tasks_label = str(tasks_file)
359
364
 
360
- config.job_name = f"RL {model_name} on {tasks_label}"
365
+ config.job_name = f"RL {tasks_label} | {model_name}"
361
366
 
362
367
  # Save config so user can review/edit externally
363
368
  temp_config_path = Path(f".rl_config_temp_{model_name}.json")
@@ -421,8 +426,8 @@ def run_remote_training(
421
426
  hud_console.info(f"Loading configuration from: {config_file}")
422
427
  config = load_config(config_file)
423
428
  config_dict = config.to_dict()
424
- gpu_choice = "A100" # Default
425
- num_gpus = 1 # Default for non-interactive mode
429
+ gpu_choice = config.training.gpu_type
430
+ num_gpus = config.training.num_gpus
426
431
 
427
432
  # Launch training
428
433
  try:
hud/rl/actor.py CHANGED
@@ -109,7 +109,7 @@ class Actor:
109
109
 
110
110
  # Run the task
111
111
  try:
112
- with hud.trace(f"Training | {task.id}", job_id=job_id):
112
+ with hud.trace(f"Training | {task.prompt}", job_id=job_id):
113
113
  result = await agent.run(task, max_steps=self.actor_config.max_steps_per_episode)
114
114
 
115
115
  except Exception:
hud/rl/config.py CHANGED
@@ -61,6 +61,9 @@ class ModelConfig:
61
61
  @dataclass
62
62
  class TrainingConfig:
63
63
  """Training hyperparameters."""
64
+ # GPU parameters
65
+ gpu_type: str = "A100"
66
+ num_gpus: int = 2
64
67
 
65
68
  # Training parameters
66
69
  training_steps: int = 100
hud/rl/train.py CHANGED
@@ -103,7 +103,10 @@ async def train(config: Config, tasks: list[Task]) -> None:
103
103
  if is_main_process():
104
104
  hud_console.info(f"Creating job with config.job_id: {config.job_id}")
105
105
  job_obj = hud.create_job(
106
- job_id=config.job_id, name=config.job_name, metadata={"config": config.to_dict()}
106
+ job_id=config.job_id, name=config.job_name, metadata={
107
+ "config": config.to_dict(),
108
+ "agent_class": config.model.base_model
109
+ }
107
110
  )
108
111
  hud_console.info(f"Created job with job_obj.id: {job_obj.id}")
109
112
  job_obj.update_status_sync("running")
@@ -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.40"
8
+ assert hud.__version__ == "0.4.42"
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.40"
7
+ __version__ = "0.4.42"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hud-python
3
- Version: 0.4.40
3
+ Version: 0.4.42
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
@@ -159,10 +159,10 @@ OSS RL environment + evals toolkit. Wrap software as environments, run benchmark
159
159
 
160
160
  ## Highlights
161
161
 
162
+ - 🎓 **[One-click RL](https://hud.so/models)** – Run `hud rl` to get a trained model on any environment.
162
163
  - 🚀 **[MCP environment skeleton](https://docs.hud.so/core-concepts/mcp-protocol)** – any agent can call any environment.
163
164
  - ⚡️ **[Live telemetry](https://hud.so)** – inspect every tool call, observation, and reward in real time.
164
165
  - 🗂️ **[Public benchmarks](https://hud.so/leaderboards)** – OSWorld-Verified, SheetBench-50, and more.
165
- - 🌱 **[Reinforcement learning built-in](rl/)** – Verifiers gym pipelines for GRPO on any environment.
166
166
  - 🌐 **[Cloud browsers](environments/remote_browser/)** – AnchorBrowser, Steel, BrowserBase integrations for browser automation.
167
167
  - 🛠️ **[Hot-reload dev loop](environments/README.md#phase-5-hot-reload-development-with-cursor-agent)** – `hud dev` for iterating on environments without rebuilds.
168
168
 
@@ -171,27 +171,46 @@ OSS RL environment + evals toolkit. Wrap software as environments, run benchmark
171
171
  ## Installation
172
172
 
173
173
  ```bash
174
- # Core installation - MCP servers, telemetry, basic tools for environment design
174
+ # SDK - MCP servers, telemetry, evaluation
175
175
  pip install hud-python
176
176
 
177
- # Agent installation - Adds AI providers, datasets
178
- pip install "hud-python[agent]"
179
-
180
- # CLI utilities
177
+ # CLI - RL pipeline, environment design
181
178
  uv tool install hud-python
182
179
  # uv tool update-shell
183
-
184
- # From source (latest)
185
- git clone https://github.com/hud-evals/hud-python
186
- pip install -e "hud-python[dev]"
187
180
  ```
188
181
 
189
182
  > See [docs.hud.so](https://docs.hud.so), or add docs to any MCP client:
190
183
  > `claude mcp add --transport http docs-hud https://docs.hud.so/mcp`
191
184
 
192
- ## Quickstart
185
+ Before starting, get your HUD_API_KEY at [hud.so](https://hud.so).
186
+
187
+
188
+ ## Quickstart: Training
189
+
190
+ RL using GRPO a Qwen2.5-VL model on any hud dataset:
191
+
192
+ ```bash
193
+ hud get hud-evals/basic-2048 # from HF
194
+ hud rl basic-2048.json
195
+ ```
196
+
197
+ > See [agent training docs](https://docs.hud.so/train-agents/quickstart)
193
198
 
194
- For a tutorial that explains the agent and evaluation design, run ([see quickstart docs](https://docs.hud.so/quickstart)):
199
+ Or make your own environment and dataset:
200
+
201
+ ```bash
202
+ hud init my-env && cd my-env
203
+ hud dev --interactive
204
+ # When ready to run:
205
+ hud rl
206
+ ```
207
+
208
+ > See [environment design docs](https://docs.hud.so/build-environments)
209
+
210
+
211
+ ## Quickstart: Evals
212
+
213
+ For a tutorial that explains the agent and evaluation design, run:
195
214
 
196
215
  ```python
197
216
  uvx hud-python quickstart
@@ -262,20 +281,22 @@ hud rl hud-evals/basic-2048
262
281
 
263
282
  # Option B: Download first, modify, then train
264
283
  hud get hud-evals/basic-2048
265
- hud rl basic-2048.jsonl
284
+ hud rl basic-2048.json
266
285
 
267
286
  # Optional: baseline evaluation
268
- hud eval basic-2048.jsonl
287
+ hud eval basic-2048.json
269
288
  ```
270
289
 
271
290
  Supports multi‑turn RL for both:
272
291
  - Language‑only models (e.g., `Qwen/Qwen2.5-7B-Instruct`)
273
292
  - Vision‑Language models (e.g., `Qwen/Qwen2.5-VL-3B-Instruct`)
274
293
 
275
- 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).
294
+ By default, `hud rl` provisions a persistent 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).
276
295
 
277
296
  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`.
278
297
 
298
+ Pricing: Hosted vLLM and training GPU rates are listed in the [Training Quickstart → Pricing](https://docs.hud.so/train-agents/quickstart#pricing). Manage billing at the [HUD billing dashboard](https://hud.so/project/billing).
299
+
279
300
  ## Benchmarking Agents
280
301
 
281
302
  This is Claude Computer Use running on our proprietary financial analyst benchmark [SheetBench-50](https://huggingface.co/datasets/hud-evals/SheetBench-50):
@@ -323,7 +344,7 @@ from hud.tools import HudComputerTool
323
344
  mcp = MCPServer("My Environment")
324
345
 
325
346
  # Add hud tools (see all tools: https://docs.hud.so/reference/tools)
326
- mcp.add_tool(HudComputerTool())
347
+ mcp.tool(HudComputerTool())
327
348
 
328
349
  # Or custom tools (see https://docs.hud.so/build-environments/adapting-software)
329
350
  @mcp.tool("launch_app"):
@@ -494,11 +515,10 @@ graph LR
494
515
 
495
516
  ## Roadmap
496
517
 
497
- - Merging our forks in to the main `mcp`, `mcp_use`, `verifiers` repositories
518
+ - Merging our forks in to the main `mcp`, `mcp_use` repositories
498
519
  - Helpers for building new environments (see [current guide](environments/README.md))
499
520
  - Integrations with every major agent framework
500
521
  - Evaluation environment registry
501
- - Native RL training to hud environments (see [current RL support](rl/))
502
522
  - MCP opentelemetry standard
503
523
 
504
524
  ## Contributing
@@ -509,7 +529,7 @@ Key areas:
509
529
  - [Environment examples](environments/) - Add new MCP environments
510
530
  - [Agent implementations](hud/agents/) - Add support for new LLM providers
511
531
  - [Tool library](hud/tools/) - Extend the built-in tool collection
512
- - [RL training](rl/) - Improve reinforcement learning pipelines
532
+ - [RL training](hud/rl/) - Improve reinforcement learning pipelines
513
533
 
514
534
  Thanks to all our contributors!
515
535
 
@@ -2,15 +2,15 @@ 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
4
  hud/types.py,sha256=pmPj_8emfMIfEY_fRS8NgIJ56kCsolWSqQjyCzXDaGY,11072
5
- hud/version.py,sha256=MeC_5pci_uhPpMI4A7nAgn7EX9Ulrl1f6IMzn4YaOO8,105
6
- hud/agents/__init__.py,sha256=d-t5-PHHDoEFCuhv-IrpixCu7syvrjqSrDekQ0SdFiM,335
5
+ hud/version.py,sha256=cq2TbXqf0IU0JmINUgqBhq-0yqdfvngAxHjSWlTSBns,105
6
+ hud/agents/__init__.py,sha256=UoIkljWdbq4bM0LD-mSaw6w826EqdEjOk7r6glNYwYQ,286
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
11
  hud/agents/lite_llm.py,sha256=_3wbUiYCp7q8Vyu9rhaoJDvmb_bsyUsLYWP3iQJ2bHo,2239
12
12
  hud/agents/openai.py,sha256=O1xV1h1l-W8lmnmXqTYr5CwnmnaniMqOxAZbl2CTTng,14576
13
- hud/agents/openai_chat_generic.py,sha256=TrNG2qD6myOsmNjKZaWE4jz7xEs0NheFiwabNQvU2Os,12117
13
+ hud/agents/openai_chat_generic.py,sha256=RUfXDZSUbOXQ2leR4_8PGpqvUzz5PJOWeR3PTticKUY,12150
14
14
  hud/agents/misc/__init__.py,sha256=BYi4Ytp9b_vycpZFXnr5Oyw6ncKLNNGml8Jrb7bWUb4,136
15
15
  hud/agents/misc/response_agent.py,sha256=uMuRDkz5QgaMQliNzBRepond5sb7KyqIiKm3LstjVnw,3753
16
16
  hud/agents/tests/__init__.py,sha256=W-O-_4i34d9TTyEHV-O_q1Ai1gLhzwDaaPo02_TWQIY,34
@@ -34,16 +34,16 @@ hud/cli/pull.py,sha256=XGEZ8n60tbzLQP_8d9h7XYmzyCW0e2-Rkr3_tLG7jvw,12449
34
34
  hud/cli/push.py,sha256=DsXFrMtWBZ-HUxt6VoLihpklk8JJIe2gy-GA4AMg6Kw,18805
35
35
  hud/cli/remove.py,sha256=8vGQyXDqgtjz85_vtusoIG8zurH4RHz6z8UMevQRYM4,6861
36
36
  hud/cli/flows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
- hud/cli/flows/tasks.py,sha256=0vqTd-pAVEqXYZUp2hntSXMu9JuCJkKZzJQ3YZ1r3AE,14564
37
+ hud/cli/flows/tasks.py,sha256=d-RsIV0rvzBuYN6WR7AOId19wzEy0z7SSW9c5RnEaqQ,14564
38
38
  hud/cli/rl/__init__.py,sha256=q0GIYRARpNkY8o1Sza5CjQq6cks_1W_SjGprybaCxq4,5193
39
39
  hud/cli/rl/celebrate.py,sha256=trGEJn3xebexlHwFVKPJKhRujVVV8sy7TQTJvRd2p9A,5947
40
40
  hud/cli/rl/config.py,sha256=VZ8fiOI22Aw6YTRk7gj1ozpF-TU7NK8QWQgWFwMbNs0,3235
41
41
  hud/cli/rl/display.py,sha256=hqJVGmO9csYinladhZwjF-GMvppYWngxDHajTyIJ_gM,5214
42
42
  hud/cli/rl/gpu.py,sha256=peXS-NdUF5RyuSs0aZoCzGLboneBUpCy8f9f99WMrG0,2009
43
- hud/cli/rl/gpu_utils.py,sha256=H5ckPwgj5EVP3yJ5eVihR5R7Y6Gp6pt8ZUfWCCwcLG4,11072
43
+ hud/cli/rl/gpu_utils.py,sha256=f7olAhIxLmZmvII9igwtqnjIRPenY9DP6m70hp4lP0U,11113
44
44
  hud/cli/rl/local_runner.py,sha256=NFsNmRZ4nenPnb45ZtdsILeICKEq11wmpLwq9E-a8ZE,22614
45
45
  hud/cli/rl/presets.py,sha256=DzOO82xL5QyzdVtlX-Do1CODMvDz9ILMPapjU92jcZg,3051
46
- hud/cli/rl/remote_runner.py,sha256=UP1Y9LKTK7-RDc9wczAM15F_zdFi0atzgSceOmb2Vjc,17369
46
+ hud/cli/rl/remote_runner.py,sha256=AXnmFGDqo4NcCpJ2RE-Q1HaKzIYlqFP1TWU4tQC_DFk,17500
47
47
  hud/cli/rl/rl_api.py,sha256=INJobvSa50ccR037u_GPsDa_9WboWyNwqEaoh9hcXj0,4306
48
48
  hud/cli/rl/viewer.py,sha256=ExQs1IX3T8x_9aBzc4JojZ779jmFvFTh7EjOYIHzYsU,4441
49
49
  hud/cli/rl/vllm.py,sha256=Gq_M6KsQArGz7FNIdemuM5mk16mu3xe8abpO2GCCuOE,6093
@@ -117,13 +117,13 @@ hud/otel/tests/__init__.py,sha256=VNJKBMaxTtbn7trW-1Ph50zCvCok_wTSGcI1HD6GOLA,43
117
117
  hud/otel/tests/test_processors.py,sha256=np0R4ssd9j6LJSJykJ5bNjl0POwNYNhgb7BqOZHwcMY,6778
118
118
  hud/rl/README.md,sha256=uFRpNFaEY8paq9k1C4miF7AGnbqHTGAsPmpcf9JIEeA,1189
119
119
  hud/rl/__init__.py,sha256=yYL7U1WV6L3mr3Hig48-4lhnryTaWj4nCXm4lG5vrYI,25
120
- hud/rl/actor.py,sha256=n2f2BI9IOK__x7Seirq6EQI0yyicMBYd5BjPsc4T9rQ,6946
120
+ hud/rl/actor.py,sha256=H6gwRGRY1YpkOyiaJ9yai8yQwcI-Gx0dFxd18jpLx_Q,6950
121
121
  hud/rl/buffer.py,sha256=z47HOjOBJx3umUzzUfdtq_N4ZoJ8FMBPkX8YQKBtd3A,15457
122
122
  hud/rl/chat_template.jinja,sha256=XTdzI8oFGEcSA-exKxyHaprwRDmX5Am1KEb0VxvUc6U,4965
123
- hud/rl/config.py,sha256=PAKYPCsKl8yg_j3gJSE5SJUgLM7j0lFy0K_Vt4-otDM,5384
123
+ hud/rl/config.py,sha256=0ejjbIMXqxjhz3VnIHX0QFtZ_0KmXNynTuHdg-i0M5o,5454
124
124
  hud/rl/distributed.py,sha256=8avhrb0lHYkhW22Z7MfkqSnlczWj5jMrUMEtkcoCf74,2473
125
125
  hud/rl/learner.py,sha256=FKIgIIghsNiDr_g090xokOO_BxNmTSj1O-TSJzIq_Uw,24703
126
- hud/rl/train.py,sha256=ZigkUKj-I1nsYmFByZprqaoDZ88LVDH-6auYneEPOsA,13555
126
+ hud/rl/train.py,sha256=i8_HocC92yC-wP_ZeQYUXLhJKNvsfX8mdnhO8gOf-8c,13641
127
127
  hud/rl/types.py,sha256=lrLKo7iaqodYth2EyeuOQfLiuzXfYM2eJjPmpObrD7c,3965
128
128
  hud/rl/utils.py,sha256=IsgVUUibxnUzb32a4mu1sYrgJC1CwoG9E-Dd5y5VDOA,19115
129
129
  hud/rl/vllm_adapter.py,sha256=2wnTfoXPI4C9EzhVxk0GU-ArLjX7hgXS0BndMwN8Ppg,4751
@@ -218,10 +218,10 @@ hud/utils/tests/test_init.py,sha256=2QLQSGgyP9wJhOvPCusm_zjJad0qApOZi1BXpxcdHXQ,
218
218
  hud/utils/tests/test_mcp.py,sha256=0pUa16mL-bqbZDXp5NHBnt1gO5o10BOg7zTMHZ1DNPM,4023
219
219
  hud/utils/tests/test_progress.py,sha256=QSF7Kpi03Ff_l3mAeqW9qs1nhK50j9vBiSobZq7T4f4,7394
220
220
  hud/utils/tests/test_telemetry.py,sha256=5jl7bEx8C8b-FfFUko5pf4UY-mPOR-9HaeL98dGtVHM,2781
221
- hud/utils/tests/test_version.py,sha256=PPBYoVCSAD6h9KpdCQUjFDGiUa6nkyxB_bZDergGuvA,160
221
+ hud/utils/tests/test_version.py,sha256=nPdE5Z40E9Q4XglmFTXKz9ffcgtlH7iV_yqI267-7ic,160
222
222
  hud/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
223
- hud_python-0.4.40.dist-info/METADATA,sha256=Px46NSbRJmX_1jMaYjoPSvkANXWYEz0jIRcJDf10-h8,21879
224
- hud_python-0.4.40.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
225
- hud_python-0.4.40.dist-info/entry_points.txt,sha256=jJbodNFg1m0-CDofe5AHvB4zKBq7sSdP97-ohaQ3ae4,63
226
- hud_python-0.4.40.dist-info/licenses/LICENSE,sha256=yIzBheVUf86FC1bztAcr7RYWWNxyd3B-UJQ3uddg1HA,1078
227
- hud_python-0.4.40.dist-info/RECORD,,
223
+ hud_python-0.4.42.dist-info/METADATA,sha256=cN0LvsjgX38My66ATDP5l_KqaokO9oRS8vWetmAL_So,22275
224
+ hud_python-0.4.42.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
225
+ hud_python-0.4.42.dist-info/entry_points.txt,sha256=jJbodNFg1m0-CDofe5AHvB4zKBq7sSdP97-ohaQ3ae4,63
226
+ hud_python-0.4.42.dist-info/licenses/LICENSE,sha256=yIzBheVUf86FC1bztAcr7RYWWNxyd3B-UJQ3uddg1HA,1078
227
+ hud_python-0.4.42.dist-info/RECORD,,