File size: 5,454 Bytes
4f175c5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
from pathlib import Path
from extra_utils import dw_file
from i18n import _i18n

BASE_DIR = Path(__file__).resolve().parent / "embedders"
BASE_DIR.mkdir(parents=True, exist_ok=True)
FAIRSEQ_DIR = BASE_DIR / "fairseq"
TRANSFORMERS_DIR = BASE_DIR / "transformers"

class HubertModelNotExist(Exception): pass

huberts_fairseq_dict = {
    "hubert_base": {
        "url": "https://huggingface.co/noblebarkrr/vbach_resources/resolve/main/fairseq/hubert_base.pt?download=true",
        "local_path": FAIRSEQ_DIR / "hubert_base.pt"
    },
    "contentvec_base": {
        "url": "https://huggingface.co/noblebarkrr/vbach_resources/resolve/main/fairseq/contentvec_base.pt?download=true",
        "local_path": FAIRSEQ_DIR / "contentvec_base.pt"
    },
    "korean_hubert_base": {
        "url": "https://huggingface.co/noblebarkrr/vbach_resources/resolve/main/fairseq/korean_hubert_base.pt?download=true",
        "local_path": FAIRSEQ_DIR / "korean_hubert_base.pt"
    },
    "chinese_hubert_base": {
        "url": "https://huggingface.co/noblebarkrr/vbach_resources/resolve/main/fairseq/chinese_hubert_base.pt?download=true",
        "local_path": FAIRSEQ_DIR / "chinese_hubert_base.pt"
    },
    "portuguese_hubert_base": {
        "url": "https://huggingface.co/noblebarkrr/vbach_resources/resolve/main/fairseq/portuguese_hubert_base.pt?download=true",
        "local_path": FAIRSEQ_DIR / "portuguese_hubert_base.pt"
    },
    "japanese_hubert_base": {
        "url": "https://huggingface.co/noblebarkrr/vbach_resources/resolve/main/fairseq/japanese_hubert_base.pt?download=true",
        "local_path": FAIRSEQ_DIR / "japanese_hubert_base.pt"
    }
}

huberts_transformers_dict = {
    "contentvec": {
        "base_dir": TRANSFORMERS_DIR / "contentvec",
        "url_bin": "https://huggingface.co/noblebarkrr/vbach_resources/resolve/main/transformers/contentvec/pytorch_model.bin?download=true",
        "url_json": "https://huggingface.co/noblebarkrr/vbach_resources/resolve/main/transformers/contentvec/config.json?download=true"
    },
    "spin": {
        "base_dir": TRANSFORMERS_DIR / "spin",
        "url_bin": "https://huggingface.co/noblebarkrr/vbach_resources/resolve/main/transformers/spin/pytorch_model.bin?download=true",
        "url_json": "https://huggingface.co/noblebarkrr/vbach_resources/resolve/main/transformers/spin/config.json?download=true"
    },
    "spin-v2": {
        "base_dir": TRANSFORMERS_DIR / "spinv2",
        "url_bin": "https://huggingface.co/noblebarkrr/vbach_resources/resolve/main/transformers/spinv2/pytorch_model.bin?download=true",
        "url_json": "https://huggingface.co/noblebarkrr/vbach_resources/resolve/main/transformers/spinv2/config.json?download=true"
    },
    "chinese-hubert-base": {
        "base_dir": TRANSFORMERS_DIR / "chinese_hubert_base",
        "url_bin": "https://huggingface.co/noblebarkrr/vbach_resources/resolve/main/transformers/chinese_hubert_base/pytorch_model.bin?download=true",
        "url_json": "https://huggingface.co/noblebarkrr/vbach_resources/resolve/main/transformers/chinese_hubert_base/config.json?download=true"
    },
    "japanese-hubert-base": {
        "base_dir": TRANSFORMERS_DIR / "japanese_hubert_base",
        "url_bin": "https://huggingface.co/noblebarkrr/vbach_resources/resolve/main/transformers/japanese_hubert_base/pytorch_model.bin?download=true",
        "url_json": "https://huggingface.co/noblebarkrr/vbach_resources/resolve/main/transformers/japanese_hubert_base/config.json?download=true"
    },
    "korean-hubert-base": {
        "base_dir": TRANSFORMERS_DIR / "korean_hubert_base",
        "url_bin": "https://huggingface.co/noblebarkrr/vbach_resources/resolve/main/transformers/korean_hubert_base/pytorch_model.bin?download=true",
        "url_json": "https://huggingface.co/noblebarkrr/vbach_resources/resolve/main/transformers/korean_hubert_base/config.json?download=true"
    },
}

huberts_fairseq = list(huberts_fairseq_dict.keys())
huberts_transformers = list(huberts_transformers_dict.keys())

def download_hubert(name: str, use_transformers: bool = False):
    if use_transformers:
        info = huberts_transformers_dict.get(name, {})
        if not info:
            raise HubertModelNotExist(_i18n("vbach_embedder_not"))
        base_dir = info["base_dir"]
        base_dir.mkdir(parents=True, exist_ok=True)
        
        urls = (info["url_bin"], info["url_json"])
        paths = (base_dir / "pytorch_model.bin", base_dir / "config.json")
        
        # Проверяем оба файла
        need_download = [not p.exists() for p in paths]
        if any(need_download):
            for url, path, need in zip(urls, paths, need_download):
                if need:
                    dw_file(url, path)
    else:
        info = huberts_fairseq_dict.get(name, {})
        if not info:
            HubertModelNotExist(_i18n("vbach_embedder_not"))
        url = info.get("url")
        path = info.get("local_path")
        if not path.exists():
            dw_file(url, path)

def get_hubert(name: str, use_transformers: bool = False):
    if use_transformers:
        info = huberts_transformers_dict.get(name, {})
        if not info:
            HubertModelNotExist(_i18n("vbach_embedder_not"))
        return info.get("base_dir")
    else:
        info = huberts_fairseq_dict.get(name, {})
        if not info:
            HubertModelNotExist(_i18n("vbach_embedder_not"))
        return info.get("local_path")