File size: 3,032 Bytes
197f5ec
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import streamlit as st
import pandas as pd

from ecologits.tracers.utils import llm_impacts
from src.impacts import get_impacts, display_impacts, display_equivalent
from src.utils import format_impacts
from src.content import WARNING_CLOSED_SOURCE, WARNING_MULTI_MODAL, WARNING_BOTH
from src.models import load_models, clean_models_data

from src.constants import PROMPTS

def calculator_mode():

    with st.container(border=True):
        
        df = load_models()
        
        col1, col2, col3 = st.columns(3)

        with col1:
            provider = st.selectbox(label = 'Provider',
                                    options = [x for x in df['provider_clean'].unique()],
                                    index = 9)
            provider_raw = df[df['provider_clean'] == provider]['provider'].values[0]

        with col2:
            model = st.selectbox('Model', [x for x in df['name_clean'].unique() if x in df[df['provider_clean'] == provider]['name_clean'].unique()])
            model_raw = df[(df['provider_clean'] == provider) & (df['name_clean'] == model)]['name'].values[0]

        with col3:
            output_tokens = st.selectbox('Example prompt', [x[0] for x in PROMPTS])
            
        # WARNING DISPLAY
        
        df_filtered = df[(df['provider_clean'] == provider) & (df['name_clean'] == model)]

        if df_filtered['warning_arch'].values[0] and not df_filtered['warning_multi_modal'].values[0]:
            st.warning(WARNING_CLOSED_SOURCE)
        if df_filtered['warning_multi_modal'].values[0] and not df_filtered['warning_arch'].values[0]:
            st.warning(WARNING_MULTI_MODAL)
        if df_filtered['warning_arch'].values[0] and df_filtered['warning_multi_modal'].values[0]:
            st.warning(WARNING_BOTH)
            
    try:
        impacts = llm_impacts(
                        provider=provider_raw,
                        model_name=model_raw,
                        output_token_count=[x[1] for x in PROMPTS if x[0] == output_tokens][0],
                        request_latency=100000
                    )

        impacts, _, _ = format_impacts(impacts)
        
        with st.container(border=True):

            st.markdown('<h3 align = "center">Environmental impacts</h3>', unsafe_allow_html=True)
            st.markdown('<p align = "center">To understand how the environmental impacts are computed go to the 📖 Methodology tab.</p>', unsafe_allow_html=True)
            display_impacts(impacts)
        
        with st.container(border=True):
            
            st.markdown('<h3 align = "center">That\'s equivalent to ...</h3>', unsafe_allow_html=True)
            st.markdown('<p align = "center">Making this request to the LLM is equivalent to the following actions :</p>', unsafe_allow_html=True)
            display_equivalent(impacts)
            
    except Exception as e:
        st.error('Could not find the model in the repository. Please try another model.')