hud-python 0.6.0__py3-none-any.whl → 0.6.2__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.
- hud/cli/init.py +101 -30
- hud/cli/models.py +4 -0
- hud/cli/presets.py +139 -0
- hud/cli/tests/test_init.py +3 -3
- hud/utils/gateway.py +1 -0
- hud/version.py +1 -1
- {hud_python-0.6.0.dist-info → hud_python-0.6.2.dist-info}/METADATA +1 -1
- {hud_python-0.6.0.dist-info → hud_python-0.6.2.dist-info}/RECORD +11 -10
- {hud_python-0.6.0.dist-info → hud_python-0.6.2.dist-info}/WHEEL +0 -0
- {hud_python-0.6.0.dist-info → hud_python-0.6.2.dist-info}/entry_points.txt +0 -0
- {hud_python-0.6.0.dist-info → hud_python-0.6.2.dist-info}/licenses/LICENSE +0 -0
hud/cli/init.py
CHANGED
|
@@ -1,19 +1,29 @@
|
|
|
1
1
|
"""``hud init``: scaffold a new HUD environment package.
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
network, no API key
|
|
3
|
+
By default (or in a non-interactive shell) it writes a minimal local scaffold —
|
|
4
|
+
no network, no API key. With ``--preset`` (or via the interactive picker) it
|
|
5
|
+
downloads one of the starter environments from GitHub instead — the same set the
|
|
6
|
+
platform's *environments/new* flow offers. See :mod:`hud.cli.presets`.
|
|
5
7
|
"""
|
|
6
8
|
|
|
7
9
|
from __future__ import annotations
|
|
8
10
|
|
|
11
|
+
import shutil
|
|
12
|
+
import sys
|
|
13
|
+
import tarfile
|
|
9
14
|
from pathlib import Path
|
|
15
|
+
from typing import Any
|
|
10
16
|
|
|
17
|
+
import httpx
|
|
11
18
|
import typer
|
|
12
19
|
|
|
13
20
|
from hud.utils.hud_console import HUDConsole
|
|
14
21
|
|
|
22
|
+
from .presets import ENVIRONMENT_PRESETS, PRESETS_BY_ID, EnvironmentPreset, materialize_preset
|
|
15
23
|
from .templates import DOCKERFILE_HUD, ENV_PY, PYPROJECT_TOML, TASKS_PY
|
|
16
24
|
|
|
25
|
+
_LOCAL_SCAFFOLD = "__local__"
|
|
26
|
+
|
|
17
27
|
|
|
18
28
|
def _python_name(name: str) -> str:
|
|
19
29
|
"""Normalize a package name into a Python-identifier-ish env name."""
|
|
@@ -21,19 +31,66 @@ def _python_name(name: str) -> str:
|
|
|
21
31
|
return "".join(c if c.isalnum() or c == "_" else "_" for c in name)
|
|
22
32
|
|
|
23
33
|
|
|
34
|
+
def _resolve_preset(preset: str | None, hud_console: HUDConsole) -> EnvironmentPreset | None:
|
|
35
|
+
"""Pick the starter: an explicit ``--preset`` id, an interactive choice, or
|
|
36
|
+
``None`` for the minimal local scaffold."""
|
|
37
|
+
if preset is not None:
|
|
38
|
+
chosen = PRESETS_BY_ID.get(preset)
|
|
39
|
+
if chosen is None:
|
|
40
|
+
available = ", ".join(PRESETS_BY_ID)
|
|
41
|
+
hud_console.error(f"Unknown preset {preset!r}. Available: {available}")
|
|
42
|
+
raise typer.Exit(1)
|
|
43
|
+
return chosen
|
|
44
|
+
|
|
45
|
+
# No flag: pick interactively when we have a TTY, else the local scaffold.
|
|
46
|
+
if not (sys.stdin.isatty() and sys.stdout.isatty()):
|
|
47
|
+
return None
|
|
48
|
+
|
|
49
|
+
choices: list[str | dict[str, Any]] = [
|
|
50
|
+
{"name": "Minimal (local scaffold, no download)", "value": _LOCAL_SCAFFOLD},
|
|
51
|
+
*({"name": f"{p.name} — {p.description}", "value": p.id} for p in ENVIRONMENT_PRESETS),
|
|
52
|
+
]
|
|
53
|
+
selected = hud_console.select("Choose a starter", choices, default=0)
|
|
54
|
+
return None if selected == _LOCAL_SCAFFOLD else PRESETS_BY_ID[selected]
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def _write_local_scaffold(target: Path, env_name: str, hud_console: HUDConsole) -> None:
|
|
58
|
+
"""Write the bundled minimal env package into ``target``."""
|
|
59
|
+
files = {
|
|
60
|
+
"pyproject.toml": PYPROJECT_TOML.format(name=env_name.replace("_", "-")),
|
|
61
|
+
"env.py": ENV_PY.format(env_name=env_name),
|
|
62
|
+
"tasks.py": TASKS_PY.format(env_name=env_name),
|
|
63
|
+
"Dockerfile.hud": DOCKERFILE_HUD,
|
|
64
|
+
}
|
|
65
|
+
target.mkdir(parents=True, exist_ok=True)
|
|
66
|
+
for filename, content in files.items():
|
|
67
|
+
(target / filename).write_text(content)
|
|
68
|
+
hud_console.status_item(filename, "✓")
|
|
69
|
+
|
|
70
|
+
|
|
24
71
|
def init_command(
|
|
25
72
|
name: str = typer.Argument(..., help="Environment name (directory to create)"),
|
|
26
73
|
directory: str = typer.Option(".", "--dir", "-d", help="Parent directory"),
|
|
27
74
|
force: bool = typer.Option(False, "--force", "-f", help="Overwrite existing files"),
|
|
75
|
+
preset: str | None = typer.Option(
|
|
76
|
+
None,
|
|
77
|
+
"--preset",
|
|
78
|
+
"-p",
|
|
79
|
+
help="Starter preset to download from GitHub (e.g. blank, coding, browser, "
|
|
80
|
+
"deepresearch, rubrics, remote-browser). Omit for an interactive picker; in a "
|
|
81
|
+
"non-interactive shell, omitting it writes the minimal local scaffold.",
|
|
82
|
+
),
|
|
28
83
|
) -> None:
|
|
29
84
|
"""🚀 Create a new HUD environment package.
|
|
30
85
|
|
|
31
|
-
[not dim]
|
|
32
|
-
pyproject.toml
|
|
86
|
+
[not dim]With no --preset, writes a minimal local scaffold (env.py, tasks.py,
|
|
87
|
+
Dockerfile.hud, pyproject.toml) — or, in a TTY, lets you pick a starter. With
|
|
88
|
+
--preset, downloads that starter from GitHub.
|
|
33
89
|
|
|
34
90
|
Examples:
|
|
35
|
-
hud init my-env
|
|
36
|
-
hud init my-env --
|
|
91
|
+
hud init my-env # interactive picker (or local scaffold)
|
|
92
|
+
hud init my-env --preset coding # download the coding starter
|
|
93
|
+
hud init my-env --dir envs # create ./envs/my-env[/not dim]
|
|
37
94
|
"""
|
|
38
95
|
hud_console = HUDConsole()
|
|
39
96
|
|
|
@@ -42,35 +99,49 @@ def init_command(
|
|
|
42
99
|
hud_console.error(f"{target} already exists and is not empty (use --force)")
|
|
43
100
|
raise typer.Exit(1)
|
|
44
101
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
102
|
+
chosen = _resolve_preset(preset, hud_console)
|
|
103
|
+
|
|
104
|
+
hud_console.header(f"HUD Init: {name}")
|
|
105
|
+
if chosen is not None:
|
|
106
|
+
hud_console.info(f"Downloading {chosen.owner}/{chosen.repo} …")
|
|
107
|
+
created = not target.exists()
|
|
108
|
+
try:
|
|
109
|
+
materialize_preset(chosen, target)
|
|
110
|
+
except (httpx.HTTPError, tarfile.TarError, ValueError, OSError) as exc:
|
|
111
|
+
# Don't leave a half-written tree behind — it would trip the
|
|
112
|
+
# non-empty-directory guard on the next run. Only remove a directory
|
|
113
|
+
# this run created (never a dir the user already had).
|
|
114
|
+
if created and target.exists():
|
|
115
|
+
shutil.rmtree(target, ignore_errors=True)
|
|
116
|
+
hud_console.error(f"Failed to fetch preset {chosen.id!r}: {exc}")
|
|
117
|
+
raise typer.Exit(1) from exc
|
|
118
|
+
hud_console.status_item(f"{chosen.owner}/{chosen.repo}", "✓")
|
|
119
|
+
else:
|
|
120
|
+
_write_local_scaffold(target, _python_name(name), hud_console)
|
|
58
121
|
|
|
59
122
|
hud_console.section_title("Next Steps")
|
|
60
123
|
hud_console.info("")
|
|
61
124
|
hud_console.command_example(f"cd {target}", "1. Enter the package")
|
|
62
125
|
hud_console.info("")
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
126
|
+
if chosen is not None:
|
|
127
|
+
hud_console.info("2. Read the README for this starter's setup + tasks.")
|
|
128
|
+
hud_console.info("")
|
|
129
|
+
hud_console.command_example("hud eval tasks.py claude", "3. Run an agent over the tasks")
|
|
130
|
+
hud_console.info("")
|
|
131
|
+
hud_console.info("4. Deploy for scale")
|
|
132
|
+
hud_console.info(" hud deploy, then run many evals in parallel.")
|
|
133
|
+
else:
|
|
134
|
+
hud_console.info("2. Define task definitions in env.py")
|
|
135
|
+
hud_console.info(" A @env.template is an async generator: it yields a prompt, then")
|
|
136
|
+
hud_console.info(" (after the agent answers) yields a reward.")
|
|
137
|
+
hud_console.info("")
|
|
138
|
+
hud_console.info("3. List the tasks to run in tasks.py")
|
|
139
|
+
hud_console.info(" Call a task with args to bind a runnable Task.")
|
|
140
|
+
hud_console.info("")
|
|
141
|
+
hud_console.command_example("hud eval tasks.py claude", "4. Run an agent over them")
|
|
142
|
+
hud_console.info("")
|
|
143
|
+
hud_console.info("5. Deploy for scale")
|
|
144
|
+
hud_console.info(" hud deploy, then run many evals in parallel.")
|
|
74
145
|
hud_console.info("")
|
|
75
146
|
hud_console.info("Tip: Install the HUD skill so your coding agent can help you build:")
|
|
76
147
|
hud_console.command_example("npx skills add docs.hud.ai", "Install HUD skill")
|
hud/cli/models.py
CHANGED
|
@@ -56,14 +56,18 @@ def list_models(
|
|
|
56
56
|
table = Table()
|
|
57
57
|
table.add_column("Name", style="cyan")
|
|
58
58
|
table.add_column("Model (API)", style="green")
|
|
59
|
+
table.add_column("ID", style="blue", no_wrap=True)
|
|
59
60
|
table.add_column("Provider", style="yellow")
|
|
60
61
|
table.add_column("Agent", style="magenta")
|
|
62
|
+
table.add_column("Trainable", style="green", justify="center")
|
|
61
63
|
for model in models_list:
|
|
62
64
|
table.add_row(
|
|
63
65
|
model.name or model.id or "-",
|
|
64
66
|
model.model_name or model.id or "-",
|
|
67
|
+
model.id or "-",
|
|
65
68
|
model.provider.name or "-",
|
|
66
69
|
model.sdk_agent_type or "-",
|
|
70
|
+
"✓" if model.is_trainable else "",
|
|
67
71
|
)
|
|
68
72
|
console.print(table)
|
|
69
73
|
console.print(f"\n[dim]Gateway: {settings.hud_gateway_url}[/dim]")
|
hud/cli/presets.py
ADDED
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"""Starter presets for ``hud init`` — the same set offered by the platform's
|
|
2
|
+
*environments/new* flow.
|
|
3
|
+
|
|
4
|
+
Each preset is a standalone public GitHub repo under ``hud-evals``. ``hud init``
|
|
5
|
+
downloads the repo tarball (no ``git`` required) and extracts it into the target
|
|
6
|
+
directory. Keep this list in sync with the frontend's ``ENVIRONMENT_TEMPLATES``
|
|
7
|
+
(``app/(auth)/environments/components/EnvironmentTemplates.tsx``).
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
import io
|
|
13
|
+
import os
|
|
14
|
+
import tarfile
|
|
15
|
+
from dataclasses import dataclass
|
|
16
|
+
from typing import TYPE_CHECKING
|
|
17
|
+
|
|
18
|
+
import httpx
|
|
19
|
+
|
|
20
|
+
if TYPE_CHECKING:
|
|
21
|
+
from pathlib import Path
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
@dataclass(frozen=True, slots=True)
|
|
25
|
+
class EnvironmentPreset:
|
|
26
|
+
"""A starter environment sourced from a public GitHub repo."""
|
|
27
|
+
|
|
28
|
+
id: str
|
|
29
|
+
name: str
|
|
30
|
+
description: str
|
|
31
|
+
owner: str
|
|
32
|
+
repo: str
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
ENVIRONMENT_PRESETS: tuple[EnvironmentPreset, ...] = (
|
|
36
|
+
EnvironmentPreset(
|
|
37
|
+
"blank",
|
|
38
|
+
"Blank",
|
|
39
|
+
"Minimal starting point for a custom environment.",
|
|
40
|
+
"hud-evals",
|
|
41
|
+
"hud-blank",
|
|
42
|
+
),
|
|
43
|
+
EnvironmentPreset(
|
|
44
|
+
"browser",
|
|
45
|
+
"Browser",
|
|
46
|
+
"Local browser automation environment.",
|
|
47
|
+
"hud-evals",
|
|
48
|
+
"hud-browser",
|
|
49
|
+
),
|
|
50
|
+
EnvironmentPreset(
|
|
51
|
+
"deepresearch",
|
|
52
|
+
"Deep Research",
|
|
53
|
+
"Deep research environment with Exa search integration.",
|
|
54
|
+
"hud-evals",
|
|
55
|
+
"hud-deepresearch",
|
|
56
|
+
),
|
|
57
|
+
EnvironmentPreset(
|
|
58
|
+
"cua",
|
|
59
|
+
"Computer Use",
|
|
60
|
+
"Computer-use agent (CUA) desktop environment.",
|
|
61
|
+
"hud-evals",
|
|
62
|
+
"cua-template",
|
|
63
|
+
),
|
|
64
|
+
EnvironmentPreset(
|
|
65
|
+
"autonomous-businesses",
|
|
66
|
+
"Autonomous Businesses",
|
|
67
|
+
"Autonomous business simulation environment.",
|
|
68
|
+
"hud-evals",
|
|
69
|
+
"autonomous-businesses-template",
|
|
70
|
+
),
|
|
71
|
+
EnvironmentPreset(
|
|
72
|
+
"verilog",
|
|
73
|
+
"Verilog",
|
|
74
|
+
"Verilog hardware-design environment.",
|
|
75
|
+
"hud-evals",
|
|
76
|
+
"verilog-template",
|
|
77
|
+
),
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
PRESETS_BY_ID: dict[str, EnvironmentPreset] = {p.id: p for p in ENVIRONMENT_PRESETS}
|
|
81
|
+
|
|
82
|
+
_TARBALL_TIMEOUT = 60.0
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def _is_within(root: Path, path: Path) -> bool:
|
|
86
|
+
try:
|
|
87
|
+
path.relative_to(root)
|
|
88
|
+
return True
|
|
89
|
+
except ValueError:
|
|
90
|
+
return False
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def _download_tarball(preset: EnvironmentPreset) -> bytes:
|
|
94
|
+
"""Fetch the repo's ``main`` archive from codeload (no API rate limit)."""
|
|
95
|
+
headers: dict[str, str] = {}
|
|
96
|
+
token = os.environ.get("GITHUB_TOKEN")
|
|
97
|
+
if token:
|
|
98
|
+
headers["Authorization"] = f"Bearer {token}"
|
|
99
|
+
|
|
100
|
+
url = f"https://codeload.github.com/{preset.owner}/{preset.repo}/tar.gz/refs/heads/main"
|
|
101
|
+
with httpx.Client(follow_redirects=True, timeout=_TARBALL_TIMEOUT) as client:
|
|
102
|
+
resp = client.get(url, headers=headers)
|
|
103
|
+
resp.raise_for_status()
|
|
104
|
+
return resp.content
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def materialize_preset(preset: EnvironmentPreset, target: Path) -> None:
|
|
108
|
+
"""Download ``preset``'s repo archive and extract it into ``target``.
|
|
109
|
+
|
|
110
|
+
Uses ``codeload.github.com`` (not the rate-limited API) for the repo's
|
|
111
|
+
``main`` branch — no ``git`` required. Strips the archive's top-level
|
|
112
|
+
``<repo>-main/`` component and refuses any entry that would escape ``target``
|
|
113
|
+
(path-traversal guard). Honors ``GITHUB_TOKEN`` if set.
|
|
114
|
+
"""
|
|
115
|
+
payload = _download_tarball(preset)
|
|
116
|
+
|
|
117
|
+
target.mkdir(parents=True, exist_ok=True)
|
|
118
|
+
target_root = target.resolve()
|
|
119
|
+
with tarfile.open(fileobj=io.BytesIO(payload), mode="r:gz") as tar:
|
|
120
|
+
for member in tar.getmembers():
|
|
121
|
+
# GitHub wraps everything in a "<repo>-<sha>/" top-level dir; drop it.
|
|
122
|
+
parts = member.name.split("/", 1)
|
|
123
|
+
if len(parts) < 2 or not parts[1]:
|
|
124
|
+
continue
|
|
125
|
+
dest = (target_root / parts[1]).resolve()
|
|
126
|
+
if not _is_within(target_root, dest):
|
|
127
|
+
raise ValueError(f"unsafe path in archive: {member.name!r}")
|
|
128
|
+
if member.isdir():
|
|
129
|
+
dest.mkdir(parents=True, exist_ok=True)
|
|
130
|
+
elif member.isfile():
|
|
131
|
+
dest.parent.mkdir(parents=True, exist_ok=True)
|
|
132
|
+
source = tar.extractfile(member)
|
|
133
|
+
if source is not None:
|
|
134
|
+
dest.write_bytes(source.read())
|
|
135
|
+
# Preserve the archive's executable bits so entrypoints and
|
|
136
|
+
# scripts stay runnable (no-op on Windows).
|
|
137
|
+
if member.mode & 0o111:
|
|
138
|
+
dest.chmod(dest.stat().st_mode | (member.mode & 0o111))
|
|
139
|
+
# Symlinks and other special members are intentionally skipped.
|
hud/cli/tests/test_init.py
CHANGED
|
@@ -14,7 +14,7 @@ if TYPE_CHECKING:
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
def test_init_scaffolds_a_runnable_package(tmp_path: Path) -> None:
|
|
17
|
-
init_command(name="my-cool-env", directory=str(tmp_path), force=False)
|
|
17
|
+
init_command(name="my-cool-env", directory=str(tmp_path), force=False, preset=None)
|
|
18
18
|
|
|
19
19
|
target = tmp_path / "my-cool-env"
|
|
20
20
|
assert {p.name for p in target.iterdir()} == {
|
|
@@ -36,7 +36,7 @@ def test_init_refuses_to_clobber_nonempty_directory(tmp_path: Path) -> None:
|
|
|
36
36
|
(target / "precious.txt").write_text("data")
|
|
37
37
|
|
|
38
38
|
with pytest.raises(typer.Exit):
|
|
39
|
-
init_command(name="taken", directory=str(tmp_path), force=False)
|
|
39
|
+
init_command(name="taken", directory=str(tmp_path), force=False, preset=None)
|
|
40
40
|
|
|
41
41
|
assert (target / "precious.txt").read_text() == "data"
|
|
42
42
|
|
|
@@ -46,6 +46,6 @@ def test_init_force_overwrites_existing_files(tmp_path: Path) -> None:
|
|
|
46
46
|
target.mkdir()
|
|
47
47
|
(target / "env.py").write_text("old")
|
|
48
48
|
|
|
49
|
-
init_command(name="env", directory=str(tmp_path), force=True)
|
|
49
|
+
init_command(name="env", directory=str(tmp_path), force=True, preset=None)
|
|
50
50
|
|
|
51
51
|
assert "Environment" in (target / "env.py").read_text()
|
hud/utils/gateway.py
CHANGED
hud/version.py
CHANGED
|
@@ -5,7 +5,7 @@ hud/conftest.py,sha256=HKbHvmFXLPX6KFSJgPFUAM22auclNNdFmHGwilNzg98,1012
|
|
|
5
5
|
hud/server.py,sha256=NtSHIjBFr9lYvryfXrCa-VhwqnwkRy7n5fp_OuNhNOI,1235
|
|
6
6
|
hud/settings.py,sha256=crfeQArM_8JnwmMdx0fcwL5xCvJMjeofGrGbpn0nW3c,6393
|
|
7
7
|
hud/types.py,sha256=yOBFED8Ii7KA-8EzvmE3CU16LCXVigPnNjjl3kB8aRo,15326
|
|
8
|
-
hud/version.py,sha256=
|
|
8
|
+
hud/version.py,sha256=oJ08yq_IrzFrsTHVgSPsBzDrwos8KumqvTVB-J2A0aM,104
|
|
9
9
|
hud/agents/__init__.py,sha256=ISruomRkEw1-cWCncyCgqKeeueYZFeBvFJ62RBIBQI8,4866
|
|
10
10
|
hud/agents/base.py,sha256=WgEOWUmMioXTxYe6cOvbqnbM4n989Z9kFEZIN6xJ3pU,659
|
|
11
11
|
hud/agents/tool_agent.py,sha256=a0xsh2d8IwvmiPGMs9LCzghi61FHt4vMK_9sW8eNFbA,12557
|
|
@@ -95,9 +95,10 @@ hud/cli/cancel.py,sha256=MHRdZ6IoFy3iac9NtTT_c91IB_iQbYISsCb7ph7u298,3785
|
|
|
95
95
|
hud/cli/client.py,sha256=cC23TUTo7w4S63jtk8SWkFWzG9h8Z2AKwYEqaefBWqg,2946
|
|
96
96
|
hud/cli/deploy.py,sha256=QytQKmGY60YKNnQnhv0gXjMl9BVdwsvMRq0yZypVgpY,26082
|
|
97
97
|
hud/cli/eval.py,sha256=GKvncjJ1AhMiBwsCn8jndAP_IdOe14HYC5AMnsAg3PE,33801
|
|
98
|
-
hud/cli/init.py,sha256=
|
|
98
|
+
hud/cli/init.py,sha256=6k3svrqeX19VuQ9cRuTTIojq5L5yRS51YscnXRuayRc,6464
|
|
99
99
|
hud/cli/login.py,sha256=3DhM_FfvfjP-cdfCj596kPo0bE9L3eQdz520X0oWqbc,7961
|
|
100
|
-
hud/cli/models.py,sha256=
|
|
100
|
+
hud/cli/models.py,sha256=NInyi2I5x-GFBpcTdjvfTI3f3eWC_U-E-SgWJUxbQz8,8770
|
|
101
|
+
hud/cli/presets.py,sha256=qZmc_GKwdnRNJqxRqrg-MDUhN1Vh1JcDB4nJ94_AXLw,4523
|
|
101
102
|
hud/cli/serve.py,sha256=074y6dGh1yPxr6m8MScKpYPXo2SX38zWbq2uZUrXl9k,3757
|
|
102
103
|
hud/cli/sync.py,sha256=rvbcAM7ZfXOrlxRT3Zpp25Y-UkFbPqTuOzrcHAH1tK4,16927
|
|
103
104
|
hud/cli/task.py,sha256=eYByPZHCqSy1GFiyZOVHNNqDFxvHaSLUGNQZ7o9kdz4,8111
|
|
@@ -109,7 +110,7 @@ hud/cli/tests/test_cli_more_wrappers.py,sha256=EEFrqTMg3yknQdmb8hWcHJAbinGAOGyqx
|
|
|
109
110
|
hud/cli/tests/test_deploy.py,sha256=1b_2iviob4b_RFVun01cwCl3i4FmO2MaCrFs7PfzOSI,13983
|
|
110
111
|
hud/cli/tests/test_eval_bedrock.py,sha256=UBGakgIV4kzXUj0Jtbr3t05xBss66YPqruKsovUYyoo,1900
|
|
111
112
|
hud/cli/tests/test_eval_config.py,sha256=Cl4kHc6qykaFt_lmsjyzKZRjsoTdomQBgZ5pYKQLMLQ,7932
|
|
112
|
-
hud/cli/tests/test_init.py,sha256=
|
|
113
|
+
hud/cli/tests/test_init.py,sha256=s8ipywnOztV_E4WHuBAqeGGEzcbW2jbIM1RUvEF-yr8,1479
|
|
113
114
|
hud/cli/tests/test_main_module.py,sha256=PyfuSdqI-4Zt-kd16FMj2XHEHrw7SQ75YLJbQPdcIco,1223
|
|
114
115
|
hud/cli/tests/test_sync_export.py,sha256=wd4ICZlNr_7XMw8MfNJuC8v0-lhywsjG7DnZE1zpJek,735
|
|
115
116
|
hud/cli/utils/__init__.py,sha256=L6s0oNzY2LugGp9faodCPnjzM-ZUorUH05-HmYOq5hY,35
|
|
@@ -204,7 +205,7 @@ hud/train/client.py,sha256=_CiUXwHmx_E6vvmpZFAxInz8Nxur0_oJjN6BnLix18U,8260
|
|
|
204
205
|
hud/train/types.py,sha256=QEc_cC0UDCjvHOpFqIyEzuK5IUCBPY33mc6zokfqUDk,6598
|
|
205
206
|
hud/utils/__init__.py,sha256=Tr7Zf9j-MW-mWw7SOezTI7cyp6MpG9vErZ9jEWTujAo,295
|
|
206
207
|
hud/utils/exceptions.py,sha256=eP8nLMltYe4BvnHzqaG5uq-1EPaAkZ2tCjzuxHugC8s,6938
|
|
207
|
-
hud/utils/gateway.py,sha256=
|
|
208
|
+
hud/utils/gateway.py,sha256=CbhrzWi9Nf-woqqrZ8tsEf36QEjzOOIJEcI9Go4jHFg,2944
|
|
208
209
|
hud/utils/hints.py,sha256=HrwAbMjjsCGgvR2bJTXmMeabMV5P__uHCb0lID6Jp04,5607
|
|
209
210
|
hud/utils/hud_console.py,sha256=bzVxUjWq6Np7ZOV8TR8ASXkVAw81O8MsfDaismds0AE,15860
|
|
210
211
|
hud/utils/modules.py,sha256=iUfoIAFdEf_2JAE9I0qsC0ODWz4ILOgDzRy8kcmVDTE,2463
|
|
@@ -220,8 +221,8 @@ hud/utils/tests/test_platform.py,sha256=mwhyFkUBvgmHRc43vQ_JgAAW2N9fIaxkQhVo-GB4
|
|
|
220
221
|
hud/utils/tests/test_requests.py,sha256=ENK6P5xLTuSgWDcCau4zCj_5zPV_EooGwU4P8YYl5Gw,9109
|
|
221
222
|
hud/utils/tests/test_serialization.py,sha256=GY4NiFUJtwLSYQWA0n1zme-Ul4DnBLByHCOOkxn2kLM,819
|
|
222
223
|
hud/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
223
|
-
hud_python-0.6.
|
|
224
|
-
hud_python-0.6.
|
|
225
|
-
hud_python-0.6.
|
|
226
|
-
hud_python-0.6.
|
|
227
|
-
hud_python-0.6.
|
|
224
|
+
hud_python-0.6.2.dist-info/METADATA,sha256=3vYSE1DBNZV7N4pIXSiZzbJejgOR196u8V40EpkvX2g,12304
|
|
225
|
+
hud_python-0.6.2.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
|
|
226
|
+
hud_python-0.6.2.dist-info/entry_points.txt,sha256=jJbodNFg1m0-CDofe5AHvB4zKBq7sSdP97-ohaQ3ae4,63
|
|
227
|
+
hud_python-0.6.2.dist-info/licenses/LICENSE,sha256=yIzBheVUf86FC1bztAcr7RYWWNxyd3B-UJQ3uddg1HA,1078
|
|
228
|
+
hud_python-0.6.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|