import os
if os.environ.get("SPACES_ZERO_GPU") is not None:
import spaces
else:
class spaces:
@staticmethod
def GPU(func):
def wrapper(*args, **kwargs):
return func(*args, **kwargs)
return wrapper
import gradio as gr
import subprocess
from huggingface_hub import HfApi
@spaces.GPU
def infer(filter: str, sort: str, sort_dir: bool, infer: str, gated: str, appr: list[str]):
try:
api = HfApi()
kwargs = {}
if filter: kwargs["filter"] = filter
if gated == "gated": kwargs["gated"] = True
elif gated == "non-gated": kwargs["gated"] = False
if sort_dir: kwargs["direction"] = -1
models = api.list_models(inference=infer, sort=sort, cardData=True, **kwargs)
md = "### Results:\n"
for model in models:
if model.gated and model.gated not in appr: continue
md += "1. "
md += f"[{model.id}](https://hf.co/{model.id})"
md += f" Inference: '{infer}'"
#gated_str = model.gated if model.gated else "false"
#md += f" Gated: '{gated_str}'"
md += f" Gated: '{gated}'"
if model.library_name: md += f" Lib:'{model.library_name}'"
if model.pipeline_tag: md += f" Pipeline:'{model.pipeline_tag}'"
if model.last_modified: md += f" LastMod:'{model.last_modified}'"
if model.likes: md += f" Likes:'{model.likes}'"
if model.downloads: md += f" DLs:'{model.downloads}'"
if model.downloads_all_time: md += f" AllDLs:'{model.downloads_all_time}'"
md += "\n"
return md
except Exception as e:
raise gr.Error(e)
with gr.Blocks() as demo:
filter = gr.Textbox(label="Query", value="")
with gr.Row(equal_height=True):
infer_status = gr.Radio(label="Inference status", choices=["warm", "cold", "frozen"], value="warm")
gated_status = gr.Radio(label="Gated status", choices=["gated", "non-gated", "all"], value="non-gated")
sort = gr.Radio(label="Sort", choices=["last_modified", "likes", "downloads"], value="likes")
sort_dir = gr.Checkbox(label="Sort by descending order", value=False)
appr_status = gr.CheckboxGroup(label="Approval method", choices=["auto", "manual"], value=["auto", "manual"], visible=False)
run_button = gr.Button("Search", variant="primary")
output_md = gr.Markdown("
")
run_button.click(infer, [filter, sort, sort_dir, infer_status, gated_status, appr_status], [output_md])
demo.launch()