Daily Scrum — 12 de febrero de 2026

🎯 Objetivo hoy

Implementar persistencia de perfiles de conocimiento (HU #16).


✅ ¿Qué hice ayer?

  • Prompts adaptativos implementados para los 3 niveles.
  • Notebook math_clustering.ipynb creado con experimento.
  • Métricas ARI=0.87, NMI=0.82, FPC=0.76 documentadas.
  • Visualizaciones t-SNE generadas mostrando clusters claros.

🚀 ¿Qué haré hoy?

  1. Diseño del Modelo de Datos (HU #16):
    • Diseñar schema para perfil de conocimiento.
    • Incluir: historial de preguntas, niveles de dificultad, temas consultados.
    • Crear modelo Pydantic para validación.
  2. Persistencia en MongoDB:
    • Crear colección student_profiles.
    • Implementar CRUD para perfiles de conocimiento.
    • Integrar actualización de perfil en cada interacción.
  3. Evaluación de Conocimiento:
    • Implementar algoritmo de evaluación basado en historial.
    • Calcular “nivel de dominio” por tema.
    • Almacenar progreso acumulativo.

🚧 Obstáculos encontrados

  • Conflicto de módulos: Crear chatbot/logic/models/ como paquete causó crash porque models/ estaba en .gitignore (para modelos ML) y además Python lo confundía con el archivo models.py existente.
    • Solución: Reorganizar en paquete con __init__.py que re-exporta todos los modelos para mantener retrocompatibilidad.
  • Pydantic v2 deprecations: class Config deprecado, migrado a model_config = {...}.
  • Pre-commit hooks: ruff detectó variable no usada en tests, black reformateó archivos.

✅ Criterios de aceptación

  • Schema de perfil de conocimiento definido.
  • Colección student_profiles creada.
  • CRUD funcional para perfiles.
  • Perfil actualizado en cada interacción del chat.
  • Persistencia completa de conversaciones (requisito adicional).
  • Endpoints admin para análisis de perfiles.
  • Tests unitarios (14 tests, 100% passing).

📝 Implementación realizada

Commits creados (5 commits)

  1. 42d6839 - refactor: Reorganizar models en estructura de paquete
  2. 716126f - feat: Añadir ProfileManager para tracking de conocimiento
  3. 862dbfe - feat: Integrar profile tracking en /chat endpoint
  4. 070b513 - feat: Backend - pasar user_id, endpoints admin analytics
  5. a288484 - test: Añadir 14 tests unitarios para ProfileManager

Modelos Pydantic creados

# chatbot/logic/models/student_profile.py
class Interaction(BaseModel):
    timestamp: datetime
    query: str
    difficulty: str  # básico, intermedio, avanzado
    topic: str | None
    subject: str

class TopicMastery(BaseModel):
    level: float  # 0.0 - 1.0
    interactions: int
    last_updated: datetime

class StudentProfile(BaseModel):
    user_id: str
    created_at: datetime
    updated_at: datetime
    subjects: dict[str, SubjectData]
    difficulty_distribution: dict[str, int]
    total_interactions: int

class ConversationTurn(BaseModel):
    session_id: str
    user_id: str
    subject: str
    timestamp: datetime
    query: str
    answer: str  # Respuesta completa sin truncar
    difficulty: str | None
    was_test: bool

ProfileManager - Operaciones principales

# chatbot/logic/profile_manager.py
class ProfileManager:
    def get_or_create_profile(user_id: str) -> StudentProfile
    def record_interaction(user_id, subject, query, difficulty, topic)  # Atomic upsert
    def update_topic_mastery(user_id, subject, topic, correct: bool)    # +0.1/-0.05
    def save_conversation_turn(session_id, query, answer, ...)          # Full persistence
    def get_conversation_history(session_id, user_id, limit)

Endpoints Admin añadidos

  • GET /admin/profiles - Lista todos los perfiles (solo profesores)
  • GET /admin/profiles/{user_id} - Perfil específico de estudiante
  • GET /admin/conversations - Historial con filtros
  • GET /admin/conversations/{session_id} - Conversación completa

Tests ejecutados

chatbot/tests/ - 126 passed ✅
backend/tests/ - 44 passed ✅
tests/ - 4 passed ✅