Corpus de entrenamiento
Cómo se exportan los documentos como un conjunto de entrenamiento listo para LoRA y cómo regenerarlo.
Cada página de esta documentación también es un punto de datos de entrenamiento. Nibiru incluye un script que extrae un corpus JSONL limpio adecuado para el ajuste fino de una modelo de peso abierto — Llama, Mistral, Qwen, Gemma — en conocimientos específicos de Nibiru.
Ejecútalo
Sección titulada «Ejecútalo»cd docsnpm run build:corpusEso escribe:
docs/dist/corpus/├── instructions.jsonl # instruction → response pairs├── chat.jsonl # OpenAI/Anthropic chat-message format├── completion.jsonl # plain prompt → completion (legacy)└── chunks.jsonl # raw Markdown chunks (one per H2/H3 section)Formatos
Sección titulada «Formatos»instrucciones.jsonl
Sección titulada «instrucciones.jsonl»Instrucciones de calentamiento amigables para LoRA:
{ "instruction": "How do I scaffold a new module in Nibiru?", "input": "", "output": "Run `./nibiru -m <name>`, optionally with `-g` for Graylog hooks. This creates `application/module/<name>/` with traits/, plugins/, interfaces/, settings/<name>.ini and the main `<name>.php` class implementing `IModule`."}Cada entrada se genera a partir de una sección de documentos con una pregunta clara (derivada del título H2/H3) y el cuerpo de la sección como la respuesta.
chat.jsonl
Sección titulada «chat.jsonl»Formato de OpenAI chat / Mensajes de Anthropic:
{ "messages": [ {"role": "system", "content": "You are an expert on the Nibiru PHP framework."}, {"role": "user", "content": "How do I scaffold a new module?"}, {"role": "assistant", "content": "Run `./nibiru -m <name>`. …"} ]}Compatible con las ajustes de OpenAI, la API de Anthropic para evaluación y la mayoría de las herramientas LoRA que esperan entradas en formato de chat (plantilla sharegpt de Axolotl, Unsloth, LLaMA-Factory).
chunks.jsonl
Sección titulada «chunks.jsonl»Fragmentos sin procesar para su uso como datos de recuperación RAG:
{ "id": "core/modules#observer-pattern", "title": "The observer pattern", "url": "/core/modules/#the-observer-pattern", "section": "core/modules", "language": "en", "tokens": 412, "content": "Modules implementing `SplSubject` can broadcast events…"}Este es exactamente el archivo que usa internamente Oracle.
Cómo se derivan los fragmentos
Sección titulada «Cómo se derivan los fragmentos»El constructor de corpus recorre cada archivo .md / .mdx bajo src/content/docs/, lo parsea en un AST y lo divide en bloques a los límites de H2/H3. Impone:
- Un fragmento por sección H2 (o H3 si la H2 está vacía).
- ~200–800 tokens por fragmento (dividir si es más largo, fusionar si es más corto).
- Las barras de código se mantienen intactas — nunca dividir en medio de un bloque.
- Cada fragmento lleva su ruta fuente, URL anclaje y código de idioma.
El script está en scripts/build-corpus.mjs y es completamente configurable.
Receta sugerida para LoRA
Sección titulada «Receta sugerida para LoRA»Una línea base pragmática para un modelo base de 8 mil millones de parámetros en una sola A100 / 4090:
base_model: meta-llama/Llama-3.1-8B-Instructadapter: loralora_r: 16lora_alpha: 32lora_dropout: 0.05lora_target_modules: [q_proj, k_proj, v_proj, o_proj]
datasets: - path: docs/dist/corpus/chat.jsonl type: sharegpt
sequence_len: 4096sample_packing: truegradient_accumulation_steps: 4micro_batch_size: 2num_epochs: 3optimizer: adamw_bnb_8bitlearning_rate: 0.0002warmup_ratio: 0.05bf16: trueEntrena, luego fusiona los pesos de LoRA y sirve mediante Ollama, vLLM o text-generation-inference. Cambia el MODEL del Oracle para que apunte a tu punto final local y tendrás una experiencia de usuario de chat completamente nativa de Nibiru.
Vuelve a ejecutar en cada cambio de documento
Sección titulada «Vuelve a ejecutar en cada cambio de documento»Conéctalo a tu CI:
- name: Build corpus run: cd docs && npm run build:corpus- name: Upload corpus artifact uses: actions/upload-artifact@v4 with: name: nibiru-corpus path: docs/dist/corpus/Cuando cambian las documentaciones, el corpus se reconstruye; los consumidores (canales de formación, índices RAG) siempre tienen los datos más recientes.
Idiomas
Sección titulada «Idiomas»El corpus respeta la configuración regional. Las páginas bajo en/ están etiquetadas como language: en, las páginas alemanas como language: de, y así sucesivamente. Entrena LORAs monolingües o multilingües filtrando el JSONL en el campo language.
Licencia
Sección titulada «Licencia»La documentación está licenciada bajo la misma BSD-4-Clause que el marco en sí mismo. El corpus exportado hereda esa licencia — tienes libertad para afinar modelos en él con fines comerciales, siempre y cuando se requiera atribución.