YvyrAI-100m-Nano
Primera LLM paraguaya con arquitectura propia entrenada desde cero. 105.86M parametros, 891,135,906 tokens de español.
No es un fine-tune ni una reimplementacion de otra arquitectura: el tokenizer, el corpus, el bloque de deliberacion recurrente y los pesos se construyeron para este proyecto.
Alcance exacto de esa afirmacion. Se refiere a la ARQUITECTURA y al entrenamiento desde cero hechos en Paraguay. No significa que el modelo este entrenado con datos paraguayos: el corpus es español general y las fuentes paraguayas son apenas el 0.066% de los documentos (ver la tabla de composicion mas abajo). Un modelo entrenado sobre corpus paraguayo es un objetivo distinto y posterior.
Que tiene de distinto
Ademas de las 12 capas del backbone, el modelo tiene un bloque de deliberacion recurrente: un unico bloque transformer que se aplica hasta 8 veces sobre el estado, con
- halting aprendido (el modelo decide cuando dejar de iterar),
- re-inyeccion de la entrada en cada paso (concat + adaptador),
- cabezas auxiliares de verificacion y reparacion,
- una memoria latente con decaimiento.
Con 8 iteraciones, la deliberacion es el 40% del computo del modelo aunque sea solo el 10% de los parametros.
Resultados medidos
La profundidad recurrente SI aporta
Barrido sobre el mismo checkpoint, holdout GSM8K-es, 192 ejemplos:
| iteraciones | loss | perplejidad |
|---|---|---|
| 1 | 4.2465 | 69.86 |
| 2 | 4.0063 | 54.94 |
| 4 | 3.9122 | 50.01 |
| 7 | 3.8975 | 49.28 |
| 8-16 | 3.8975 | 49.28 |
-8.2% de loss y -29.5% de perplejidad entre 1 y 7 iteraciones. Satura exactamente en la profundidad entrenada: mas iteraciones en inferencia no mejoran (pero tampoco degradan). El halting converge a ~7.4 iteraciones de 8 por su cuenta, y su curva sigue a la forzada con <0.006 nats de diferencia.
Contra GPT-2 124M
Bits por caracter (menor es mejor). Se usa bpc y no perplejidad porque los tokenizers son distintos (24576 vs 50257) y la perplejidad por token no seria comparable. Los dos modelos se miden sobre el mismo texto.
| conjunto | YvyrAI 100M | GPT-2 124M | |
|---|---|---|---|
| Español (web, held-out) | 1.3625 | 2.2238 | YvyrAI +63.2% |
| Ingles (Wikipedia) | 2.0078 | 1.0280 | GPT-2 +95.3% |
Cada modelo domina en su idioma. YvyrAI lo consigue con ~11x menos datos (891M tokens contra los ~10B de WebText).
El tokenizer explica parte de la ventaja: comprime español a 4.25 caracteres por token contra 2.92 de GPT-2, un 46% mejor.
Lo que estos numeros NO prueban: que la arquitectura sea superior. Ganar en español es especializacion de idioma (corpus + tokenizer dedicados). La pregunta arquitectonica se responde con un A/B contra un modelo denso iso-FLOP, que esta en curso.
Limitaciones (leer antes de usarlo)
- Inventa hechos. Son 8.4 tokens por parametro contra los ~20 del punto compute-optimo (Chinchilla): el modelo aprendio la FORMA del español antes que los hechos. Preguntado por la capital de Paraguay contesta cosas como "Rio del Plata". No es una fuente de informacion.
- No tiene ajuste de instrucciones. Es un modelo base. Sin la plantilla de chat correcta continua texto en vez de responder.
- No razona aritmetica: "15 + 27" no da 42.
- Contenido paraguayo minimo: el corpus es español general (82.5% web de CulturaX). Las fuentes paraguayas son el 0.066% de los documentos, asi que el modelo NO refleja el registro paraguayo (voseo, lexico local, jopara). Ver "Proximos pasos" mas abajo: eso se corrige en la version siguiente.
- Una sola semilla, sin barras de error.
Uso
La arquitectura es propia, asi que no carga con AutoModelForCausalLM. El
codigo de inferencia viene incluido en este repo (carpeta yvyrai_nano/),
asi que no hace falta nada mas:
git clone https://huggingface.co/Manuel12435/YvyrAI-100m-Nano
cd YvyrAI-100m-Nano
pip install -r requirements.txt
python cargar.py # carga y genera
python chatear.py # chat por consola
from yvyrai_nano import cargar_modelo, construir_prompt, generar
modelo, tok, cfg = cargar_modelo(".", ema=True)
# La plantilla del entrenamiento es OBLIGATORIA. Sin ella el modelo continua
# texto como si fuera una pagina web, porque el 82.5% de su corpus es web.
prompt = construir_prompt("Explica que es la fotosintesis.")
# iters = profundidad de deliberacion. 7 es el optimo medido.
print(generar(modelo, tok, prompt, max_new_tokens=80, iters=7))
La plantilla exacta, si la querés armar a mano:
<|bos|><|sistema|>{sistema}<|usuario|>{pregunta}<|respuesta|>
Tokens de control: <|bos|>=2, <|eos|>=3, <|sistema|>=4, <|usuario|>=5,
<|pensar|>=6, <|respuesta|>=7.
Sugerencia medida: temperatura entre 0.5 y 0.7. Por debajo de 0.2 el modelo colapsa sobre plantillas memorizadas y repite la misma sin importar la pregunta.
Que codigo hay y que no. Se publica lo necesario para inferencia: la
arquitectura (model.py), el ModelConfig, el cache KV cuantizado, el muestreo
y la deteccion de hardware. El pipeline del corpus, el trainer con el curriculo
de 5 fases, las losses auxiliares y la cuantizacion QAT no forman parte de este
release.
Entrenamiento
| parametros | 105.86M |
| tokens vistos | 891,135,906 |
| corpus | 4,200,085 documentos, 96.3% de pureza de español |
| contexto | 1024 tokens |
| batch efectivo | 262.144 tokens por optimizer step |
| optimizer steps | 3,814 |
| precision de entrenamiento | bf16 con autocast, master weights en fp32 |
| precision de los pesos publicados | fp32 |
| hardware | 1x GPU de consumo, 8 GB de VRAM |
Los pesos se publican en fp32, que es como los guarda el checkpoint: el entrenamiento corre en bf16 con autocast pero mantiene los master weights en fp32. Se dejan asi a proposito, porque las metricas de esta pagina se midieron en fp32 y de este modo son reproducibles al digito. Para inferencia podés castear a bf16 sin diferencia practica.
Curriculo en 5 fases que sube la profundidad de deliberacion 3 -> 5 -> 7 -> 8 y enciende progresivamente las losses auxiliares (guidance, verify, repair, halting, latente).
Composicion del corpus
| fuente | documentos | % |
|---|---|---|
| culturax_es | 3,465,087 | 82.50% |
| wikipedia_raw | 249,219 | 5.93% |
| reasoning | 182,489 | 4.34% |
| wikipedia_grounded | 113,591 | 2.70% |
| books_literature | 59,176 | 1.41% |
| long_context_es | 40,507 | 0.96% |
| instruction_qa | 35,914 | 0.86% |
| safety | 24,866 | 0.59% |
| instruction_chat | 17,589 | 0.42% |
| python_es | 7,636 | 0.18% |
| yvyrai_identity | 1,334 | 0.03% |
| scientific_es | 1,042 | 0.02% |
| yvyrai_style | 803 | 0.02% |
| paraguay_official | 617 | 0.01% |
| news_es | 215 | 0.01% |
Proximos pasos: YvyrAI 1B, esta vez CON datos paraguayos
Se viene un modelo de 1B de parametros, y ese si va a entrenarse con un corpus paraguayo construido a proposito.
Por que este no lo tiene, dicho sin adornos: sobreestime cuanto texto paraguayo
habia disponible. El mix del corpus le asignaba 20M de tokens a la fuente
paraguay_official y las fuentes publicas rindieron 104.080 tokens, el 0.5%
de lo pedido. De ahi sale el 0.066% de la tabla de arriba. No fue una decision de
diseño, fue un limite de datos que no medi antes de armar el mix.
Plan para el corpus paraguayo del 1B, ya con las fuentes verificadas:
- ~50% web
.py— CulturaX filtrado por dominio paraguayo. Es donde vive el registro real (voseo, lexico local, prensa, blogs), y la licencia ya esta resuelta. - ~25% leyes — BACN. Verificado: 7.084 leyes en el sitemap, ~98M tokens disponibles. Se va a usar solo una parte para no sesgar el modelo al español juridico, que es justamente el registro MENOS paraguayo del conjunto.
- ~15% Wikipedia sobre Paraguay.
- ~10% institucional — INE, datos.gov.py.
Un modelo entrenado sobre corpus paraguayo es un objetivo distinto de este, y es el que sigue.
Enlaces
- Sitio del proyecto: https://yvyrai.lat
- Paper / documentacion tecnica: https://yvyrai.lat/paper
- Equipo: https://yvyrai.lat/equipo
- Preprint de la arquitectura (Zenodo, CC-BY-4.0): DOI 10.5281/zenodo.20533759
Que cubre el preprint y que no. El paper describe la ARQUITECTURA (deliberacion recurrente, verificacion interna, reparacion condicional, computo adaptativo). Los experimentos que reporta son de una configuracion de 15M corrida como validacion de ingenieria, y el propio paper dice explicitamente que no reclama superioridad sobre sistemas existentes y que el benchmarking a escala queda diferido. Este modelo de 105M es posterior al preprint, asi que los numeros de esta pagina no estan en esa version del paper todavia. Se van a actualizar en una version siguiente.
Autores / equipo
- Juan Manuel Acosta Ramírez — arquitectura y entrenamiento
- Equipo completo de YvyrAI: https://yvyrai.lat/equipo
Cita
Para la arquitectura, citar el preprint (es lo que esta registrado y fechado):
@misc{yvyrai2026,
title = {YvyrAI: A Spanish-First Recurrent-Deliberation Language Model
Architecture with Internal Verification, Conditional Repair,
and Adaptive Compute},
author = {Acosta Ramírez, Juan Manuel and Irrazábal Ruiz Díaz, Mauricio José},
year = {2026},
publisher = {Zenodo},
doi = {10.5281/zenodo.20533759},
url = {https://doi.org/10.5281/zenodo.20533759}
}
Para estos pesos en concreto:
@misc{yvyrai100mnano,
title = {YvyrAI-100m-Nano: LLM en español con profundidad recurrente,
entrenada desde cero en Paraguay},
author = {Juan Manuel Acosta Ramírez},
year = {2026},
url = {https://huggingface.co/Manuel12435/YvyrAI-100m-Nano},
note = {105.86M parametros, 891,135,906 tokens}
}
Aviso sobre los datos
El corpus incluye Wikipedia en español (CC-BY-SA) y CulturaX. Antes de elegir la
licencia de los pesos conviene revisar como afecta eso a tu caso: el proyecto
excluyo a proposito las fuentes con copyleft fuerte
(YVYRAI_ALLOW_SHARE_ALIKE_DATA desactivado) pero Wikipedia sigue presente.
- Downloads last month
- 156