PAMPAr-Coder / scripts /classroom_events.py
lucas-mella's picture
feat: upload PAMPAr-Coder code and documentation
a2d6a0d verified
Raw
History Blame Contribute Delete
3.55 kB
"""classroom_events.py — Formateo e impresión de eventos del Classroom."""
from __future__ import annotations
def format_event_to_console(event_type: str, data: str | dict) -> None:
"""Imprime un evento del classroom en consola con formato legible."""
d = data if isinstance(data, dict) else {}
_FORMATTERS.get(event_type, _noop)(event_type, data, d)
def _noop(_event_type: str, _data: str | dict, _d: dict) -> None:
pass
def _fmt_system(_et: str, data: str | dict, _d: dict) -> None:
print(f" 🏫 {data}")
def _fmt_lesson_start(_et: str, _data: str | dict, d: dict) -> None:
concept = d.get("concept", "")
print(
f"\n ═══ Lección {d.get('lesson_id', '?')} — "
f"{d.get('level_name', '')} [{concept}] "
f"(Nivel {d.get('level', '?')}) ═══"
)
print(f" 📝 {d.get('problem', '')[:100]}")
def _fmt_mentor_explain(_et: str, _data: str | dict, d: dict) -> None:
print(f" 📖 Mentor explica: {d.get('explain', '')[:120]}")
def _fmt_mentor_example(_et: str, _data: str | dict, d: dict) -> None:
example = d.get("example", "")
lines = example.split("\n")
preview = lines[0][:80] if lines else ""
print(f" 💻 Mentor ejemplo: {preview}{'...' if len(lines) > 1 else ''}")
def _fmt_student_answer(_et: str, _data: str | dict, d: dict) -> None:
print(f" 🧑‍🎓 Alumno: {d.get('answer', '')[:100]}")
def _fmt_teacher_feedback(_et: str, _data: str | dict, d: dict) -> None:
icon = "✅" if d.get("correct") else "❌"
print(f" 👨‍🏫 Profesor: {icon} {d.get('feedback', '')[:100]}")
def _fmt_lesson_complete(_et: str, _data: str | dict, d: dict) -> None:
concept = d.get("concept", "")
print(
f" 📊 Loss: {d.get('loss', 0):.4f} | "
f"EWC: {d.get('ewc_penalty', 0):.6f} | "
f"Brain: {d.get('brain_score', 0):.2%} | "
f"Acc: {d.get('accuracy', 0):.1%} | "
f"Replay: {d.get('replay_size', 0)} | "
f"Concepto: {concept}"
)
def _fmt_level_up(_et: str, _data: str | dict, d: dict) -> None:
print(f"\n 🎉 ¡NIVEL UP! → Nivel {d.get('new_level', '?')}: {d.get('nombre', '')}")
def _fmt_checkpoint(_et: str, _data: str | dict, d: dict) -> None:
print(f" 💾 Checkpoint guardado: lección {d.get('lesson', '?')}")
def _fmt_bio_update(_et: str, _data: str | dict, d: dict) -> None:
parts = [
f"DA={d.get('dopamine', 0):.2f}",
f"NE={d.get('norepinephrine', 0):.2f}",
f"LR×{d.get('lr_factor', 1):.2f}",
]
if d.get("ltp_applied"):
parts.append("LTP!")
if d.get("sleep_triggered"):
parts.append(f"SLEEP(loss={d.get('sleep_loss', 0):.3f})")
if d.get("adapters_total", 0) > 0:
parts.append(f"LoRA={d.get('adapters_total', 0)}")
if d.get("pruned"):
parts.append("PRUNED")
print(f" 🧠 Bio: {' | '.join(parts)}")
def _fmt_error(_et: str, data: str | dict, _d: dict) -> None:
print(f" ❗ {data}")
_FORMATTERS: dict[str, object] = {
"system": _fmt_system,
"lesson_start": _fmt_lesson_start,
"mentor_explain": _fmt_mentor_explain,
"mentor_example": _fmt_mentor_example,
"student_answer": _fmt_student_answer,
"teacher_feedback": _fmt_teacher_feedback,
"lesson_complete": _fmt_lesson_complete,
"level_up": _fmt_level_up,
"checkpoint": _fmt_checkpoint,
"bio_update": _fmt_bio_update,
"error": _fmt_error,
}