hud-python 0.4.30__py3-none-any.whl → 0.4.31__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/rl/train.py CHANGED
@@ -232,6 +232,9 @@ async def train(config: Config, tasks: list[Task]) -> None:
232
232
  )
233
233
  learner.save(str(checkpoint_path))
234
234
 
235
+ # Wait for 6 seconds to ensure the checkpoint is saved
236
+ await asyncio.sleep(6)
237
+
235
238
  adapter_name = f"{config.adapter_prefix}-{checkpoint_id}"
236
239
  if vllm.load_adapter(adapter_name, str(checkpoint_path)):
237
240
  actor.update_adapter(adapter_name)
hud/rl/vllm_adapter.py CHANGED
@@ -35,20 +35,38 @@ class VLLMAdapter:
35
35
  url = f"{self.base_url}/load_lora_adapter"
36
36
  headers = {"Authorization": f"Bearer {self.api_key}", "Content-Type": "application/json"}
37
37
  payload = {"lora_name": adapter_name, "lora_path": adapter_path}
38
-
39
- try:
40
- response = requests.post(
41
- url, headers=headers, data=json.dumps(payload), timeout=timeout
42
- )
43
- response.raise_for_status()
44
-
45
- self.current_adapter = adapter_name
46
- hud_console.info(f"[VLLMAdapter] Loaded adapter: {adapter_name}")
47
- return True
48
-
49
- except requests.exceptions.RequestException as e:
50
- hud_console.error(f"[VLLMAdapter] Failed to load adapter {adapter_name}: {e}")
51
- return False
38
+ # Implement exponential backoff for retrying the adapter load request.
39
+ max_retries = 5
40
+ backoff_factor = 2
41
+ delay = 1 # initial delay in seconds
42
+
43
+ for attempt in range(1, max_retries + 1):
44
+ try:
45
+ response = requests.post(
46
+ url, headers=headers, data=json.dumps(payload), timeout=timeout
47
+ )
48
+ response.raise_for_status()
49
+
50
+ self.current_adapter = adapter_name
51
+ hud_console.info(f"[VLLMAdapter] Loaded adapter: {adapter_name}")
52
+ return True
53
+
54
+ except requests.exceptions.RequestException as e:
55
+ if attempt == max_retries:
56
+ hud_console.error(
57
+ f"[VLLMAdapter] Failed to load adapter {adapter_name} after {attempt} attempts: {e}" # noqa: E501
58
+ )
59
+ return False
60
+ else:
61
+ hud_console.warning(
62
+ f"[VLLMAdapter] Load adapter {adapter_name} failed (attempt {attempt}/{max_retries}): {e}. Retrying in {delay} seconds...", # noqa: E501
63
+ )
64
+ import time
65
+
66
+ time.sleep(delay)
67
+ delay *= backoff_factor
68
+
69
+ return False
52
70
 
53
71
  def unload_adapter(self, adapter_name: str) -> bool:
