Qué es exactamente
Table with columns: Ítem, Valor| Ítem | Valor |
|---|
| Estudiante | Llama diminuto inicializado desde cero: 4 capas, hidden_size 256, vocabulario BPE de 1.455 tokens, 3.647.232 parámetros (no es SmolLM2) |
| Profesor | Simulado (modo offline --sin-internet del taller): 162 respuestas simuladas, costo US$ 0. No se usó ningún LLM comercial |
| Método | LoRA r=16, alpha=32, dropout=0.05, todos los proyectores de atención y MLP + embed_tokens y lm_head entrenables |
| Datos | 80 pares pregunta-respuesta (200 pasos = 10 épocas × 20 lotes de 4). No se publica el dataset |
| Entrenamiento | 10 épocas, lr 3e-3, semilla 42, CPU; pérdida 7,3471 → 0,0845 |
Resultados (examen fijo de 12 preguntas, nunca vistas en el entrenamiento)
Table with columns: Base sin entrenar, Destilado | Base sin entrenar | Destilado |
|---|
| Nota media (1–10) | 1,00 | 6,08 |
| Aprobación (nota ≥ 7) | 0 % | 75 % (9 de 12) |
La nota la pone el juez automático del taller en modo offline, que compara palabras clave con la respuesta de referencia
(comentarios del tipo "Faltan ideas clave: …"); no es un evaluador humano ni un LLM. Con 12 preguntas el margen de error
es grande. Fallas: 2 de las 12 respuestas obtuvieron nota 1 y otra nota 2 (por ejemplo, ante "heurística de relajación"
responde sobre otro concepto del dominio). Curva de pérdida y notas por tema en resultados.png y entrenamiento_log.jsonl.

Cómo usarlo
El modelo se entrenó con este prompt de sistema y se evaluó con generación determinista y repetition_penalty=1.15.
Sin esa penalización el modelo entra en bucles de repetición.
from transformers import AutoModelForCausalLM, AutoTokenizer REPO = "adolfo123456/logibot-slm"tok = AutoTokenizer.from_pretrained(REPO)m = AutoModelForCausalLM.from_pretrained(REPO) # modelo fusionado (base + LoRA) msgs = [ {"role": "system", "content": "Eres un asistente experto de operaciones y despacho para supervisores y robots AMR en el centro de distribución Pudahuel de Austral Retail. Responde de forma clara, técnica y concisa en español de Chile."}, {"role": "user", "content": "¿Qué ventajas tiene el algoritmo A* para la zona de muelles?"},]ids = tok.apply_chat_template(msgs, add_generation_prompt=True, return_tensors="pt", return_dict=True)out = m.generate(**ids, max_new_tokens=120, do_sample=False, repetition_penalty=1.15)print(tok.decode(out[0][ids["input_ids"].shape[1]:], skip_special_tokens=True))
Solo el adaptador (peft)
El estudiante base es un modelo diminuto propio, no está en el Hub como modelo aparte: viene en la subcarpeta base_tiny/.
Se descarga el repo a una carpeta local y se carga desde ahí. No uses PeftModel.from_pretrained(base, REPO, subfolder="adapter")
directo desde el Hub: en Windows peft arma la ruta remota con \ y no encuentra el archivo.
from huggingface_hub import snapshot_downloadfrom transformers import AutoModelForCausalLM, AutoTokenizerfrom peft import PeftModel local = snapshot_download("adolfo123456/logibot-slm") # ≈ 34 MBbase = AutoModelForCausalLM.from_pretrained(f"{local}/base_tiny")tok = AutoTokenizer.from_pretrained(f"{local}/base_tiny")m = PeftModel.from_pretrained(base, f"{local}/adapter")
Estructura del repo
model.safetensors, config.json, tokenizer* modelo fusionado (base_tiny + adaptador)adapter/ adaptador LoRA (adapter_model.safetensors ≈ 4 MB + adapter_config.json)base_tiny/ estudiante sin entrenarresultados.png, entrenamiento_log.jsonl evidencia del entrenamiento
Límites y uso responsable
- Dominio y empresa ficticios; los datos son sintéticos y no contienen información personal.
- Tamaño y datos mínimos: alucina, se corta a media frase y confunde conceptos cercanos.
- Entrega académica. Sin garantías.