--- language: - es license: apache-2.0 library_name: transformers pipeline_tag: text-generation tags: - spanish - llama - from-scratch - tool-calling - mcp - stark --- # 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 (``) 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 ```python 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 (``) mejoro con un filtro de fidelidad en el dataset, pero sigue siendo experimental: no asumas que el `` 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 `` 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).