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. """)