alloc 0.0.13__tar.gz → 0.0.14__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 (59) hide show
  1. {alloc-0.0.13 → alloc-0.0.14}/PKG-INFO +1 -1
  2. {alloc-0.0.13 → alloc-0.0.14}/pyproject.toml +1 -1
  3. {alloc-0.0.13 → alloc-0.0.14}/src/alloc/__init__.py +1 -1
  4. {alloc-0.0.13 → alloc-0.0.14}/src/alloc/cli.py +11 -1
  5. {alloc-0.0.13 → alloc-0.0.14}/src/alloc/probe.py +2 -2
  6. {alloc-0.0.13 → alloc-0.0.14}/src/alloc.egg-info/PKG-INFO +1 -1
  7. {alloc-0.0.13 → alloc-0.0.14}/README.md +0 -0
  8. {alloc-0.0.13 → alloc-0.0.14}/setup.cfg +0 -0
  9. {alloc-0.0.13 → alloc-0.0.14}/src/alloc/artifact_loader.py +0 -0
  10. {alloc-0.0.13 → alloc-0.0.14}/src/alloc/artifact_writer.py +0 -0
  11. {alloc-0.0.13 → alloc-0.0.14}/src/alloc/browser_auth.py +0 -0
  12. {alloc-0.0.13 → alloc-0.0.14}/src/alloc/callbacks.py +0 -0
  13. {alloc-0.0.13 → alloc-0.0.14}/src/alloc/catalog/__init__.py +0 -0
  14. {alloc-0.0.13 → alloc-0.0.14}/src/alloc/catalog/default_rate_card.json +0 -0
  15. {alloc-0.0.13 → alloc-0.0.14}/src/alloc/catalog/gpus.v1.json +0 -0
  16. {alloc-0.0.13 → alloc-0.0.14}/src/alloc/code_analyzer.py +0 -0
  17. {alloc-0.0.13 → alloc-0.0.14}/src/alloc/config.py +0 -0
  18. {alloc-0.0.13 → alloc-0.0.14}/src/alloc/context.py +0 -0
  19. {alloc-0.0.13 → alloc-0.0.14}/src/alloc/diagnosis_display.py +0 -0
  20. {alloc-0.0.13 → alloc-0.0.14}/src/alloc/diagnosis_engine.py +0 -0
  21. {alloc-0.0.13 → alloc-0.0.14}/src/alloc/diagnosis_rules.py +0 -0
  22. {alloc-0.0.13 → alloc-0.0.14}/src/alloc/display.py +0 -0
  23. {alloc-0.0.13 → alloc-0.0.14}/src/alloc/extractor_runner.py +0 -0
  24. {alloc-0.0.13 → alloc-0.0.14}/src/alloc/ghost.py +0 -0
  25. {alloc-0.0.13 → alloc-0.0.14}/src/alloc/model_extractor.py +0 -0
  26. {alloc-0.0.13 → alloc-0.0.14}/src/alloc/model_registry.py +0 -0
  27. {alloc-0.0.13 → alloc-0.0.14}/src/alloc/stability.py +0 -0
  28. {alloc-0.0.13 → alloc-0.0.14}/src/alloc/upload.py +0 -0
  29. {alloc-0.0.13 → alloc-0.0.14}/src/alloc/yaml_config.py +0 -0
  30. {alloc-0.0.13 → alloc-0.0.14}/src/alloc.egg-info/SOURCES.txt +0 -0
  31. {alloc-0.0.13 → alloc-0.0.14}/src/alloc.egg-info/dependency_links.txt +0 -0
  32. {alloc-0.0.13 → alloc-0.0.14}/src/alloc.egg-info/entry_points.txt +0 -0
  33. {alloc-0.0.13 → alloc-0.0.14}/src/alloc.egg-info/requires.txt +0 -0
  34. {alloc-0.0.13 → alloc-0.0.14}/src/alloc.egg-info/top_level.txt +0 -0
  35. {alloc-0.0.13 → alloc-0.0.14}/tests/test_artifact.py +0 -0
  36. {alloc-0.0.13 → alloc-0.0.14}/tests/test_artifact_loader.py +0 -0
  37. {alloc-0.0.13 → alloc-0.0.14}/tests/test_auth.py +0 -0
  38. {alloc-0.0.13 → alloc-0.0.14}/tests/test_callbacks.py +0 -0
  39. {alloc-0.0.13 → alloc-0.0.14}/tests/test_catalog.py +0 -0
  40. {alloc-0.0.13 → alloc-0.0.14}/tests/test_cli.py +0 -0
  41. {alloc-0.0.13 → alloc-0.0.14}/tests/test_code_analyzer.py +0 -0
  42. {alloc-0.0.13 → alloc-0.0.14}/tests/test_context.py +0 -0
  43. {alloc-0.0.13 → alloc-0.0.14}/tests/test_diagnose_cli.py +0 -0
  44. {alloc-0.0.13 → alloc-0.0.14}/tests/test_diagnosis_engine.py +0 -0
  45. {alloc-0.0.13 → alloc-0.0.14}/tests/test_diagnosis_rules.py +0 -0
  46. {alloc-0.0.13 → alloc-0.0.14}/tests/test_extractor_activation.py +0 -0
  47. {alloc-0.0.13 → alloc-0.0.14}/tests/test_ghost.py +0 -0
  48. {alloc-0.0.13 → alloc-0.0.14}/tests/test_ghost_degradation.py +0 -0
  49. {alloc-0.0.13 → alloc-0.0.14}/tests/test_init_from_org.py +0 -0
  50. {alloc-0.0.13 → alloc-0.0.14}/tests/test_interconnect.py +0 -0
  51. {alloc-0.0.13 → alloc-0.0.14}/tests/test_model_extractor.py +0 -0
  52. {alloc-0.0.13 → alloc-0.0.14}/tests/test_probe_hw.py +0 -0
  53. {alloc-0.0.13 → alloc-0.0.14}/tests/test_probe_multi.py +0 -0
  54. {alloc-0.0.13 → alloc-0.0.14}/tests/test_scan_auth.py +0 -0
  55. {alloc-0.0.13 → alloc-0.0.14}/tests/test_stability.py +0 -0
  56. {alloc-0.0.13 → alloc-0.0.14}/tests/test_topology_strategy.py +0 -0
  57. {alloc-0.0.13 → alloc-0.0.14}/tests/test_upload.py +0 -0
  58. {alloc-0.0.13 → alloc-0.0.14}/tests/test_verdict.py +0 -0
  59. {alloc-0.0.13 → alloc-0.0.14}/tests/test_yaml_config.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: alloc
