Spaces:
Running
Running
from pathlib import Path | |
import os | |
import gradio as gr | |
def is_repo_name(s): | |
import re | |
return re.fullmatch(r'^[^/,\s]+?/[^/,\s]+?$', s) | |
def is_repo_exists(repo_id): | |
from huggingface_hub import HfApi | |
api = HfApi() | |
try: | |
if api.repo_exists(repo_id=repo_id, repo_type="model"): return True | |
else: return False | |
except Exception as e: | |
print(f"Error: Failed to connect {repo_id}.") | |
return True # for safe | |
def is_repo_t2i(repo_id): | |
from huggingface_hub import HfApi | |
api = HfApi() | |
try: | |
model_info = api.repo_info(repo_id=repo_id, repo_type="model") | |
if model_info.pipeline_tag == "text-to-image": return True | |
else: return False | |
except Exception as e: | |
print(f"Error: Failed to connect {repo_id}.") | |
return True # for safe | |
def save_space_contents(repo_id: str, gradio_version: str, private_ok: bool, dir: str): | |
if not is_repo_name(repo_id): # or not is_repo_t2i(repo_id) | |
gr.Info(f"Error: Invalid repo ID: {repo_id}.") | |
return [] | |
if not private_ok and not is_repo_exists(repo_id): | |
gr.Info(f"Error: Repo doesn't exist: {repo_id}.") | |
return [] | |
os.makedirs(dir, exist_ok=True) | |
model_name = repo_id.split("/")[-1] | |
app_py = f"""import gradio as gr | |
import os | |
demo = gr.load("{repo_id}", src="models", hf_token=os.environ.get("HF_TOKEN")).launch() | |
""" | |
readme_md = f"""--- | |
title: {model_name} Demo | |
emoji: 🖼 | |
colorFrom: purple | |
colorTo: red | |
sdk: gradio | |
sdk_version: {gradio_version} | |
app_file: app.py | |
pinned: false | |
--- | |
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference | |
""" | |
app_path = str(Path(dir, "app.py")) | |
with open(app_path, mode='w', encoding="utf-8") as f: | |
f.write(app_py) | |
readme_path = str(Path(dir, "README.md")) | |
with open(readme_path, mode='w', encoding="utf-8") as f: | |
f.write(readme_md) | |
return [app_path, readme_path] | |
def get_t2i_space_contents(repo_id: str, gradio_version: str, private_ok: bool): | |
return save_space_contents(repo_id, gradio_version, private_ok, "./temp/") | |