Upload main.py
Browse files- api/main.py +69 -0
api/main.py
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# En: api/main.py
|
| 2 |
+
from fastapi import FastAPI
|
| 3 |
+
from pydantic import BaseModel
|
| 4 |
+
import time
|
| 5 |
+
|
| 6 |
+
# --- Modelos de datos (Pydantic) para validar la entrada ---
|
| 7 |
+
# Esto es una buena pr谩ctica que los jueces notar谩n
|
| 8 |
+
class PredictPayload(BaseModel):
|
| 9 |
+
edad: int
|
| 10 |
+
sexo: str
|
| 11 |
+
asistencia: float
|
| 12 |
+
notas: float
|
| 13 |
+
|
| 14 |
+
class CoachPayload(BaseModel):
|
| 15 |
+
consulta: str
|
| 16 |
+
riesgo: float
|
| 17 |
+
|
| 18 |
+
# Inicializa tu app de FastAPI
|
| 19 |
+
app = FastAPI(title="API del Tutor Virtual - MOCK")
|
| 20 |
+
|
| 21 |
+
@app.get("/")
|
| 22 |
+
def read_root():
|
| 23 |
+
return {"status": "API de MOCK funcionando"}
|
| 24 |
+
|
| 25 |
+
# --- Endpoint /predict (FALSO) ---
|
| 26 |
+
@app.post("/predict")
|
| 27 |
+
async def mock_predict(payload: PredictPayload):
|
| 28 |
+
"""
|
| 29 |
+
Simula el endpoint /predict.
|
| 30 |
+
Devuelve un score y drivers falsos basados en las notas.
|
| 31 |
+
"""
|
| 32 |
+
# Simula un peque帽o delay, como si un modelo estuviera corriendo
|
| 33 |
+
time.sleep(0.5)
|
| 34 |
+
|
| 35 |
+
score_falso = 0.0
|
| 36 |
+
if payload.notas < 4.0:
|
| 37 |
+
score_falso = 0.85
|
| 38 |
+
elif payload.notas < 5.5:
|
| 39 |
+
score_falso = 0.45
|
| 40 |
+
else:
|
| 41 |
+
score_falso = 0.15
|
| 42 |
+
|
| 43 |
+
return {
|
| 44 |
+
"score": score_falso,
|
| 45 |
+
"drivers": ["Promedio de Notas", "Asistencia (falso)"]
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
# --- Endpoint /coach (FALSO) ---
|
| 49 |
+
@app.post("/coach")
|
| 50 |
+
async def mock_coach(payload: CoachPayload):
|
| 51 |
+
"""
|
| 52 |
+
Simula el endpoint /coach (RAG).
|
| 53 |
+
Devuelve un plan de acci贸n falso.
|
| 54 |
+
"""
|
| 55 |
+
time.sleep(1) # Simula el delay de un LLM
|
| 56 |
+
|
| 57 |
+
respuesta_falsa = f"""
|
| 58 |
+
Basado en tu riesgo de **{payload.riesgo*100:.0f}%** y tu consulta ('{payload.consulta}'), este es un plan de acci贸n de prueba:
|
| 59 |
+
|
| 60 |
+
1. **Enfocarse en las notas**: Te sugiero revisar las gu铆as de estudio.
|
| 61 |
+
2. **Organizaci贸n**: Es clave mantener un calendario.
|
| 62 |
+
|
| 63 |
+
Recuerda que esto es solo una simulaci贸n del sistema RAG.
|
| 64 |
+
"""
|
| 65 |
+
|
| 66 |
+
return {
|
| 67 |
+
"plan": respuesta_falsa,
|
| 68 |
+
"citas": ["kb/guia_estudio_mock.md", "kb/gestion_tiempo_mock.md"]
|
| 69 |
+
}
|