tenseleyflow/documentlanguagemodel / db97731

Browse files

fix(pyproject): promote ML runtime to [project].dependencies; cuda extra for bnb (audit-05 B1)

Authored by espadonne
SHA
db9773175cea966c452f3a40c8a5ee57ba932d37
Parents
9979b02
Tree
56e550a

2 changed files

StatusFile+-
M pyproject.toml 23 8
M uv.lock 39 12
pyproject.tomlmodified
@@ -17,6 +17,7 @@ classifiers = [
1717
     "Topic :: Scientific/Engineering :: Artificial Intelligence",
1818
 ]
1919
 dependencies = [
20
+    # CLI / doc / lightweight plumbing.
2021
     "typer>=0.12",
2122
     "rich>=13.7",
2223
     "python-ulid>=3.0",       # dlm_id generation (Sprint 13)
@@ -25,6 +26,26 @@ dependencies = [
2526
     "psutil>=6.0",            # hardware doctor (Sprint 05)
2627
     "zstandard>=0.23",        # replay corpus framing (Sprint 08)
2728
     "cbor2>=5.6",             # replay snapshot encoding (Sprint 08)
29
+    "packaging>=24.0",        # lock policy semver parsing (Sprint 15)
30
+
31
+    # ML runtime. `dlm train`, `dlm prompt`, `dlm export` all import these;
32
+    # a `pip install dlm` that omits them would ImportError on first call
33
+    # (audit-05 B1).
34
+    "torch>=2.4",
35
+    "transformers>=4.45",
36
+    "peft>=0.13",
37
+    "trl>=0.12",
38
+    "datasets>=3.0",
39
+    "huggingface-hub>=0.25",
40
+    "safetensors>=0.4",       # GGUF conversion + adapter I/O (Sprint 11)
41
+]
42
+
43
+[project.optional-dependencies]
44
+# CUDA-only. `bitsandbytes` won't install on macOS / CPU-only boxes; gate
45
+# behind an extra so `pip install dlm` stays portable and `pip install
46
+# dlm[cuda]` unlocks QLoRA.
47
+cuda = [
48
+    "bitsandbytes>=0.43",
2849
 ]
2950
 
3051
 [project.scripts]
@@ -36,20 +57,14 @@ Issues = "https://github.com/tenseleyFlow/DocumentLanguageModel/issues"
3657
 
3758
 [dependency-groups]
3859
 dev = [
60
+    # Test + lint tooling only. ML runtime moved to [project].dependencies
61
+    # (audit-05 B1) so `pip install dlm` gives users a working CLI.
3962
     "pytest>=8.0",
4063
     "pytest-cov>=5.0",
4164
     "mypy>=1.11",
4265
     "ruff>=0.6",
4366
     "types-pyyaml>=6.0",
4467
     "types-psutil>=6.0",
45
-    # Fixture infrastructure (Sprint 02). Promoted to runtime deps in Sprint 06.
46
-    "torch>=2.4",
47
-    "transformers>=4.45",
48
-    "huggingface-hub>=0.25",
49
-    # Training ecosystem (Sprint 07 dataset assembly, Sprint 09 trainer).
50
-    "datasets>=3.0",
51
-    "peft>=0.13",
52
-    "trl>=0.12",
5368
     "hypothesis>=6.152.1",
5469
 ]
5570
 docs = [
uv.lockmodified
@@ -215,6 +215,22 @@ wheels = [
215215
     { url = "https://files.pythonhosted.org/packages/21/f8/d02f650c47d05034dcd6f9c8cf94f39598b7a89c00ecda0ecb2911bc27e9/backrefs-6.2-py39-none-any.whl", hash = "sha256:664e33cd88c6840b7625b826ecf2555f32d491800900f5a541f772c485f7cda7", size = 381077, upload-time = "2026-02-16T19:10:13.74Z" },
216216
 ]
217217
 
218
+[[package]]
219
+name = "bitsandbytes"
220
+version = "0.49.2"
221
+source = { registry = "https://pypi.org/simple" }
222
+dependencies = [
223
+    { name = "numpy" },
224
+    { name = "packaging" },
225
+    { name = "torch" },
226
+]
227
+wheels = [
228
+    { url = "https://files.pythonhosted.org/packages/d8/7d/f1fe0992334b18cd8494f89aeec1dcc674635584fcd9f115784fea3a1d05/bitsandbytes-0.49.2-py3-none-macosx_14_0_arm64.whl", hash = "sha256:87be5975edeac5396d699ecbc39dfc47cf2c026daaf2d5852a94368611a6823f", size = 131940, upload-time = "2026-02-16T21:26:04.572Z" },
229
+    { url = "https://files.pythonhosted.org/packages/29/71/acff7af06c818664aa87ff73e17a52c7788ad746b72aea09d3cb8e424348/bitsandbytes-0.49.2-py3-none-manylinux_2_24_aarch64.whl", hash = "sha256:2fc0830c5f7169be36e60e11f2be067c8f812dfcb829801a8703735842450750", size = 31442815, upload-time = "2026-02-16T21:26:06.783Z" },
230
+    { url = "https://files.pythonhosted.org/packages/19/57/3443d6f183436fbdaf5000aac332c4d5ddb056665d459244a5608e98ae92/bitsandbytes-0.49.2-py3-none-manylinux_2_24_x86_64.whl", hash = "sha256:54b771f06e1a3c73af5c7f16ccf0fc23a846052813d4b008d10cb6e017dd1c8c", size = 60651714, upload-time = "2026-02-16T21:26:11.579Z" },
231
+    { url = "https://files.pythonhosted.org/packages/b6/d4/501655842ad6771fb077f576d78cbedb5445d15b1c3c91343ed58ca46f0e/bitsandbytes-0.49.2-py3-none-win_amd64.whl", hash = "sha256:2e0ddd09cd778155388023cbe81f00afbb7c000c214caef3ce83386e7144df7d", size = 55372289, upload-time = "2026-02-16T21:26:16.267Z" },
232
+]
233
+
218234
 [[package]]
219235
 name = "cbor2"
220236
 version = "5.9.0"
@@ -586,28 +602,35 @@ version = "0.1.0"
586602
 source = { editable = "." }
587603
 dependencies = [
588604
     { name = "cbor2" },
605
+    { name = "datasets" },
606
+    { name = "huggingface-hub" },
607
+    { name = "packaging" },
608
+    { name = "peft" },
589609
     { name = "psutil" },
590610
     { name = "pydantic" },
591611
     { name = "python-ulid" },
592612
     { name = "pyyaml" },
593613
     { name = "rich" },
614
+    { name = "safetensors" },
615
+    { name = "torch" },
616
+    { name = "transformers" },
617
+    { name = "trl" },
594618
     { name = "typer" },
595619
     { name = "zstandard" },
596620
 ]
597621
 
622
+[package.optional-dependencies]
623
+cuda = [
624
+    { name = "bitsandbytes" },
625
+]
626
+
598627
 [package.dev-dependencies]
599628
 dev = [
600
-    { name = "datasets" },
601
-    { name = "huggingface-hub" },
602629
     { name = "hypothesis" },
603630
     { name = "mypy" },
604
-    { name = "peft" },
605631
     { name = "pytest" },
606632
     { name = "pytest-cov" },
607633
     { name = "ruff" },
608
-    { name = "torch" },
609
-    { name = "transformers" },
610
-    { name = "trl" },
611634
     { name = "types-psutil" },
612635
     { name = "types-pyyaml" },
613636
 ]
@@ -618,29 +641,33 @@ docs = [
618641
 
619642
 [package.metadata]
620643
 requires-dist = [
644
+    { name = "bitsandbytes", marker = "extra == 'cuda'", specifier = ">=0.43" },
621645
     { name = "cbor2", specifier = ">=5.6" },
646
+    { name = "datasets", specifier = ">=3.0" },
647
+    { name = "huggingface-hub", specifier = ">=0.25" },
648
+    { name = "packaging", specifier = ">=24.0" },
649
+    { name = "peft", specifier = ">=0.13" },
622650
     { name = "psutil", specifier = ">=6.0" },
623651
     { name = "pydantic", specifier = ">=2.9" },
624652
     { name = "python-ulid", specifier = ">=3.0" },
625653
     { name = "pyyaml", specifier = ">=6.0" },
626654
     { name = "rich", specifier = ">=13.7" },
655
+    { name = "safetensors", specifier = ">=0.4" },
656
+    { name = "torch", specifier = ">=2.4" },
657
+    { name = "transformers", specifier = ">=4.45" },
658
+    { name = "trl", specifier = ">=0.12" },
627659
     { name = "typer", specifier = ">=0.12" },
628660
     { name = "zstandard", specifier = ">=0.23" },
629661
 ]
662
+provides-extras = ["cuda"]
630663
 
631664
 [package.metadata.requires-dev]
632665
 dev = [
633
-    { name = "datasets", specifier = ">=3.0" },
634
-    { name = "huggingface-hub", specifier = ">=0.25" },
635666
     { name = "hypothesis", specifier = ">=6.152.1" },
636667
     { name = "mypy", specifier = ">=1.11" },
637
-    { name = "peft", specifier = ">=0.13" },
638668
     { name = "pytest", specifier = ">=8.0" },
639669
     { name = "pytest-cov", specifier = ">=5.0" },
640670
     { name = "ruff", specifier = ">=0.6" },
641
-    { name = "torch", specifier = ">=2.4" },
642
-    { name = "transformers", specifier = ">=4.45" },
643
-    { name = "trl", specifier = ">=0.12" },
644671
     { name = "types-psutil", specifier = ">=6.0" },
645672
     { name = "types-pyyaml", specifier = ">=6.0" },
646673
 ]