Spaces:
Running
Running
Ilyas KHIAT
commited on
Commit
•
5b07f21
1
Parent(s):
b0c72d5
emission export fin fin
Browse files- app.py +0 -1
- chart.png +0 -0
- chat_with_pps.py +7 -6
- comparateur.py +3 -3
- emissions.csv +0 -0
- empreinte_carbone.py +21 -18
- empreinte_export.py +35 -10
- partie_prenante_carte.py +1 -1
- temp.html +0 -0
app.py
CHANGED
@@ -37,7 +37,6 @@ def load_svg_as_base64(file_path):
|
|
37 |
return base64.b64encode(svg_data).decode()
|
38 |
|
39 |
def main():
|
40 |
-
st.markdown(":point_left: Cliquez pour vous inspirer", unsafe_allow_html=True)
|
41 |
|
42 |
if "emission" not in st.session_state:
|
43 |
tracker = EmissionsTracker()
|
|
|
37 |
return base64.b64encode(svg_data).decode()
|
38 |
|
39 |
def main():
|
|
|
40 |
|
41 |
if "emission" not in st.session_state:
|
42 |
tracker = EmissionsTracker()
|
chart.png
CHANGED
chat_with_pps.py
CHANGED
@@ -269,7 +269,7 @@ def import_conversation():
|
|
269 |
|
270 |
def extract_format_prompts_from_response(response):
|
271 |
st.markdown("---")
|
272 |
-
st.markdown("**En découvrir plus avec l'IA RSE
|
273 |
prompts = response.split("\n")
|
274 |
prompts = [prompt.strip() for prompt in prompts if prompt.strip() != ""]
|
275 |
prompts_container = st.container()
|
@@ -298,7 +298,7 @@ def display_chat():
|
|
298 |
tracker.start()
|
299 |
st.session_state["emission"] = tracker
|
300 |
# app config
|
301 |
-
st.title("
|
302 |
models_name = {
|
303 |
"Mistral (FR)":1,
|
304 |
"GPT-4o":0
|
@@ -318,7 +318,7 @@ def display_chat():
|
|
318 |
# session state
|
319 |
if "chat_history" not in st.session_state:
|
320 |
st.session_state.chat_history = [
|
321 |
-
AIMessage(content="Salut, voici votre cartographie des parties prenantes. Que puis-je faire pour vous?"),
|
322 |
]
|
323 |
|
324 |
if "model" not in st.session_state:
|
@@ -366,12 +366,13 @@ def display_chat():
|
|
366 |
with st.chat_message("AI"):
|
367 |
st.write(message.content)
|
368 |
if "cartographie" in message.content:
|
|
|
369 |
display_chart()
|
370 |
if message.content == st.session_state.chat_history[0].content:
|
371 |
st.markdown("---")
|
372 |
-
st.markdown("**En découvrir plus avec l'IA RSE
|
373 |
-
first_prompts = ["En plus des parties prenantes déjà identifiées que tu peux consulter, quels groupes ou individus, impactés par les activités de mon organisation, devrais ajouter dans notre cartographie des parties prenantes ?",
|
374 |
-
"Quels sont les principaux acteurs internes et externes qui influencent ou sont influencés par mon organisation, et comment leurs intérêts ou préoccupations peuvent
|
375 |
"En tenant compte de ma chaîne de valeur complète, quels sont les différentes parties prenantes stratégiques, incluant les partenaires commerciaux, les régulateurs, les groupes de pression, et la communauté, et comment leurs rôles et influences interagissent pour affecter les objectifs à court et long terme de mon organisation ?"]
|
376 |
display_prompts(first_prompts)
|
377 |
elif isinstance(message, HumanMessage):
|
|
|
269 |
|
270 |
def extract_format_prompts_from_response(response):
|
271 |
st.markdown("---")
|
272 |
+
st.markdown("**En découvrir plus avec l'IA RSE bziiit**")
|
273 |
prompts = response.split("\n")
|
274 |
prompts = [prompt.strip() for prompt in prompts if prompt.strip() != ""]
|
275 |
prompts_container = st.container()
|
|
|
298 |
tracker.start()
|
299 |
st.session_state["emission"] = tracker
|
300 |
# app config
|
301 |
+
st.title("CHATBOT")
|
302 |
models_name = {
|
303 |
"Mistral (FR)":1,
|
304 |
"GPT-4o":0
|
|
|
318 |
# session state
|
319 |
if "chat_history" not in st.session_state:
|
320 |
st.session_state.chat_history = [
|
321 |
+
AIMessage(content="Salut, voici votre cartographie des parties prenantes. Que puis-je faire pour vous ?"),
|
322 |
]
|
323 |
|
324 |
if "model" not in st.session_state:
|
|
|
366 |
with st.chat_message("AI"):
|
367 |
st.write(message.content)
|
368 |
if "cartographie" in message.content:
|
369 |
+
st.markdown("\n")
|
370 |
display_chart()
|
371 |
if message.content == st.session_state.chat_history[0].content:
|
372 |
st.markdown("---")
|
373 |
+
st.markdown("**En découvrir plus avec l'IA RSE bziiit**")
|
374 |
+
first_prompts = ["En plus des parties prenantes déjà identifiées que tu peux consulter, quels groupes ou individus, impactés par les activités de mon organisation, devrais-je ajouter dans notre cartographie des parties prenantes ?",
|
375 |
+
"Quels sont les principaux acteurs internes et externes qui influencent ou sont influencés par mon organisation, et comment leurs intérêts ou préoccupations peuvent varier selon les différents domaines d'activité ?",
|
376 |
"En tenant compte de ma chaîne de valeur complète, quels sont les différentes parties prenantes stratégiques, incluant les partenaires commerciaux, les régulateurs, les groupes de pression, et la communauté, et comment leurs rôles et influences interagissent pour affecter les objectifs à court et long terme de mon organisation ?"]
|
377 |
display_prompts(first_prompts)
|
378 |
elif isinstance(message, HumanMessage):
|
comparateur.py
CHANGED
@@ -39,11 +39,11 @@ def get_table_empreintes_detailed() -> pd.DataFrame:
|
|
39 |
emissions_df = emissions_df.applymap(lambda x: x * 1000)
|
40 |
emissions_df = emissions_df.round(2)
|
41 |
emissions_df = emissions_df.rename(index={
|
42 |
-
"Scrapping": "Collecte de
|
43 |
"extraction_pp": "Extraction des parties prenantes (serveur et IA)",
|
44 |
"cartographie": "Sauvegarde de la cartographie",
|
45 |
-
"chatbot": "Dialogue avec
|
46 |
-
"download_rapport": "Téléchargement
|
47 |
})
|
48 |
|
49 |
# Make Ecologits column cumulative
|
|
|
39 |
emissions_df = emissions_df.applymap(lambda x: x * 1000)
|
40 |
emissions_df = emissions_df.round(2)
|
41 |
emissions_df = emissions_df.rename(index={
|
42 |
+
"Scrapping": "Collecte de documents et scrapping",
|
43 |
"extraction_pp": "Extraction des parties prenantes (serveur et IA)",
|
44 |
"cartographie": "Sauvegarde de la cartographie",
|
45 |
+
"chatbot": "Dialogue avec chatBot IA",
|
46 |
+
"download_rapport": "Téléchargement cartographie"
|
47 |
})
|
48 |
|
49 |
# Make Ecologits column cumulative
|
emissions.csv
CHANGED
The diff for this file is too large to render.
See raw diff
|
|
empreinte_carbone.py
CHANGED
@@ -13,25 +13,25 @@ def load_svg_as_base64(file_path):
|
|
13 |
|
14 |
def color_scale(val):
|
15 |
if val == '-':
|
16 |
-
color
|
17 |
elif val <= 1:
|
18 |
-
color = 'rgba(0,238,0,0.5)' # green with opacity
|
19 |
elif val <= 10:
|
20 |
-
color = '
|
21 |
elif val <= 50:
|
22 |
-
color = '
|
23 |
elif val <= 100:
|
24 |
-
color = '
|
25 |
else:
|
26 |
-
color = '
|
27 |
-
return f'background-color: {color}'
|
28 |
|
29 |
def display_cf_comparison(stm: st):
|
30 |
svg_file_path = "feuille.svg"
|
31 |
svg_base64 = load_svg_as_base64(svg_file_path)
|
32 |
stm.markdown(
|
33 |
f"""
|
34 |
-
**Votre consommation
|
35 |
<img src='data:image/svg+xml;base64,{svg_base64}' alt='svg' width='15' height='15' style='margin-left: 10px;'>
|
36 |
""",
|
37 |
unsafe_allow_html=True
|
@@ -47,10 +47,10 @@ def display_cf_comparison(stm: st):
|
|
47 |
|
48 |
|
49 |
|
50 |
-
stm.markdown(f"<div style='text-align: center; margin-bottom: 10px;'><b>{total_emission*1000:.
|
51 |
stm.markdown("Dont :")
|
52 |
-
stm.markdown(f"- Empreinte serveur (via CodeCarbon) : **{serveur_emission*1000:.
|
53 |
-
stm.write(f"- Empreinte IA (via EcoLogits) : **{emission_api*1000:.
|
54 |
# stm.markdown("(avec l'outil CodeCarbon)")
|
55 |
c1,c2,c3 = stm.columns([1,1,1])
|
56 |
|
@@ -71,16 +71,17 @@ def display_cf_comparison(stm: st):
|
|
71 |
)
|
72 |
|
73 |
def display_carbon_footprint():
|
74 |
-
|
75 |
-
st.title("EMPREINTE ENERGETIQUE DE L'APPLICATION IA CARTO RSE")
|
76 |
display_cf_comparison(st)
|
77 |
table = get_table_empreintes_detailed()
|
|
|
|
|
78 |
table.replace({0.00: '-'}, inplace=True)
|
79 |
-
|
|
|
80 |
styled_df = styled_df.round(2)
|
81 |
-
styled_df = styled_df.style.applymap(color_scale, subset=['Consommation Cumulée (g eqCo2)'])
|
82 |
-
styled_df = styled_df.set_properties(subset=['Consommation Cumulée (g eqCo2)'], **{'text-align': 'center'})
|
83 |
|
|
|
84 |
st.markdown("---")
|
85 |
st.markdown("### DÉTAIL PAR TÂCHE")
|
86 |
st.table(styled_df)
|
@@ -97,10 +98,12 @@ def display_carbon_footprint():
|
|
97 |
pourcentage_api = emission_api / total_emission
|
98 |
pourcentage_serveur = serveur_emission / total_emission
|
99 |
|
100 |
-
df = pd.DataFrame({"Catégorie": ["Identification + dessin","
|
|
|
|
|
101 |
base=alt.Chart(df).encode(
|
102 |
theta=alt.Theta(field="valeur", type="quantitative", stack=True),
|
103 |
-
color=alt.Color(field="Catégorie", type="nominal")
|
104 |
)
|
105 |
|
106 |
|
|
|
13 |
|
14 |
def color_scale(val):
|
15 |
if val == '-':
|
16 |
+
return 'background-color: {color}'
|
17 |
elif val <= 1:
|
18 |
+
color = '#008571' #'rgba(0,238,0,0.5)' # green with opacity
|
19 |
elif val <= 10:
|
20 |
+
color = '#83c2b8' # light green with opacity
|
21 |
elif val <= 50:
|
22 |
+
color = '#efcd82' # light yellow with opacity
|
23 |
elif val <= 100:
|
24 |
+
color = '#f2aa56' # light orange with opacity
|
25 |
else:
|
26 |
+
color = '#e87a58' # light red with opacity
|
27 |
+
return f'background-color: {color};color:white'
|
28 |
|
29 |
def display_cf_comparison(stm: st):
|
30 |
svg_file_path = "feuille.svg"
|
31 |
svg_base64 = load_svg_as_base64(svg_file_path)
|
32 |
stm.markdown(
|
33 |
f"""
|
34 |
+
**Votre consommation carbone**
|
35 |
<img src='data:image/svg+xml;base64,{svg_base64}' alt='svg' width='15' height='15' style='margin-left: 10px;'>
|
36 |
""",
|
37 |
unsafe_allow_html=True
|
|
|
47 |
|
48 |
|
49 |
|
50 |
+
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)
|
51 |
stm.markdown("Dont :")
|
52 |
+
stm.markdown(f"- Empreinte serveur (via CodeCarbon) : **{serveur_emission*1000:.2f}** g eq. CO2 ({pourcentage_serveur:.2%})")
|
53 |
+
stm.write(f"- Empreinte IA (via EcoLogits) : **{emission_api*1000:.2f}** g eq. CO2 ({pourcentage_api:.2%})")
|
54 |
# stm.markdown("(avec l'outil CodeCarbon)")
|
55 |
c1,c2,c3 = stm.columns([1,1,1])
|
56 |
|
|
|
71 |
)
|
72 |
|
73 |
def display_carbon_footprint():
|
74 |
+
st.title("EMPREINTE ÉNERGÉTIQUE DE L'APPLICATION IA CARTO RSE")
|
|
|
75 |
display_cf_comparison(st)
|
76 |
table = get_table_empreintes_detailed()
|
77 |
+
# table[['Consommation Totale']] = table[['Consommation Totale']].map('${:,.2f}'.format)
|
78 |
+
|
79 |
table.replace({0.00: '-'}, inplace=True)
|
80 |
+
#just 2 digits after the comma
|
81 |
+
styled_df = table[['Consommation Totale']].rename(columns={'Consommation Totale': 'Consommation totale (g eqCo2)'})
|
82 |
styled_df = styled_df.round(2)
|
|
|
|
|
83 |
|
84 |
+
styled_df = styled_df.style.applymap(color_scale, subset=['Consommation totale (g eqCo2)'])
|
85 |
st.markdown("---")
|
86 |
st.markdown("### DÉTAIL PAR TÂCHE")
|
87 |
st.table(styled_df)
|
|
|
98 |
pourcentage_api = emission_api / total_emission
|
99 |
pourcentage_serveur = serveur_emission / total_emission
|
100 |
|
101 |
+
df = pd.DataFrame({"Catégorie": ["Identification + dessin","IA (extraction pp + dialogue)"], "valeur": [pourcentage_serveur, pourcentage_api]})
|
102 |
+
color_scale_alt = alt.Scale(domain=['Identification + dessin', 'IA (extraction pp + dialogue)'], range=['#011166', '#63abdf'])
|
103 |
+
|
104 |
base=alt.Chart(df).encode(
|
105 |
theta=alt.Theta(field="valeur", type="quantitative", stack=True),
|
106 |
+
color=alt.Color(field="Catégorie", type="nominal", scale=color_scale_alt),
|
107 |
)
|
108 |
|
109 |
|
empreinte_export.py
CHANGED
@@ -32,7 +32,7 @@ def display_cf_comparison():
|
|
32 |
|
33 |
html_content = f"""
|
34 |
<div style='display: flex; align-items: center;'>
|
35 |
-
<
|
36 |
<img src='data:image/svg+xml;base64,{svg_base64}' alt='svg' width='15' height='15' style='margin-left: 10px;'>
|
37 |
</div>
|
38 |
<br>
|
@@ -51,7 +51,7 @@ def display_cf_comparison():
|
|
51 |
html_content += f"<p>- Empreinte serveur (via CodeCarbon) : <b>{serveur_emission*1000:.3f}</b> g eq. CO2 ({pourcentage_serveur:.2%})</p>"
|
52 |
html_content += f"<p>- Empreinte IA (via EcoLogits) : <b>{emission_api*1000:.3f}</b> g eq. CO2 ({pourcentage_api:.2%})</p>"
|
53 |
|
54 |
-
html_content += "<
|
55 |
html_content += """
|
56 |
<div style='display: flex; justify-content: space-around;'>
|
57 |
"""
|
@@ -105,14 +105,38 @@ def get_carbon_footprint_html():
|
|
105 |
|
106 |
table = get_table_empreintes_detailed()
|
107 |
table.replace({0.00: '-'}, inplace=True)
|
108 |
-
styled_df = table[['Consommation Totale']].rename(columns={'Consommation Totale': 'Consommation
|
109 |
-
styled_df = styled_df.style.applymap(color_scale, subset=['Consommation
|
110 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
111 |
|
112 |
html_content += """
|
113 |
-
|
114 |
"""
|
115 |
-
html_content += styled_df.to_html()
|
116 |
|
117 |
serveur_emission = st.session_state['emission'].stop()
|
118 |
emission_api = sum([value["el"] for value in st.session_state["partial_emissions"].values()])
|
@@ -123,17 +147,18 @@ def get_carbon_footprint_html():
|
|
123 |
pourcentage_serveur = serveur_emission / total_emission
|
124 |
|
125 |
df = pd.DataFrame({"Catégorie": ["Identification + dessin", "IA (extraction pp + dialogue)"], "valeur": [pourcentage_serveur, pourcentage_api]})
|
|
|
|
|
126 |
base = alt.Chart(df).encode(
|
127 |
theta=alt.Theta(field="valeur", type="quantitative", stack=True),
|
128 |
-
color=alt.Color(field="Catégorie", type="nominal")
|
129 |
)
|
130 |
|
131 |
pie = base.mark_arc(outerRadius=100)
|
132 |
-
text = base.mark_text(radius=
|
133 |
|
134 |
chart = alt.layer(pie, text, data=df).resolve_scale(theta="independent")
|
135 |
|
136 |
-
|
137 |
html_content += """
|
138 |
<h2>SYNTHESE (Dialogue IA et non IA)</h2>
|
139 |
"""
|
@@ -141,7 +166,7 @@ def get_carbon_footprint_html():
|
|
141 |
with open("chart.png", "rb") as image_file:
|
142 |
encoded_image = base64.b64encode(image_file.read()).decode()
|
143 |
|
144 |
-
html_content += f'<img src="data:image/png;base64,{encoded_image}" alt="Pie chart">'
|
145 |
|
146 |
return html_content
|
147 |
|
|
|
32 |
|
33 |
html_content = f"""
|
34 |
<div style='display: flex; align-items: center;'>
|
35 |
+
<h4 style='margin: 0;'>Votre consommation Carbone</h4>
|
36 |
<img src='data:image/svg+xml;base64,{svg_base64}' alt='svg' width='15' height='15' style='margin-left: 10px;'>
|
37 |
</div>
|
38 |
<br>
|
|
|
51 |
html_content += f"<p>- Empreinte serveur (via CodeCarbon) : <b>{serveur_emission*1000:.3f}</b> g eq. CO2 ({pourcentage_serveur:.2%})</p>"
|
52 |
html_content += f"<p>- Empreinte IA (via EcoLogits) : <b>{emission_api*1000:.3f}</b> g eq. CO2 ({pourcentage_api:.2%})</p>"
|
53 |
|
54 |
+
html_content += "<h4>Votre équivalence</h4>"
|
55 |
html_content += """
|
56 |
<div style='display: flex; justify-content: space-around;'>
|
57 |
"""
|
|
|
105 |
|
106 |
table = get_table_empreintes_detailed()
|
107 |
table.replace({0.00: '-'}, inplace=True)
|
108 |
+
styled_df = table[['Consommation Totale']].rename(columns={'Consommation Totale': 'Consommation totale (g eqCo2)'})
|
109 |
+
styled_df = styled_df.style.applymap(color_scale, subset=['Consommation totale (g eqCo2)'])
|
110 |
|
111 |
+
html_content += """
|
112 |
+
<style>
|
113 |
+
.centered-table {
|
114 |
+
margin-left: auto;
|
115 |
+
margin-right: auto;
|
116 |
+
border-collapse: collapse;
|
117 |
+
width: 80%;
|
118 |
+
}
|
119 |
+
.centered-table th, .centered-table td {
|
120 |
+
border: 1px solid #ddd;
|
121 |
+
padding: 8px;
|
122 |
+
text-align: left;
|
123 |
+
}
|
124 |
+
.centered-table th {
|
125 |
+
background-color: #f2f2f2;
|
126 |
+
}
|
127 |
+
</style>
|
128 |
+
"""
|
129 |
+
|
130 |
+
html_content += """
|
131 |
+
<h2>DÉTAIL PAR TÂCHE</h2>
|
132 |
+
<div style="overflow-x:auto;">
|
133 |
+
"""
|
134 |
+
|
135 |
+
html_content += styled_df.set_table_attributes('class="centered-table"').to_html()
|
136 |
|
137 |
html_content += """
|
138 |
+
</div>
|
139 |
"""
|
|
|
140 |
|
141 |
serveur_emission = st.session_state['emission'].stop()
|
142 |
emission_api = sum([value["el"] for value in st.session_state["partial_emissions"].values()])
|
|
|
147 |
pourcentage_serveur = serveur_emission / total_emission
|
148 |
|
149 |
df = pd.DataFrame({"Catégorie": ["Identification + dessin", "IA (extraction pp + dialogue)"], "valeur": [pourcentage_serveur, pourcentage_api]})
|
150 |
+
color_scale_alt = alt.Scale(domain=['Identification + dessin', 'IA (extraction pp + dialogue)'], range=['#011166', '#63abdf'])
|
151 |
+
|
152 |
base = alt.Chart(df).encode(
|
153 |
theta=alt.Theta(field="valeur", type="quantitative", stack=True),
|
154 |
+
color=alt.Color(field="Catégorie", type="nominal",scale=color_scale_alt)
|
155 |
)
|
156 |
|
157 |
pie = base.mark_arc(outerRadius=100)
|
158 |
+
text = base.mark_text(radius=150, fill="black",align='center', baseline='middle',fontSize=14).encode(alt.Text(field="valeur", type="quantitative", format=".2%"))
|
159 |
|
160 |
chart = alt.layer(pie, text, data=df).resolve_scale(theta="independent")
|
161 |
|
|
|
162 |
html_content += """
|
163 |
<h2>SYNTHESE (Dialogue IA et non IA)</h2>
|
164 |
"""
|
|
|
166 |
with open("chart.png", "rb") as image_file:
|
167 |
encoded_image = base64.b64encode(image_file.read()).decode()
|
168 |
|
169 |
+
html_content += f'<div style="text-align:center;"><img src="data:image/png;base64,{encoded_image}" alt="Pie chart"></div>'
|
170 |
|
171 |
return html_content
|
172 |
|
partie_prenante_carte.py
CHANGED
@@ -337,7 +337,7 @@ def display_pp():
|
|
337 |
st.session_state["not_pp"] = ""
|
338 |
|
339 |
|
340 |
-
st.
|
341 |
#set brand name and description
|
342 |
brand_name = st.text_input("Nom de la marque", st.session_state["Nom de la marque"])
|
343 |
st.session_state["Nom de la marque"] = brand_name
|
|
|
337 |
st.session_state["not_pp"] = ""
|
338 |
|
339 |
|
340 |
+
st.title("IDENTIFIER ET ANIMER VOS PARTIES PRENANTES")
|
341 |
#set brand name and description
|
342 |
brand_name = st.text_input("Nom de la marque", st.session_state["Nom de la marque"])
|
343 |
st.session_state["Nom de la marque"] = brand_name
|
temp.html
CHANGED
The diff for this file is too large to render.
See raw diff
|
|