PeopleModelsDatasets2X / app-backup.py
awacke1's picture
Update app-backup.py
74df5c0 verified
import streamlit as st
from huggingface_hub import HfApi
import pandas as pd
from concurrent.futures import ThreadPoolExecutor, as_completed
# Default list of Hugging Face usernames
default_users = {
"users": [
"awacke1", "rogerxavier", "jonatasgrosman", "kenshinn", "Csplk", "DavidVivancos",
"cdminix", "Jaward", "TuringsSolutions", "Severian", "Wauplin",
"phosseini", "Malikeh1375", "gokaygokay", "MoritzLaurer", "mrm8488",
"TheBloke", "lhoestq", "xw-eric", "Paul", "Muennighoff",
"ccdv", "haonan-li", "chansung", "lukaemon", "hails",
"pharmapsychotic", "KingNish", "merve", "ameerazam08", "ashleykleynhans"
]
}
api = HfApi()
def get_user_content(username):
try:
# Fetch models, datasets, and spaces associated with the user
models = api.list_models(author=username)
datasets = api.list_datasets(author=username)
spaces = api.list_spaces(author=username)
return {
"username": username,
"models": models,
"datasets": datasets,
"spaces": spaces
}
except Exception as e:
return {"username": username, "error": str(e)}
st.title("Hugging Face User Content Display")
# Convert the default users list to a string
default_users_str = "\n".join(default_users["users"])
# Text area with default list of usernames
usernames = st.text_area("Enter Hugging Face usernames (one per line):", value=default_users_str, height=300)
if st.button("Show User Content"):
if usernames:
username_list = [username.strip() for username in usernames.split('\n') if username.strip()]
results = []
status_bars = {}
# Set up the progress bars for each user
for username in username_list:
status_bars[username] = st.progress(0, text=f"Fetching data for {username}...")
def fetch_and_display(username):
content = get_user_content(username)
status_bars[username].progress(100, text=f"Data fetched for {username}")
return content
# Use ThreadPoolExecutor for concurrent execution
with ThreadPoolExecutor(max_workers=len(username_list)) as executor:
future_to_username = {executor.submit(fetch_and_display, username): username for username in username_list}
for future in as_completed(future_to_username):
result = future.result()
results.append(result)
st.markdown("### User Content Overview")
for result in results:
username = result["username"]
if "error" not in result:
profile_link = f"https://huggingface.co/{username}"
profile_emoji = "🔗"
models = [f"[{model.modelId}](https://huggingface.co/{model.modelId})" for model in result['models']]
datasets = [f"[{dataset.id}](https://huggingface.co/datasets/{dataset.id})" for dataset in result['datasets']]
spaces = [f"[{space.id}](https://huggingface.co/spaces/{space.id})" for space in result['spaces']]
st.markdown(f"**{username}** {profile_emoji} [Profile]({profile_link})")
st.markdown("**Models:**")
st.markdown("\n".join(models) if models else "No models found")
st.markdown("**Datasets:**")
st.markdown("\n".join(datasets) if datasets else "No datasets found")
st.markdown("**Spaces:**")
st.markdown("\n".join(spaces) if spaces else "No spaces found")
st.markdown("---")
else:
st.warning(f"{username}: {result['error']}")
else:
st.warning("Please enter at least one username.")
st.sidebar.markdown("""
## How to use:
1. The text area is pre-filled with a list of Hugging Face usernames. You can edit this list or add more usernames.
2. Click 'Show User Content'.
3. View the user's models, datasets, and spaces along with a link to their Hugging Face profile.
4. The progress bars show the status of content retrieval for each user.
""")