hte-cli 0.2.10__tar.gz → 0.2.12__tar.gz

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.
Files changed (27) hide show
  1. {hte_cli-0.2.10 → hte_cli-0.2.12}/PKG-INFO +1 -1
  2. {hte_cli-0.2.10 → hte_cli-0.2.12}/pyproject.toml +1 -1
  3. {hte_cli-0.2.10 → hte_cli-0.2.12}/src/hte_cli/cli.py +40 -10
  4. {hte_cli-0.2.10 → hte_cli-0.2.12}/.gitignore +0 -0
  5. {hte_cli-0.2.10 → hte_cli-0.2.12}/README.md +0 -0
  6. {hte_cli-0.2.10 → hte_cli-0.2.12}/src/hte_cli/__init__.py +0 -0
  7. {hte_cli-0.2.10 → hte_cli-0.2.12}/src/hte_cli/__main__.py +0 -0
  8. {hte_cli-0.2.10 → hte_cli-0.2.12}/src/hte_cli/api_client.py +0 -0
  9. {hte_cli-0.2.10 → hte_cli-0.2.12}/src/hte_cli/config.py +0 -0
  10. {hte_cli-0.2.10 → hte_cli-0.2.12}/src/hte_cli/errors.py +0 -0
  11. {hte_cli-0.2.10 → hte_cli-0.2.12}/src/hte_cli/events.py +0 -0
  12. {hte_cli-0.2.10 → hte_cli-0.2.12}/src/hte_cli/image_utils.py +0 -0
  13. {hte_cli-0.2.10 → hte_cli-0.2.12}/src/hte_cli/runner.py +0 -0
  14. {hte_cli-0.2.10 → hte_cli-0.2.12}/src/hte_cli/scorers.py +0 -0
  15. {hte_cli-0.2.10 → hte_cli-0.2.12}/src/hte_cli/version_check.py +0 -0
  16. {hte_cli-0.2.10 → hte_cli-0.2.12}/tests/__init__.py +0 -0
  17. {hte_cli-0.2.10 → hte_cli-0.2.12}/tests/e2e/__init__.py +0 -0
  18. {hte_cli-0.2.10 → hte_cli-0.2.12}/tests/e2e/automated_runner.py +0 -0
  19. {hte_cli-0.2.10 → hte_cli-0.2.12}/tests/e2e/conftest.py +0 -0
  20. {hte_cli-0.2.10 → hte_cli-0.2.12}/tests/e2e/e2e_test.py +0 -0
  21. {hte_cli-0.2.10 → hte_cli-0.2.12}/tests/e2e/test_benchmark_flows.py +0 -0
  22. {hte_cli-0.2.10 → hte_cli-0.2.12}/tests/e2e/test_eval_logs.py +0 -0
  23. {hte_cli-0.2.10 → hte_cli-0.2.12}/tests/e2e/test_infrastructure.py +0 -0
  24. {hte_cli-0.2.10 → hte_cli-0.2.12}/tests/e2e/test_runtime_imports.py +0 -0
  25. {hte_cli-0.2.10 → hte_cli-0.2.12}/tests/e2e/test_session_lifecycle.py +0 -0
  26. {hte_cli-0.2.10 → hte_cli-0.2.12}/tests/e2e/verify_docker_deps.py +0 -0
  27. {hte_cli-0.2.10 → hte_cli-0.2.12}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hte-cli
3
- Version: 0.2.10
3
+ Version: 0.2.12
4
4
  Summary: Human Time-to-Completion Evaluation CLI
5
5
  Project-URL: Homepage, https://github.com/sean-peters-au/lyptus-mono
6
6
  Author: Lyptus Research
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "hte-cli"
3
- version = "0.2.10"
3
+ version = "0.2.12"
4
4
  description = "Human Time-to-Completion Evaluation CLI"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -364,21 +364,51 @@ def session_join(ctx, session_id: str, force_setup: bool):
364
364
  layer_progress[layer_id]["current"] = layer_progress[layer_id]["total"]
365
365
  layer_progress[layer_id]["phase"] = "done"
366
366
 
367
+ # Track waiting layers
368
+ waiting_match = re.search(r"([a-f0-9]+):\s*Waiting", line)
369
+ if waiting_match:
370
+ layer_id = waiting_match.group(1)
371
+ if layer_id not in layer_progress:
372
+ layer_progress[layer_id] = {"current": 0, "total": 0, "phase": "waiting"}
373
+
367
374
  # Aggregate progress
368
375
  total_current = sum(lp.get("current", 0) for lp in layer_progress.values())
369
376
  total_size = sum(lp.get("total", 0) for lp in layer_progress.values())
370
- active_layers = sum(1 for lp in layer_progress.values() if lp.get("phase") in ("Downloading", "Extracting"))
377
+ downloading = sum(1 for lp in layer_progress.values() if lp.get("phase") == "Downloading")
378
+ extracting = sum(1 for lp in layer_progress.values() if lp.get("phase") == "Extracting")
371
379
  done_layers = sum(1 for lp in layer_progress.values() if lp.get("phase") == "done")
372
-
373
- if total_size > 0:
374
- pct = (total_current / total_size) * 100
375
- display = f"{format_size(total_current)}/{format_size(total_size)} ({pct:.0f}%)"
376
- if active_layers > 0:
377
- display += f" - {active_layers} active"
380
+ waiting = sum(1 for lp in layer_progress.values() if lp.get("phase") == "waiting")
381
+ total_layers = len(layer_progress)
382
+
383
+ # Find largest active layer for detail display
384
+ active_layers = [(lid, lp) for lid, lp in layer_progress.items()
385
+ if lp.get("phase") in ("Downloading", "Extracting") and lp.get("total", 0) > 0]
386
+ largest_layer = None
387
+ if active_layers:
388
+ largest_layer = max(active_layers, key=lambda x: x[1].get("total", 0))
389
+
390
+ # Build display
391
+ if total_size > 1024 * 1024: # >1MB meaningful data
392
+ display = f"{format_size(total_current)}/{format_size(total_size)}"
393
+ # Show largest layer progress
394
+ if largest_layer:
395
+ lid, lp = largest_layer
396
+ pct = (lp["current"] / lp["total"] * 100) if lp["total"] > 0 else 0
397
+ display += f" | {lid[:8]}: {format_size(lp['current'])}/{format_size(lp['total'])} ({pct:.0f}%)"
398
+ elif total_layers > 0:
399
+ # Show layer counts
400
+ parts = []
401
+ if downloading > 0:
402
+ parts.append(f"{downloading} downloading")
403
+ if extracting > 0:
404
+ parts.append(f"{extracting} extracting")
378
405
  if done_layers > 0:
379
- display += f", {done_layers} done"
380
- elif "Pulling" in line or "Waiting" in line:
381
- display = "preparing layers..."
406
+ parts.append(f"{done_layers} done")
407
+ if waiting > 0:
408
+ parts.append(f"{waiting} waiting")
409
+ display = ", ".join(parts) if parts else "starting..."
410
+ elif "Pulling" in line:
411
+ display = "preparing..."
382
412
  elif line.strip():
383
413
  display = line[:40]
384
414
  else:
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes