import streamlit as st from ecologits.impacts.llm import compute_llm_impacts from src.utils import format_impacts, average_range_impacts from src.impacts import display_impacts from src.electricity_mix import COUNTRY_CODES, find_electricity_mix, dataframe_electricity_mix from src.models import load_models from src.constants import PROMPTS import plotly.express as px def reset_model(): model = 'CUSTOM' def expert_mode(): st.markdown("### π€ Expert mode") with st.container(border = True): ########## Model info ########## col1, col2, col3 = st.columns(3) df = load_models(filter_main=True) with col1: provider_exp = st.selectbox( label = 'Provider', options = [x for x in df['provider_clean'].unique()], index = 7, key = 1 ) with col2: model_exp = st.selectbox( label = 'Model', options = [x for x in df['name_clean'].unique() if x in df[df['provider_clean'] == provider_exp]['name_clean'].unique()], key = 2 ) with col3: output_tokens_exp = st.selectbox( label = 'Example prompt', options = [x[0] for x in PROMPTS], key = 3 ) df_filtered = df[(df['provider_clean'] == provider_exp) & (df['name_clean'] == model_exp)] try: total_params = int(df_filtered['total_parameters'].iloc[0]) except: total_params = int((df_filtered['total_parameters'].values[0]['min'] + df_filtered['total_parameters'].values[0]['max'])/2) try: active_params = int(df_filtered['active_parameters'].iloc[0]) except: active_params = int((df_filtered['active_parameters'].values[0]['min'] + df_filtered['active_parameters'].values[0]['max'])/2) ########## Model parameters ########## col11, col22, col33 = st.columns(3) with col11: active_params = st.number_input('Active parameters (B)', 0, None, active_params) with col22: total_params = st.number_input('Total parameters (B)', 0, None, total_params) with col33: output_tokens = st.number_input('Output completion tokens', [x[1] for x in PROMPTS if x[0] == output_tokens_exp][0]) ########## Electricity mix ########## location = st.selectbox('Location', [x[0] for x in COUNTRY_CODES]) col4, col5, col6 = st.columns(3) with col4: mix_gwp = st.number_input('Electricity mix - GHG emissions [kgCO2eq / kWh]', find_electricity_mix([x[1] for x in COUNTRY_CODES if x[0] ==location][0])[2], format="%0.6f") #disp_ranges = st.toggle('Display impact ranges', False) with col5: mix_adpe = st.number_input('Electricity mix - Abiotic resources [kgSbeq / kWh]', find_electricity_mix([x[1] for x in COUNTRY_CODES if x[0] ==location][0])[0], format="%0.13f") with col6: mix_pe = st.number_input('Electricity mix - Primary energy [MJ / kWh]', find_electricity_mix([x[1] for x in COUNTRY_CODES if x[0] ==location][0])[1], format="%0.3f") impacts = compute_llm_impacts(model_active_parameter_count=active_params, model_total_parameter_count=total_params, output_token_count=output_tokens, request_latency=100000, if_electricity_mix_gwp=mix_gwp, if_electricity_mix_adpe=mix_adpe, if_electricity_mix_pe=mix_pe ) impacts, usage, embodied = format_impacts(impacts) with st.container(border = True): st.markdown('