File size: 5,052 Bytes
8627484
 
 
 
 
 
cdc3a53
8627484
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d480936
8627484
 
 
 
 
 
 
 
d480936
8627484
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d480936
8627484
 
 
 
 
 
d480936
8627484
 
 
328ca09
8627484
 
 
 
 
 
 
 
 
328ca09
8627484
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51cccd3
8627484
99989f5
 
 
 
 
 
 
 
 
8627484
51cccd3
 
8627484
51cccd3
99989f5
51cccd3
 
 
8627484
51cccd3
 
8627484
51cccd3
 
8627484
51cccd3
8627484
 
cdc3a53
51cccd3
8627484
 
 
 
 
 
 
328ca09
8627484
 
 
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
import gradio as gr
import os
from git_commd import GitCommandWrapper
from typing import List, Optional

HF_TOKEN=os.environ['HF_TOKEN'] if 'HF_TOKEN' in os.environ else ''
WiseModel_TOKEN=os.environ['WM_TOKEN'] if 'WM_TOKEN' in os.environ else ''

def get_cache_dir():
    from random_word import RandomWords
    r = RandomWords()
    return r.get_random_word()


def check_disk():
    import os 
    return os.system("df -h /")  


def pull_from_wisemodel(token: str,
              url: str,
              repo_name: str,
               cache_dir,
              branch: Optional[str] = None):

    print("pull_from_wisemodel start")
    print(cache_dir)
    os.makedirs(cache_dir, exist_ok=True)
    # os.system("cd "+cache_dir)  
    gitCmd=GitCommandWrapper()
    isLfs=gitCmd.is_lfs_installed()
    if (not isLfs):
       gitCmd.git_lfs_install()
    gitCmd.clone(cache_dir,token,url,repo_name,branch)
    print("pull_from_wisemodel end")
    return f'Pulled {branch} to temp folder {cache_dir}: {url}'


def remove_file(cache_dir, repo_name):
    import os
    try:
        os.remove(f'{cache_dir}/{repo_name}')
    except:
        return ''
    return 'README.md file removed'
    

def push_to_hf(cache_dir, WiseModel_repo_name, hf_repo_id):
    from huggingface_hub import HfApi
    
    if not HF_TOKEN:
        raise gr.Error("Please enter your HF_TOKEN")
    print("push_to_hf start")
    api = HfApi(token=HF_TOKEN) # Token is not persisted on the machine.
    output = api.upload_folder(
        folder_path=f"{cache_dir}/{WiseModel_repo_name}",
        repo_id=hf_repo_id,
        repo_type="model",
    )
    print("push_to_hf end")
    return f'Pushed to {hf_repo_id}'
    
    
def handle(wisemodel_link, hf_repo_id):
    cache_dir = get_cache_dir()
    wiseModel_repo_url=wisemodel_link.replace(".git","").replace("git","").replace("clone","").replace(" ","")
    wiseModel_repo_info=wisemodel_link.replace(".git","").replace("git","").replace("clone","").replace(" ","").split("/")
    print(wiseModel_repo_info)
    wisemodel_repo_name=wiseModel_repo_info[len(wiseModel_repo_info)-1]
    stages = [
        (check_disk, (), {}),
        # # Run all the sanity checks on README.md
      
        (pull_from_wisemodel, (WiseModel_TOKEN,wiseModel_repo_url,wisemodel_repo_name, cache_dir,"main"), {}),
        (remove_file, (wisemodel_repo_name, cache_dir), {}),
        (check_disk, (), {}),
        (push_to_hf, (cache_dir, wisemodel_repo_name, hf_repo_id), {}),
        (check_disk, (), {}),
    ]

    results = []
    errors = []
    for func, args, kwargs in stages:
        try:
            results.append(str(func(*args, **kwargs)))
        except Exception as e:
            errors.append(str(e))
        if errors:
            break

    return '\n\n'.join(results), '\n\n'.join(errors)


with gr.Blocks() as demo:
    gr.Markdown('''


# wisemodel-to-HF/推送wisemodel上的模型、数据集等到Huggingface

# 这是一个示例Space,实际使用请参考下面说明,先Duplicate一个私有的space

- 这个space可以把已经发布在wisemodel的模型、数据集推送到Huggingface的相应repo。
- This space uploads model from WiseModel to Huggingface.

- **请确认您是huggingface上相应repo的创建者,拥有repo的写入的权限,否则会报错!**
- **Please make sure that you're the owner of the repo or have permission from the owner to do so!**


# 如何使用这个空间?
# How to use this Space?

- 点击右上角settings后面的“…”按钮,选择“Duplicate this Space”创建一个私有的space,同时输入wisemodel的token(公开模型选填,私有模型必填),以及Huggingface的token(必填),确保有相应repo写入的权限。
- Duplicate this Space and providing WiseModel token (optional) and your read/write HF token (mandatory).

- 在HF上创建目标repo,这一步是必须的!
- Create your target model repo on HF. This step needs to be done manually. The Space doesn't do create an empty repo for you.

- 在刚刚自己创建的私有space里填写相应的信息,wisemodel的git clone链接,以及Huggingface的repo名称。
- In your own private Space, fill in information below.

- 点击submit按钮,然后可以通过logs按钮查看进度。
- Click submit then watch for output in container log for progress.

- Create README.md file (since the metadata is not compatible with HF)
    ''')
    
    wisemodel_link = gr.Textbox(label="Copy the git download link from the model detail page of wisemodel(从wisemodel上获取该模型的完整git clone链接) ")
    hf_repo_id = gr.Textbox(label="Target HF Model Repo ID (case sensitive). \nPlease make sure that this model has already been created")
    with gr.Row():
        button = gr.Button("Submit", variant="primary")
        clear = gr.Button("Clear")
    error = gr.Textbox(label="Error")
    output = gr.Textbox(label="Output")

    button.click(handle, [wisemodel_link, hf_repo_id], [output, error])

if __name__ == "__main__":
    demo.launch(debug = True)