# -*- coding: utf-8 -*- # @Date : 2025/2/5 16:26 # @Author : q275343119 # @File : data_page.py # @Description: import io from st_aggrid import AgGrid, JsCode, ColumnsAutoSizeMode import streamlit as st from app.backend.data_engine import DataEngine from app.backend.multi_header_util import get_header_options from utils.st_copy_to_clipboard import st_copy_to_clipboard from streamlit_theme import st_theme from app.backend.app_init_func import LEADERBOARD_MAP from app.backend.constant import LEADERBOARD_ICON_MAP, BASE_URL from app.backend.json_util import compress_msgpack, decompress_msgpack COLUMNS = ['model_name', 'vendor', 'embd_dtype', 'embd_dim', 'num_params', 'max_tokens', 'similarity', 'query_instruct', 'corpus_instruct', 'reference', 'tooltip' ] HEADER_STYLE = {'fontSize': '18px'} CELL_STYLE = {'fontSize': '18px'} def is_section(group_name): for k, v in LEADERBOARD_MAP.items(): leaderboard_name = v[0][0] if group_name == leaderboard_name: return True return False def get_closed_dataset(): data_engine = st.session_state.get("data_engine", DataEngine()) closed_list = [] results = data_engine.results for result in results: if result.get("is_closed"): closed_list.append(result.get("dataset_name")) return closed_list def convert_df_to_csv(df): output = io.StringIO() df.to_csv(output, index=False) return output.getvalue() def get_column_state(): """ get column state from url """ query_params = st.query_params.get("grid_state", None) sider_bar_hidden = st.query_params.get("sider_bar_hidden", "False") table_only = st.query_params.get("table_only", "False") if query_params: grid_state = decompress_msgpack(query_params) st.session_state.grid_state = grid_state if sider_bar_hidden.upper() == 'FALSE': st.session_state.sider_bar_hidden = False if table_only.upper() == 'FALSE': st.session_state.table_only = False return None def sidebar_css(): """ :return: """ if st.session_state.get("sider_bar_hidden"): st.markdown(""" """, unsafe_allow_html=True) def table_only_css(): if st.session_state.get("table_only"): st.markdown(""" """, unsafe_allow_html=True) # logo # st.markdown('', unsafe_allow_html=True) title = f'

{LEADERBOARD_ICON_MAP.get(group_name.capitalize(), "")} {group_name.capitalize()}

' if is_section(group_name): title = f'

{LEADERBOARD_ICON_MAP.get(group_name.capitalize() + " Leaderboard", "")} {group_name.capitalize() + " Leaderboard"}

' # title st.markdown(title, unsafe_allow_html=True) data_engine = st.session_state.get("data_engine", DataEngine()) df = data_engine.jsons_to_df().copy() csv = convert_df_to_csv(df) file_name = f"{group_name.capitalize()} Leaderboard" if is_section(group_name) else group_name.capitalize() grid = table_area(group_name, grid_state, data_engine, df) @st.dialog("URL") def share_url(): state = grid.grid_state if state: share_link = f'{BASE_URL.replace("_", "-")}{group_name}/?grid_state={compress_msgpack(state)}' if not is_section( group_name) else f'{BASE_URL.replace("_", "-")}?grid_state={compress_msgpack(state)}' else: share_link = f'{BASE_URL.replace("_", "-")}{group_name}' st.write(share_link) theme = st_theme() if theme: theme = theme.get("base") else: theme = "light" st_copy_to_clipboard(share_link, before_copy_label='📋Push to copy', after_copy_label='✅Text copied!', theme=theme) col1, col2 = st.columns([1, 1]) with col1: st.download_button( label="Download CSV", data=csv, file_name=f"{file_name}.csv", mime="text/csv", icon=":material/download:", ) with col2: share_btn = st.button("Share this page", icon=":material/share:") if share_btn: share_url() def render_page(group_name): grid_state = st.session_state.get("grid_state", {}) st.session_state.sider_bar_hidden = True st.session_state.table_only = True get_column_state() sidebar_css() if st.session_state.get("table_only"): table_area(group_name, grid_state) else: main_page(group_name, grid_state)