aimodelshare 0.3.7__py3-none-any.whl → 0.3.94__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. aimodelshare/moral_compass/__init__.py +51 -2
  2. aimodelshare/moral_compass/api_client.py +92 -4
  3. aimodelshare/moral_compass/apps/__init__.py +36 -16
  4. aimodelshare/moral_compass/apps/ai_consequences.py +98 -88
  5. aimodelshare/moral_compass/apps/bias_detective_ca.py +2722 -0
  6. aimodelshare/moral_compass/apps/bias_detective_en.py +2722 -0
  7. aimodelshare/moral_compass/apps/bias_detective_part1.py +2722 -0
  8. aimodelshare/moral_compass/apps/bias_detective_part2.py +2465 -0
  9. aimodelshare/moral_compass/apps/bias_detective_part_es.py +2722 -0
  10. aimodelshare/moral_compass/apps/ethical_revelation.py +237 -147
  11. aimodelshare/moral_compass/apps/fairness_fixer.py +1839 -859
  12. aimodelshare/moral_compass/apps/fairness_fixer_ca.py +1869 -0
  13. aimodelshare/moral_compass/apps/fairness_fixer_en.py +1869 -0
  14. aimodelshare/moral_compass/apps/fairness_fixer_es.py +1869 -0
  15. aimodelshare/moral_compass/apps/judge.py +130 -143
  16. aimodelshare/moral_compass/apps/justice_equity_upgrade.py +793 -831
  17. aimodelshare/moral_compass/apps/justice_equity_upgrade_ca.py +815 -0
  18. aimodelshare/moral_compass/apps/justice_equity_upgrade_en.py +815 -0
  19. aimodelshare/moral_compass/apps/justice_equity_upgrade_es.py +815 -0
  20. aimodelshare/moral_compass/apps/mc_integration_helpers.py +227 -745
  21. aimodelshare/moral_compass/apps/model_building_app_ca.py +4399 -0
  22. aimodelshare/moral_compass/apps/model_building_app_ca_final.py +3899 -0
  23. aimodelshare/moral_compass/apps/model_building_app_en.py +4167 -0
  24. aimodelshare/moral_compass/apps/model_building_app_en_final.py +3869 -0
  25. aimodelshare/moral_compass/apps/model_building_app_es.py +4351 -0
  26. aimodelshare/moral_compass/apps/model_building_app_es_final.py +3899 -0
  27. aimodelshare/moral_compass/apps/model_building_game.py +4211 -935
  28. aimodelshare/moral_compass/apps/moral_compass_challenge.py +195 -95
  29. aimodelshare/moral_compass/apps/what_is_ai.py +126 -117
  30. aimodelshare/moral_compass/challenge.py +98 -17
  31. {aimodelshare-0.3.7.dist-info → aimodelshare-0.3.94.dist-info}/METADATA +1 -1
  32. {aimodelshare-0.3.7.dist-info → aimodelshare-0.3.94.dist-info}/RECORD +35 -19
  33. aimodelshare/moral_compass/apps/bias_detective.py +0 -714
  34. {aimodelshare-0.3.7.dist-info → aimodelshare-0.3.94.dist-info}/WHEEL +0 -0
  35. {aimodelshare-0.3.7.dist-info → aimodelshare-0.3.94.dist-info}/licenses/LICENSE +0 -0
  36. {aimodelshare-0.3.7.dist-info → aimodelshare-0.3.94.dist-info}/top_level.txt +0 -0
@@ -5,6 +5,7 @@ Updated with i18n support for English (en), Spanish (es), and Catalan (ca).
5
5
  import contextlib
6
6
  import os
7
7
  import gradio as gr
8
+ from functools import lru_cache
8
9
 
9
10
  # -------------------------------------------------------------------------
10
11
  # TRANSLATION CONFIGURATION
