File size: 2,470 Bytes
a8cd886 a4d7e4d 644a2ce a4d7e4d a8cd886 64fdc3c a4d7e4d 64fdc3c a4d7e4d a8cd886 a4d7e4d 64fdc3c a1d6c04 a4d7e4d deca531 a4d7e4d 64fdc3c a8cd886 c33fac7 a8cd886 644a2ce a4d7e4d a1d6c04 a4d7e4d a8cd886 6691f6c a4d7e4d 64fdc3c a8cd886 64fdc3c |
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 |
import gradio as gr
import requests
from huggingface_hub import whoami
from huggingface_hub.utils import build_hf_headers, hf_raise_for_status
from gradio_huggingfacehub_search import HuggingfaceHubSearch
ENDPOINT = "https://huggingface.co"
# ENDPOINT = "http://localhost:5564"
REPO_TYPES = ["model", "dataset", "space"]
def duplicate(source_repo, dst_repo, repo_type, private, oauth_token: gr.OAuthToken | None):
print(oauth_token.token)
try:
if not repo_type in REPO_TYPES:
raise ValueError("need to select valid repo type")
_ = whoami(oauth_token.token)
# ^ this will throw if token is invalid
r = requests.post(
f"{ENDPOINT}/api/{repo_type}s/{source_repo}/duplicate",
headers=build_hf_headers(token=oauth_token.token),
json={"repository": dst_repo, "private": private},
)
hf_raise_for_status(r)
repo_url = r.json().get("url")
return (
f'Find your repo <a href=\'{repo_url}\' target="_blank" style="text-decoration:underline">here</a>',
"sp.jpg",
)
except Exception as e:
raise gr.Error(f"""Oops, you forgot to login. Please use the loggin button on the top left to migrate your repo {e}""")
interface = gr.Interface(
fn=duplicate,
inputs=[
HuggingfaceHubSearch(
placeholder="Source repository (e.g. osanseviero/src)",
search_type=["model", "dataset", "space"],
sumbit_on_select=False,
),
gr.Textbox(placeholder="Destination repository (e.g. osanseviero/dst)"),
gr.Dropdown(choices=REPO_TYPES, value="model"),
gr.Checkbox(label="Make new repo private?"),
],
outputs=[
gr.Markdown(label="output"),
gr.Image(show_label=False),
],
title="Duplicate your repo!",
description="Duplicate a Hugging Face repository! This Space is a an experimental demo.",
allow_flagging="never",
live=False
)
def swap_visibilty(profile: gr.OAuthProfile | None):
return gr.update(elem_classes=["main_ui_logged_in"]) if profile else gr.update(elem_classes=["main_ui_logged_out"])
css = '''
.main_ui_logged_out{opacity: 0.3; pointer-events: none}
'''
with gr.Blocks(css=css) as demo:
gr.LoginButton()
with gr.Column(elem_classes="main_ui_logged_out") as main_ui:
interface.render()
demo.load(fn=swap_visibilty, outputs=main_ui)
demo.queue()
demo.launch() |