hte-cli 0.2.2__py3-none-any.whl → 0.2.4__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.
hte_cli/cli.py
CHANGED
|
@@ -230,26 +230,26 @@ def session_join(ctx, session_id: str, force_setup: bool):
|
|
|
230
230
|
compose_yaml = None
|
|
231
231
|
|
|
232
232
|
if not is_reconnect or force_setup:
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
console=console,
|
|
237
|
-
) as progress:
|
|
238
|
-
task_id_display = progress.add_task("Downloading task files...", total=None)
|
|
233
|
+
console.print("[bold]Step 1:[/bold] Downloading task resources...")
|
|
234
|
+
|
|
235
|
+
with console.status("[dim]Fetching task files...[/dim]"):
|
|
239
236
|
try:
|
|
240
237
|
files_zip = api.get_session_files(session_id)
|
|
238
|
+
console.print(" [green]✓[/green] Task files downloaded")
|
|
241
239
|
except APIError as e:
|
|
242
|
-
|
|
243
|
-
console.print(f"[dim]Note: {e}[/dim]")
|
|
240
|
+
console.print(f" [dim]○ No task files (optional)[/dim]")
|
|
244
241
|
files_zip = None
|
|
245
242
|
|
|
246
|
-
|
|
243
|
+
with console.status("[dim]Fetching compose configuration...[/dim]"):
|
|
247
244
|
try:
|
|
248
245
|
compose_yaml = api.get_session_compose(session_id)
|
|
246
|
+
console.print(" [green]✓[/green] Docker compose downloaded")
|
|
249
247
|
except APIError as e:
|
|
250
|
-
|
|
248
|
+
console.print(f" [dim]○ No compose file (optional)[/dim]")
|
|
251
249
|
compose_yaml = None
|
|
252
250
|
|
|
251
|
+
console.print()
|
|
252
|
+
|
|
253
253
|
# Validate compose for sandbox-required benchmarks
|
|
254
254
|
benchmark = session_info.get("benchmark", "").lower()
|
|
255
255
|
SANDBOX_REQUIRED_BENCHMARKS = {"cybench", "intercode-ctf", "cvebench", "cybergym", "nyuctf"}
|
|
@@ -296,18 +296,38 @@ def session_join(ctx, session_id: str, force_setup: bool):
|
|
|
296
296
|
|
|
297
297
|
# Pull images if we have any
|
|
298
298
|
if images:
|
|
299
|
-
|
|
299
|
+
from hte_cli.image_utils import check_image_exists_locally
|
|
300
|
+
|
|
301
|
+
console.print(f"[bold]Step 2:[/bold] Pulling {len(images)} Docker image(s)...")
|
|
300
302
|
pull_start = time.monotonic()
|
|
301
303
|
|
|
302
304
|
for img in images:
|
|
303
305
|
short_name = img.split("/")[-1][:40]
|
|
304
|
-
|
|
305
|
-
|
|
306
|
+
|
|
307
|
+
# Check if already cached
|
|
308
|
+
if check_image_exists_locally(img):
|
|
309
|
+
console.print(f" [green]✓[/green] {short_name} [dim](cached)[/dim]")
|
|
310
|
+
cached_images.append(img)
|
|
311
|
+
continue
|
|
312
|
+
|
|
313
|
+
# Need to pull - show progress
|
|
314
|
+
with console.status(f"[yellow]↓[/yellow] {short_name} [dim]connecting...[/dim]") as status:
|
|
315
|
+
def show_progress(image: str, line: str):
|
|
316
|
+
# Parse docker pull output for layer progress
|
|
317
|
+
# Lines look like: "abc123: Downloading [====> ] 10MB/50MB"
|
|
318
|
+
if ": " in line:
|
|
319
|
+
parts = line.split(": ", 1)
|
|
320
|
+
if len(parts) == 2:
|
|
321
|
+
layer_status = parts[1][:50] # Truncate
|
|
322
|
+
status.update(f"[yellow]↓[/yellow] {short_name} [dim]{layer_status}[/dim]")
|
|
323
|
+
|
|
324
|
+
success = pull_image_with_progress(img, on_progress=show_progress)
|
|
325
|
+
|
|
306
326
|
if success:
|
|
307
|
-
console.print(f" [green]✓[/green] {short_name}")
|
|
327
|
+
console.print(f" [green]✓[/green] {short_name} [dim](downloaded)[/dim]")
|
|
308
328
|
pulled_images.append(img)
|
|
309
329
|
else:
|
|
310
|
-
console.print(f" [red]✗[/red] {short_name} (failed)")
|
|
330
|
+
console.print(f" [red]✗[/red] {short_name} [dim](failed)[/dim]")
|
|
311
331
|
failed_images.append(img)
|
|
312
332
|
|
|
313
333
|
pull_duration = time.monotonic() - pull_start
|
|
@@ -334,21 +354,21 @@ def session_join(ctx, session_id: str, force_setup: bool):
|
|
|
334
354
|
console.print(Panel(session_info["instructions"], title="Task Instructions"))
|
|
335
355
|
console.print()
|
|
336
356
|
|
|
337
|
-
# Step
|
|
338
|
-
|
|
339
|
-
console.print("[
|
|
340
|
-
console.print()
|
|
357
|
+
# Step 3: Run the task using TaskRunner
|
|
358
|
+
step_num = "3" if (not is_reconnect or force_setup) and images else "2" if (not is_reconnect or force_setup) else "1"
|
|
359
|
+
console.print(f"[bold]Step {step_num}:[/bold] Starting task environment...")
|
|
341
360
|
|
|
342
361
|
events.docker_started()
|
|
343
362
|
|
|
344
363
|
runner = TaskRunner()
|
|
345
364
|
eval_log_bytes = None
|
|
346
365
|
try:
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
366
|
+
with console.status("[dim]Launching Docker containers (this may take a minute)...[/dim]"):
|
|
367
|
+
result = runner.run_from_assignment(
|
|
368
|
+
assignment=assignment,
|
|
369
|
+
compose_yaml=compose_yaml,
|
|
370
|
+
files_zip=files_zip,
|
|
371
|
+
)
|
|
352
372
|
# Read eval log before cleanup
|
|
353
373
|
if result.eval_log_path and result.eval_log_path.exists():
|
|
354
374
|
eval_log_bytes = result.eval_log_path.read_bytes()
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
hte_cli/__init__.py,sha256=fDGXp-r8bIoLtlQnn5xJ_CpwMhonvk9bGjZQsjA2mDI,914
|
|
2
2
|
hte_cli/__main__.py,sha256=63n0gNGfskidWDU0aAIF2N8lylVCLYKVIkrN9QiORoo,107
|
|
3
3
|
hte_cli/api_client.py,sha256=m42kfFZS72Nu_VuDwxRsLNy4ziCcvgk7KNWBh9gwqy0,9257
|
|
4
|
-
hte_cli/cli.py,sha256=
|
|
4
|
+
hte_cli/cli.py,sha256=dAkHNF9J_9xP500FDQtfSb6I-X2hWNqz8bFBvZbfQis,40948
|
|
5
5
|
hte_cli/config.py,sha256=42Xv__YMSeRLs2zhGukJkIXFKtnBtYCHnONfViGyt2g,3387
|
|
6
6
|
hte_cli/errors.py,sha256=1J5PpxcUKBu6XjigMMCPOq4Zc12tnv8LhAsiaVFWLQM,2762
|
|
7
7
|
hte_cli/events.py,sha256=Zn-mroqaLHNzdT4DFf8st1Qclglshihdc09dBfCN070,5522
|
|
@@ -9,7 +9,7 @@ hte_cli/image_utils.py,sha256=454yoZEI1duNYrZC8UjhfZzDRP4Nxdrf2TvnZ_54G1k,4439
|
|
|
9
9
|
hte_cli/runner.py,sha256=DhC8FMjHwfLR193iP4thLDRZrNssYA9KH1WYKU2JKeg,13535
|
|
10
10
|
hte_cli/scorers.py,sha256=sFoPJePRt-K191-Ga4cVmrldruJclYXTOLkU_C9nCDI,6025
|
|
11
11
|
hte_cli/version_check.py,sha256=WVZyGy2XfAghQYdd2N9-0Qfg-7pgp9gt4761-PnmacI,1708
|
|
12
|
-
hte_cli-0.2.
|
|
13
|
-
hte_cli-0.2.
|
|
14
|
-
hte_cli-0.2.
|
|
15
|
-
hte_cli-0.2.
|
|
12
|
+
hte_cli-0.2.4.dist-info/METADATA,sha256=sXaeCU9qbni0H7YxOQtGGxxaK0TyaPFT3TGrDurFcjE,3767
|
|
13
|
+
hte_cli-0.2.4.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
14
|
+
hte_cli-0.2.4.dist-info/entry_points.txt,sha256=XbyEEi1H14DFAt0Kdl22e_IRVEGzimSzYSh5HlhKlFA,41
|
|
15
|
+
hte_cli-0.2.4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|