@@ -33,7 +34,7 @@ TRANSLATIONS = {
33
34
  "s2_ex_li2": "• Based on this, the judge kept her in prison",
34
35
  "s2_ex_li3": "• In reality, Sarah would have rebuilt her life and never committed another crime",
35
36
  "s2_cost_title": "The Human Cost:",
36
- "s2_cost_li1": "Innocent people spend unnecessary time in prison",
37
+ "s2_cost_li1": "People who would not re-offend spend unnecessary time in prison",
37
38
  "s2_cost_li2": "Families are separated for longer than needed",
38
39
  "s2_cost_li3": "Job opportunities and rehabilitation are delayed",
39
40
  "s2_cost_li4": "Trust in the justice system erodes",
@@ -47,7 +48,7 @@ TRANSLATIONS = {
47
48
  "s3_def": "A <b>false negative</b> occurs when the AI predicts someone is <b style='color:#16a34a;'>LOW RISK</b>, but they DO actually re-offend after being released.",
48
49
  "s3_ex_title": "Example Scenario:",
49
50
  "s3_ex_li1": "• James was flagged as <b style='color:#16a34a;'>LOW RISK</b>",
50
- "s3_ex_li2": "• Based on this, the judge released him",
51
+ "s3_ex_li2": "• Based on this, the judge released him on parole",
51
52
  "s3_ex_li3": "• Unfortunately, James did commit another serious crime",
52
53
  "s3_cost_title": "The Human Cost:",
53
54
  "s3_cost_li1": "New victims of preventable crimes",
@@ -62,14 +63,14 @@ TRANSLATIONS = {
62
63
  "s4_card_title": "Every AI System Makes Trade-offs",
63
64
  "s4_p1": "Here's the harsh reality: <b>No AI system can eliminate both types of errors.</b>",
64
65
  "s4_sub1": "<b>If you make the AI more cautious:</b>",
65
- "s4_sub1_li1": "✓ Fewer false negatives (fewer dangerous people released)",
66
- "s4_sub1_li2": "✗ More false positives (more innocent people kept in prison)",
66
+ "s4_sub1_li1": "✓ Fewer false negatives (fewer people who pose a real risk are released)",
67
+ "s4_sub1_li2": "✗ More false positives (more people who would not re-offend kept in prison)",
67
68
  "s4_sub2": "<b>If you make the AI more lenient:</b>",
68
- "s4_sub2_li1": "✓ Fewer false positives (more innocent people freed)",
69
- "s4_sub2_li2": "✗ More false negatives (more dangerous people released)",
69
+ "s4_sub2_li1": "✓ Fewer false positives (more people who would not re-offend are released)",
70
+ "s4_sub2_li2": "✗ More false negatives (more people who pose a real risk released)",
70
71
  "s4_eth_title": "The Ethical Question:",
71
72
  "s4_q1": "Which mistake is worse?",
72
- "s4_q2": "• Keeping innocent people in prison?<br>• Or releasing dangerous individuals?",
73
+ "s4_q2": "• Keeping people who would not re-offend in prison?<br>• Or releasing individuals who pose a real risk?",
73
74
  "s4_conc": "<b>There is no universally 'correct' answer.</b> Different societies, legal systems, and ethical frameworks weigh these trade-offs differently.",
74
75
  "s4_final": "<b>This is why understanding AI is crucial.</b> We need to know how these systems work so we can make informed decisions about when and how to use them.",
75
76
  "btn_cont": "Continue to Learn About AI ▶️",
@@ -87,142 +88,142 @@ TRANSLATIONS = {
87
88
  "intro_box": "Acabas de tomar decisiones basadas en las predicciones de una IA.<br>Pero los sistemas de IA no son perfectos. Exploremos qué sucede cuando cometen errores.",
88
89
  "loading": "⏳ Cargando...",
89
90
  # Step 1
90
- "s1_title": "Las Apuestas de las Predicciones de IA",
91
- "s1_p1": "En el ejercicio anterior, confiaste en un sistema de IA para predecir qué acusados tenían un riesgo <b>Alto</b>, <b>Medio</b> o <b>Bajo</b> de reincidir.",
91
+ "s1_title": "Los riesgos de las predicciones de IA",
92
+ "s1_p1": "En el ejercicio anterior, confiaste en un sistema de IA para predecir qué personas presas tenían un riesgo <b>alto</b>, <b>medio</b> o <b>bajo</b> de reincidir.",
92
93
  "s1_p2": "<b>¿Pero qué pasa si esas predicciones eran incorrectas?</b>",
93
94
  "s1_p3": "Los sistemas de IA cometen dos tipos de errores que tienen consecuencias muy diferentes:",
94
- "s1_li1": "<b>Falsos Positivos</b> - Predecir incorrectamente ALTO riesgo",
95
- "s1_li2": "<b>Falsos Negativos</b> - Predecir incorrectamente BAJO riesgo",
95
+ "s1_li1": "<b>Falsos positivos</b> - Predecir incorrectamente ALTO riesgo",
96
+ "s1_li2": "<b>Falsos negativos</b> - Predecir incorrectamente BAJO riesgo",
96
97
  "s1_p4": "Examinemos cada tipo de error y su impacto en el mundo real.",
97
- "btn_next_fp": "Siguiente: Falsos Positivos ▶️",
98
+ "btn_next_fp": "Siguiente: Falsos positivos ▶️",
98
99
  # Step 2
99
- "s2_title": "🔴 Falsos Positivos: Prediciendo Peligro Donde No Lo Hay",
100
- "s2_card_title": "¿Qué es un Falso Positivo?",
101
- "s2_def": "Un <b>falso positivo</b> ocurre cuando la IA predice que alguien es de <b style='color:#dc2626;'>ALTO RIESGO</b>, pero en realidad NO habría reincidido si fuera liberado.",
102
- "s2_ex_title": "Escenario de Ejemplo:",
100
+ "s2_title": "🔴 Falsos positivos: El riesgo inexistente",
101
+ "s2_card_title": "¿Qué es un falso positivo?",
102
+ "s2_def": "Un <b>falso positivo</b> ocurre cuando la IA predice que alguien es de <b style='color:#dc2626;'>ALTO RIESGO</b>, pero en realidad NO habría reincidido si hubiera sido puesto en libertad.",
103
+ "s2_ex_title": "Escenario de ejemplo:",
103
104
  "s2_ex_li1": "• Sarah fue marcada como <b style='color:#dc2626;'>ALTO RIESGO</b>",
104
- "s2_ex_li2": "• Basado en esto, el juez la mantuvo en prisión",
105
+ "s2_ex_li2": "• Basado en esto, el tribunal la mantuvo en prisión",
105
106
  "s2_ex_li3": "• En realidad, Sarah habría rehecho su vida y nunca habría cometido otro delito",
106
- "s2_cost_title": "El Costo Humano:",
107
- "s2_cost_li1": "Personas inocentes pasan tiempo innecesario en prisión",
107
+ "s2_cost_title": "El coste humano:",
108
+ "s2_cost_li1": "Personas que no reincidirían pasan tiempo innecesario en prisión",
108
109
  "s2_cost_li2": "Las familias son separadas por más tiempo del necesario",
109
110
  "s2_cost_li3": "Las oportunidades laborales y la rehabilitación se retrasan",
110
111
  "s2_cost_li4": "La confianza en el sistema judicial se erosiona",
111
112
  "s2_cost_li5": "Impacto desproporcionado en comunidades marginadas",
112
- "s2_key": "<b>Punto Clave:</b> Los falsos positivos significan que la IA está siendo <b>demasiado cautelosa</b>, manteniendo encerradas a personas que deberían estar libres.",
113
+ "s2_key": "<b>Punto clave:</b> Los falsos positivos significan que la IA está siendo <b>demasiado cautelosa</b>, manteniendo en prisión a personas que deberían ser puestas en libertad.",
113
114
  "btn_back": "◀️ Atrás",
114
- "btn_next_fn": "Siguiente: Falsos Negativos ▶️",
115
+ "btn_next_fn": "Siguiente: Falsos negativos ▶️",
115
116
  # Step 3
116
- "s3_title": "🔵 Falsos Negativos: No Detectando Peligro Real",
117
- "s3_card_title": "¿Qué es un Falso Negativo?",
118
- "s3_def": "Un <b>falso negativo</b> ocurre cuando la IA predice que alguien es de <b style='color:#16a34a;'>BAJO RIESGO</b>, pero SÍ reincide después de ser liberado.",
119
- "s3_ex_title": "Escenario de Ejemplo:",
117
+ "s3_title": "🔵 Falsos negativos: El riesgo no detectado",
118
+ "s3_card_title": "¿Qué es un falso negativo?",
119
+ "s3_def": "Un <b>falso negativo</b> ocurre cuando la IA predice que alguien es de <b style='color:#16a34a;'>BAJO RIESGO</b>, pero SÍ vuelve a cometer un delito después de ser liberado.",
120
+ "s3_ex_title": "Escenario de ejemplo:",
120
121
  "s3_ex_li1": "• James fue marcado como <b style='color:#16a34a;'>BAJO RIESGO</b>",
121
- "s3_ex_li2": "• Basado en esto, el juez lo liberó",
122
+ "s3_ex_li2": "• Basado en esto, el tribunal le concedió la libertad condicional",
122
123
  "s3_ex_li3": "• Desafortunadamente, James cometió otro delito grave",
123
- "s3_cost_title": "El Costo Humano:",
124
+ "s3_cost_title": "El coste humano:",
124
125
  "s3_cost_li1": "Nuevas víctimas de delitos prevenibles",
125
126
  "s3_cost_li2": "Pérdida de confianza pública en el sistema judicial",
126
- "s3_cost_li3": "Escrutinio mediático y reacciones contra los jueces",
127
- "s3_cost_li4": "Presión política para ser 'duro con el crimen'",
127
+ "s3_cost_li3": "Escrutinio mediático y reacciones contra los tribunales",
128
+ "s3_cost_li4": "Presión política para adoptar medidas severas contra la delincuencia.",
128
129
  "s3_cost_li5": "Daño potencial a comunidades y familias",
129
- "s3_key": "<b>Punto Clave:</b> Los falsos negativos significan que la IA está siendo <b>demasiado indulgente</b>, liberando a personas que representan un peligro real para la sociedad.",
130
- "btn_next_dil": "Siguiente: El Dilema ▶️",
130
+ "s3_key": "<b>Punto clave:</b> Los falsos negativos significan que la IA está siendo <b>demasiado indulgente</b>, poniendo en libertad a personas que representan un peligro real para la sociedad.",
131
+ "btn_next_dil": "Siguiente: El dilema ▶️",
131
132
  # Step 4
132
- "s4_title": "⚖️ El Equilibrio Imposible",
133
- "s4_card_title": "Todo Sistema de IA Hace Concesiones",
134
- "s4_p1": "Aquí está la dura realidad: <b>Ningún sistema de IA puede eliminar ambos tipos de errores.</b>",
133
+ "s4_title": "⚖️ El equilibrio imposible",
134
+ "s4_card_title": "Todo sistema de IA presenta un dilema",
135
+ "s4_p1": "Esta es la dura realidad: <b>Ningún sistema de IA puede eliminar ambos tipos de errores.</b>",
135
136
  "s4_sub1": "<b>Si haces que la IA sea más cautelosa:</b>",
136
- "s4_sub1_li1": "✓ Menos falsos negativos (menos personas peligrosas liberadas)",
137
- "s4_sub1_li2": "✗ Más falsos positivos (más personas inocentes en prisión)",
137
+ "s4_sub1_li1": "✓ Menos falsos negativos (menos personas que representan un peligro real liberadas)",
138
+ "s4_sub1_li2": "✗ Más falsos positivos (más personas que no reincidirían permanecen en prisión)",
138
139
  "s4_sub2": "<b>Si haces que la IA sea más indulgente:</b>",
139
- "s4_sub2_li1": "✓ Menos falsos positivos (más personas inocentes liberadas)",
140
- "s4_sub2_li2": "✗ Más falsos negativos (más personas peligrosas liberadas)",
141
- "s4_eth_title": "La Pregunta Ética:",
140
+ "s4_sub2_li1": "✓ Menos falsos positivos (más personas que no reincidirían son puestas en libertad)",
141
+ "s4_sub2_li2": "✗ Más falsos negativos (más personas que representan un peligro real liberadas son puestas en libertad)",
142
+ "s4_eth_title": "La pregunta ética:",
142
143
  "s4_q1": "¿Qué error es peor?",
143
- "s4_q2": "• ¿Mantener a personas inocentes en prisión?<br>• ¿O liberar a individuos peligrosos?",
144
- "s4_conc": "<b>No hay una respuesta universalmente 'correcta'.</b> Diferentes sociedades, sistemas legales y marcos éticos sopesan estas concesiones de manera diferente.",
144
+ "s4_q2": "• ¿Mantener a personas que no reincidirían en prisión?<br>• ¿O poner en libertad a personas que representan un peligro real?",
145
+ "s4_conc": "<b>No hay una respuesta universalmente 'correcta'.</b> Diferentes sociedades, sistemas legales y marcos éticos sopesan estos dilemas de manera diferente.",
145
146
  "s4_final": "<b>Por eso es crucial entender la IA.</b> Necesitamos saber cómo funcionan estos sistemas para tomar decisiones informadas sobre cuándo y cómo usarlos.",
146
- "btn_cont": "Continuar Aprendiendo Sobre IA ▶️",
147
+ "btn_cont": "Continuar Aprendiendo sobre la IA ▶️",
147
148
  # Step 5
148
- "s5_title": "✅ Sección Completada",
149
+ "s5_title": "✅ Sección completada",
149
150
  "s5_p1": "Ahora entiendes las consecuencias de los errores de la IA en decisiones de alto riesgo.",
150
151
  "s5_p2": "<b>A continuación:</b> Aprende qué es realmente la IA y cómo funcionan estos sistemas de predicción.",
151
152
  "s5_p3": "Este conocimiento te ayudará a entender cómo construir sistemas de IA mejores y más éticos.",
152
153
  "s5_scroll": "👇 DESPLÁZATE HACIA ABAJO 👇",
153
154
  "s5_find": "Encuentra la siguiente sección abajo para continuar tu viaje.",
154
- "btn_review": "◀️ Volver a Revisar"
155
+ "btn_review": "◀️ Volver a revisar"
155
156
  },
156
157
  "ca": {
157
158
  "title": "⚠️ I si la IA s'hagués equivocat?",
158
159
  "intro_box": "Acabes de prendre decisions basades en les prediccions d'una IA.<br>Però els sistemes d'IA no són perfectes. Explorem què passa quan cometen errors.",
159
160
  "loading": "⏳ Carregant...",
160
161
  # Step 1
161
- "s1_title": "Les Apostes de les Prediccions d'IA",
162
- "s1_p1": "En l'exercici anterior, vas confiar en un sistema d'IA per predir quins acusats tenien un risc <b>Alt</b>, <b>Mitjà</b> o <b>Baix</b> de reincidir.",
162
+ "s1_title": "Els riscos de les prediccions d'IA",
163
+ "s1_p1": "En l'exercici anterior, has confiat en un sistema d'IA per predir quines persones preses tenien un risc <b>Alt</b>, <b>Mitjà</b> o <b>Baix</b> de reincidir.",
163
164
  "s1_p2": "<b>Però què passa si aquestes prediccions eren incorrectes?</b>",
164
165
  "s1_p3": "Els sistemes d'IA cometen dos tipus d'errors que tenen conseqüències molt diferents:",
165
- "s1_li1": "<b>Falsos Positius</b> - Predir incorrectament ALT risc",
166
+ "s1_li1": "<b>Falsos positius</b> - Predir incorrectament ALT risc",
166
167
  "s1_li2": "<b>Falsos Negatius</b> - Predir incorrectament BAIX risc",
167
168
  "s1_p4": "Examinem cada tipus d'error i el seu impacte en el món real.",
168
- "btn_next_fp": "Següent: Falsos Positius ▶️",
169
+ "btn_next_fp": "Següent: Falsos positius ▶️",
169
170
  # Step 2
170
- "s2_title": "🔴 Falsos Positius: Predint Perill On No N'hi Ha",
171
- "s2_card_title": "Què és un Fals Positiu?",
172
- "s2_def": "Un <b>fals positiu</b> es produeix quan la IA prediu que algú és d'<b style='color:#dc2626;'>ALT RISC</b>, però en realitat NO hauria reincidit si fos alliberat.",
173
- "s2_ex_title": "Escenari d'Exemple:",
174
- "s2_ex_li1": "• La Sarah va ser marcada com a <b style='color:#dc2626;'>ALT RISC</b>",
175
- "s2_ex_li2": "• Basat en això, el jutge la va mantenir a la presó",
171
+ "s2_title": "🔴 Falsos positius: El risc inexistent",
172
+ "s2_card_title": "Què és un fals positiu?",
173
+ "s2_def": "Un <b>fals positiu</b> es produeix quan la IA prediu que algú és d'<b style='color:#dc2626;'>ALT RISC</b>, però en realitat NO hauria reincidit si hagués estat posat en llibertat.",
174
+ "s2_ex_title": "Escenari d'exemple:",
175
+ "s2_ex_li1": "• La Sarah va ser marcada com d'<b style='color:#dc2626;'>ALT RISC</b>",
176
+ "s2_ex_li2": "• Basat en això, el tribunal la va mantenir a la presó",
176
177
  "s2_ex_li3": "• En realitat, la Sarah hauria refet la seva vida i mai hauria comès un altre delicte",
177
- "s2_cost_title": "El Cost Humà:",
178
+ "s2_cost_title": "El cost humà:",
178
179
  "s2_cost_li1": "Persones innocents passen temps innecessari a la presó",
179
180
  "s2_cost_li2": "Les famílies són separades per més temps del necessari",
180
181
  "s2_cost_li3": "Les oportunitats laborals i la rehabilitació es retarden",
181
182
  "s2_cost_li4": "La confiança en el sistema judicial s'erosiona",
182
183
  "s2_cost_li5": "Impacte desproporcionat en comunitats marginades",
183
- "s2_key": "<b>Punt Clau:</b> Els falsos positius signifiquen que la IA està sent <b>massa cautelosa</b>, mantenint tancades a persones que haurien d'estar lliures.",
184
+ "s2_key": "<b>Punt clau:</b> Els falsos positius signifiquen que la IA està sent <b>massa cautelosa</b>, mantenint a la presó a persones que haurien de ser posades en llibertat.",
184
185
  "btn_back": "◀️ Enrere",
185
- "btn_next_fn": "Següent: Falsos Negatius ▶️",
186
+ "btn_next_fn": "Següent: Falsos negatius ▶️",
186
187
  # Step 3
187
- "s3_title": "🔵 Falsos Negatius: No Detectant Perill Real",
188
- "s3_card_title": "Què és un Fals Negatiu?",
189
- "s3_def": "Un <b>fals negatiu</b> es produeix quan la IA prediu que algú és de <b style='color:#16a34a;'>BAIX RISC</b>, però SÍ reincideix després de ser alliberat.",
190
- "s3_ex_title": "Escenari d'Exemple:",
191
- "s3_ex_li1": "• En James va ser marcat com a <b style='color:#16a34a;'>BAIX RISC</b>",
192
- "s3_ex_li2": "• Basat en això, el jutge el va alliberar",
188
+ "s3_title": "🔵 Falsos negatius: El risc no detectat",
189
+ "s3_card_title": "Què és un fals negatiu?",
190
+ "s3_def": "Un <b>fals negatiu</b> es produeix quan la IA prediu que algú és de <b style='color:#16a34a;'>BAIX RISC</b>, però SÍ torna a cometre un delicte després de ser posat en llibertat.",
191
+ "s3_ex_title": "Escenari d'exemple:",
192
+ "s3_ex_li1": "• En James va ser marcat com de <b style='color:#16a34a;'>BAIX RISC</b>",
193
+ "s3_ex_li2": "• Basat en això, el tribunal li va concedir la llibertat condicional",
193
194
  "s3_ex_li3": "• Malauradament, en James va cometre un altre delicte greu",
194
- "s3_cost_title": "El Cost Humà:",
195
+ "s3_cost_title": "El cost humà:",
195
196
  "s3_cost_li1": "Noves víctimes de delictes prevenibles",
196
197
  "s3_cost_li2": "Pèrdua de confiança pública en el sistema judicial",
197
- "s3_cost_li3": "Escrutini mediàtic i reaccions contra els jutges",
198
- "s3_cost_li4": "Pressió política per ser 'dur amb el crim'",
198
+ "s3_cost_li3": "Escrutini mediàtic i reaccions contra els tribunals",
199
+ "s3_cost_li4": "Pressió política per adoptar mesures severes contra la delinqüència",
199
200
  "s3_cost_li5": "Dany potencial a comunitats i famílies",
200
- "s3_key": "<b>Punt Clau:</b> Els falsos negatius signifiquen que la IA està sent <b>massa indulgent</b>, alliberant persones que representen un perill real per a la societat.",
201
- "btn_next_dil": "Següent: El Dilema ▶️",
201
+ "s3_key": "<b>Punt clau:</b> Els falsos negatius signifiquen que la IA està sent <b>massa indulgent</b>, posant en llibertat persones que representen un perill real per a la societat.",
202
+ "btn_next_dil": "Següent: El dilema ▶️",
202
203
  # Step 4
203
- "s4_title": "⚖️ L'Equilibri Impossible",
204
- "s4_card_title": "Tot Sistema d'IA Fa Concessions",
205
- "s4_p1": "Aquí està la dura realitat: <b>Cap sistema d'IA pot eliminar els dos tipus d'errors.</b>",
204
+ "s4_title": "⚖️ L'equilibri impossible",
205
+ "s4_card_title": "Tot sistema d'IA presenta un dilema",
206
+ "s4_p1": "Aquesta és la dura realitat: <b>Cap sistema d'IA pot eliminar els dos tipus d'errors.</b>",
206
207
  "s4_sub1": "<b>Si fas que la IA sigui més cautelosa:</b>",
207
- "s4_sub1_li1": "✓ Menys falsos negatius (menys persones perilloses alliberades)",
208
- "s4_sub1_li2": "✗ Més falsos positius (més persones innocents a la presó)",
208
+ "s4_sub1_li1": "✓ Menys falsos negatius (menys persones que representen un perill real són posades en llibertat)",
209
+ "s4_sub1_li2": "✗ Més falsos positius (més persones que no reincidirien es mantenen a la presó)",
209
210
  "s4_sub2": "<b>Si fas que la IA sigui més indulgent:</b>",
210
- "s4_sub2_li1": "✓ Menys falsos positius (més persones innocents alliberades)",
211
- "s4_sub2_li2": "✗ Més falsos negatius (més persones perilloses alliberades)",
212
- "s4_eth_title": "La Pregunta Ètica:",
211
+ "s4_sub2_li1": "✓ Menys falsos positius (més persones que no reincidirien són posades en llibertat)",
212
+ "s4_sub2_li2": "✗ Més falsos negatius (més persones que representen un perill real són posades en llibertat)",
213
+ "s4_eth_title": "La pregunta ètica:",
213
214
  "s4_q1": "Quin error és pitjor?",
214
- "s4_q2": "• Mantenir persones innocents a la presó?<br>• O alliberar individus perillosos?",
215
- "s4_conc": "<b>No hi ha una resposta universalment 'correcta'.</b> Diferents societats, sistemes legals i marcs ètics sospesen aquestes concessions de manera diferent.",
215
+ "s4_q2": "• Mantenir a la presó persones que no reincidirien?<br>• O posar en llibertat persones que representen un perill real?",
216
+ "s4_conc": "<b>No hi ha una resposta universalment 'correcta'.</b> Diferents societats, sistemes legals i marcs ètics sospesen aquests dilemes de manera diferent.",
216
217
  "s4_final": "<b>Per això és crucial entendre la IA.</b> Necessitem saber com funcionen aquests sistemes per prendre decisions informades sobre quan i com utilitzar-los.",
217
- "btn_cont": "Continuar Aprenent Sobre IA ▶️",
218
+ "btn_cont": "Continuar aprenent sobre la IA ▶️",
218
219
  # Step 5
219
- "s5_title": "✅ Secció Completada",
220
+ "s5_title": "✅ Secció completada",
220
221
  "s5_p1": "Ara entens les conseqüències dels errors de la IA en decisions d'alt risc.",
221
222
  "s5_p2": "<b>A continuació:</b> Aprèn què és realment la IA i com funcionen aquests sistemes de predicció.",
222
223
  "s5_p3": "Aquest coneixement t'ajudarà a entendre com construir sistemes d'IA millors i més ètics.",
223
224
  "s5_scroll": "👇 DESPLAÇA'T CAP AVALL 👇",
224
225
  "s5_find": "Troba la següent secció a sota per continuar el teu viatge.",
225
- "btn_review": "◀️ Tornar a Revisar"
226
+ "btn_review": "◀️ Tornar a revisar"
226
227
  }
227
228
  }
228
229
 
@@ -421,7 +422,7 @@ def create_ai_consequences_app(theme_primary_hue: str = "indigo") -> "gr.Blocks"
421
422
  c_s5_html = gr.HTML(_get_step5_html("en"))
422
423
  back_to_dilemma_btn = gr.Button(t('en', 'btn_review'))
423
424
 
424
- # --- I18N UPDATE LOGIC ---
425
+ # --- I18N UPDATE LOGIC (CACHED) ---
425
426
 
426
427
  update_targets = [
427
428
  c_main_title, c_intro_box, c_loading_title,
@@ -432,12 +433,12 @@ def create_ai_consequences_app(theme_primary_hue: str = "indigo") -> "gr.Blocks"
432
433
  c_s5_html, back_to_dilemma_btn
433
434
  ]
434
435
 
435
- def update_language(request: gr.Request):
436
- params = request.query_params
437
- lang = params.get("lang", "en")
438
- if lang not in TRANSLATIONS:
439
- lang = "en"
440
-
436
+ @lru_cache(maxsize=16)
437
+ def get_cached_ui_updates(lang):
438
+ """
439
+ Generates the UI updates once per language.
440
+ Subsequent calls return the pre-calculated list instantly.
441
+ """
441
442
  return [
442
443
  f"<h1 style='text-align:center;'>{t(lang, 'title')}</h1>",
443
444
  f"<div class='consequences-intro-box'>{t(lang, 'intro_box')}</div>",
@@ -466,6 +467,15 @@ def create_ai_consequences_app(theme_primary_hue: str = "indigo") -> "gr.Blocks"
466
467
  gr.Button(value=t(lang, 'btn_review')),
467
468
  ]
468
469
 
470
+ def update_language(request: gr.Request):
471
+ params = request.query_params
472
+ lang = params.get("lang", "en")
473
+ if lang not in TRANSLATIONS:
474
+ lang = "en"
475
+
476
+ # This call is now instant for repeat visitors
477
+ return get_cached_ui_updates(lang)
478
+
469
479
  demo.load(update_language, inputs=None, outputs=update_targets)
470
480
 
471
481
  # --- NAVIGATION LOGIC ---