@tuned-tensor/cli 0.11.0 → 0.12.0-beta.1

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.
@@ -12,11 +12,21 @@ import torch
12
12
  from peft import LoraConfig, get_peft_model
13
13
  from torch.nn.utils.rnn import pad_sequence
14
14
  from torch.utils.data import Dataset
15
- from transformers import AutoModelForCausalLM, AutoTokenizer, Trainer, TrainingArguments
15
+ from transformers import (
16
+ AutoModelForCausalLM,
17
+ AutoModelForImageTextToText,
18
+ AutoTokenizer,
19
+ Trainer,
20
+ TrainingArguments,
21
+ )
16
22
 
17
23
  from model_contract import (
18
24
  CERTIFIED_BASE_MODEL,
25
+ assert_certified_base_model,
26
+ assert_certified_base_model_revision,
19
27
  assert_certified_model_config,
28
+ chat_template_kwargs,
29
+ parse_lora_target_modules,
20
30
  )
21
31
  from sft_data import IGNORE_INDEX, build_assistant_only_example
22
32
 
@@ -67,13 +77,18 @@ def model_revision_kwargs(model_source: str) -> dict[str, str]:
67
77
 
68
78
  def assert_certified_request() -> None:
69
79
  requested_model = hp("base_model", CERTIFIED_BASE_MODEL)
70
- if requested_model != CERTIFIED_BASE_MODEL:
80
+ assert_certified_base_model(str(requested_model), "Training base model")
81
+ assert_certified_base_model_revision(
82
+ str(requested_model),
83
+ hp("base_model_revision"),
84
+ "Training base model revision",
85
+ )
86
+ loader = hp("model_loader", "causal_lm")
87
+ if loader not in ("causal_lm", "image_text_to_text"):
71
88
  raise ValueError(
72
- f"The bundled trainer currently certifies only {CERTIFIED_BASE_MODEL}; got {requested_model!r}"
89
+ f"The bundled trainer does not support model_loader={loader!r}; "
90
+ "expected causal_lm or image_text_to_text"
73
91
  )
74
- loader = hp("model_loader", "causal_lm")
75
- if loader != "causal_lm":
76
- raise ValueError(f"The bundled trainer is text-only and requires model_loader=causal_lm; got {loader!r}")
77
92
  def require_cuda() -> dict[str, Any]:
78
93
  if not torch.cuda.is_available():
79
94
  raise RuntimeError(
@@ -111,7 +126,7 @@ def load_rows() -> list[dict[str, Any]]:
111
126
  def resolve_model_source() -> str:
112
127
  if BASE_MODEL_DIR.is_dir() and any(BASE_MODEL_DIR.iterdir()):
113
128
  return str(BASE_MODEL_DIR)
114
- return CERTIFIED_BASE_MODEL
129
+ return str(hp("base_model", CERTIFIED_BASE_MODEL))
115
130
 
116
131
 
117
132
  class AssistantOnlyDataset(Dataset[dict[str, torch.Tensor]]):
@@ -121,6 +136,7 @@ class AssistantOnlyDataset(Dataset[dict[str, torch.Tensor]]):
121
136
  tokenizer: Any,
122
137
  *,
123
138
  max_length: int,
139
+ chat_template_kwargs: dict[str, Any] | None = None,
124
140
  ):
125
141
  self.examples: list[dict[str, torch.Tensor]] = []
126
142
  for row_index, row in enumerate(rows, start=1):
@@ -129,9 +145,10 @@ class AssistantOnlyDataset(Dataset[dict[str, torch.Tensor]]):
129
145
  tokenizer,
130
146
  row["messages"],
131
147
  max_length=max_length,
148
+ chat_template_kwargs=chat_template_kwargs,
132
149
  )
133
150
  except Exception as exc:
