Spaces:
Build error
Build error
File size: 3,385 Bytes
39012fa | 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 | import os
import sympy as sp
from sympy.parsing.sympy_parser import parse_expr
import streamlit as st
from crewai import Agent, Crew, Task, Process
from langchain_openai import ChatOpenAI
# 1. Recuperar la API Key de los Secretos de Hugging Face de forma segura
openai_api_key = os.environ.get("OPENAI_API_KEY")
if not openai_api_key:
st.error("Por favor, configura la variable OPENAI_API_KEY en los Settings de tu Space.")
st.stop()
# Configurar el modelo en la nube (GPT-4o mini o similar es r谩pido y econ贸mico)
llm_cloud = ChatOpenAI(
model="gpt-4o-mini",
api_key=openai_api_key,
temperature=0.2
)
# 2. Motor matem谩tico formal (SymPy)
def verificar_equivalencia_simbolica(expresion_estudiante, expresion_correcta):
try:
expr_est = expresion_estudiante.replace('^', '**')
expr_corr = expresion_correcta.replace('^', '**')
sym_estudiante = parse_expr(expr_est)
sym_correcta = parse_expr(expr_corr)
return sp.simplify(sym_correcta - sym_estudiante) == 0
except:
return False
# 3. Interfaz de Streamlit
st.title("馃帗 Code-Mentor-AI: Tutor de Matem谩ticas")
st.write("Introduce el problema, la soluci贸n real y tu intento para recibir ayuda socr谩tica.")
problema = st.text_input("Problema:", "Simplifica la expresi贸n: 3*(x - 2) + 4*(2*x + 5)")
solucion_real = st.text_input("Soluci贸n Correcta (para validaci贸n):", "11*x + 14")
respuesta_estudiante = st.text_input("Tu Respuesta:")
if st.button("Evaluar mi respuesta"):
if verificar_equivalencia_simbolica(respuesta_estudiante, solucion_real):
st.success("馃帀 隆Excelente trabajo! Tu respuesta es matem谩ticamente correcta.")
else:
st.info("馃 Analizando tu respuesta... El enjambre de agentes est谩 trabajando.")
# Agentes
agente_diagnostico = Agent(
role="Diagnosticador de Errores de Matem谩ticas",
goal="Identificar el punto exacto de la falla l贸gica del estudiante.",
backstory="Eres un analista l贸gico matem谩tico experto en educaci贸n escolar K-12.",
llm=llm_cloud
)
agente_tutor = Agent(
role="Tutor Pedag贸gico Socr谩tico",
goal="Guiar al estudiante con pistas amigables sin darle la respuesta final.",
backstory="Eres un tutor de matem谩ticas emp谩tico. Ofreces andamiaje socr谩tico.",
llm=llm_cloud
)
# Tareas
tarea_analisis = Task(
description=f"Problema: '{problema}'. Soluci贸n real: '{solucion_real}'. Respuesta fallida del alumno: '{respuesta_estudiante}'. Identifica el error conceptual.",
expected_output="An谩lisis detallado de la confusi贸n del estudiante.",
agent=agente_diagnostico
)
tarea_explicacion = Task(
description="Toma el diagn贸stico y escribe una respuesta directa, emp谩tica y de estilo socr谩tico para el alumno. No reveles la soluci贸n final.",
expected_output="Mensaje motivador con una pista clave.",
agent=agente_tutor
)
enjambre = Crew(
agents=[agente_diagnostico, agente_tutor],
tasks=[tarea_analisis, tarea_explicacion],
process=Process.sequential
)
resultado = enjambre.kickoff()
st.markdown("### Gu铆a de tu tutor:")
st.write(resultado) |