3
- Version: 0.0.13
3
+ Version: 0.0.14
4
4
  Summary: Engineer-first training calibration: estimate VRAM fit, profile short runs, and pick GPU configs under real budget constraints.
5
5
  Author-email: Alloc Labs <hello@alloclabs.com>
6
6
  License-Expression: Apache-2.0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "alloc"
7
- version = "0.0.13"
7
+ version = "0.0.14"
8
8
  description = "Engineer-first training calibration: estimate VRAM fit, profile short runs, and pick GPU configs under real budget constraints."
9
9
  readme = "README.md"
10
10
  license = "Apache-2.0"
@@ -9,7 +9,7 @@ _warnings.filterwarnings("ignore", category=FutureWarning, module=r"torch\.cuda"
9
9
  _warnings.filterwarnings("ignore", category=DeprecationWarning, module=r"torch\.cuda")
10
10
  del _warnings
11
11
 
12
- __version__ = "0.0.13"
12
+ __version__ = "0.0.14"
13
13
 
14
14
  from alloc.ghost import ghost, GhostReport
15
15
  from alloc.callbacks import AllocCallback as HuggingFaceCallback
@@ -564,8 +564,11 @@ def run(
564
564
  else:
565
565
  console.print("[dim]Tip: alloc login --browser to connect your dashboard[/dim]")
566
566
 
567
+ # Propagate non-zero exit code — but NOT when calibrate mode
568
+ # intentionally killed the process (torchrun exits non-zero on SIGTERM)
567
569
  if result.exit_code and result.exit_code != 0:
568
- raise typer.Exit(result.exit_code)
570
+ if result.stop_reason not in ("stable", "timeout"):
571
+ raise typer.Exit(result.exit_code)
569
572
 
570
573
 
571
574
  @app.command()
@@ -2115,6 +2118,13 @@ def scan(
2115
2118
  """Remote ghost scan via Alloc API — no GPU needed."""
2116
2119
  import httpx
2117
2120
 
2121
+ # When --json, redirect console to stderr so nothing contaminates stdout.
2122
+ from rich.console import Console as _Console
2123
+ if json_output:
2124
+ console = _Console(stderr=True)
2125
+ else:
2126
+ console = _Console()
2127
+
2118
2128
  # Resolve param count from model name or explicit flag
2119
2129
  resolved_param_count = param_count_b or _model_to_params(model)
2120
2130
  if resolved_param_count is None:
@@ -699,8 +699,8 @@ def probe_command(
699
699
  num_gpus_detected=num_gpus_ref[0],
700
700
  process_map=process_map_ref[0],
701
701
  per_gpu_peak_vram_mb=(
702
- [round(per_gpu_peaks_ref[0].get(i, 0), 1) for i in range(num_gpus_ref[0])]
703
- if num_gpus_ref[0] >= 1 and per_gpu_peaks_ref[0] else None
702
+ [round(per_gpu_peaks_ref[0][i], 1) for i in sorted(per_gpu_peaks_ref[0])]
703
+ if per_gpu_peaks_ref[0] else None
704
704
  ),
705
705
  detected_interconnect=detected_ic_ref[0],
706
706
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: alloc
3
- Version: 0.0.13
3
+ Version: 0.0.14
4
4
  Summary: Engineer-first training calibration: estimate VRAM fit, profile short runs, and pick GPU configs under real budget constraints.
5
5
  Author-email: Alloc Labs <hello@alloclabs.com>
6
6
  License-Expression: Apache-2.0
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
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
File without changes
File without changes
File without changes