Oleg Shulyakov commited on
Commit
fa221c9
·
1 Parent(s): 4b18966
Files changed (1) hide show
  1. app.py +28 -19
app.py CHANGED
@@ -56,6 +56,9 @@ class ModelProcessingConfig:
56
  quant_config: QuantizationConfig
57
  split_config: SplitConfig
58
  output_config: OutputConfig
 
 
 
59
 
60
  class GGUFConverterError(Exception):
61
  """Custom exception for GGUF conversion errors."""
@@ -321,6 +324,19 @@ class HuggingFaceModelProcessor:
321
  print(f"Quantized model path: {os.path.abspath(quant_config.quantized_gguf)}")
322
  return quant_config.quantized_gguf
323
 
 
 
 
 
 
 
 
 
 
 
 
 
 
324
  def _generate_readme(self, outdir: str, token: str, model_id: str,
325
  new_repo_id: str, gguf_name: str) -> str:
326
  """Generate README.md for the quantized model."""
@@ -384,23 +400,16 @@ llama-server --hf-repo "{new_repo_id}" --hf-file "{gguf_name}" -c 4096
384
  self._quantize_model(quant_config)
385
 
386
  # Create empty repo
387
- api = HfApi(token=processing_config.token)
388
- new_repo_url = api.create_repo(
389
- repo_id=output_config.repo_name,
390
- exist_ok=True,
391
- private=output_config.private_repo
392
- )
393
- new_repo_id = new_repo_url.repo_id
394
- print("Repo created successfully!", new_repo_url)
395
 
396
  # Upload model
397
  if split_config.enabled:
398
  print(f"Splitting quantized model: {os.path.abspath(quant_config.quantized_gguf)}")
399
- self._split_and_upload_model(quant_config.quantized_gguf, processing_config.outdir, new_repo_id, processing_config.token, split_config)
400
  else:
401
  try:
402
  print(f"Uploading quantized model: {os.path.abspath(quant_config.quantized_gguf)}")
403
- self._upload_file(processing_config.token, quant_config.quantized_gguf, output_config.filename, new_repo_id)
404
  except Exception as e:
405
  raise GGUFConverterError(f"Error uploading quantized model: {e}")
406
 
@@ -408,21 +417,16 @@ llama-server --hf-repo "{new_repo_id}" --hf-file "{gguf_name}" -c 4096
408
  if quant_config.use_imatrix and os.path.isfile(quant_config.imatrix_file):
409
  try:
410
  print(f"Uploading imatrix.dat: {os.path.abspath(quant_config.imatrix_file)}")
411
- self._upload_file(processing_config.token, quant_config.imatrix_file, f"{processing_config.model_name}-imatrix.dat", new_repo_id)
412
  except Exception as e:
413
  raise GGUFConverterError(f"Error uploading imatrix.dat: {e}")
414
 
415
  # Upload README.md
416
- readme_path = self._generate_readme(processing_config.outdir, processing_config.token, processing_config.model_id, new_repo_id, output_config.filename)
417
- self._upload_file(processing_config.token, readme_path, "README.md", new_repo_id)
418
 
419
  print(f"Uploaded successfully with {quant_config.imatrix_method if quant_config.use_imatrix else quant_config.method} option!")
420
 
421
- return (
422
- f'<h1>✅ DONE</h1><br/>Find your repo here: <a href="{new_repo_url}" target="_blank" style="text-decoration:underline">{new_repo_id}</a>',
423
- "llama.png",
424
- )
425
-
426
 
427
  class GGUFConverterUI:
428
  """Gradio UI for the GGUF Converter."""
@@ -793,7 +797,12 @@ class GGUFConverterUI:
793
  )
794
 
795
  # Call the processor's main method with the config object
796
- return self.processor.process_model(processing_config)
 
 
 
 
 
797
 
798
  except Exception as e:
799
  print(f"Error processing model: {e}")
 
56
  quant_config: QuantizationConfig
57
  split_config: SplitConfig
58
  output_config: OutputConfig
59
+ # Generated values - These will be set during processing
60
+ new_repo_url: str = field(default="", init=False)
61
+ new_repo_id: str = field(default="", init=False)
62
 
63
  class GGUFConverterError(Exception):
64
  """Custom exception for GGUF conversion errors."""
 
324
  print(f"Quantized model path: {os.path.abspath(quant_config.quantized_gguf)}")
325
  return quant_config.quantized_gguf
326
 
327
+ def _create_empty_repo(self, processing_config: ModelProcessingConfig):
328
+ api = HfApi(token=processing_config.token)
329
+ new_repo_url = api.create_repo(
330
+ repo_id=processing_config.output_config.repo_name,
331
+ exist_ok=True,
332
+ private=processing_config.output_config.private_repo
333
+ )
334
+ processing_config.new_repo_url = new_repo_url.url
335
+ processing_config.new_repo_id = new_repo_url.repo_id
336
+ print("Repo created successfully!", processing_config.new_repo_url)
337
+
338
+ return new_repo_url
339
+
340
  def _generate_readme(self, outdir: str, token: str, model_id: str,
341
  new_repo_id: str, gguf_name: str) -> str:
342
  """Generate README.md for the quantized model."""
 
400
  self._quantize_model(quant_config)
401
 
402
  # Create empty repo
403
+ self._create_empty_repo(processing_config)
 
 
 
 
 
 
 
404
 
405
  # Upload model
406
  if split_config.enabled:
407
  print(f"Splitting quantized model: {os.path.abspath(quant_config.quantized_gguf)}")
408
+ self._split_and_upload_model(quant_config.quantized_gguf, processing_config.outdir, processing_config.new_repo_id, processing_config.token, split_config)
409
  else:
410
  try:
411
  print(f"Uploading quantized model: {os.path.abspath(quant_config.quantized_gguf)}")
412
+ self._upload_file(processing_config.token, quant_config.quantized_gguf, output_config.filename, processing_config.new_repo_id)
413
  except Exception as e:
414
  raise GGUFConverterError(f"Error uploading quantized model: {e}")
415
 
 
417
  if quant_config.use_imatrix and os.path.isfile(quant_config.imatrix_file):
418
  try:
419
  print(f"Uploading imatrix.dat: {os.path.abspath(quant_config.imatrix_file)}")
420
+ self._upload_file(processing_config.token, quant_config.imatrix_file, f"{processing_config.model_name}-imatrix.dat", processing_config.new_repo_id)
421
  except Exception as e:
422
  raise GGUFConverterError(f"Error uploading imatrix.dat: {e}")
423
 
424
  # Upload README.md
425
+ readme_path = self._generate_readme(processing_config.outdir, processing_config.token, processing_config.model_id, processing_config.new_repo_id, output_config.filename)
426
+ self._upload_file(processing_config.token, readme_path, "README.md", processing_config.new_repo_id)
427
 
428
  print(f"Uploaded successfully with {quant_config.imatrix_method if quant_config.use_imatrix else quant_config.method} option!")
429
 
 
 
 
 
 
430
 
431
  class GGUFConverterUI:
432
  """Gradio UI for the GGUF Converter."""
 
797
  )
798
 
799
  # Call the processor's main method with the config object
800
+ self.processor.process_model(processing_config)
801
+
802
+ return (
803
+ f'<h1>✅ DONE</h1><br/>Find your repo here: <a href="{processing_config.new_repo_url}" target="_blank" style="text-decoration:underline">{processing_config.new_repo_id}</a>',
804
+ "llama.png",
805
+ )
806
 
807
  except Exception as e:
808
  print(f"Error processing model: {e}")