Spaces:
Runtime error
Runtime error
| import streamlit as st | |
| import os | |
| import random | |
| import google.generativeai as genai | |
| # Obteniendo la API KEY del entorno | |
| gemini_api_key = os.getenv("GEMINI_API_KEY") | |
| # Configuraci贸n de la API KEY para el uso de genai | |
| genai.configure(api_key=gemini_api_key) | |
| # Inicializaci贸n del modelo | |
| model = genai.GenerativeModel('gemini-pro') | |
| def chat_with_model(user_input): | |
| response = model.generate_content(user_input) | |
| return response.text | |
| def generar_ecuacion_y_respuestas(): | |
| a = random.randint(1, 10) | |
| b = random.randint(-10, 10) | |
| c = random.randint(-10, 10) | |
| x = (c - b) / a | |
| respuestas_incorrectas = set() | |
| while len(respuestas_incorrectas) < 3: | |
| respuesta_erronea = x + random.choice([-2, -1, 1, 2]) * random.random() | |
| respuestas_incorrectas.add(round(respuesta_erronea, 2)) | |
| respuestas = list(respuestas_incorrectas) + [round(x, 2)] | |
| random.shuffle(respuestas) | |
| ecuacion = f"{a}x + ({b}) = {c}" if b < 0 else f"{a}x + {b} = {c}" | |
| return ecuacion, respuestas, round(x, 2) | |
| def manejar_respuesta(ecuacion, respuesta_elegida, respuesta_correcta): | |
| if respuesta_elegida == str(respuesta_correcta): | |
| resultado = "Fant谩stico, tienes 1 punto. Sube de nivel." | |
| st.session_state.aciertos += 1 | |
| else: | |
| resultado = "Incorrecto, sigue practicando." | |
| st.session_state.errores += 1 | |
| resultado += f" Escogiste la respuesta: {respuesta_elegida}." | |
| explicacion = chat_with_model(f"Explica el problema {ecuacion} y por qu茅 la respuesta {respuesta_elegida} es {'correcta' if respuesta_elegida == str(respuesta_correcta) else 'incorrecta'}.") | |
| return resultado + "\n" + explicacion | |
| # Configuraci贸n de la interfaz de Streamlit | |
| st.title("Desaf铆o de Matem谩ticas") | |
| st.markdown("Intenta resolver la ecuaci贸n y selecciona tu respuesta.") | |
| # Inicializaci贸n de contadores de aciertos y errores en el estado de sesi贸n | |
| if 'aciertos' not in st.session_state: | |
| st.session_state.aciertos = 0 | |
| if 'errores' not in st.session_state: | |
| st.session_state.errores = 0 | |
| if 'nuevo_problema' not in st.session_state: | |
| st.session_state.nuevo_problema = True # Se a帽ade un nuevo estado para controlar la generaci贸n de nuevos problemas | |
| # Mostrar los contadores en la barra lateral | |
| st.sidebar.write(f"Aciertos: {st.session_state.aciertos}") | |
| st.sidebar.write(f"Errores: {st.session_state.errores}") | |
| # Generaci贸n o recuperaci贸n del problema actual | |
| if st.session_state.nuevo_problema: | |
| st.session_state.ecuacion, st.session_state.respuestas, st.session_state.respuesta_correcta = generar_ecuacion_y_respuestas() | |
| st.session_state.nuevo_problema = False # Restablecer para evitar re-ejecuciones innecesarias | |
| st.write(st.session_state.ecuacion) | |
| respuesta_elegida = st.radio("Elige tu respuesta", [str(respuesta) for respuesta in st.session_state.respuestas]) | |
| # Bot贸n de env铆o | |
| if st.button("Enviar"): | |
| resultado = manejar_respuesta(st.session_state.ecuacion, respuesta_elegida, st.session_state.respuesta_correcta) | |
| st.write(resultado) | |
| # No se necesita llamar a st.experimental_rerun() aqu铆 porque la p谩gina se actualiza con el resultado | |
| # Bot贸n para generar un nuevo problema | |
| if st.button("Generar Nuevo Problema"): | |
| st.session_state.nuevo_problema = True # Activar la se帽al para generar un nuevo problema | |
| st.experimental_rerun() # Re-ejecutar la aplicaci贸n para reflejar el cambio | |