openvino-export / app.py
echarlaix's picture
echarlaix HF staff
remove import
3548ea3
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=[
gr.Textbox(
max_lines=1,
label="Hugging Face token",
),
# HuggingfaceHubSearch(
gr.Textbox(
label="Hub Model ID",
placeholder="distilbert/distilbert-base-cased-distilled-squad",
# search_type="model",
),
],
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()