File size: 27,396 Bytes
95248d4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
import streamlit as st

st.set_page_config(page_title="AI Tool Integration Evaluator", layout="centered")

custom_css = """

<style>

@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&display=swap');



html, body, [class*="st-"], .stMarkdown, p, h1, h2, h3, h4, h5, h6, label, div {

    font-family: 'Inter', sans-serif !important;

    color: #00205b !important;

}

h1 { font-size: 2.2rem !important; }

h2 { font-size: 1.8rem !important; }

h3 { font-size: 1.5rem !important; font-weight: 600 !important; }

p, .stMarkdown p { font-size: 1.15rem !important; }

.stRadio label p { font-size: 1.15rem !important; }

.stNumberInput input { font-size: 1.15rem !important; color: #00205b !important; }

[data-testid="stMetricValue"] { font-size: 2rem !important; color: #00205b !important; }

[data-testid="stMetricLabel"] { font-size: 1.2rem !important; color: #00205b !important; }

</style>

"""
st.markdown(custom_css, unsafe_allow_html=True)

if "step" not in st.session_state: st.session_state.step = 0
if "N" not in st.session_state: st.session_state.N = 0
if "U" not in st.session_state: st.session_state.U = 0
if "model_choice" not in st.session_state: st.session_state.model_choice = ""
if "FEin" not in st.session_state: st.session_state.FEin = 0.0
if "FEout" not in st.session_state: st.session_state.FEout = 0.0
if "Tin" not in st.session_state: st.session_state.Tin = 0
if "Tout" not in st.session_state: st.session_state.Tout = 0
if "Tin_type" not in st.session_state: st.session_state.Tin_type = ""
if "Tout_type" not in st.session_state: st.session_state.Tout_type = ""
if "R" not in st.session_state: st.session_state.R = 0
if "F" not in st.session_state: st.session_state.F = 0
if "G" not in st.session_state: st.session_state.G = 0
if "testing" not in st.session_state: st.session_state.testing = 0
if "dev" not in st.session_state: st.session_state.dev = 0
if "nb_projects_pod" not in st.session_state: st.session_state.nb_projects_pod = 1
if "needs_web_interface" not in st.session_state: st.session_state.needs_web_interface = "No"
if "business_impact" not in st.session_state: st.session_state.business_impact = ""
if "alternative_tool" not in st.session_state: st.session_state.alternative_tool = ""
if "expertise_risk" not in st.session_state: st.session_state.expertise_risk = ""
if "training_required" not in st.session_state: st.session_state.training_required = ""
if "Tform" not in st.session_state: st.session_state.Tform = 0.0
if "Treel" not in st.session_state: st.session_state.Treel = 0.0
if "Tia" not in st.session_state: st.session_state.Tia = 0.0
if "Tvv" not in st.session_state: st.session_state.Tvv = 0.0
if "Tvvia" not in st.session_state: st.session_state.Tvvia = 0.0
if "data_classification" not in st.session_state: st.session_state.data_classification = ""
if "nogo" not in st.session_state: st.session_state.nogo = False
if "ai_emission" not in st.session_state: st.session_state.ai_emission = 0.0
if "price_per_year" not in st.session_state: st.session_state.price_per_year = 0.0


def next_step():
    st.session_state.step += 1


