CoolFace
Apppublic

huggingface/transformers-stats

sourceHugging Faceupdated 2y agoView on Hugging Face
24likes
app.py222 linesDownload Raw Back to root
1from huggingface_hub import HfApi2import pandas as pd3import os4import streamlit as st5import altair as alt6import numpy as np7import datetime8from huggingface_hub import Repository9 10from transformers.models.auto.configuration_auto import CONFIG_MAPPING_NAMES11from transformers.models.auto.modeling_auto import (12    MODEL_FOR_CTC_MAPPING_NAMES,13    MODEL_FOR_AUDIO_CLASSIFICATION_MAPPING_NAMES,14    MODEL_FOR_AUDIO_FRAME_CLASSIFICATION_MAPPING_NAMES,15    MODEL_FOR_AUDIO_XVECTOR_MAPPING_NAMES,16    MODEL_FOR_SPEECH_SEQ_2_SEQ_MAPPING_NAMES,17    MODEL_FOR_VISION_2_SEQ_MAPPING_NAMES,18    MODEL_FOR_INSTANCE_SEGMENTATION_MAPPING_NAMES,19    MODEL_FOR_SEMANTIC_SEGMENTATION_MAPPING_NAMES,20    MODEL_FOR_IMAGE_CLASSIFICATION_MAPPING_NAMES,21    MODEL_FOR_CAUSAL_IMAGE_MODELING_MAPPING_NAMES,22    MODEL_FOR_MASKED_IMAGE_MODELING_MAPPING_NAMES,23    MODEL_FOR_TABLE_QUESTION_ANSWERING_MAPPING_NAMES,24    MODEL_FOR_VISUAL_QUESTION_ANSWERING_MAPPING_NAMES,25    MODEL_FOR_DOCUMENT_QUESTION_ANSWERING_MAPPING_NAMES,26    MODEL_FOR_BACKBONE_MAPPING_NAMES,27    MODEL_FOR_ZERO_SHOT_IMAGE_CLASSIFICATION_MAPPING_NAMES,28)29 30audio_models = list(MODEL_FOR_CTC_MAPPING_NAMES.keys()) + list(MODEL_FOR_AUDIO_CLASSIFICATION_MAPPING_NAMES.keys()) + \31               list(MODEL_FOR_SPEECH_SEQ_2_SEQ_MAPPING_NAMES.keys()) + list(MODEL_FOR_AUDIO_FRAME_CLASSIFICATION_MAPPING_NAMES.keys()) + \32               list(MODEL_FOR_AUDIO_XVECTOR_MAPPING_NAMES.keys())33 34vision_models = list(MODEL_FOR_VISION_2_SEQ_MAPPING_NAMES.keys()) + list(MODEL_FOR_INSTANCE_SEGMENTATION_MAPPING_NAMES.keys()) + \35                list(MODEL_FOR_SEMANTIC_SEGMENTATION_MAPPING_NAMES.keys()) + list(MODEL_FOR_IMAGE_CLASSIFICATION_MAPPING_NAMES.keys()) + \36                list(MODEL_FOR_CAUSAL_IMAGE_MODELING_MAPPING_NAMES.keys()) + list(MODEL_FOR_MASKED_IMAGE_MODELING_MAPPING_NAMES.keys()) + \37                list(MODEL_FOR_TABLE_QUESTION_ANSWERING_MAPPING_NAMES.keys()) + list(MODEL_FOR_VISUAL_QUESTION_ANSWERING_MAPPING_NAMES.keys()) + \38                list(MODEL_FOR_DOCUMENT_QUESTION_ANSWERING_MAPPING_NAMES.keys()) + list(MODEL_FOR_BACKBONE_MAPPING_NAMES.keys()) + \39                list(MODEL_FOR_ZERO_SHOT_IMAGE_CLASSIFICATION_MAPPING_NAMES.keys())40 41today = datetime.date.today()42year, week, _ = today.isocalendar()43 44DATASET_REPO_URL = (45    "https://huggingface.co/datasets/huggingface/transformers-stats-space-data"46)47 48DATA_FILENAME = f"data_{week}_{year}.csv"49DATA_FILE = os.path.join("data", DATA_FILENAME)50 51HF_TOKEN = os.environ.get("HF_TOKEN")52 53print("is none?", HF_TOKEN is None)54 55 56def retrieve_model_stats():57    hf_api = HfApi()58    all_stats = {}59    total_downloads = 060 61    for model_name in list(CONFIG_MAPPING_NAMES.keys()):62        if model_name in audio_models:63            modality = "audio"64        elif model_name in vision_models:65            modality = "vision"66        else:67            modality = "text"68 69        model_stats = {70            "num_downloads": 0,71            "%_of_all_downloads": 0,72            "num_models": 0,73            "download_per_model": 0,74            "modality": modality,75        }76        models = list(hf_api.list_models(filter=model_name))77 78        model_stats["num_models"] = len(models)79        model_stats["num_downloads"] = sum(80            [m.downloads for m in models if hasattr(m, "downloads")]81        )82        if len(models) > 0:83            model_stats["download_per_model"] = int(84                model_stats["num_downloads"] / len(models)85            )86        else:87            model_stats["download_per_model"] = model_stats["num_downloads"]88 89        total_downloads += model_stats["num_downloads"]90 91        # save in overall dict92        all_stats[model_name] = model_stats93 94    for model_name in list(CONFIG_MAPPING_NAMES.keys()):95        all_stats[model_name]["%_of_all_downloads"] = (96            round(all_stats[model_name]["num_downloads"] / total_downloads, 5) * 10097        )  # noqa: E50198        downloads = all_stats[model_name]["num_downloads"]99        all_stats[model_name]["num_downloads"] = f"{downloads:,}"100 101    sorted_results = dict(102        reversed(sorted(all_stats.items(), key=lambda d: d[1]["%_of_all_downloads"]))103    )104    dataframe = pd.DataFrame.from_dict(sorted_results, orient="index")105 106    # give header to model names107    result = "model_names" + dataframe.to_csv()108    return result109 110 111repo = Repository(local_dir="data", clone_from=DATASET_REPO_URL, use_auth_token=HF_TOKEN)112 113if not os.path.isfile(DATA_FILE):114    st.title("You are the first this week!!! Please wait until the new data is generated and written")115    result = retrieve_model_stats()116 117    if not os.path.isfile(DATA_FILE):118        with open(DATA_FILE, "w") as f:119            f.write(result)120 121        commit_url = repo.push_to_hub()122        print(commit_url)123 124with open(DATA_FILE, "r") as f:125    dataframe = pd.read_csv(DATA_FILE)126 127int_downloads = np.array(128    [int(x.replace(",", "")) for x in dataframe["num_downloads"].values]129)130 131st.title(f"Stats for year {year} and week {week}")132 133# print top 20 downloads134source = pd.DataFrame(135    {136        "Number of total downloads": int_downloads[:20],137        "Model architecture name": dataframe["model_names"].values[:20],138    }139)140bar_chart = (141    alt.Chart(source)142    .mark_bar()143    .encode(144        y="Number of total downloads",145        x=alt.X("Model architecture name", sort=None),146    )147)148st.title("Top 20 downloads last 30 days")149st.altair_chart(bar_chart, use_container_width=True)150 151# print bottom 20 downloads152source = pd.DataFrame(153    {154        "Number of total downloads": int_downloads[-20:],155        "Model architecture name": dataframe["model_names"].values[-20:],156    }157)158bar_chart = (159    alt.Chart(source)160    .mark_bar()161    .encode(162        y="Number of total downloads",163        x=alt.X("Model architecture name", sort=None),164    )165)166st.title("Bottom 20 downloads last 30 days")167st.altair_chart(bar_chart, use_container_width=True)168 169# print vision170df_vision = dataframe[dataframe["modality"] == "vision"]171vision_int_downloads = np.array(172    [int(x.replace(",", "")) for x in df_vision["num_downloads"].values]173)174source = pd.DataFrame(175    {176        "Number of total downloads": vision_int_downloads,177        "Model architecture name": df_vision["model_names"].values,178    }179)180bar_chart = (181    alt.Chart(source)182    .mark_bar()183    .encode(184        y="Number of total downloads",185        x=alt.X("Model architecture name", sort=None),186    )187)188st.title("Vision downloads last 30 days")189st.altair_chart(bar_chart, use_container_width=True)190 191# print audio192df_audio = dataframe[dataframe["modality"] == "audio"]193audio_int_downloads = np.array(194    [int(x.replace(",", "")) for x in df_audio["num_downloads"].values]195)196source = pd.DataFrame(197    {198        "Number of total downloads": audio_int_downloads,199        "Model architecture name": df_audio["model_names"].values,200    }201)202bar_chart = (203    alt.Chart(source)204    .mark_bar()205    .encode(206        y="Number of total downloads",207        x=alt.X("Model architecture name", sort=None),208    )209)210st.title("Audio downloads last 30 days")211st.altair_chart(bar_chart, use_container_width=True)212 213# print all stats214st.title("All stats last 30 days")215st.table(dataframe)216 217st.title("Vision stats last 30 days")218st.table(dataframe[dataframe["modality"] == "vision"].drop("modality", axis=1))219 220st.title("Audio stats last 30 days")221st.table(dataframe[dataframe["modality"] == "audio"].drop("modality", axis=1))222