---
title: "Training nibiru-coder"
description: "Wie Sie ein Nibiru-gesmacktes Chatmodell auf Ihrem eigenen Ollama registrieren. Eine Modelldatei, ein Shell-Skript, sechzig Sekunden."
---

Das Standard-Chatmodell des Frameworks ist **`nibiru-coder:1.0`** — ein Nibiru-geschnittenes Qwen 2.5 Coder 14B, das Sie auf Ihrem Ollama-Server registrieren. Der Trainingspipeline befindet sich im Verzeichnis `application/module/ai/training/`.

## Was `nibiru-coder` ist (und nicht ist)

`nibiru-coder:1.0` ist **kein** LoRA Fine-Tuning. Es sind die gleichen Gewichte von `qwen2.5-coder:14b`, verpackt mit einem eingebauten System-Prompt, der:

- erläutert MMVC, Module, den Dispatcher und die Singletons,
- erzwingt die Konventionen von Nibiru (`pageAction`, `navigationAction`, `View::assign`, `Form::create`, die Schreibweise von `Pageination`),
- fördert das Modell zu Nibiru-idiomatischen Antworten anstelle allgemeiner Laravel / Symfony-Ratschläge.

Die Anpassung des System-Prompts erfolgt **unmittelbar** — keine GPU-Training, keine Datensatz-Vorbereitung erforderlich. Es bietet ungefähr 80 % der Wertschöpfung einer echten LoRA bei null Trainingskosten. Wenn Sie ein Budget für eine echte Feinabstimmung haben, siehe unten *Echte LoRA-Pfad*.

## Bauen Sie es
```bash
./application/module/ai/training/build.sh           # builds nibiru-coder:1.0
./application/module/ai/training/build.sh 1.1       # bump tag for iterations
```
Das Skript:

1. Liest die Datei `Modelfile` neben sich.
2. Sendet eine POST-Anfrage an `${OLLAMA_BASE_URL}/api/create` (Standardwert `https://api.neuronetz.ai`).
3. Führt einen Rauchtest-Chat-Aufruf durch, um zu bestätigen, dass der neue Tag antwortet.

Nachdem es erfolgreich ist, setzen Sie das Modell in `application/module/ai/settings/ai.ini`:
```ini
[AI]
chat.model          = "nibiru-coder:1.0"
chat.fallback_model = "qwen2.5-coder:14b"
```
…und jede Instanz von `\Nibiru\Module\Ai\Ai` in Ihrer Anwendung kommuniziert mit ihr. Der Fallback stellt sicher, dass nichts bricht, wenn Sie den Tag noch nicht erstellt haben.

## Arbeiten Sie an dem System-Prompt weiter

Der `SYSTEM """ ... """`-Block im Modelfile ist der Schlüssel. Verfestigen Sie die Konventionen, fügen Sie neue Beispiele hinzu und verweisen Sie auf spezifische Framework-Dateien. Führen Sie `build.sh` erneut mit einem neuen Tag (`1.1`, `1.2`, …) aus und führen Sie eine A/B-Vergleichsphase im Vergleich zum vorherigen Tag in Ihrer Anwendung durch.
```bash
./application/module/ai/training/build.sh 1.1
# Edit ai.ini → chat.model = "nibiru-coder:1.1"
# Compare answers in the Oracle widget or via smoke-test.php
```
## Echte LoRA-Pfad

Wenn Sie ein Modell benötigen, dessen **Gewichte** Nibiru kennen – nicht nur sein System-Prompt – bietet Ihnen der Korpus-Exporter die Lösung.
```bash
cd docs
npm run build:corpus
```
Generiert JSONL-Dateien unter `dist/corpus/`:

| Datei | Format | Verwendung |
|---|---|---|
| `chat.jsonl` | sharegpt-stilige Nachrichten | Axolotl, LLaMA-Factory, Unsloth |
| `instructions.jsonl` | Anweisung/Eingabe/Ausgabe | Alpaca-artige Trainer |
| `completion.jsonl` | Aufforderung/Ergebnis | Legacy Textabschluss Feinabstimmungen |
| `chunks.jsonl` | Chunk-Metadaten | RAG / Evaluierungsset-Konstruktion |

Ein praktisches Rezept für eine 8B-Basis auf einem einzelnen A100 / 4090:
```yaml
# axolotl.yml
base_model: meta-llama/Llama-3.1-8B-Instruct
adapter: lora
lora_r: 16
lora_alpha: 32
lora_dropout: 0.05
lora_target_modules: [q_proj, k_proj, v_proj, o_proj]

datasets:
  - path: docs/dist/corpus/chat.jsonl
    type: sharegpt

sequence_len: 4096
sample_packing: true
gradient_accumulation_steps: 4
micro_batch_size: 2
num_epochs: 3
optimizer: adamw_bnb_8bit
learning_rate: 0.0002
warmup_ratio: 0.05
bf16: true
```
Nach dem Training:

1. Konvertieren Sie das LoRA in GGUF (`llama.cpp`'s `convert_hf_to_gguf.py`).
2. Erstellen Sie eine Ollama Modelfile mit `FROM ./your-lora.gguf`.
3. Führen Sie `./build.sh 2.0` aus, um es als `nibiru-coder:2.0` zu registrieren.

Der Framework-Code ändert sich nicht — ändern Sie `chat.model` in `ai.ini`, und Sie verwenden die neuen Gewichte.

## Rauchtest
```bash
php application/module/ai/training/smoke-test.php
```
Überprüft:

- Der Ollama-Server ist erreichbar.
- Das Modell reagiert auf eine Einzelschritt-Anfrage.
- Mehrschrittige Konversationskontexte funktionieren.
- Embeddings funktionieren (wenn `nomic-embed-text` nicht gepullt wird, wird eine klare Nachricht ausgegeben).

Führen Sie nach jeder Änderung der Datei `Modelfile` aus, bevor Sie bereitstellen.

## Häufige Fallen

- **`Modelfile` System-Prompt ist zu lang.** Einige Ollama-Versionen begrenzen System-Prompts. Halten Sie es unter etwa 3000 Token.
- **Vergessen des FROM-Modells.** `qwen2.5-coder:14b` muss bereits auf dem Server vorhanden sein. Überprüfen Sie mit `curl ${OLLAMA_BASE_URL}/api/tags`.
- **Tag-Kollisionen.** Das erneute Ausführen von `build.sh 1.0` überschreibt das bestehende `nibiru-coder:1.0`. Verwenden Sie für Iteration neue Tags; fixieren Sie spezifische Tags in `ai.ini` für die Produktion.
- **Verwirrung mit `--no-stream`.** Das Build-Skript verwendet `stream: false`, sodass die Antwort als ein JSON zurückkommt. Wenn Sie zu einem gestreamten Modus wechseln, analysieren Sie Zeile für Zeile.