def get_emission_visual(emission_g):
    emission_kg = emission_g / 1000.0

    if emission_kg < 1:
        text = "**Less than 1 kg CO₂eq**: Equivalent to the emissions of one passenger flying ~10 km in an A320neo (40 seconds)."
    elif emission_kg < 5:
        text = "**1 to 5 kg CO₂eq**: Equivalent to a standard car commute from Toulouse city center to the Airbus Blagnac campus."
    elif emission_kg < 10:
        text = "**5 to 10 kg CO₂eq**: Equivalent to the emissions of one passenger flying a very short route (~100 km)."
    elif emission_kg < 15:
        text = "**10 to 15 kg CO₂eq**: Equivalent to the manufacturing of a standard A320 passenger cabin window."
    elif emission_kg < 20:
        text = "**15 to 20 kg CO₂eq**: Equivalent to the combustion of about 5 to 6 liters of aviation fuel (Jet A-1)."
    elif emission_kg < 25:
        text = "**20 to 25 kg CO₂eq**: Equivalent to running an A320's APU on the ground for about 15 minutes."
    elif emission_kg < 30:
        text = "**25 to 30 kg CO₂eq**: Equivalent to the emissions of one passenger on a short regional flight (Toulouse to Lyon)."
    elif emission_kg < 35:
        text = "**30 to 35 kg CO₂eq**: Equivalent to the emissions of an A320neo operating at full takeoff thrust for just 5 seconds."
    elif emission_kg < 40:
        text = "**35 to 40 kg CO₂eq**: Equivalent to the fuel emissions of an Airbus Beluga taxiing on the tarmac for a few minutes."
    elif emission_kg < 45:
        text = "**40 to 45 kg CO₂eq**: Equivalent to the emissions of an A320 family aircraft running its engines at idle for about 90 seconds."
    elif emission_kg <= 50:
        text = "**45 to 50 kg CO₂eq**: Equivalent to the emissions of one passenger flying from Toulouse to Paris (entire flight)."
    else:
        text = "🛑 **More than 50 kg CO₂eq**: Exceeds a one-way flight from Toulouse to Paris per passenger. This is a massive impact and potentially a NO-GO for a single background IT tool."

    pos = min((emission_kg / 50.0) * 100, 100)

    html = f"""

    <div style="width: 100%; margin-top: 10px; margin-bottom: 20px; padding: 20px; background-color: #f0f4f8; border-radius: 10px; border-left: 5px solid #00205b;">

        <p style="font-weight: 600; margin-bottom: 15px; font-size: 1.1rem; color: #00205b;">Environmental Impact Scale (0 to 50+ kg) :</p>

        <div style="position: relative; width: 100%; height: 20px; background: linear-gradient(to right, #4CAF50 0%, #8BC34A 20%, #FFEB3B 40%, #FF9800 60%, #F44336 80%, #b71c1c 100%); border-radius: 10px; box-shadow: inset 0 1px 3px rgba(0,0,0,0.2);">

        </div>

        <div style="position: relative; width: 100%; height: 25px;">

            <div style="position: absolute; left: {pos}%; top: -25px; transform: translateX(-50%); font-size: 24px; text-shadow: 0px 2px 4px rgba(0,0,0,0.3);">

                📍

            </div>

        </div>

        <p style="margin-top: 10px; font-size: 1.05rem; color: #333; line-height: 1.5;">

            {text}

        </p>

    </div>

    """
    return html

if st.session_state.step > 0:
    st.title("AI Tool Integration Evaluator")

if st.session_state.step == 0:
    st.title("Welcome to the AI Tool Integration Evaluator")
    st.markdown(
        "### This tool aims to evaluate the environmental, financial, and operational impacts of an AI-driven tool.")
    st.write(
        "While Artificial Intelligence is a highly effective technology capable of driving major innovations, "
        "it also represents a significant environmental footprint and operational cost. "
        "Before investing resources into development, it is crucial to evaluate whether its integration is truly indispensable."
    )
    st.write(
        "This questionnaire will guide you step-by-step to assess the viability and true cost of your AI use case.")
    st.divider()
    if st.button("Start Questionnaire"):
        next_step()
        st.rerun()

elif st.session_state.step == 1:
    st.subheader("Question 1")
    st.write("**How many users will use the tool?**")
    with st.form(key="form_q1"):
        user_input = st.number_input("Number of users", min_value=1, value=1, step=1, label_visibility="collapsed")
        if st.form_submit_button("Next"):
            st.session_state.N = user_input
            next_step()
            st.rerun()

elif st.session_state.step == 2:
    st.subheader("Question 2")
    st.write("**What will be the use frequency?**")
    freq_values = {"Daily": 200, "Weekly": 50, "Monthly": 10, "Annual": 2}
    with st.form(key="form_q2"):
        choice = st.radio("Select frequency:", options=list(freq_values.keys()), label_visibility="collapsed")
        if st.form_submit_button("Next"):
            st.session_state.U = freq_values[choice]
            next_step()
            st.rerun()

elif st.session_state.step == 3:
    st.subheader("Question 3")
    st.write("**Which AI model will be integrated?**")
    model_values = {
        "Light model - SLM (Llama3, Phi-3)": {"FEin": 0.005 / 1000, "FEout": 0.015 / 1000},
        "Medium model (Claude Sonnet, Gemini Flash, Mistral 8x7b)": {"FEin": 0.03 / 1000, "FEout": 0.08 / 1000},
        "Large model - LLM (GPT4, Gemini Pro)": {"FEin": 0.15 / 1000, "FEout": 0.45 / 1000}
    }
    with st.form(key="form_q3"):
        choice = st.radio("Select model:", options=list(model_values.keys()), label_visibility="collapsed")
        if st.form_submit_button("Next"):
            st.session_state.model_choice = choice
            st.session_state.FEin = model_values[choice]["FEin"]
            st.session_state.FEout = model_values[choice]["FEout"]
            next_step()
            st.rerun()

