|
import gradio as gr |
|
from huggingface_hub import HfApi |
|
from datetime import datetime, timedelta |
|
import pandas as pd |
|
|
|
|
|
api = HfApi() |
|
|
|
def get_recent_models(min_likes, days_ago, filter_string, search_string): |
|
|
|
today = datetime.utcnow().replace(tzinfo=None) |
|
start_date = (today - timedelta(days=days_ago)).replace(tzinfo=None) |
|
|
|
|
|
recent_models = [] |
|
|
|
filter_substrings = [sub.strip().lower() for sub in filter_string.split(';')] |
|
search_substrings = [term.strip().lower() for term in search_string.split(';')] |
|
|
|
|
|
for model in api.list_models(sort="likes", direction=-1): |
|
if model.likes >= min_likes: |
|
if hasattr(model, "created_at") and model.created_at: |
|
|
|
created_at_date = model.created_at.replace(tzinfo=None) |
|
if search_substrings != []: |
|
if any(term in model.modelId.lower() for term in search_substrings): |
|
if filter_substrings != []: |
|
if not any(sub in model.modelId.lower() for sub in filter_substrings): |
|
if created_at_date >= start_date: |
|
task = model.pipeline_tag if hasattr(model, "pipeline_tag") else "N/A" |
|
recent_models.append({ |
|
"Model ID": f'<a href="https://huggingface.co/{model.modelId}" target="_blank">{model.modelId}</a>', |
|
"Likes": model.likes, |
|
"Creation Date": model.created_at.strftime("%Y-%m-%d %H:%M"), |
|
"Task": task |
|
}) |
|
else: |
|
if created_at_date >= start_date: |
|
task = model.pipeline_tag if hasattr(model, "pipeline_tag") else "N/A" |
|
recent_models.append({ |
|
"Model ID": f'<a href="https://huggingface.co/{model.modelId}" target="_blank">{model.modelId}</a>', |
|
"Likes": model.likes, |
|
"Creation Date": model.created_at.strftime("%Y-%m-%d %H:%M"), |
|
"Task": task |
|
}) |
|
else: |
|
if filter_substrings != []: |
|
if not any(sub in model.modelId.lower() for sub in filter_substrings): |
|
if created_at_date >= start_date: |
|
task = model.pipeline_tag if hasattr(model, "pipeline_tag") else "N/A" |
|
recent_models.append({ |
|
"Model ID": f'<a href="https://huggingface.co/{model.modelId}" target="_blank">{model.modelId}</a>', |
|
"Likes": model.likes, |
|
"Creation Date": model.created_at.strftime("%Y-%m-%d %H:%M"), |
|
"Task": task |
|
}) |
|
else: |
|
if created_at_date >= start_date: |
|
task = model.pipeline_tag if hasattr(model, "pipeline_tag") else "N/A" |
|
recent_models.append({ |
|
"Model ID": f'<a href="https://huggingface.co/{model.modelId}" target="_blank">{model.modelId}</a>', |
|
"Likes": model.likes, |
|
"Creation Date": model.created_at.strftime("%Y-%m-%d %H:%M"), |
|
"Task": task |
|
}) |
|
else: |
|
|
|
|
|
break |
|
|
|
|
|
df = pd.DataFrame(recent_models) |
|
|
|
return df |
|
|
|
|
|
def launch_interface(): |
|
iface = gr.Interface( |
|
fn=get_recent_models, |
|
inputs=[ |
|
gr.Slider(minimum=1, maximum=100, step=1, value=5, label="Minimum Likes"), |
|
gr.Slider(minimum=1, maximum=30, step=1, value=3, label="Days Ago"), |
|
gr.Text(label="Filter", max_lines=1), |
|
gr.Text(label="Search", max_lines=1) |
|
], |
|
outputs=gr.DataFrame( |
|
headers=["Model ID", "Likes", "Creation Date", "Task"], |
|
wrap=True, |
|
datatype=["html", "number", "str"], |
|
), |
|
title="Model Drops Tracker π", |
|
description="Overwhelmed by the rapid pace of model releases? π
You're not alone! That's exactly why I built this tool. Easily filter recent models from the Hub by setting a minimum number of likes and the number of days since their release. Click on a model to see its card. Use `;` to split filter and search" |
|
) |
|
iface.launch() |
|
|
|
if __name__ == "__main__": |
|
launch_interface() |