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

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

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
Safetensors
Model size
0.1B params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support