elif st.session_state.step == 4:
    st.subheader("Question 4")
    st.write("**What type of data will be provided to the AI?**")
    tin_values = {
        "Question (sentence)": 50, "Picture": 765, "Document (less than 15 pages)": 2000,
        "Document (more than 15 pages)": 15000, "Video": 30000
    }
    with st.form(key="form_q4"):
        choice = st.radio("Select data type:", options=list(tin_values.keys()), label_visibility="collapsed")
        if st.form_submit_button("Next"):
            st.session_state.Tin = tin_values[choice]
            st.session_state.Tin_type = choice
            next_step()
            st.rerun()

elif st.session_state.step == 5:
    st.subheader("Question 5")
    st.write("**What type of data will be generated by the AI?**")
    tout_values = {
        "Sentence (10-20 words)": 50, "text": 350, "function (code)": 600,
        "document (less than 15 pages)": 1500, "document (more than 15 pages)": 20000,
        "picture": 4000, "video": 50000
    }
    with st.form(key="form_q5"):
        choice = st.radio("Select generated data type:", options=list(tout_values.keys()), label_visibility="collapsed")
        if st.form_submit_button("Next"):
            st.session_state.Tout = tout_values[choice]
            st.session_state.Tout_type = choice
            next_step()
            st.rerun()

elif st.session_state.step == 6:
    st.subheader("Question 6")
    st.write("**How many AI calls will be made each time the tool is used?**")
    with st.form(key="form_q6"):
        user_input = st.number_input("Number of AI calls", min_value=1, value=1, step=1, label_visibility="collapsed")
        if st.form_submit_button("Next"):
            st.session_state.R = user_input
            next_step()
            st.rerun()

elif st.session_state.step == 7:
    st.subheader("Question 7")
    st.write("**How will the AI call be triggered?**")
    f_values = {"User on-demand": 1, "Automatic / Background": 5}
    with st.form(key="form_q7"):
        choice = st.radio("Select trigger type:", options=list(f_values.keys()), label_visibility="collapsed")
        if st.form_submit_button("Next"):
            st.session_state.F = f_values[choice]
            next_step()
            st.rerun()

elif st.session_state.step == 8:
    st.subheader("Question 8")
    st.write("**How will the tool be coded?**")
    g_values = {"Self-competencies or GenAI documentation": 1, "Gemini support": 10}
    with st.form(key="form_q8"):
        choice = st.radio("Select coding method:", options=list(g_values.keys()), label_visibility="collapsed")
        if st.form_submit_button("Next"):
            st.session_state.G = g_values[choice]
            next_step()
            st.rerun()

elif st.session_state.step == 9:
    st.subheader("Question 9")
    st.write("**How will you resolve code failures?**")
    with st.form(key="form_q9"):
        choice = st.radio("Select resolution method:", options=["Other tools", "With AI"], label_visibility="collapsed")
        if st.form_submit_button("Next"):
            if choice == "Other tools":
                st.session_state.testing = 0
                st.session_state.dev = 0
                st.session_state.step = 12
            else:
                st.session_state.step = 10
            st.rerun()

elif st.session_state.step == 10:
    st.subheader("Question 10")
    st.write("**Is AI generation required for every test of the tool?**")
    with st.form(key="form_q10"):
        choice = st.radio("Select:", options=["NO", "YES"], label_visibility="collapsed")
        if st.form_submit_button("Next"):
            if choice == "NO":
                st.session_state.testing = 0
                st.session_state.dev = 0
                st.session_state.step = 12
            else:
                st.session_state.step = 11
            st.rerun()

elif st.session_state.step == 11:
    st.subheader("Question 11")
    st.write("**What is the forecasted volume of requests per year (for development and testing phases)?**")
    with st.form(key="form_q11"):
        user_input = st.number_input("Number of requests", min_value=0, value=0, step=1, label_visibility="collapsed")
        if st.form_submit_button("Next"):
            st.session_state.testing = user_input
            st.session_state.dev = user_input
            st.session_state.step = 12
            st.rerun()