134
- raise ValueError(f"Training row {row_index} is not valid Qwen SFT data: {exc}") from exc
151
+ raise ValueError(f"Training row {row_index} is not valid chat SFT data: {exc}") from exc
135
152
  self.examples.append({
136
153
  key: torch.tensor(value, dtype=torch.long)
137
154
  for key, value in tokenized.items()
@@ -179,18 +196,29 @@ def create_model_and_tokenizer(model_source: str) -> tuple[Any, Any, torch.dtype
179
196
  source_kwargs["local_files_only"] = True
180
197
  tokenizer = AutoTokenizer.from_pretrained(model_source, **source_kwargs)
181
198
  if tokenizer.eos_token_id is None:
182
- raise ValueError(f"{CERTIFIED_BASE_MODEL} tokenizer has no EOS token")
199
+ raise ValueError(f"{hp('base_model', CERTIFIED_BASE_MODEL)} tokenizer has no EOS token")
183
200
  if tokenizer.pad_token_id is None:
184
201
  tokenizer.pad_token = tokenizer.eos_token
185
202
 
186
203
  dtype = torch.bfloat16 if torch.cuda.is_bf16_supported() else torch.float16
187
- model = AutoModelForCausalLM.from_pretrained(
204
+ # Multimodal checkpoints whose text tower is not registered in the
205
+ # causal-LM auto mapping (e.g. Muse Glimmer) load through
206
+ # AutoModelForImageTextToText; the vision tower stays frozen and unused.
207
+ model_class = (
208
+ AutoModelForImageTextToText
209
+ if hp("model_loader", "causal_lm") == "image_text_to_text"
210
+ else AutoModelForCausalLM
211
+ )
212
+ model = model_class.from_pretrained(
188
213
  model_source,
189
214
  **source_kwargs,
190
215
  dtype=dtype,
191
216
  device_map={"": torch.cuda.current_device()},
192
217
  )
193
- assert_certified_model_config(model.config)
218
+ assert_certified_model_config(
219
+ model.config,
220
+ expected_model_id=str(hp("base_model", CERTIFIED_BASE_MODEL)),
221
+ )
194
222
  model.config.use_cache = False
195
223
  return model, tokenizer, dtype
196
224
 
@@ -202,7 +230,7 @@ def apply_lora(model: Any) -> Any:
202
230
  lora_dropout=hp_float("lora_dropout", 0.05),
203
231
  bias="none",
204
232
  task_type="CAUSAL_LM",
205
- target_modules="all-linear",
233
+ target_modules=parse_lora_target_modules(hp("lora_target_modules", "all-linear")),
206
234
  )
207
235
  return get_peft_model(model, config)
208
236
 
@@ -217,11 +245,16 @@ def create_model_archive() -> Path:
217
245
 
218
246
  def run_training(rows: list[dict[str, Any]], model_source: str) -> tuple[dict[str, Any], torch.dtype]:
219
247
  model, tokenizer, dtype = create_model_and_tokenizer(model_source)
248
+ model.config.use_cache = False
220
249
  model = apply_lora(model)
250
+ if str(hp("gradient_checkpointing", "false")).lower() == "true":
251
+ model.enable_input_require_grads()
252
+ model.gradient_checkpointing_enable()
221
253
  dataset = AssistantOnlyDataset(
222
254
  rows,
223
255
  tokenizer,
224
256
  max_length=hp_int("max_seq_length", 2048),
257
+ chat_template_kwargs=chat_template_kwargs(str(hp("base_model", CERTIFIED_BASE_MODEL))),
225
258
  )
226
259
  collator = AssistantOnlyCollator(tokenizer.pad_token_id)
227
260
 
@@ -239,6 +272,7 @@ def run_training(rows: list[dict[str, Any]], model_source: str) -> tuple[dict[st
239
272
  bf16=dtype == torch.bfloat16,
240
273
  fp16=dtype == torch.float16,
241
274
  optim="adamw_torch",
275
+ gradient_checkpointing=str(hp("gradient_checkpointing", "false")).lower() == "true",
242
276
  )
243
277
  trainer = Trainer(
244
278
  model=model,
@@ -266,10 +300,10 @@ def main() -> None:
266
300
  archive_path = create_model_archive()
267
301
  output_metrics = {
268
302
  "training_rows": len(rows),
269
- "base_model": CERTIFIED_BASE_MODEL,
303
+ "base_model": hp("base_model", CERTIFIED_BASE_MODEL),
270
304
  "base_model_revision": hp("base_model_revision"),
271
305
  "model_source": model_source,
272
- "model_loader": "causal_lm",
306
+ "model_loader": hp("model_loader", "causal_lm"),
273
307
  "loss_mask": "final_assistant_only",
274
308
  "device": "cuda",
275
309
  "cuda_device": cuda["device_name"],
@@ -93,7 +93,7 @@ name = "cuda-bindings"
93
93
  version = "13.3.1"
94
94
  source = { registry = "https://pypi.org/simple" }
95
95
  dependencies = [
96
- { name = "cuda-pathfinder", marker = "sys_platform == 'linux'" },
96
+ { name = "cuda-pathfinder" },
97
97
  ]
98
98
  wheels = [
99
99
  { url = "https://files.pythonhosted.org/packages/51/6b/457ca12dad3ee9bfcc9a545cfd6b64b359ba49de40f776f6e028e678f262/cuda_bindings-13.3.1-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c5879712accf6e14bb01aa5e67440eb84998b8d104b509cc7a6dc0b8f656a474", size = 6053539, upload-time = "2026-05-29T23:11:43.19Z" },
@@ -126,43 +126,43 @@ wheels = [
126
126
 
127
127
  [package.optional-dependencies]
128
128
  cublas = [
129
- { name = "nvidia-cublas", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" },
130
- { name = "nvidia-cuda-nvrtc", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" },
129
+ { name = "nvidia-cublas", marker = "platform_machine == 'aarch64' or platform_machine == 'x86_64'" },
130
+ { name = "nvidia-cuda-nvrtc", marker = "platform_machine == 'aarch64' or platform_machine == 'x86_64'" },
131
131
  ]
132
132
  cudart = [
133
- { name = "nvidia-cuda-runtime", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" },
133
+ { name = "nvidia-cuda-runtime", marker = "platform_machine == 'aarch64' or platform_machine == 'x86_64'" },
134
134
  ]
135
135
  cufft = [
136
- { name = "nvidia-cufft", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" },
137
- { name = "nvidia-nvjitlink", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" },
136
+ { name = "nvidia-cufft", marker = "platform_machine == 'aarch64' or platform_machine == 'x86_64'" },
137
+ { name = "nvidia-nvjitlink", marker = "platform_machine == 'aarch64' or platform_machine == 'x86_64'" },
138
138
  ]
139
139
  cufile = [
140
- { name = "nvidia-cufile", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" },
140
+ { name = "nvidia-cufile", marker = "platform_machine == 'aarch64' or platform_machine == 'x86_64'" },
141
141
  ]
142
142
  cupti = [
143
- { name = "nvidia-cuda-cupti", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" },
143
+ { name = "nvidia-cuda-cupti", marker = "platform_machine == 'aarch64' or platform_machine == 'x86_64'" },
144
144
  ]
145
145
  curand = [
146
- { name = "nvidia-curand", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" },
146
+ { name = "nvidia-curand", marker = "platform_machine == 'aarch64' or platform_machine == 'x86_64'" },
147
147
  ]
148
148
  cusolver = [
149
- { name = "nvidia-cublas", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" },
150
- { name = "nvidia-cusolver", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" },
151
- { name = "nvidia-cusparse", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" },
152
- { name = "nvidia-nvjitlink", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" },
149
+ { name = "nvidia-cublas", marker = "platform_machine == 'aarch64' or platform_machine == 'x86_64'" },
150
+ { name = "nvidia-cusolver", marker = "platform_machine == 'aarch64' or platform_machine == 'x86_64'" },
151
+ { name = "nvidia-cusparse", marker = "platform_machine == 'aarch64' or platform_machine == 'x86_64'" },
152
+ { name = "nvidia-nvjitlink", marker = "platform_machine == 'aarch64' or platform_machine == 'x86_64'" },
153
153
  ]
154
154
  cusparse = [
155
- { name = "nvidia-cusparse", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" },
156
- { name = "nvidia-nvjitlink", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" },
155
+ { name = "nvidia-cusparse", marker = "platform_machine == 'aarch64' or platform_machine == 'x86_64'" },
156
+ { name = "nvidia-nvjitlink", marker = "platform_machine == 'aarch64' or platform_machine == 'x86_64'" },
157
157
  ]
158
158
  nvjitlink = [
159
- { name = "nvidia-nvjitlink", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" },
159
+ { name = "nvidia-nvjitlink", marker = "platform_machine == 'aarch64' or platform_machine == 'x86_64'" },
160
160
  ]
161
161
  nvrtc = [
162
- { name = "nvidia-cuda-nvrtc", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" },
162
+ { name = "nvidia-cuda-nvrtc", marker = "platform_machine == 'aarch64' or platform_machine == 'x86_64'" },
163
163
  ]
164
164
  nvtx = [
165
- { name = "nvidia-nvtx", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" },
165
+ { name = "nvidia-nvtx", marker = "platform_machine == 'aarch64' or platform_machine == 'x86_64'" },
166
166
  ]
167
167
 
168
168
  [[package]]
@@ -557,7 +557,7 @@ name = "nvidia-cublas"
557
557
  version = "13.1.1.3"
558
558
  source = { registry = "https://pypi.org/simple" }
559
559
  dependencies = [
560
- { name = "nvidia-cuda-nvrtc", marker = "sys_platform == 'linux'" },
560
+ { name = "nvidia-cuda-nvrtc" },
561
561
  ]
562
562
  wheels = [
563
563
  { url = "https://files.pythonhosted.org/packages/a7/a1/0bd24ee8c8d03adac032fd2909426a00c88f8c57961b1277ded97f91119f/nvidia_cublas-13.1.1.3-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:b7a210458267ac818974c53038fbec2e969d5c99f305ab15c72522fa9f001dd5", size = 542848918, upload-time = "2026-04-08T18:46:22.985Z" },
@@ -596,7 +596,7 @@ name = "nvidia-cudnn-cu13"
596
596
  version = "9.20.0.48"
597
597
  source = { registry = "https://pypi.org/simple" }
598
598
  dependencies = [
599
- { name = "nvidia-cublas", marker = "sys_platform == 'linux'" },
599
+ { name = "nvidia-cublas" },
600
600
  ]
601
601
  wheels = [
602
602
  { url = "https://files.pythonhosted.org/packages/56/c5/83384d846b2fd17c44bd499b36c75a45ed4f095fbbb2252294e89cea5c5c/nvidia_cudnn_cu13-9.20.0.48-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:e31454ae00094b0c55319d9d15b6fa2fc50a9e1c0f5c8c80fb75258234e731e1", size = 444574296, upload-time = "2026-03-09T19:28:27.751Z" },
@@ -608,7 +608,7 @@ name = "nvidia-cufft"
608
608
  version = "12.0.0.61"
609
609
  source = { registry = "https://pypi.org/simple" }
610
610
  dependencies = [
611
- { name = "nvidia-nvjitlink", marker = "sys_platform == 'linux'" },
611
+ { name = "nvidia-nvjitlink" },
612
612
  ]
613
613
  wheels = [
614
614
  { url = "https://files.pythonhosted.org/packages/8b/ae/f417a75c0259e85c1d2f83ca4e960289a5f814ed0cea74d18c353d3e989d/nvidia_cufft-12.0.0.61-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2708c852ef8cd89d1d2068bdbece0aa188813a0c934db3779b9b1faa8442e5f5", size = 214053554, upload-time = "2025-09-04T08:31:38.196Z" },
@@ -638,9 +638,9 @@ name = "nvidia-cusolver"
638
638
  version = "12.0.4.66"
639
639
  source = { registry = "https://pypi.org/simple" }
640
640
  dependencies = [
641
- { name = "nvidia-cublas", marker = "sys_platform == 'linux'" },
642
- { name = "nvidia-cusparse", marker = "sys_platform == 'linux'" },
643
- { name = "nvidia-nvjitlink", marker = "sys_platform == 'linux'" },
641
+ { name = "nvidia-cublas" },
642
+ { name = "nvidia-cusparse" },
643
+ { name = "nvidia-nvjitlink" },
644
644
  ]
645
645
  wheels = [
646
646
  { url = "https://files.pythonhosted.org/packages/c8/c3/b30c9e935fc01e3da443ec0116ed1b2a009bb867f5324d3f2d7e533e776b/nvidia_cusolver-12.0.4.66-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:02c2457eaa9e39de20f880f4bd8820e6a1cfb9f9a34f820eb12a155aa5bc92d2", size = 223467760, upload-time = "2025-09-04T08:33:04.222Z" },
@@ -652,7 +652,7 @@ name = "nvidia-cusparse"
652
652
  version = "12.6.3.3"
653
653
  source = { registry = "https://pypi.org/simple" }
654
654
  dependencies = [
655
- { name = "nvidia-nvjitlink", marker = "sys_platform == 'linux'" },
655
+ { name = "nvidia-nvjitlink" },
656
656
  ]
657
657
  wheels = [
658
658
  { url = "https://files.pythonhosted.org/packages/f8/94/5c26f33738ae35276672f12615a64bd008ed5be6d1ebcb23579285d960a9/nvidia_cusparse-12.6.3.3-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:80bcc4662f23f1054ee334a15c72b8940402975e0eab63178fc7e670aa59472c", size = 162155568, upload-time = "2025-09-04T08:33:42.864Z" },
@@ -715,7 +715,7 @@ wheels = [
715
715
 
716
716
  [[package]]
717
717
  name = "peft"
718
- version = "0.19.1"
718
+ version = "0.20.0"
719
719
  source = { registry = "https://pypi.org/simple" }
720
720
  dependencies = [
721
721
  { name = "accelerate" },
@@ -731,9 +731,9 @@ dependencies = [
731
731
  { name = "tqdm" },
732
732
  { name = "transformers" },
733
733
  ]
734
- sdist = { url = "https://files.pythonhosted.org/packages/86/cf/037f1e3d5186496c05513a6754639e2dab3038a05f384284d49a9bd06a2d/peft-0.19.1.tar.gz", hash = "sha256:0d97542fe96dcdaa20d3b81c06f26f988618f416a73544ab23c3618ccb674a40", size = 763738, upload-time = "2026-04-16T15:46:45.105Z" }
734
+ sdist = { url = "https://files.pythonhosted.org/packages/b4/08/02541a2c29be7c78698f73d438bc0e733b214f3f35ec5db79fca8da8fc61/peft-0.20.0.tar.gz", hash = "sha256:4769c8093a4ca145fd6fb3fd4dd50449675f5fe46434ad1e98b285a132d4b1d0", size = 880503, upload-time = "2026-07-28T13:46:01.85Z" }
735
735
  wheels = [
736
- { url = "https://files.pythonhosted.org/packages/e8/b6/f54d676ed93cc2dd2234c3b172ea9c8c3d7d29361e66b1b23dec57a67465/peft-0.19.1-py3-none-any.whl", hash = "sha256:2113f72a81621b5913ef28f9022204c742df111890c5f49d812716a4a301e356", size = 680692, upload-time = "2026-04-16T15:46:42.886Z" },
736
+ { url = "https://files.pythonhosted.org/packages/28/79/13bcabb8048126422d5c4b880575d40886c726f354db88cfeed4325525bb/peft-0.20.0-py3-none-any.whl", hash = "sha256:0fbba16ffebfad3de96e06f2da6860fd860292324b85b6141909fa1e26ea9233", size = 775777, upload-time = "2026-07-28T13:45:59.809Z" },
737
737
  ]
738
738
 
739
739
  [[package]]
@@ -1041,13 +1041,13 @@ resolution-markers = [
1041
1041
  "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32'",
1042
1042
  ]
1043
1043
  dependencies = [
1044
- { name = "filelock", marker = "sys_platform != 'linux'" },
1045
- { name = "fsspec", marker = "sys_platform != 'linux'" },
1046
- { name = "jinja2", marker = "sys_platform != 'linux'" },
1047
- { name = "networkx", marker = "sys_platform != 'linux'" },
1048
- { name = "setuptools", marker = "sys_platform != 'linux'" },
1049
- { name = "sympy", marker = "sys_platform != 'linux'" },
1050
- { name = "typing-extensions", marker = "sys_platform != 'linux'" },
1044
+ { name = "filelock" },
1045
+ { name = "fsspec" },
1046
+ { name = "jinja2" },
1047
+ { name = "networkx" },
1048
+ { name = "setuptools" },
1049
+ { name = "sympy" },
1050
+ { name = "typing-extensions" },
1051
1051
  ]
1052
1052
  wheels = [
1053
1053
  { url = "https://files.pythonhosted.org/packages/5b/fe/cba54dc58523434919b66f13a667e36e436deddd77ca519e96553617d4ec/torch-2.13.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:e76f9bcecc52b8ff711239a2f7547d5353df95878ab232f0773c1d95928b92f8", size = 111187938, upload-time = "2026-07-08T16:05:17.065Z" },
@@ -1072,20 +1072,20 @@ resolution-markers = [
1072
1072
  "python_full_version < '3.12' and sys_platform == 'linux'",
1073
1073
  ]
1074
1074
  dependencies = [
1075
- { name = "cuda-bindings", marker = "python_full_version < '3.15' and sys_platform == 'linux'" },
1076
- { name = "cuda-toolkit", extra = ["cublas", "cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "sys_platform == 'linux'" },
1077
- { name = "filelock", marker = "sys_platform == 'linux'" },
1078
- { name = "fsspec", marker = "sys_platform == 'linux'" },
1079
- { name = "jinja2", marker = "sys_platform == 'linux'" },
1080
- { name = "networkx", marker = "sys_platform == 'linux'" },
1081
- { name = "nvidia-cudnn-cu13", marker = "sys_platform == 'linux'" },
1082
- { name = "nvidia-cusparselt-cu13", marker = "sys_platform == 'linux'" },
1083
- { name = "nvidia-nccl-cu13", marker = "sys_platform == 'linux'" },
1084
- { name = "nvidia-nvshmem-cu13", marker = "sys_platform == 'linux'" },
1085
- { name = "setuptools", marker = "sys_platform == 'linux'" },
1086
- { name = "sympy", marker = "sys_platform == 'linux'" },
1087
- { name = "triton", marker = "python_full_version < '3.15' and sys_platform == 'linux'" },
1088
- { name = "typing-extensions", marker = "sys_platform == 'linux'" },
1075
+ { name = "cuda-bindings", marker = "python_full_version < '3.15'" },
1076
+ { name = "cuda-toolkit", extra = ["cublas", "cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"] },
1077
+ { name = "filelock" },
1078
+ { name = "fsspec" },
1079
+ { name = "jinja2" },
1080
+ { name = "networkx" },
1081
+ { name = "nvidia-cudnn-cu13" },
1082
+ { name = "nvidia-cusparselt-cu13" },
1083
+ { name = "nvidia-nccl-cu13" },
1084
+ { name = "nvidia-nvshmem-cu13" },
1085
+ { name = "setuptools" },
1086
+ { name = "sympy" },
1087
+ { name = "triton", marker = "python_full_version < '3.15'" },
1088
+ { name = "typing-extensions" },
1089
1089
  ]
1090
1090
  wheels = [
1091
1091
  { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.13.0%2Bcu130-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:b8a6b58c0176dd532254f6622fb1dffef6b38ad7cb67fcd0beb673066c8c710c", upload-time = "2026-07-08T20:20:24Z" },
@@ -1118,7 +1118,7 @@ wheels = [
1118
1118
 
1119
1119
  [[package]]
1120
1120
  name = "transformers"
1121
- version = "5.13.1"
1121
+ version = "5.15.0"
1122
1122
  source = { registry = "https://pypi.org/simple" }
1123
1123
  dependencies = [
1124
1124
  { name = "huggingface-hub" },
@@ -1132,9 +1132,9 @@ dependencies = [
1132
1132
  { name = "tqdm" },
1133
1133
  { name = "typer" },
1134
1134
  ]
1135
- sdist = { url = "https://files.pythonhosted.org/packages/6e/f7/418169401560cec2b61512e6bf37b0cfb4c8e27700cfa868a1de073cb65d/transformers-5.13.1.tar.gz", hash = "sha256:1e2452d6778a7482158df5d5dacf6bf775d5b2fdcfce33caaf7f6b0e5f3e3397", size = 9196891, upload-time = "2026-07-11T09:15:50.845Z" }
1135
+ sdist = { url = "https://files.pythonhosted.org/packages/a6/3f/d89353267d511e18f137dfd7769d07837350c11b88408ce1dfe2e93e56c7/transformers-5.15.0.tar.gz", hash = "sha256:bbf98f57b2ddd7c4ecbccfa2c0069017aa6fd01cc204bd50cbc0eeadcf2a13b8", size = 9377983, upload-time = "2026-08-10T10:27:23.261Z" }
1136
1136
  wheels = [
1137
- { url = "https://files.pythonhosted.org/packages/29/47/54eacf96b5c835bbd6ca631aa2740e7705ed63d9e3a8afd2d2cc6d09cae5/transformers-5.13.1-py3-none-any.whl", hash = "sha256:53f0ea8aa397e29244c2377ba981bcaf0c87adcf44fbdd447ef6306522afcacd", size = 11503977, upload-time = "2026-07-11T09:15:46.801Z" },
1137
+ { url = "https://files.pythonhosted.org/packages/d8/43/81355710a4c84e9420e11a86d41a5364deb561f2ef36dfdf254a07371bbb/transformers-5.15.0-py3-none-any.whl", hash = "sha256:d7f007736f67749ae9490c4f8cb5d30b452ae2d68c8675e50ba8d63ea7feb107", size = 11749280, upload-time = "2026-08-10T10:27:20.416Z" },
1138
1138
  ]
1139
1139
 
1140
1140
  [[package]]
@@ -1172,11 +1172,11 @@ dependencies = [
1172
1172
  requires-dist = [
1173
1173
  { name = "accelerate", specifier = ">=1.0.0" },
1174
1174
  { name = "huggingface-hub", specifier = ">=0.36.0" },
1175
- { name = "peft", specifier = ">=0.13.0" },
1175
+ { name = "peft", specifier = ">=0.20.0" },
1176
1176
  { name = "safetensors", specifier = ">=0.4.5" },
1177
1177
  { name = "torch", marker = "sys_platform != 'linux'", specifier = ">=2.11.0" },
1178
1178
  { name = "torch", marker = "sys_platform == 'linux'", specifier = ">=2.11.0", index = "https://download.pytorch.org/whl/cu130" },
1179
- { name = "transformers", specifier = ">=4.57.0" },
1179
+ { name = "transformers", specifier = ">=5.15.0" },
1180
1180
  ]
1181
1181
 
1182
1182
  [[package]]