Stark v0.2-beta
AVISO: Version BETA. Respecto a v0.2: el tool-calling se reentreno con ejecucion
REAL contra servidores MCP reales (filesystem, git, fetch, memory, time, postgres, sqlite)
en vez de ejemplos guionados, el dataset es 100% espanol,
y el razonamiento (<think>) pasa por un filtro de fidelidad que descarta cadenas que no
conectan con la respuesta final. Sigue en desarrollo activo, no usar en produccion.
Modelo de lenguaje entrenado desde cero (pesos aleatorios) por Victor Cherif.
Arquitectura tipo Llama de ~110M de parametros, pensado como asistente en espanol
orientado a ciencia, programacion, robotica y fisica, con soporte de tool-calling / MCP
entrenado contra servidores MCP reales.
Detalles del modelo
- Parametros: ~110M (embeddings atados)
- Arquitectura: decoder-only tipo Llama, GQA (12 query / 4 KV heads), RoPE (theta=100000),
RMSNorm + SwiGLU
- Contexto: 16384 tokens
- Vocabulario: 16000 (tokenizer BPE a nivel de bytes propio)
- Entrenamiento: pre-entrenamiento (~552M tokens, espanol + codigo) + SFT de instrucciones
- Precision: fp16
Uso
from transformers import AutoModelForCausalLM, AutoTokenizer
tok = AutoTokenizer.from_pretrained("VcherifFIT/stark-mcp-scratch")
model = AutoModelForCausalLM.from_pretrained("VcherifFIT/stark-mcp-scratch")
msgs = [{"role": "system", "content": "Eres Stark, un asistente en espanol."},
{"role": "user", "content": "Explica brevemente que es la fotosintesis."}]
inp = tok.apply_chat_template(msgs, add_generation_prompt=True, return_tensors="pt")
out = model.generate(inp, max_new_tokens=200)
print(tok.decode(out[0][inp.shape[1]:], skip_special_tokens=True))
Fallas conocidas (version BETA)
- Al ser un modelo pequeno (~110M), el lenguaje puede ser incoherente en respuestas largas,
sobre todo pasados los primeros parrafos (tiende a repetir bloques o rellenar con generalidades).
- La aritmetica mental sigue sin ser confiable: depende de que el modelo dispare la tool
calculate en vez de calcular "de memoria" -- verificado que esto mejoro pero no es perfecto.
- El razonamiento (
<think>) mejoro con un filtro de fidelidad en el dataset, pero sigue
siendo experimental: no asumas que el <think> siempre refleja como se llego a la respuesta.
- Tool-calling entrenado contra 7 servidores MCP reales (filesystem, git, fetch, memory, time,
postgres, sqlite) con ejecucion real, pero la cobertura por herramienta es desigual (algunas
tienen mas ejemplos que otras) -- puede fallar en herramientas poco representadas.
- No apto para produccion: es una version de pruebas.
Que cambio respecto a v0.1-beta
- Dataset 100% espanol: se eliminaron ~20.000 filas con contenido en ingles y se corrigieron
los generadores para que no vuelva a aparecer.
- Tool-calling real: reemplazado el dataset guionado (pocas frases fijas, resultados
inventados) por generacion con ejecucion real contra servidores MCP reales via qwen2.5-coder
como decisor, mucha mas diversidad de frases por herramienta.
- Reasoning con filtro de fidelidad: se descartan cadenas
<think> que no conectan con la
respuesta final (verificadas por un segundo paso con el modelo generador).
- Chat template con system prompt por defecto: si no se manda un mensaje de sistema, el
template ahora antepone el PERSONA automaticamente (antes, sin system prompt, el modelo
colapsaba por completo -- confirmado en pruebas).
- Fix de checkpoint: el mejor checkpoint (menor eval_loss) ahora se respalda en una ruta
estable del Hub que nunca se poda, y se carga explicitamente al publicar (antes, el podado de
checkpoints viejos podia borrar el mejor antes de que
load_best_model_at_end lo necesitara).