elif st.session_state.step == 12:
    st.subheader("Question 12")
    st.write("**Are there other projects within the Google Cloud POD that will be used?**")
    with st.form(key="form_q12"):
        choice = st.radio("Select:", options=["No", "Yes"], label_visibility="collapsed")
        if st.form_submit_button("Next"):
            if choice == "No":
                st.session_state.nb_projects_pod = 1
                st.session_state.step = 14
            else:
                st.session_state.step = 13
            st.rerun()

elif st.session_state.step == 13:
    st.subheader("Question 13")
    st.write("**How many projects are there within the POD?**")
    with st.form(key="form_q13"):
        user_input = st.number_input("Total projects", min_value=1, value=2, step=1, label_visibility="collapsed")
        if st.form_submit_button("Next"):
            st.session_state.nb_projects_pod = user_input
            st.session_state.step = 14
            st.rerun()

elif st.session_state.step == 14:
    st.subheader("Question 14")
    st.write("**Will the tool have a dedicated web interface that runs continuously?**")
    st.write("*(e.g., A custom dashboard or web app deployed on Cloud Run).*")
    with st.form(key="form_q14"):
        choice = st.radio("Select:", options=["Yes", "No"], label_visibility="collapsed")
        if st.form_submit_button("Next"):
            st.session_state.needs_web_interface = choice
            st.session_state.step = 15
            st.rerun()

elif st.session_state.step == 15:
    st.subheader("Question 15")
    st.write("**What is the business impact if this tool is not developed?**")
    options_impact = [
        "Slight (AI used for Document formatting, translate, generation of data not linked with the business)",
        "Significant (Major improvements, KPIs enhancement, time saving...)"
    ]
    with st.form(key="form_q15"):
        choice = st.radio("Select business impact:", options=options_impact, label_visibility="collapsed")
        if st.form_submit_button("Next"):
            st.session_state.business_impact = choice
            if choice == options_impact[0]:
                st.session_state.step = 17  # NO-GO
            else:
                st.session_state.step = 16
            st.rerun()

elif st.session_state.step == 16:
    st.subheader("Question 16")
    st.write("**Is there a tool other than AI capable of performing the task?**")
    with st.form(key="form_q16"):
        choice = st.radio("Select:", options=["Yes", "No"], label_visibility="collapsed")
        if st.form_submit_button("Next"):
            st.session_state.alternative_tool = choice
            if choice == "Yes":
                st.session_state.step = 17  # NO-GO
            else:
                st.session_state.step = 18
            st.rerun()

elif st.session_state.step == 17:
    st.header("🛑 NO-GO AI (Info)")
    st.info(
        "Based on your answers, AI might not be the recommended solution for this specific step. You will skip the remaining feasibility questions.")
    st.divider()
    if st.button("Continue (Skip next questions)"):
        st.session_state.nogo = True
        st.session_state.step = 27
        st.rerun()

elif st.session_state.step == 18:
    st.subheader("Question 17")
    st.write("**Does automation risk causing teams to lose their manual expertise?**")
    with st.form(key="form_q18"):
        choice = st.radio("Select:", options=["Yes", "No"], label_visibility="collapsed")
        if st.form_submit_button("Next"):
            st.session_state.expertise_risk = choice
            if choice == "Yes":
                st.session_state.step = 17  # NO-GO
            else:
                st.session_state.step = 19
            st.rerun()

elif st.session_state.step == 19:
    st.subheader("Question 18")
    st.write("**Is training required before using the tool?**")
    with st.form(key="form_q19"):
        choice = st.radio("Select:", options=["Yes", "No"], label_visibility="collapsed")
        if st.form_submit_button("Next"):
            st.session_state.training_required = choice
            if choice == "No":
                st.session_state.Tform = 0.0
                st.session_state.step = 21
            else:
                st.session_state.step = 20
            st.rerun()

elif st.session_state.step == 20:
    st.subheader("Question 19")
    st.write("**What is the expected training duration for an individual (in hours)?**")
    with st.form(key="form_q20"):
        user_input = st.number_input("Training duration (hours)", min_value=0.0, value=1.0, step=0.5,
                                     label_visibility="collapsed")
        if st.form_submit_button("Next"):
            st.session_state.Tform = user_input
            st.session_state.step = 21
            st.rerun()

elif st.session_state.step == 21:
    st.subheader("Question 20")
    st.write("**How many hours does it currently take to perform this task manually (without AI)?**")
    with st.form(key="form_q21"):
        user_input = st.number_input("Current time (hours)", min_value=0.0, value=1.0, step=0.5,
                                     label_visibility="collapsed")
        if st.form_submit_button("Next"):
            st.session_state.Treel = user_input
            st.session_state.step = 22
            st.rerun()

