| | import streamlit as st |
| | from huggingface_hub import HfApi |
| | import pandas as pd |
| | from concurrent.futures import ThreadPoolExecutor, as_completed |
| |
|
| | |
| | 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: |
| | |
| | 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") |
| |
|
| | |
| | default_users_str = "\n".join(default_users["users"]) |
| |
|
| | |
| | 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 = {} |
| |
|
| | |
| | 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 |
| |
|
| | |
| | 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. |
| | """) |
| |
|