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 puntos 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 en 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 | |