elif st.session_state.step == 22:
    st.subheader("Question 21")
    st.write("**What is the estimated time (in hours) to complete this task using the AI tool?**")
    with st.form(key="form_q22"):
        user_input = st.number_input("Time with AI (hours)", min_value=0.0, value=0.5, step=0.5,
                                     label_visibility="collapsed")
        if st.form_submit_button("Next"):
            st.session_state.Tia = user_input
            st.session_state.step = 23
            st.rerun()

elif st.session_state.step == 23:
    st.subheader("Question 22")
    st.write("**Are the AI-generated data intended to be certified and thus go through a V&V process?**")
    with st.form(key="form_q23"):
        choice = st.radio("Select:", options=["Yes", "No"], label_visibility="collapsed")
        if st.form_submit_button("Next"):
            if choice == "Yes":
                st.session_state.step = 24
            else:
                st.session_state.Tvv = 0.0
                st.session_state.Tvvia = 0.0
                st.session_state.step = 26
            st.rerun()

elif st.session_state.step == 24:
    st.subheader("Question 23")
    st.write("**What is the current time required for the V&V process (in hours)?**")
    with st.form(key="form_q24"):
        user_input = st.number_input("Current V&V time (hours)", min_value=0.0, value=1.0, step=0.5,
                                     label_visibility="collapsed")
        if st.form_submit_button("Next"):
            st.session_state.Tvv = user_input
            st.session_state.step = 25
            st.rerun()

elif st.session_state.step == 25:
    st.subheader("Question 24")
    st.write("**What is the expected time for the V&V process for AI-generated data (in hours)?**")
    with st.form(key="form_q25"):
        user_input = st.number_input("V&V time for AI data (hours)", min_value=0.0, value=1.0, step=0.5,
                                     label_visibility="collapsed")
        if st.form_submit_button("Next"):
            st.session_state.Tvvia = user_input
            st.session_state.step = 26
            st.rerun()

elif st.session_state.step == 26:
    st.subheader("Question 25")
    st.write("**What is the classification of the input and output data?**")
    options_class = ["Airbus Amber / without any classification", "Airbus RED"]
    with st.form(key="form_q26"):
        choice = st.radio("Select data classification:", options=options_class, label_visibility="collapsed")
        if st.form_submit_button("Next"):
            st.session_state.data_classification = choice
            if choice == "Airbus RED":
                st.session_state.step = 17  # NO-GO
            else:
                st.session_state.step = 27
            st.rerun()

