testtsettset2 / app.py
wuhp's picture
Update app.py
79ac7b6 verified
raw
history blame
3.3 kB
import gradio as gr
from huggingface_hub import create_repo, list_models
def show_profile(profile: gr.OAuthProfile | None) -> str:
"""Update login status."""
if profile is None:
return "*Not logged in.*"
return f"✅ Logged in as **{profile.username}**"
def list_private_models(
profile: gr.OAuthProfile | None,
oauth_token: gr.OAuthToken | None
) -> str:
"""Demo: list user’s private/public models."""
if profile is None or oauth_token is None:
return "Please log in to see your models."
models = [
f"{model.id} ({'private' if model.private else 'public'})"
for model in list_models(author=profile.username, token=oauth_token.token)
]
return "No models found." if not models \
else "Models:\n\n" + "\n - ".join(models)
def create_space(
repo_name: str,
sdk: str,
profile: gr.OAuthProfile | None,
oauth_token: gr.OAuthToken | None
) -> tuple[str, str, str]:
"""
Create (or get) a Hugging Face Space with the chosen SDK template,
returning (repo_id, logs, iframe).
"""
if profile is None or oauth_token is None:
return "", "⚠️ Please log in first.", "<p>No Space created yet.</p>"
repo_id = f"{profile.username}/{repo_name}"
create_repo(
repo_id=repo_id,
token=oauth_token.token,
exist_ok=True,
repo_type="space",
space_sdk=sdk
)
url = f"https://huggingface.co/spaces/{repo_id}"
logmsg = f"✅ Space ready: {url} (SDK: {sdk})"
iframe = f'<iframe src="{url}" width="100%" height="500px"></iframe>'
return repo_id, logmsg, iframe
with gr.Blocks(title="HF OAuth + Space Creator") as demo:
gr.Markdown(
"## Sign in with Hugging Face + Create a Space\n\n"
"1. Click **Sign in**.\n"
"2. Pick a template, enter a name, and **Create Space**.\n\n"
"---"
)
# — Login UI —
login_btn = gr.LoginButton(variant="huggingface", size="lg")
status_md = gr.Markdown("*Not logged in.*")
models_md = gr.Markdown()
demo.load(show_profile, inputs=None, outputs=status_md)
login_btn.click(show_profile, inputs=None, outputs=status_md)
demo.load(list_private_models, inputs=None, outputs=models_md)
login_btn.click(list_private_models,inputs=None, outputs=models_md)
# — Create Space UI —
repo_name = gr.Textbox(label="New Space name", placeholder="my-space-name")
sdk_selector = gr.Radio(
choices=["gradio", "streamlit"],
value="gradio",
label="Space template (SDK)"
)
create_btn = gr.Button("Create Space", interactive=False)
session_id = gr.Textbox(visible=False)
logs = gr.Textbox(label="Logs", interactive=False, lines=3)
preview_iframe = gr.HTML("<p>No Space created yet.</p>")
def enable_create(profile: gr.OAuthProfile | None):
return gr.update(interactive=profile is not None)
demo.load(enable_create, inputs=None, outputs=create_btn)
login_btn.click(enable_create, inputs=None, outputs=create_btn)
create_btn.click(
fn=create_space,
inputs=[repo_name, sdk_selector],
outputs=[session_id, logs, preview_iframe]
)
if __name__ == "__main__":
demo.launch()