Spaces:
Runtime error
Runtime error
# THIS SOFTWARE IS NOT OPEN SOURCED!!! REDISTRIBUTION PROHIBITED! SEE LICENSE FOR DETAILS. | |
from constants import * | |
from llama_cpp import llama_cpp | |
types = { | |
'F32': 0, | |
'F16': 1, | |
'Q4_0': 2, | |
'Q4_1': 3, | |
'Q8_0': 7, | |
'Q5_0': 8, | |
'Q5_1': 9, | |
'Q2_K': 10, | |
'Q3_K_S': 11, | |
'Q3_K_M': 12, | |
'Q3_K_L': 13, | |
'Q4_K_S': 14, | |
'Q4_K_M': 15, | |
'Q5_K_S': 16, | |
'Q5_K_M': 17, | |
'Q6_K': 18, | |
} | |
def calcftype(type): | |
return types[type.upper()] | |
import shutil | |
import tempfile | |
import os | |
from slugify import slugify | |
from huggingface_hub import CommitInfo, CommitOperationAdd, Discussion, HfApi, hf_hub_download, repo_exists | |
from huggingface_hub.file_download import repo_folder_name | |
from typing import Dict, List, Optional, Set, Tuple | |
from huggingface_hub import snapshot_download | |
from cscript import main | |
def convert_it( | |
model_id, token, folder | |
): | |
with open("README_TEMPLATE.md", 'r') as f: | |
README = f.read().replace('<<MODEL_ID>>', model_id) | |
path = snapshot_download( | |
repo_id=model_id, token=token, cache_dir=folder | |
) | |
sf_name = "model-f16.gguf" | |
main(path, os.path.join(folder, "model-f16.gguf")) | |
operation = [ | |
CommitOperationAdd(path_in_repo=sf_name, path_or_fileobj=os.path.join(folder, "model-f16.gguf")), | |
CommitOperationAdd(path_in_repo="README.md", path_or_fileobj=README.encode()), | |
] | |
print("Quantization Time!") | |
for type in types_to_quantize: | |
print(f"Quantizing {type}!") | |
llama_cpp.llama_model_quantize(os.path.join(folder, "model-f16.gguf").encode(), os.path.join(folder, f"model-{type.lower()}.gguf").encode(), llama_cpp.llama_model_quantize_params(0, calcftype(type), True)) | |
print(f"Done Quantizing {type}!") | |
operation.append(CommitOperationAdd(path_in_repo=f"model-{type.lower()}.gguf", path_or_fileobj=os.path.join(folder, f"model-{type.lower()}.gguf"))) | |
return operation | |
def convert( | |
api: "HfApi", model_id: str, revision: Optional[str] = None, force: bool = False | |
) -> Tuple["CommitInfo", List[Tuple[str, "Exception"]]]: | |
repo_id = username + "/" + slugify(model_id.strip()) + "-GGUF" | |
with tempfile.TemporaryDirectory() as d: | |
# d = "~/test" | |
folder = os.path.join(d, repo_folder_name(repo_id=model_id, repo_type="models")) | |
os.makedirs(folder) | |
if repo_exists(repo_id, token=api.token): | |
raise ValueError("Already exists") | |
try: | |
ops = convert_it(model_id, api.token, d) | |
api.create_repo(repo_id) | |
api.create_commit( | |
repo_id=repo_id, | |
revision=revision, | |
operations=ops, | |
commit_message="Add GGUF version", | |
commit_description="Automated commit" | |
) | |
finally: | |
shutil.rmtree(folder) | |
return repo_id | |