elif st.session_state.step == 27:

    model = st.session_state.model_choice
    Tin = st.session_state.Tin
    Tout = st.session_state.Tout
    Tin_type = st.session_state.Tin_type
    Tout_type = st.session_state.Tout_type
    N = st.session_state.N
    U = st.session_state.U
    R = st.session_state.R
    F = st.session_state.F
    dev = st.session_state.dev
    testing = st.session_state.testing
    FEin = st.session_state.FEin
    FEout = st.session_state.FEout
    G = st.session_state.G
    nb_projects_pod = max(st.session_state.nb_projects_pod, 1)

    Pin = 0.0
    Pout = 0.0
    if model == "Light model - SLM (Llama3, Phi-3)":
        Pin = 0.3 * Tin / 1_000_000
        Pout = 0.7 * Tout / 1_000_000
    elif model == "Medium model (Claude Sonnet, Gemini Flash, Mistral 8x7b)":
        Pin = 1.5 * Tin / 1_000_000
        Pout = 7.5 * Tout / 1_000_000
    elif model == "Large model - LLM (GPT4, Gemini Pro)":
        Pin = 2.0 * Tin / 1_000_000 if Tin <= 200000 else 4.0 * Tin / 1_000_000
        Pout = 12.0 * Tout / 1_000_000 if Tout <= 200000 else 18.0 * Tout / 1_000_000

    execution_times = {
        "Sentence (10-20 words)": {"Light model - SLM (Llama3, Phi-3)": 0.80,
                                   "Medium model (Claude Sonnet, Gemini Flash, Mistral 8x7b)": 0.5,
                                   "Large model - LLM (GPT4, Gemini Pro)": 2},
        "text": {"Light model - SLM (Llama3, Phi-3)": 2.50,
                 "Medium model (Claude Sonnet, Gemini Flash, Mistral 8x7b)": 1.5,
                 "Large model - LLM (GPT4, Gemini Pro)": 5},
        "function (code)": {"Light model - SLM (Llama3, Phi-3)": 5.50,
                            "Medium model (Claude Sonnet, Gemini Flash, Mistral 8x7b)": 3.0,
                            "Large model - LLM (GPT4, Gemini Pro)": 11},
        "document (less than 15 pages)": {"Light model - SLM (Llama3, Phi-3)": 80.0,
                                          "Medium model (Claude Sonnet, Gemini Flash, Mistral 8x7b)": 45.0,
                                          "Large model - LLM (GPT4, Gemini Pro)": 160},
        "document (more than 15 pages)": {"Light model - SLM (Llama3, Phi-3)": 150.0,
                                          "Medium model (Claude Sonnet, Gemini Flash, Mistral 8x7b)": 85.0,
                                          "Large model - LLM (GPT4, Gemini Pro)": 300},
        "picture": {"Light model - SLM (Llama3, Phi-3)": 2.0,
                    "Medium model (Claude Sonnet, Gemini Flash, Mistral 8x7b)": 10.0,
                    "Large model - LLM (GPT4, Gemini Pro)": 15},
        "video": {"Light model - SLM (Llama3, Phi-3)": 120.0,
                  "Medium model (Claude Sonnet, Gemini Flash, Mistral 8x7b)": 160.0,
                  "Large model - LLM (GPT4, Gemini Pro)": 180}
    }

    if Tout_type and model:
        st.session_state.time_exec = execution_times[Tout_type][model]
        st.session_state.Prun = (0.0000265 * st.session_state.time_exec) + (0.40 / 1_000_000)

    total_calls_year = (N * U * R * F) + G + testing

    inference_emission = total_calls_year * ((Tin * FEin) + (Tout * FEout))
    inference_cost = total_calls_year * (st.session_state.Prun + Pin + Pout)

    data_weights = {
        "Question (sentence)": 0.001, "Sentence (10-20 words)": 0.001, "text": 0.01, "function (code)": 0.01,
        "Picture": 2.0, "picture": 2.0, "Document (less than 15 pages)": 1.0, "document (less than 15 pages)": 1.0,
        "Document (more than 15 pages)": 5.0, "document (more than 15 pages)": 5.0, "Video": 50.0, "video": 50.0
    }
    size_in_mb = data_weights.get(Tin_type, 0.1)
    size_out_mb = data_weights.get(Tout_type, 0.1)

    total_data_gb_year = (total_calls_year * (size_in_mb + size_out_mb)) / 1000.0

    network_cost = total_data_gb_year * 0.12
    network_emission = total_data_gb_year * 50.0

    infra_cost = 0.0
    infra_emission = 0.0

    infra_cost += (132.0 / nb_projects_pod)
    infra_emission += (5500.0 / nb_projects_pod)

    if st.session_state.needs_web_interface == "Yes":
        infra_cost += 350.0
        infra_emission += 12000.0

    st.session_state.ai_emission = inference_emission + network_emission + infra_emission
    st.session_state.price_per_year = inference_cost + network_cost + infra_cost

    annual_time_savings = ((st.session_state.Treel - st.session_state.Tia) + (
                st.session_state.Tvv - st.session_state.Tvvia) - st.session_state.Tform) * st.session_state.U
    tool_implementation_time = st.session_state.Tform + st.session_state.Tia + st.session_state.Tvvia

    st.header("Final Evaluation Results")

    if not st.session_state.nogo:
        st.success("** Go AI but keep in mind...**")
    else:
        st.warning(
            "**Note**: You bypassed some steps due to a NO-GO AI condition. Here are your partial/simulated metrics.")

    col1, col2 = st.columns(2)

    with col1:
        st.metric(label="Price per year", value=f"€ {st.session_state.price_per_year:,.2f}")
        st.metric(label="Annual Time Savings", value=f"{annual_time_savings:,.2f} h")

    with col2:
        st.metric(label="AI Emission", value=f"{st.session_state.ai_emission:,.2f} gCO₂eq")
        st.metric(label="Tool Implementation Time", value=f"{tool_implementation_time:,.2f} h")

    st.markdown(get_emission_visual(st.session_state.ai_emission), unsafe_allow_html=True)

    st.divider()

    if st.button("Start Over"):
        for key in list(st.session_state.keys()):
            del st.session_state[key]
        st.rerun()