Files
ARIA-AGENT/xtts/llm-adapter
duffyduckandClaude Opus 4.8 5c25d6abeb feat(llm): Modell-Download + HuggingFace-Katalog (Stage D)
Neue lokale GGUF-Modelle per Knopf auf eine Box laden — ohne Image-Rebuild.

- llm-adapter besitzt jetzt llama-swaps Config: generiert
  /models/llama-swap.config.yaml aus Basis-Template (xtts/llama-swap/config.yaml)
  + persistenter Registry /models/aria_models.json. Neue RVS-Handler
  llm_provision_model / llm_remove_model (targetInstance-gefiltert): Registry+
  Config schreiben, llama-swap-Reload anstossen, neu announcen, Warmup (zieht das
  GGUF via -hf, Fortschritt via service_status loading→ready). pyyaml ergaenzt.
- compose: llama-swap liest --config /models/llama-swap.config.yaml; llm-adapter
  mountet ./models (rw) + ./llama-swap (ro Template).
- diagnostic/server.js: /shared/config/llm_catalog.json (kuratierte GGUF-Liste)
  + GET /api/llm-catalog + POST /api/llm-catalog/refresh (HuggingFace-API-Merge);
  Actions llm_provision_model / llm_remove_model / llm_test; llm_provision_result
  an Browser durchgereicht.
- diagnostic/index.html: "Modell-Katalog"-Card (HF-Refresh, Ziel-Box waehlen,
  Laden, Verfuegbarkeit) + Test-Chat-Zeile ans lokale LLM (Antwort + Latenz).

Download nutzt llama-swaps vorhandenen -hf-Pfad (kein neuer Download-Code).
Reload ist der einzige Deploy-Verify-Punkt (llama-swap-Image); Fallback Box-up.
Deploy: diagnostic neu bauen (VM) + llm-Boxen neu bauen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-19 03:12:31 +02:00
..

Local-LLM-Adapter (AI-Box) — Plan B, Phase B0

Bringt ein lokales, schnelles LLM (Qwen3 8B) auf die AI-Box und haengt es per RVS an ARIA — fuer die einfachen ~80 % der Turns (<1 s), waehrend Claude das Tiefen-Hirn bleibt. Siehe docs/plan-local-llm-router.md im Repo-Root.

Zwei Container (in xtts/docker-compose.yml)

  • llamallama.cpp-Server (CUDA), serviert das GGUF OpenAI-kompatibel auf :8081, nur im Compose-Netz.
  • llm-adapter — verbindet sich per Token an den RVS (wie f5tts/whisper), nimmt llm_request entgegen, ruft llama lokal, antwortet llm_response.

Modell — Auto-Download (nichts manuell ablegen)

llama.cpp zieht das GGUF beim ersten Start selbst von Hugging Face und cached es unter xtts/models/ (Bind-Mount → kein Re-Download bei Restart). Default: Qwen3 8B, Q4_K_M aus dem offiziellen Repo Qwen/Qwen3-8B-GGUF.

Modell/Quant wechseln = in der .env der AI-Box setzen (kein Code):

LLM_HF_REPO=Qwen/Qwen3-8B-GGUF     # HF-Repo
LLM_HF_QUANT=Q4_K_M                # Quant-Tag (Q4_K_M, Q5_K_M, Q8_0, …)
LLM_CTX=8192                       # Kontextfenster (kleiner = weniger VRAM)

Mistral statt Qwen testen (A/B): LLM_HF_REPO auf ein Mistral-Small-3-GGUF-Repo umstellen + Container neu — Ein-Zeilen-Wechsel, kein Code.

Der erste Start lädt mehrere GB — Log zeigt den Download-Fortschritt. Danach liegt das GGUF im Cache und der Start ist sofort.

Modell-Auswahl in ARIA Diagnostic (on-demand laden/aktivieren mehrerer Modelle) ist ein geplanter Folge-Baustein via llama-swap — siehe docs/plan-local-llm-router.md.

Start (auf der AI-Box)

cd xtts
docker compose up -d --build llama llm-adapter
docker logs -f aria-llm-adapter     # "RVS verbunden — llm-adapter online"

Standalone-Test (ohne ARIA), direkt gegen llama.cpp

curl http://localhost:8081/v1/chat/completions -H "Content-Type: application/json" -d '{
  "messages":[{"role":"system","content":"Du bist ARIA."},
              {"role":"user","content":"sag kurz hallo"}],
  "max_tokens":64
}'

VRAM-Hinweis (RTX 3060, 12 GB)

whisper-small (~12) + f5tts (~12) + qwen3-8b-q4 (~6) ≈ 910 GB. Passt, aber knapp. Bei OOM: LLM_CTX reduzieren, -ngl senken (weniger Layer auf GPU), oder kleineres Quant (Q4_K_S / IQ4_XS).

Nachrichten-Kontrakt (RVS)

  • llm_request{ requestId, messages:[{role,content}], max_tokens?, temperature?, stop? }
  • llm_response{ requestId, ok, content, error?, model, elapsedMs }
  • llm_partial — reserviert fuer B2 (Token-Streaming), noch ungenutzt.