54
72
  """
@@ -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.30"
8
+ assert hud.__version__ == "0.4.31"
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.30"
7
+ __version__ = "0.4.31"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hud-python
3
- Version: 0.4.30
3
+ Version: 0.4.31
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
@@ -35,15 +35,20 @@ Classifier: Programming Language :: Python :: 3.11
35
35
  Classifier: Programming Language :: Python :: 3.12
36
36
  Classifier: Programming Language :: Python :: 3.13
37
37
  Requires-Python: <3.13,>=3.11
38
+ Requires-Dist: anthropic
39
+ Requires-Dist: datasets>=2.14.0
38
40
  Requires-Dist: httpx<1,>=0.23.0
39
41
  Requires-Dist: hud-fastmcp-python-sdk>=0.1.2
40
42
  Requires-Dist: hud-mcp-python-sdk>=3.13.2
41
43
  Requires-Dist: hud-mcp-use-python-sdk>=2.3.16
44
+ Requires-Dist: numpy>=1.24.0
45
+ Requires-Dist: openai
42
46
  Requires-Dist: opentelemetry-api>=1.34.1
43
47
  Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.34.1
44
48
  Requires-Dist: opentelemetry-instrumentation-mcp==0.47.0
45
49
  Requires-Dist: opentelemetry-sdk>=1.34.1
46
50
  Requires-Dist: pathspec>=0.12.1
51
+ Requires-Dist: pillow>=11.1.0
47
52
  Requires-Dist: prompt-toolkit==3.0.51
48
53
  Requires-Dist: pydantic-settings<3,>=2
49
54
  Requires-Dist: pydantic<3,>=2
@@ -54,8 +59,6 @@ Requires-Dist: typer>=0.9.0
54
59
  Requires-Dist: watchfiles>=0.21.0
55
60
  Requires-Dist: wrapt>=1.14.0
56
61
  Provides-Extra: agent
57
- Requires-Dist: anthropic; extra == 'agent'
58
- Requires-Dist: datasets>=2.14.0; extra == 'agent'
59
62
  Requires-Dist: dotenv>=0.9.9; extra == 'agent'
60
63
  Requires-Dist: ipykernel; extra == 'agent'
61
64
  Requires-Dist: ipython<9; extra == 'agent'
@@ -64,12 +67,7 @@ Requires-Dist: jupyter-core; extra == 'agent'
64
67
  Requires-Dist: langchain; extra == 'agent'
65
68
  Requires-Dist: langchain-anthropic; extra == 'agent'
66
69
  Requires-Dist: langchain-openai; extra == 'agent'
67
- Requires-Dist: numpy>=1.24.0; extra == 'agent'
68
- Requires-Dist: openai; extra == 'agent'
69
- Requires-Dist: pillow>=11.1.0; extra == 'agent'
70
70
  Provides-Extra: agents
71
- Requires-Dist: anthropic; extra == 'agents'
72
- Requires-Dist: datasets>=2.14.0; extra == 'agents'
73
71
  Requires-Dist: dotenv>=0.9.9; extra == 'agents'
74
72
  Requires-Dist: ipykernel; extra == 'agents'
75
73
  Requires-Dist: ipython<9; extra == 'agents'
@@ -78,13 +76,8 @@ Requires-Dist: jupyter-core; extra == 'agents'
78
76
  Requires-Dist: langchain; extra == 'agents'
79
77
  Requires-Dist: langchain-anthropic; extra == 'agents'
80
78
  Requires-Dist: langchain-openai; extra == 'agents'
81
- Requires-Dist: numpy>=1.24.0; extra == 'agents'
82
- Requires-Dist: openai; extra == 'agents'
83
- Requires-Dist: pillow>=11.1.0; extra == 'agents'
84
79
  Provides-Extra: dev
85
80
  Requires-Dist: aiodocker>=0.24.0; extra == 'dev'
86
- Requires-Dist: anthropic; extra == 'dev'
87
- Requires-Dist: datasets>=2.14.0; extra == 'dev'
88
81
  Requires-Dist: dotenv>=0.9.9; extra == 'dev'
89
82
  Requires-Dist: inspect-ai>=0.3.80; extra == 'dev'
90
83
  Requires-Dist: ipykernel; extra == 'dev'
@@ -94,8 +87,6 @@ Requires-Dist: jupyter-core; extra == 'dev'
94
87
  Requires-Dist: langchain; extra == 'dev'
95
88
  Requires-Dist: langchain-anthropic; extra == 'dev'
96
89
  Requires-Dist: langchain-openai; extra == 'dev'
97
- Requires-Dist: numpy>=1.24.0; extra == 'dev'
98
- Requires-Dist: openai; extra == 'dev'
99
90
  Requires-Dist: pillow>=11.1.0; extra == 'dev'
100
91
  Requires-Dist: playwright; extra == 'dev'
101
92
  Requires-Dist: pyautogui>=0.9.54; extra == 'dev'
@@ -108,9 +99,7 @@ Requires-Dist: ruff>=0.11.8; extra == 'dev'
108
99
  Requires-Dist: setuptools; extra == 'dev'
109
100
  Requires-Dist: textdistance<5,>=4.5.0; extra == 'dev'
110
101
  Provides-Extra: rl
111
- Requires-Dist: anthropic; extra == 'rl'
112
102
  Requires-Dist: bitsandbytes>=0.41.0; (sys_platform == 'linux') and extra == 'rl'
113
- Requires-Dist: datasets>=2.14.0; extra == 'rl'
114
103
  Requires-Dist: dotenv>=0.9.9; extra == 'rl'
115
104
  Requires-Dist: ipykernel; extra == 'rl'
116
105
  Requires-Dist: ipython<9; extra == 'rl'
@@ -120,10 +109,7 @@ Requires-Dist: langchain; extra == 'rl'
120
109
  Requires-Dist: langchain-anthropic; extra == 'rl'
121
110
  Requires-Dist: langchain-openai; extra == 'rl'
122
111
  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
112
  Requires-Dist: peft>=0.17.1; extra == 'rl'
126
- Requires-Dist: pillow>=11.1.0; extra == 'rl'
127
113
  Requires-Dist: vllm==0.10.1.1; extra == 'rl'
128
114
  Description-Content-Type: text/markdown
129
115
 
@@ -239,21 +225,34 @@ The above example let's the agent play 2048 ([See replay](https://app.hud.so/tra
239
225
 
240
226
  ## Reinforcement Learning with GRPO
241
227
 
242
- This is a Qwen-2.5-3B agent training a policy on the [`text-2048`](environments/text_2048/) environment (see above) using [Verifiers](rl/):
228
+ This is a Qwen2.5‑VL‑3B agent training a policy on the 2048-basic browser environment:
243
229
 
244
230
  ![RL curve](https://raw.githubusercontent.com/hud-evals/hud-python/main/docs/src/images/rl_2.png)
245
231
 
246
- To start training, check out the [`rl/README.md`](rl/README.md) folder:
232
+ Train with the new interactive `hud rl` flow:
247
233
 
248
234
  ```bash
249
- git clone https://github.com/hud-evals/hud-python
250
- cd hud-python/rl
251
- python train_2048.py
235
+ # Install CLI with RL extras
236
+ uv tool install "hud-python[rl]"
237
+
238
+ # Option A: Run directly from a HuggingFace dataset
239
+ hud rl hud-evals/basic-2048
240
+
241
+ # Option B: Download first, modify, then train
242
+ hud get hud-evals/basic-2048
243
+ hud rl basic-2048.jsonl
244
+
245
+ # Optional: baseline evaluation
246
+ hud eval basic-2048.jsonl
252
247
  ```
253
248
 
254
- Any hud MCP environment and evaluation works with our RL pipeline. Even our remote configurations!
249
+ Supports multi‑turn RL for both:
250
+ - Language‑only models (e.g., `Qwen/Qwen2.5-7B-Instruct`)
251
+ - Vision‑Language models (e.g., `Qwen/Qwen2.5-VL-3B-Instruct`)
252
+
253
+ 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).
255
254
 
256
- > The [`rl/README.md`](rl/README.md) walks you through several examples of RL training and takes less than 15 minutes to set up for your custom agent!
255
+ 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`.
257
256
 
258
257
  ## Benchmarking Agents
259
258
 
@@ -2,14 +2,14 @@ hud/__init__.py,sha256=JMDFUE1pP0J1Xl_miBdt7ERvoffZmTzSFe8yxz512A8,552
2
2
  hud/__main__.py,sha256=YR8Dq8OhINOsVfQ55PmRXXg4fEK84Rt_-rMtJ5rvhWo,145
3
3
  hud/settings.py,sha256=sMS31iW1m-5VpWk-Blhi5-obLcUA0fwxWE1GgJz-vqU,2708
4
4
  hud/types.py,sha256=Cn9suZ_ZitLnxmnknfbCYVvmLsXRWI56kJ3LXtdfI6M,10157
5
- hud/version.py,sha256=4eP4L4p9KEmmsjMwwEEDGX8nC__z95NS2DhdflB5qqw,105
5
+ hud/version.py,sha256=wQqwRzN9OMugX4H2oCdAp5bWBbjfBRrvQGeo_0_uaYs,105
6
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=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=H33CE8W3eYmQOJp8C5VcrvnG2AjBu02TWigHctEZNoI,11604
12
+ hud/agents/openai_chat_generic.py,sha256=7n7timn3fvNRnL2xzWyOTeNTchej2r9cAL1mU6YnFdY,11605
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
@@ -27,20 +27,21 @@ hud/cli/debug.py,sha256=jtFW8J5F_3rhq1Hf1_SkJ7aLS3wjnyIs_LsC8k5cnzc,14200
27
27
  hud/cli/dev.py,sha256=56vQdH9oe_XGnOcRcFbNIsLEoBnpCl1eANlRFUeddHQ,31734
28
28
  hud/cli/eval.py,sha256=W_eY4uoIQwHcSCvxNaQeRfWC10uQA1UhBWiNQzQPuXM,22694
29
29
  hud/cli/get.py,sha256=sksKrdzBGZa7ZuSoQkc0haj-CvOGVSSikoVXeaUd3N4,6274
30
- hud/cli/init.py,sha256=XswZB2ZnzdE0pxP1kRmO3bHfWGCrKAyrME34ZyPzs98,19715
30
+ hud/cli/init.py,sha256=McZwpxZMXD-It_PXINCUy-SwUaPiQ7jdpSU5-F-caO8,19671
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
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
36
+ hud/cli/flows/tasks.py,sha256=8r-51oon3anwMAi5cyAOgC3iB48jnqlOUO3iTWmqsyI,6372
37
+ hud/cli/rl/__init__.py,sha256=BeqXdmzPwVBptz4j796XJRxSC5B_9tQta5aKd0jDMvo,5000
38
38
  hud/cli/rl/config.py,sha256=iNhCxotM33OEiP9gqPvn8A_AxrBVe6fcFCQTvc13xzA,2884
39
39
  hud/cli/rl/display.py,sha256=hqJVGmO9csYinladhZwjF-GMvppYWngxDHajTyIJ_gM,5214
40
40
  hud/cli/rl/gpu.py,sha256=peXS-NdUF5RyuSs0aZoCzGLboneBUpCy8f9f99WMrG0,2009
41
41
  hud/cli/rl/gpu_utils.py,sha256=H5ckPwgj5EVP3yJ5eVihR5R7Y6Gp6pt8ZUfWCCwcLG4,11072
42
+ hud/cli/rl/local_runner.py,sha256=GssmDgCxGfFsi31aFj22vwCiwa9ELllEwQjbActxSXY,21514
42
43
  hud/cli/rl/presets.py,sha256=DzOO82xL5QyzdVtlX-Do1CODMvDz9ILMPapjU92jcZg,3051
43
- hud/cli/rl/remote_runner.py,sha256=dOl6UBTJoE3lDGydETG1oXXRF44Bsy4JzeL62VxeMRM,12710
44
+ hud/cli/rl/remote_runner.py,sha256=Umyjjbtw6ikyNNfVGjn6sY6Qnta8Uc1KC7KzMgFaJVw,13146
44
45
  hud/cli/rl/rl_api.py,sha256=INJobvSa50ccR037u_GPsDa_9WboWyNwqEaoh9hcXj0,4306
45
46
  hud/cli/rl/vllm.py,sha256=Gq_M6KsQArGz7FNIdemuM5mk16mu3xe8abpO2GCCuOE,6093
46
47
  hud/cli/tests/__init__.py,sha256=ZrGVkmH7DHXGqOvjOSNGZeMYaFIRB2K8c6hwr8FPJ-8,68
@@ -61,7 +62,7 @@ hud/cli/tests/test_registry.py,sha256=-o9MvQTcBElteqrg0XW8Bg59KrHCt88ZyPqeaAlyyT
61
62
  hud/cli/tests/test_utils.py,sha256=_oa2lTvgqJxXe0Mtovxb8x-Sug-f6oJJKvG67r5pFtA,13474
62
63
  hud/cli/utils/__init__.py,sha256=L6s0oNzY2LugGp9faodCPnjzM-ZUorUH05-HmYOq5hY,35
63
64
  hud/cli/utils/cursor.py,sha256=fy850p0rVp5k_1wwOCI7rK1SggbselJrywFInSQ2gio,3009
64
- hud/cli/utils/docker.py,sha256=VTUcoPqxh3uXOgvL6NSqYiSDhyCPRp3jTfFbnIDwumg,3774
65
+ hud/cli/utils/docker.py,sha256=-nAj7wRRIilbezG0-pCHA2-tleoqUJN9sDXHxvMWilU,7331
65
66
  hud/cli/utils/environment.py,sha256=y_c0ohxWrM054ZKid0KOQPzs2M2vh985AsumPG2wTPc,4282
66
67
  hud/cli/utils/interactive.py,sha256=tcwp9HkAyr2_GiM3Raba4h0P_OgCksQKram80BucPo4,16546
67
68
  hud/cli/utils/logging.py,sha256=DyOWuzZUg6HeKCqfs6ufb703XS3bW4G2pzaXVAvDqvA,9018
@@ -113,10 +114,10 @@ hud/rl/chat_template.jinja,sha256=XTdzI8oFGEcSA-exKxyHaprwRDmX5Am1KEb0VxvUc6U,49
113
114
  hud/rl/config.py,sha256=PAKYPCsKl8yg_j3gJSE5SJUgLM7j0lFy0K_Vt4-otDM,5384
114
115
  hud/rl/distributed.py,sha256=8avhrb0lHYkhW22Z7MfkqSnlczWj5jMrUMEtkcoCf74,2473
115
116
  hud/rl/learner.py,sha256=FKIgIIghsNiDr_g090xokOO_BxNmTSj1O-TSJzIq_Uw,24703
116
- hud/rl/train.py,sha256=oZQGo0Wvb2LSrhh-7FLOsGCvI4G4AjgAAvF9P0k9l1Q,13436
117
+ hud/rl/train.py,sha256=ZigkUKj-I1nsYmFByZprqaoDZ88LVDH-6auYneEPOsA,13555
117
118
  hud/rl/types.py,sha256=lrLKo7iaqodYth2EyeuOQfLiuzXfYM2eJjPmpObrD7c,3965
118
119
  hud/rl/utils.py,sha256=IsgVUUibxnUzb32a4mu1sYrgJC1CwoG9E-Dd5y5VDOA,19115
119
- hud/rl/vllm_adapter.py,sha256=TBNo5lyNzszg6ATk9JoEZAm-xk_tcUJmq9YXwF1NB5w,3961
120
+ hud/rl/vllm_adapter.py,sha256=O2_TdTGIyNr9zRGhCw18XWjOKYzEM3049wvlyL2x0sc,4751
120
121
  hud/rl/tests/__init__.py,sha256=PXmD3Gs6xOAwaYKb4HnwZERDjX05N1QF-aU6ya0dBtE,27
121
122
  hud/rl/tests/test_learner.py,sha256=qfSHFFROteRb98TjBuAKjFmZjCGfuWXPysVvTAWJ7wQ,6025
122
123
  hud/rl/utils/start_vllm_server.sh,sha256=ThPokrLK_Qm_uh916fHXXBfMlw1TC97P57-AEI5MuOc,910
@@ -197,10 +198,10 @@ hud/utils/tests/test_init.py,sha256=2QLQSGgyP9wJhOvPCusm_zjJad0qApOZi1BXpxcdHXQ,
197
198
  hud/utils/tests/test_mcp.py,sha256=0pUa16mL-bqbZDXp5NHBnt1gO5o10BOg7zTMHZ1DNPM,4023
198
199
  hud/utils/tests/test_progress.py,sha256=QSF7Kpi03Ff_l3mAeqW9qs1nhK50j9vBiSobZq7T4f4,7394
199
200
  hud/utils/tests/test_telemetry.py,sha256=5jl7bEx8C8b-FfFUko5pf4UY-mPOR-9HaeL98dGtVHM,2781
200
- hud/utils/tests/test_version.py,sha256=jpqi_MLI03sxvfOaaX6i6wE6qhR1oLlH1VDVqdtAj6U,160
201
+ hud/utils/tests/test_version.py,sha256=qN98qLlKKeM-W-AM1q1s0Lci8phBQ7SUd_L-0yVmujA,160
201
202
  hud/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
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,,
203
+ hud_python-0.4.31.dist-info/METADATA,sha256=UZMnmiRCMmHmXOD0BrkQs7Caqk5t8HcllxWPwR2SSzc,20861
204
+ hud_python-0.4.31.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
205
+ hud_python-0.4.31.dist-info/entry_points.txt,sha256=jJbodNFg1m0-CDofe5AHvB4zKBq7sSdP97-ohaQ3ae4,63
206
+ hud_python-0.4.31.dist-info/licenses/LICENSE,sha256=yIzBheVUf86FC1bztAcr7RYWWNxyd3B-UJQ3uddg1HA,1078
207
+ hud_python-0.4.31.dist-info/RECORD,,