File size: 5,004 Bytes
64cd369
 
 
 
 
 
 
 
 
 
 
 
 
 
7705d18
5b07f21
7705d18
5b07f21
64cd369
5b07f21
64cd369
5b07f21
64cd369
5b07f21
64cd369
5b07f21
 
64cd369
 
 
 
 
 
5b07f21
64cd369
 
 
 
 
 
 
 
cfe91b8
 
 
 
64cd369
 
 
cfe91b8
64cd369
 
 
 
5b07f21
64cd369
5b07f21
 
64cd369
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5b07f21
64cd369
 
5b07f21
 
7705d18
5b07f21
 
64d6dba
 
5b07f21
396c4f0
9763683
64cd369
26bb42c
64cd369
 
 
 
 
 
f405da4
64cd369
 
 
 
 
5b07f21
 
 
64cd369
 
5b07f21
64cd369
 
 
 
a306650
64cd369
 
 
 
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import streamlit as st
from comparateur import get_table_empreintes_detailed
from comparateur import *
import base64
import pandas as pd
import altair as alt

# Function to read and encode an SVG file to Base64
def load_svg_as_base64(file_path):
    with open(file_path, "rb") as f:
        svg_data = f.read()
    return base64.b64encode(svg_data).decode()

def color_scale(val):
    if val == '-':
        return 'background-color: {color}'
    elif val <= 1:
        color = '#008571' #'rgba(0,238,0,0.5)'  # green with opacity
    elif val <= 10:
        color = '#83c2b8'  # light green with opacity
    elif val <= 50:
        color = '#efcd82'  # light yellow with opacity
    elif val <= 100:
        color = '#f2aa56'  # light orange with opacity
    else:
        color = '#e87a58'  # light red with opacity
    return f'background-color: {color};color:white'

def display_cf_comparison(stm: st):
    svg_file_path = "feuille.svg"
    svg_base64 = load_svg_as_base64(svg_file_path)
    stm.markdown(
    f"""
    **Votre consommation carbone**
        <img src='data:image/svg+xml;base64,{svg_base64}' alt='svg' width='15' height='15' style='margin-left: 10px;'>
    """,
    unsafe_allow_html=True
    )

    serveur_emission = st.session_state['emission'].stop()
    emission_api = sum([value["el"] for value in st.session_state["partial_emissions"].values()])

    if serveur_emission is None :
        serveur_emission = 0
    if emission_api is None :
        emission_api = 0
    total_emission = serveur_emission + emission_api

    pourcentage_api = emission_api / total_emission

    pourcentage_serveur = serveur_emission / total_emission
    
    

    stm.markdown(f"<div style='text-align: center; margin-bottom: 10px;'><b>{total_emission*1000:.2f}</b> g eq. CO2</div>", unsafe_allow_html=True)
    stm.markdown("Dont :")
    stm.markdown(f"- Empreinte serveur (via CodeCarbon) : **{serveur_emission*1000:.2f}** g eq. CO2 ({pourcentage_serveur:.2%})")
    stm.write(f"- Empreinte IA (via EcoLogits) : **{emission_api*1000:.2f}** g eq. CO2 ({pourcentage_api:.2%})")
    # stm.markdown("(avec l'outil CodeCarbon)")
    c1,c2,c3 = stm.columns([1,1,1])

    c2.write("---")

    stm.markdown("**Votre équivalence**")
    col1,col2,col3 = stm.columns([1,1,1])
    display_comparaison(col1,total_emission,dict_comparaison_1kgCO2["eau en litre"][0]*1000,dict_comparaison_1kgCO2["eau en litre"][1],"ml")
    display_comparaison(col2,total_emission,dict_comparaison_1kgCO2["tgv en km"][0],dict_comparaison_1kgCO2["tgv en km"][1],"km")
    display_comparaison(col3,total_emission,dict_comparaison_1kgCO2["voiture en km"][0]*1000,dict_comparaison_1kgCO2["voiture en km"][1],"m")
    stm.markdown("\n")
    stm.markdown(
    f"""
    Powered by **ADEME**
        <a href='https://www.ademe.fr' target='_blank'><img src='https://www.ademe.fr/wp-content/uploads/2022/11/ademe-logo-2022-1.svg' alt='svg' width='30' height='30' style='margin-left: 10px;'>
    """,
    unsafe_allow_html=True
    )

def display_carbon_footprint():
    st.title("EMPREINTE ÉNERGÉTIQUE DE L'APPLICATION IA CARTO RSE")
    display_cf_comparison(st)
    table = get_table_empreintes_detailed()
    # table[['Consommation Totale']] = table[['Consommation Totale']].map('${:,.2f}'.format)
   
    table.replace({0.00: '-'}, inplace=True)
    #just 2 digits after the comma
    styled_df = table[['Consommation Totale']].rename(columns={'Consommation Totale': 'Consommation totale (g eqCo2)'})
    styled_df = styled_df.round(2)
    
    styled_df = styled_df.style.applymap(color_scale, subset=['Consommation totale (g eqCo2)'])
    st.markdown("---")
    st.markdown("### DÉTAIL PAR TÂCHE")
    st.table(styled_df)
    with st.expander("Plus de détails"):
        st.table(table)
    
    st.markdown("### SYNTHESE (Dialogue IA et non IA)")

    serveur_emission = st.session_state['emission'].stop()
    emission_api = sum([value["el"] for value in st.session_state["partial_emissions"].values()])
    print(serveur_emission, emission_api)
    total_emission = serveur_emission + emission_api

    pourcentage_api = emission_api / total_emission
    pourcentage_serveur = serveur_emission / total_emission

    df = pd.DataFrame({"Catégorie": ["Identification + dessin","IA (extraction pp + dialogue)"], "valeur": [pourcentage_serveur, pourcentage_api]})
    color_scale_alt = alt.Scale(domain=['Identification + dessin', 'IA (extraction pp + dialogue)'], range=['#011166', '#63abdf'])

    base=alt.Chart(df).encode(
    theta=alt.Theta(field="valeur", type="quantitative", stack=True),
    color=alt.Color(field="Catégorie", type="nominal", scale=color_scale_alt),
)


    pie = base.mark_arc(outerRadius=100)
    text = base.mark_text(radius=150,fill= "black",align='center', baseline='middle',fontSize=20).encode(alt.Text(field="valeur", type="quantitative", format=".2%"))

    chart = alt.layer(pie, text, data=df).resolve_scale(theta="independent")
    st.altair_chart(chart, use_container_width=True)