import pandas as pd import streamlit as st from ecologits.electricity_mix_repository import electricity_mixes from ecologits.impacts.llm import compute_llm_impacts from src.utils import format_impacts from src.impacts import display_impacts from src.electricity_mix import COUNTRY_CODES, format_electricity_mix_criterion, format_country_name from src.models import load_models from src.constants import PROMPTS import plotly.express as px def expert_mode(): st.markdown("### 🤓 Expert mode") with st.container(border=True): st.markdown("###### Configure the model") ########## Model info ########## provider_col, model_col = st.columns(2) df = load_models(filter_main=True) with provider_col: provider_exp = st.selectbox( label="Provider", options=[x for x in df["provider_clean"].unique()], index=7, key=1, ) with model_col: 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, ) 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 ########## active_params_col, total_params_col = st.columns(2) with active_params_col: active_params = st.number_input( "Active parameters (B)", 0, None, active_params ) with total_params_col: total_params = st.number_input( "Total parameters (B)", 0, None, total_params ) with st.container(border=True): st.markdown("###### Configure the prompt") provider_col, model_col = st.columns(2) with provider_col: output_tokens_exp = st.selectbox( label="Example prompt", options=[x[0] for x in PROMPTS], key=3 ) with model_col: output_tokens = st.number_input( label="Output completion tokens", min_value=0, value=[x[1] for x in PROMPTS if x[0] == output_tokens_exp][0], ) with st.container(border=True): st.markdown("###### Configure the data center") dc_pue_col, dc_wue_col, dc_location_col = st.columns(3) with dc_pue_col: datacenter_pue = st.number_input( label="Data center PUE", value=1.2, min_value=1.0 ) with dc_wue_col: datacenter_wue = st.number_input( label="Data center WUE [L / kWh]", value=0.6, min_value=0. ) with dc_location_col: dc_location = st.selectbox( label="Data center location", options=[c[1] for c in COUNTRY_CODES], format_func=format_country_name, index=0 ) em_gwp_col, em_adpe_col, em_pe_col, em_wue_col = st.columns(4) electricity_mix = electricity_mixes.find_electricity_mix(dc_location) with em_gwp_col: em_gwp = st.number_input( label="GHG emissions [kgCO2eq / kWh]", value=electricity_mix.gwp, format="%0.6f", ) with em_adpe_col: em_adpe = st.number_input( label="Abiotic resources [kgSbeq / kWh]", value=electricity_mix.adpe, format="%0.13f", ) with em_pe_col: em_pe = st.number_input( label="Primary energy [MJ / kWh]", value=electricity_mix.pe, format="%0.3f", ) with em_wue_col: em_wue = st.number_input( label="Water consumption [L / kWh]", value=electricity_mix.wue, 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=em_gwp, if_electricity_mix_adpe=em_adpe, if_electricity_mix_pe=em_pe, if_electricity_mix_wue=em_wue, datacenter_pue=datacenter_pue, datacenter_wue=datacenter_wue ) impacts, usage, embodied = format_impacts(impacts) with st.container(border=True): st.markdown( '