lyceum-cli 1.0.29__tar.gz → 1.0.30__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 (40) hide show
  1. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/PKG-INFO +1 -1
  2. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum/external/compute/execution/gpu_selection.py +51 -0
  3. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum_cli.egg-info/PKG-INFO +1 -1
  4. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/setup.py +1 -1
  5. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum/__init__.py +0 -0
  6. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum/external/__init__.py +0 -0
  7. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum/external/auth/__init__.py +0 -0
  8. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum/external/auth/login.py +0 -0
  9. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum/external/compute/__init__.py +0 -0
  10. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum/external/compute/execution/__init__.py +0 -0
  11. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum/external/compute/execution/config.py +0 -0
  12. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum/external/compute/execution/docker.py +0 -0
  13. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum/external/compute/execution/docker_compose.py +0 -0
  14. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum/external/compute/execution/notebook.py +0 -0
  15. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum/external/compute/execution/python.py +0 -0
  16. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum/external/compute/execution/workloads.py +0 -0
  17. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum/external/compute/inference/__init__.py +0 -0
  18. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum/external/compute/inference/batch.py +0 -0
  19. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum/external/compute/inference/chat.py +0 -0
  20. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum/external/compute/inference/infer.py +0 -0
  21. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum/external/compute/inference/models.py +0 -0
  22. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum/external/general/__init__.py +0 -0
  23. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum/external/vms/__init__.py +0 -0
  24. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum/external/vms/instances.py +0 -0
  25. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum/external/vms/management.py +0 -0
  26. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum/main.py +0 -0
  27. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum/shared/__init__.py +0 -0
  28. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum/shared/config.py +0 -0
  29. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum/shared/display.py +0 -0
  30. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum/shared/imports.py +0 -0
  31. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum/shared/streaming.py +0 -0
  32. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum_cli.egg-info/SOURCES.txt +0 -0
  33. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum_cli.egg-info/dependency_links.txt +0 -0
  34. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum_cli.egg-info/entry_points.txt +0 -0
  35. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum_cli.egg-info/requires.txt +0 -0
  36. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum_cli.egg-info/top_level.txt +0 -0
  37. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum_cloud_execution_api_client/__init__.py +0 -0
  38. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum_cloud_execution_api_client/api/__init__.py +0 -0
  39. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/lyceum_cloud_execution_api_client/models/__init__.py +0 -0
  40. {lyceum_cli-1.0.29 → lyceum_cli-1.0.30}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lyceum-cli
3
- Version: 1.0.29
3
+ Version: 1.0.30
4
4
  Summary: Command-line interface for Lyceum Cloud Execution API
5
5
  Home-page: https://lyceum.technology
6
6
  Author: Lyceum Team
@@ -44,6 +44,21 @@ GPU_DISPLAY_NAMES = {
44
44
  "gpu.rtx6000pro": "RTX 6000 Pro",
45
45
  }
46
46
 
47
+ # VRAM in GB for each GPU profile (for showing excluded GPUs)
48
+ GPU_VRAM_GB = {
49
+ "gpu": 16,
50
+ "gpu.t4": 16,
51
+ "gpu.t4.64gb": 16,
52
+ "gpu.a100": 40,
53
+ "gpu.a100.40gb": 40,
54
+ "gpu.a100.80gb": 80,
55
+ "gpu.h100": 80,
56
+ "gpu.h200": 141,
57
+ "gpu.l40s": 48,
58
+ "gpu.b200": 180,
59
+ "gpu.rtx6000pro": 48,
60
+ }
61
+
47
62
 
48
63
  def format_gpu_name(profile: str) -> str:
49
64
  """Format GPU profile name for display."""
@@ -342,6 +357,7 @@ def display_results(data: dict, file_path: str | None = None) -> None:
342
357
 
343
358
  # Sort by VRAM size for better display
344
359
  sorted_configs = sorted(minimal_configs, key=lambda x: x.get("per_gpu_vram_gb", 0))
360
+ compatible_gpu_types = {cfg.get("gpu_type") for cfg in minimal_configs}
345
361
 
346
362
  for i, cfg in enumerate(sorted_configs):
347
363
  gpu_type = format_gpu_name(cfg.get("gpu_type", "?"))
@@ -362,6 +378,41 @@ def display_results(data: dict, file_path: str | None = None) -> None:
362
378
 
363
379
  console.print(gpu_table)
364
380
 
381
+ # Show excluded GPUs (those not in minimal_configs)
382
+ # Get total memory required from extraction result
383
+ mem_reqs = mem_config.get("memory_requirements", {})
384
+ total_mem_gb = 0
385
+ if mem_reqs:
386
+ # Sum up memory components
387
+ total_mem_gb = (
388
+ mem_reqs.get("model_weights", 0) +
389
+ mem_reqs.get("gradients", 0) +
390
+ mem_reqs.get("optimizer_states", 0) +
391
+ mem_reqs.get("activations", 0)
392
+ )
393
+
394
+ if not total_mem_gb and sorted_configs:
395
+ # Estimate from minimal config utilization
396
+ first_cfg = sorted_configs[0]
397
+ vram = first_cfg.get("per_gpu_vram_gb", 0)
398
+ util = first_cfg.get("vram_utilization_percent", 0)
399
+ if vram and util:
400
+ total_mem_gb = vram * (util / 100)
401
+
402
+ # Find GPUs that were excluded
403
+ excluded_gpus = []
404
+ for profile, vram in GPU_VRAM_GB.items():
405
+ if profile not in compatible_gpu_types and profile in ("gpu", "gpu.t4"):
406
+ # Only show common GPUs that users expect to see
407
+ excluded_gpus.append((profile, vram))
408
+
409
+ if excluded_gpus and total_mem_gb:
410
+ console.print()
411
+ console.print("[dim]Excluded GPUs (insufficient VRAM):[/dim]")
412
+ for profile, vram in sorted(excluded_gpus, key=lambda x: x[1]):
413
+ gpu_name = format_gpu_name(profile)
414
+ console.print(f"[dim] • {gpu_name}: {vram} GB available, ~{total_mem_gb:.1f} GB required[/dim]")
415
+
365
416
  # Show run command hint if we have a best GPU and file path
366
417
  if best_gpu and file_path:
367
418
  machine_flag = best_gpu.get("gpu_type", "gpu")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lyceum-cli
3
- Version: 1.0.29
3
+ Version: 1.0.30
4
4
  Summary: Command-line interface for Lyceum Cloud Execution API
5
5
  Home-page: https://lyceum.technology
6
6
  Author: Lyceum Team
@@ -13,7 +13,7 @@ if readme_file.exists():
13
13
 
14
14
  setup(
15
15
  name="lyceum-cli",
16
- version="1.0.29",
16
+ version="1.0.30",
17
17
  description="Command-line interface for Lyceum Cloud Execution API",
18
18
  long_description=long_description,
19
19
  long_description_content_type="text/markdown",
File without changes
File without changes