PathVLMs / app.py
gilalnauman's picture
Update app.py
cdbf3c3 verified
# import streamlit as st
# import pandas as pd
# import altair as alt
# # Set page layout to wide mode
# st.set_page_config(
# page_title="PathVLM-Eval Leaderboard",
# page_icon="πŸ†",
# layout="wide"
# )
# # Load the leaderboard data
# df = pd.read_csv("leaderboard.csv")
# # Add title and description
# st.title("PathVLM-Eval Leaderboard πŸ†")
# st.markdown("""
# Welcome to the **PathVLMs Leaderboard**! This leaderboard displays evaluation results for various Vision-Language Models (VLMs) in Pathology, focusing on multiple-choice questions (MCQs), answers, and explanations.
# You can search, filter, and visualize metrics for better insights.
# """)
# # Sidebar Filters
# with st.sidebar:
# st.subheader("Filters")
# # Search by model name (fuzzy search)
# search_query = st.text_input("Search for Model Name", value="", placeholder="e.g., llava")
# # Filter by model size
# model_sizes = df['Params (B)'].unique()
# selected_sizes = st.multiselect("Select Model Sizes", options=model_sizes, default=model_sizes)
# # Filter by model type
# if 'Language Model' in df.columns:
# model_types = df['Language Model'].unique()
# selected_types = st.multiselect("Select Model Types", options=model_types, default=model_types)
# else:
# selected_types = []
# # Apply Filters
# filtered_df = df[
# (df['Params (B)'].isin(selected_sizes)) &
# (df['Language Model'].isin(selected_types) if selected_types else True) &
# (df['Method'].str.contains(search_query, case=False, na=False))
# ]
# # Main Leaderboard Section
# st.subheader("Leaderboard Table")
# if filtered_df.empty:
# st.warning("No results found. Try adjusting the filters.")
# else:
# # Display table in wide layout
# st.dataframe(
# filtered_df,
# height=600, # Adjust table height
# width=1600 # Adjust table width
# )
# # Visualization of selected metric
# st.subheader("Performance Metrics Visualization")
# metric = st.selectbox("Select Metric to Visualize", options=filtered_df.columns[5:])
# # Visualization Chart
# chart = alt.Chart(filtered_df).mark_bar().encode(
# x=alt.X('Method', sort=alt.EncodingSortField(field=metric, order='descending'), title="Model"),
# y=alt.Y(metric, title=metric),
# color='Method',
# tooltip=['Method', metric]
# ).properties(
# width=1400, # Full width
# height=600 # Increased height
# )
# st.altair_chart(chart, use_container_width=True)
# # Highlight Top N Models
# st.subheader("Highlight Top N Models")
# top_n = st.slider("Number of Top Models", min_value=1, max_value=len(filtered_df), value=5)
# top_models_df = filtered_df.nlargest(top_n, metric)
# top_chart = alt.Chart(top_models_df).mark_bar().encode(
# x=alt.X('Method', title="Model"),
# y=alt.Y(metric, title=metric),
# color='Method',
# tooltip=['Method', metric]
# ).properties(
# width=1400, # Full width
# height=400 # Adjusted height for smaller chart
# )
# st.altair_chart(top_chart, use_container_width=True)
# # Download Button
# @st.cache
# def convert_df_to_csv(dataframe):
# return dataframe.to_csv(index=False).encode('utf-8')
# csv_data = convert_df_to_csv(filtered_df)
# st.download_button(
# label="Download Filtered Results",
# data=csv_data,
# file_name="filtered_leaderboard.csv",
# mime="text/csv"
# )
# interactive Bubble plot
# import streamlit as st
# import pandas as pd
# import altair as alt
# # Set page layout to wide mode
# st.set_page_config(
# page_title="PathVLMs Leaderboard",
# page_icon="πŸ†",
# layout="wide"
# )
# # Load the leaderboard data
# df = pd.read_csv("leaderboard.csv")
# # Add title and description
# st.title("PathVLMs Leaderboard πŸ†")
# st.markdown("""
# Welcome to the **PathVLMs Leaderboard**! This leaderboard displays evaluation results for various Vision-Language Models (VLMs) in Pathology, focusing on multiple-choice questions (MCQs), answers, and explanations.
# You can search, filter, and visualize metrics for better insights.
# """)
# # Sidebar Filters
# with st.sidebar:
# st.subheader("Filters")
# # Search by model name (fuzzy search)
# search_query = st.text_input("Search for Model Name", value="", placeholder="e.g., llava")
# # Filter by model size
# model_sizes = df['Params (B)'].unique()
# selected_sizes = st.multiselect("Select Model Sizes", options=model_sizes, default=model_sizes)
# # Filter by model type
# if 'Language Model' in df.columns:
# model_types = df['Language Model'].unique()
# selected_types = st.multiselect("Select Model Types", options=model_types, default=model_types)
# else:
# selected_types = []
# # Apply Filters
# filtered_df = df[
# (df['Params (B)'].isin(selected_sizes)) &
# (df['Language Model'].isin(selected_types) if selected_types else True) &
# (df['Method'].str.contains(search_query, case=False, na=False))
# ]
# # Main Leaderboard Section
# st.subheader("Leaderboard Table")
# if filtered_df.empty:
# st.warning("No results found. Try adjusting the filters.")
# else:
# # Display table in wide layout
# st.dataframe(
# filtered_df,
# height=600, # Adjust table height
# width=1600 # Adjust table width
# )
# # Visualization of selected metric
# st.subheader("Performance Metrics Visualization")
# metric = st.selectbox("Select Metric to Visualize", options=filtered_df.columns[5:])
# # Visualization Chart
# chart = alt.Chart(filtered_df).mark_bar().encode(
# x=alt.X('Method', sort=alt.EncodingSortField(field=metric, order='descending'), title="Model"),
# y=alt.Y(metric, title=metric),
# color='Method',
# tooltip=['Method', metric]
# ).properties(
# width=1400, # Full width
# height=600 # Increased height
# )
# st.altair_chart(chart, use_container_width=True)
# # Interactive Bubble Plot: Metric vs. Model Size
# st.subheader("Interactive Bubble Plot: Metric vs. Model Size")
# bubble_metric = st.selectbox("Select Metric for Bubble Plot", options=filtered_df.columns[5:], index=0)
# if bubble_metric in filtered_df.columns and 'Params (B)' in filtered_df.columns:
# interactive_bubble_chart = alt.Chart(filtered_df).mark_circle(size=200).encode(
# x=alt.X('Params (B):Q', title="Model Size (in Billion Params)"),
# y=alt.Y(f'{bubble_metric}:Q', title=bubble_metric),
# size=alt.Size('Params (B):Q', legend=None),
# color=alt.Color('Method:N', title="Model"),
# tooltip=['Method', 'Params (B)', bubble_metric]
# ).properties(
# width=800,
# height=600
# )
# st.altair_chart(interactive_bubble_chart, use_container_width=True)
# else:
# st.warning(f"Columns '{bubble_metric}' and 'Params (B)' are required for the bubble plot.")
# # # Highlight Top N Models
# # st.subheader("Highlight Top N Models")
# # top_n = st.slider("Number of Top Models", min_value=1, max_value=len(filtered_df), value=5)
# # top_models_df = filtered_df.nlargest(top_n, metric)
# # top_chart = alt.Chart(top_models_df).mark_bar().encode(
# # x=alt.X('Method', title="Model"),
# # y=alt.Y(metric, title=metric),
# # color='Method',
# # tooltip=['Method', metric]
# # ).properties(
# # width=1400, # Full width
# # height=400 # Adjusted height for smaller chart
# # )
# # st.altair_chart(top_chart, use_container_width=True)
# # Highlight Top N Models
# st.subheader("Highlight Top N Models")
# top_n = st.slider("Number of Top Models", min_value=1, max_value=len(filtered_df), value=5)
# top_models_df = filtered_df.nlargest(top_n, metric)
# top_chart = alt.Chart(top_models_df).mark_bar().encode(
# x=alt.X('Method', title="Model"),
# y=alt.Y(metric, title=metric),
# color='Method',
# tooltip=['Method', metric]
# ).properties(
# width=1400, # Full width
# height=400 # Adjusted height for smaller chart
# )
# st.altair_chart(top_chart, use_container_width=True)
# # Download Button
# @st.cache
# def convert_df_to_csv(dataframe):
# return dataframe.to_csv(index=False).encode('utf-8')
# csv_data = convert_df_to_csv(filtered_df)
# st.download_button(
# label="Download Filtered Results",
# data=csv_data,
# file_name="filtered_leaderboard.csv",
# mime="text/csv"
# )
# inteactive bubble plot and pagination
import streamlit as st
import pandas as pd
import altair as alt
# Set page layout to wide mode
st.set_page_config(
page_title="PathVLM-Eval Leaderboard",
page_icon="πŸ†",
layout="wide"
)
# Load the leaderboard data
df = pd.read_csv("updated-leaderboard.csv")
print(df.columns)
# Add title and description
st.title("PathVLM-Eval Leaderboard πŸ†")
st.markdown("""
Welcome to the **PathVLM-Eval Leaderboard**! This leaderboard displays evaluation results for various Vision-Language Models (VLMs) in Pathology, focusing on multiple-choice questions (MCQs), answers, and explanations.
You can search, filter, and sort the leaderboard dynamically by score for better insights.
""")
# Sidebar Filters
with st.sidebar:
st.subheader("Filters")
# Search by model name (fuzzy search)
search_query = st.text_input("Search for Model Name", value="", placeholder="e.g., llava")
# Filter by model size
model_sizes = df['Params (B)'].unique()
selected_sizes = st.multiselect("Select Model Sizes", options=model_sizes, default=model_sizes)
# Filter by model type
if 'Language Model' in df.columns:
model_types = df['Language Model'].unique()
selected_types = st.multiselect("Select Model Types", options=model_types, default=model_types)
else:
selected_types = []
# Apply Filters
filtered_df = df[
(df['Params (B)'].isin(selected_sizes)) &
(df['Language Model'].isin(selected_types) if selected_types else True) &
(df['Method'].str.contains(search_query, case=False, na=False))
]
# Add Sorting Option
st.subheader("Leaderboard Table with Dynamic Sorting")
if filtered_df.empty:
st.warning("No results found. Try adjusting the filters.")
else:
# Dropdown to select the score column to sort by
sort_column = st.selectbox(
"Sort by Score Column",
options=filtered_df.columns[5:], # Only score-related columns
index=0 # Default to the first score column
)
# Sort the dataframe by the selected column in descending order
sorted_df = filtered_df.sort_values(by=sort_column, ascending=False)
# Display the sorted table
st.dataframe(sorted_df, use_container_width=True)
# Visualization of selected metric
st.subheader("Performance Metrics Visualization")
metric = st.selectbox("Select Metric to Visualize", options=filtered_df.columns[5:])
# Visualization Chart
chart = alt.Chart(sorted_df).mark_bar().encode(
x=alt.X('Method', sort=alt.EncodingSortField(field=metric, order='descending'), title="Model"),
y=alt.Y(metric, title=metric),
color='Method',
tooltip=['Method', metric]
).properties(
width=1400, # Full width
height=600 # Increased height
)
st.altair_chart(chart, use_container_width=True)
# Bubble Plot: Metric vs. Model Size
st.subheader("Interactive Bubble Plot: Metric vs. Model Size")
bubble_metric = st.selectbox("Select Metric for Bubble Plot", options=filtered_df.columns[5:], index=0)
if bubble_metric in filtered_df.columns and 'Params (B)' in filtered_df.columns:
interactive_bubble_chart = alt.Chart(filtered_df).mark_circle(size=200).encode(
x=alt.X('Params (B):Q', title="Model Size (in Billion Params)"),
y=alt.Y(f'{bubble_metric}:Q', title=bubble_metric),
size=alt.Size('Params (B):Q', legend=None),
color=alt.Color('Method:N', title="Model"),
tooltip=['Method', 'Params (B)', bubble_metric]
).properties(
width=800,
height=600
)
st.altair_chart(interactive_bubble_chart, use_container_width=True)
else:
st.warning(f"Columns '{bubble_metric}' and 'Params (B)' are required for the bubble plot.")
# Highlight Top N Models
st.subheader("Highlight Top N Models")
top_n = st.slider("Number of Top Models", min_value=1, max_value=len(filtered_df), value=5)
top_models_df = sorted_df.nlargest(top_n, metric)
top_chart = alt.Chart(top_models_df).mark_bar().encode(
x=alt.X('Method', title="Model"),
y=alt.Y(metric, title=metric),
color='Method',
tooltip=['Method', metric]
).properties(
width=1400, # Full width
height=400 # Adjusted height for smaller chart
)
st.altair_chart(top_chart, use_container_width=True)
# Download Button
@st.cache
def convert_df_to_csv(dataframe):
return dataframe.to_csv(index=False).encode('utf-8')
csv_data = convert_df_to_csv(sorted_df)
st.download_button(
label="Download Sorted Results",
data=csv_data,
file_name="sorted_leaderboard.csv",
mime="text/csv"
)
# with bubble plot
# import streamlit as st
# import pandas as pd
# import altair as alt
# # Set page layout to wide mode
# st.set_page_config(
# page_title="PathVLM-Eval Leaderboard",
# page_icon="πŸ†",
# layout="wide"
# )
# # Load the leaderboard data
# df = pd.read_csv("leaderboard.csv")
# # Add title and description
# st.title("PathVLM-Eval Leaderboard πŸ†")
# st.markdown("""
# Welcome to the **PathVLM-Eval Leaderboard**! This leaderboard displays evaluation results for various Vision-Language Models (VLMs) in Pathology, focusing on multiple-choice questions (MCQs), answers, and explanations.
# You can search, filter, and visualize metrics for better insights.
# """)
# # Sidebar Filters
# with st.sidebar:
# st.subheader("Filters")
# # Search by model name (fuzzy search)
# search_query = st.text_input("Search for Model Name", value="", placeholder="e.g., llava")
# # Filter by model size
# model_sizes = df['Params (B)'].unique()
# selected_sizes = st.multiselect("Select Model Sizes", options=model_sizes, default=model_sizes)
# # Filter by model type
# if 'Language Model' in df.columns:
# model_types = df['Language Model'].unique()
# selected_types = st.multiselect("Select Model Types", options=model_types, default=model_types)
# else:
# selected_types = []
# # Apply Filters
# filtered_df = df[
# (df['Params (B)'].isin(selected_sizes)) &
# (df['Language Model'].isin(selected_types) if selected_types else True) &
# (df['Method'].str.contains(search_query, case=False, na=False))
# ]
# # Main Leaderboard Section
# st.subheader("Leaderboard Table")
# if filtered_df.empty:
# st.warning("No results found. Try adjusting the filters.")
# else:
# # Display table in wide layout
# st.dataframe(
# filtered_df,
# height=600, # Adjust table height
# width=1600 # Adjust table width
# )
# # Visualization of selected metric
# st.subheader("Performance Metrics Visualization")
# metric = st.selectbox("Select Metric to Visualize", options=filtered_df.columns[5:])
# # Visualization Chart
# chart = alt.Chart(filtered_df).mark_bar().encode(
# x=alt.X('Method', sort=alt.EncodingSortField(field=metric, order='descending'), title="Model"),
# y=alt.Y(metric, title=metric),
# color='Method',
# tooltip=['Method', metric]
# ).properties(
# width=1400, # Full width
# height=600 # Increased height
# )
# st.altair_chart(chart, use_container_width=True)
# # Bubble Plot for Accuracy vs. Model Size
# st.subheader("Bubble Plot: Accuracy vs. Model Size")
# if 'Avg score' in filtered_df.columns and 'Params (B)' in filtered_df.columns:
# bubble_chart = alt.Chart(filtered_df).mark_circle(size=200).encode(
# x=alt.X('Params (B):Q', title="Model Size (in Billion Params)"),
# y=alt.Y('Avg score:Q', title="Avg score"),
# size=alt.Size('Params (B):Q', legend=None),
# color=alt.Color('Method:N', title="Model"),
# tooltip=['Method', 'Avg score', 'Params (B)']
# ).properties(
# width=800,
# height=600
# )
# st.altair_chart(bubble_chart, use_container_width=True)
# else:
# st.warning("Columns 'Accuracy' and 'Params (B)' are required for the bubble plot.")
# # Highlight Top N Models
# st.subheader("Highlight Top N Models")
# top_n = st.slider("Number of Top Models", min_value=1, max_value=len(filtered_df), value=5)
# top_models_df = filtered_df.nlargest(top_n, metric)
# top_chart = alt.Chart(top_models_df).mark_bar().encode(
# x=alt.X('Method', title="Model"),
# y=alt.Y(metric, title=metric),
# color='Method',
# tooltip=['Method', metric]
# ).properties(
# width=1400, # Full width
# height=400 # Adjusted height for smaller chart
# )
# st.altair_chart(top_chart, use_container_width=True)
# # Download Button
# @st.cache
# def convert_df_to_csv(dataframe):
# return dataframe.to_csv(index=False).encode('utf-8')
# csv_data = convert_df_to_csv(filtered_df)
# st.download_button(
# label="Download Filtered Results",
# data=csv_data,
# file_name="filtered_leaderboard.csv",
# mime="text/csv"
# )
# with all bubble plot
# import streamlit as st
# import pandas as pd
# import altair as alt
# # Set page layout to wide mode
# st.set_page_config(
# page_title="PathVLM-Eval Leaderboard",
# page_icon="πŸ†",
# layout="wide"
# )
# # Load the leaderboard data
# df = pd.read_csv("leaderboard.csv") # Replace with the actual filename
# # Add title and description
# st.title("PathVLMs Leaderboard πŸ†")
# st.markdown("""
# Welcome to the **PathVLMs Leaderboard**! This leaderboard displays evaluation results for various Vision-Language Models (VLMs) in Pathology, focusing on multiple-choice questions (MCQs), answers, and explanations.
# You can search, filter, and visualize metrics for better insights.
# """)
# # Sidebar Filters
# with st.sidebar:
# st.subheader("Filters")
# # Search by model name
# search_query = st.text_input("Search for Model Name", value="", placeholder="e.g., llava")
# # Filter by model size
# model_sizes = df['Params (B)'].unique()
# selected_sizes = st.multiselect("Select Model Sizes", options=model_sizes, default=model_sizes)
# # Filter by model type
# if 'Language Model' in df.columns:
# model_types = df['Language Model'].unique()
# selected_types = st.multiselect("Select Model Types", options=model_types, default=model_types)
# else:
# selected_types = []
# # Apply Filters
# filtered_df = df[
# (df['Params (B)'].isin(selected_sizes)) &
# (df['Language Model'].isin(selected_types) if selected_types else True) &
# (df['Method'].str.contains(search_query, case=False, na=False))
# ]
# # Main Leaderboard Section
# st.subheader("Leaderboard Table")
# if filtered_df.empty:
# st.warning("No results found. Try adjusting the filters.")
# else:
# # Display the filtered table
# st.dataframe(filtered_df)
# # Dataset columns to plot
# dataset_columns = ['Socialpath Tiny', 'Socialpath All', 'Education Content Tiny', 'Education Content All', 'Pubmed Tiny', 'Pubmed All', 'Avg score']
# # Generate Bubble Plots for each dataset column
# for dataset in dataset_columns:
# st.subheader(f"Bubble Plot: {dataset}")
# bubble_chart = alt.Chart(filtered_df).mark_circle(size=200).encode(
# x=alt.X('Params (B):Q', title="Model Size (in Billion Params)"),
# y=alt.Y(f'{dataset}:Q', title=dataset),
# size=alt.Size('Params (B):Q', legend=None),
# color=alt.Color('Method:N', title="Model"),
# tooltip=['Method', 'Params (B)', dataset]
# ).properties(
# width=800,
# height=600
# )
# st.altair_chart(bubble_chart, use_container_width=True)
# # Download Button
# @st.cache
# def convert_df_to_csv(dataframe):
# return dataframe.to_csv(index=False).encode('utf-8')
# csv_data = convert_df_to_csv(filtered_df)
# st.download_button(
# label="Download Filtered Results",
# data=csv_data,
# file_name="filtered_leaderboard.csv",
# mime="text/csv"
# )
# this also with bubble
# import streamlit as st
# import pandas as pd
# import altair as alt
# # Set page layout to wide mode
# st.set_page_config(
# page_title="PathVLMs Leaderboard",
# page_icon="πŸ†",
# layout="wide"
# )
# # Load the leaderboard data
# df = pd.read_csv("leaderboard.csv") # Replace with your actual CSV file name
# # Add title and description
# st.title("PathVLMs Leaderboard πŸ†")
# st.markdown("""
# Welcome to the **PathVLMs Leaderboard**! This leaderboard displays evaluation results for various Vision-Language Models (VLMs) in Pathology, focusing on multiple-choice questions (MCQs), answers, and explanations.
# You can search, filter, and visualize metrics for better insights.
# """)
# # Sidebar Filters
# with st.sidebar:
# st.subheader("Filters")
# # Search by model name
# search_query = st.text_input("Search for Model Name", value="", placeholder="e.g., llava")
# # Filter by model size
# model_sizes = df['Params (B)'].unique()
# selected_sizes = st.multiselect("Select Model Sizes", options=model_sizes, default=model_sizes)
# # Filter by model type
# if 'Language Model' in df.columns:
# model_types = df['Language Model'].unique()
# selected_types = st.multiselect("Select Model Types", options=model_types, default=model_types)
# else:
# selected_types = []
# # Apply Filters
# filtered_df = df[
# (df['Params (B)'].isin(selected_sizes)) &
# (df['Language Model'].isin(selected_types) if selected_types else True) &
# (df['Method'].str.contains(search_query, case=False, na=False))
# ]
# # Main Leaderboard Section
# st.subheader("Leaderboard Table")
# if filtered_df.empty:
# st.warning("No results found. Try adjusting the filters.")
# else:
# # Display table in wide layout
# st.dataframe(
# filtered_df,
# height=600, # Adjust table height
# width=1600 # Adjust table width
# )
# # Visualization of selected metric
# st.subheader("Performance Metrics Visualization")
# metric = st.selectbox("Select Metric to Visualize", options=filtered_df.columns[5:])
# # Visualization Chart
# chart = alt.Chart(filtered_df).mark_bar().encode(
# x=alt.X('Method', sort=alt.EncodingSortField(field=metric, order='descending'), title="Model"),
# y=alt.Y(metric, title=metric),
# color='Method',
# tooltip=['Method', metric]
# ).properties(
# width=1400, # Full width
# height=600 # Increased height
# )
# st.altair_chart(chart, use_container_width=True)
# # Dataset columns to plot
# dataset_columns = ['Socialpath Tiny', 'Socialpath All', 'Education Content Tiny', 'Education Content All', 'Pubmed Tiny', 'Pubmed All', 'Avg score']
# # Generate Bubble Plots for each dataset column
# for dataset in dataset_columns:
# st.subheader(f"Bubble Plot: {dataset}")
# bubble_chart = alt.Chart(filtered_df).mark_circle(size=200).encode(
# x=alt.X('Params (B):Q', title="Model Size (in Billion Params)"),
# y=alt.Y(f'{dataset}:Q', title=dataset),
# size=alt.Size('Params (B):Q', legend=None),
# color=alt.Color('Method:N', title="Model"),
# tooltip=['Method', 'Params (B)', dataset]
# ).properties(
# width=800,
# height=600
# )
# st.altair_chart(bubble_chart, use_container_width=True)
# # Highlight Top N Models
# st.subheader("Highlight Top N Models")
# top_n = st.slider("Number of Top Models", min_value=1, max_value=len(filtered_df), value=5)
# top_models_df = filtered_df.nlargest(top_n, metric)
# top_chart = alt.Chart(top_models_df).mark_bar().encode(
# x=alt.X('Method', title="Model"),
# y=alt.Y(metric, title=metric),
# color='Method',
# tooltip=['Method', metric]
# ).properties(
# width=1400, # Full width
# height=400 # Adjusted height for smaller chart
# )
# st.altair_chart(top_chart, use_container_width=True)
# # Download Button
# @st.cache
# def convert_df_to_csv(dataframe):
# return dataframe.to_csv(index=False).encode('utf-8')
# csv_data = convert_df_to_csv(filtered_df)
# st.download_button(
# label="Download Filtered Results",
# data=csv_data,
# file_name="filtered_leaderboard.csv",
# mime="text/csv"
# )