export / app.py
echarlaix's picture
echarlaix HF staff
fix interface
6cb28c0
raw
history blame
3.58 kB
import csv
import os
from datetime import datetime
from typing import Optional, Union
import gradio as gr
from huggingface_hub import HfApi, Repository
from export import convert
from gradio_huggingfacehub_search import HuggingfaceHubSearch
DATASET_REPO_URL = "https://huggingface.co/datasets/optimum/exporters"
DATA_FILENAME = "data.csv"
DATA_FILE = os.path.join("openvino", DATA_FILENAME)
HF_TOKEN = os.environ.get("HF_WRITE_TOKEN")
DATA_DIR = "exporters_data"
repo = None
if HF_TOKEN:
repo = Repository(local_dir=DATA_DIR, clone_from=DATASET_REPO_URL, token=HF_TOKEN)
def export(token: str, model_id: str, task: str = "auto") -> str:
if token == "" or model_id == "":
return """
### Invalid input 🐞
Please fill a token and model name.
"""
try:
api = HfApi(token=token)
error, commit_info = convert(api=api, model_id=model_id, task=task, force=False)
if error != "0":
return error
print("[commit_info]", commit_info)
# save in a private dataset
if repo is not None:
repo.git_pull(rebase=True)
with open(os.path.join(DATA_DIR, DATA_FILE), "a") as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=["model_id", "pr_url", "time"])
writer.writerow(
{
"model_id": model_id,
"pr_url": commit_info.pr_url,
"time": str(datetime.now()),
}
)
commit_url = repo.push_to_hub()
print("[dataset]", commit_url)
return f"#### Success πŸ”₯ Yay! This model was successfully exported and a PR was open using your token, here: [{commit_info.pr_url}]({commit_info.pr_url})"
except Exception as e:
return f"#### Error: {e}"
TTILE_IMAGE = """
<div
style="
display: block;
margin-left: auto;
margin-right: auto;
width: 50%;
"
>
<img src="https://huggingface.co/spaces/echarlaix/openvino-export/resolve/main/header.png"/>
</div>
"""
TITLE = """
<div
style="
display: inline-flex;
align-items: center;
text-align: center;
max-width: 1400px;
gap: 0.8rem;
font-size: 2.2rem;
"
>
<h1 style="text-align:center; font-weight: 1200">
Export your model to OpenVINO
</h1>
</div>
"""
DESCRIPTION = """
This Space uses [Optimum Intel](https://huggingface.co/docs/optimum/intel/inference) to automatically export your model to the OpenVINO format.
To export your model you need:
- A read-access token from [https://huggingface.co/settings/tokens](https://huggingface.co/settings/tokens).
- A Model ID from the Hub (for example: [distilbert-base-uncased-finetuned-sst-2-english](https://huggingface.co/distilbert-base-uncased-finetuned-sst-2-english))
That's it ! πŸ”₯
After the model conversion, we will open a PR against the source repo.
"""
interface = gr.Interface(
fn=export,
inputs=[
HuggingfaceHubSearch(
label="Hub Model ID",
placeholder="Search for model id on Huggingface",
search_type="model",
),
gr.Textbox(
max_lines=1,
label="Hugging Face token",
),
],
outputs=[
gr.Markdown(label="output"),
gr.Image(show_label=False),
],
submit_btn=gr.Button("Export"),
title=TITLE,
description=DESCRIPTION,
)
with gr.Blocks() as demo:
gr.HTML(TTILE_IMAGE)
gr.HTML(TITLE)
interface.render()
demo.launch()