feat(xtts): OpenAI-Endpunkt fuers lokale LLM + OpenHands-Profil

llama-swap ist bereits OpenAI-kompatibel, war aber nur im Compose-Netz erreichbar
(kein ports-Mapping). Jetzt nutzbar fuer OpenHands, Continue, Open WebUI & Co.

- compose: llama-swap veroeffentlicht 8080 als
  ${LLM_OPENAI_BIND:-127.0.0.1}:${LLM_OPENAI_PORT:-8081} — sicher per Default
  (nur localhost), fuer LAN bewusst BIND=0.0.0.0 setzen.
- llm-adapter: API-Key wird in JEDEN llama-server-Befehl der generierten
  llama-swap-Config eingehaengt (--api-key, shlex-gequotet). Quelle: .env
  (Vorrang) sonst /models/openai_key.json (0600). Neuer Handler
  llm_openai_config setzt ihn zur Laufzeit und lehnt bei .env-Vorrang ab.
  worker_hello meldet Port/Bind/keySet/envLocked — den Key NIE (Broadcast!).
- Diagnostic: pro LLM-Box Endpunkt-Zeile mit Base-URL, Key-Status und Eingabe.
  Bei .env-Vorrang ist das Feld schreibgeschuetzt (🔒). Warnung, wenn im LAN
  offen ohne Key. Der PORT wird nur ANGEZEIGT: er ist ein Docker-Port-Mapping
  und steht beim Container-Start fest — dafuer ist die .env zustaendig.
- rvs: llm_openai_config(_result) in ALLOWED_TYPES (sonst still verworfen).
- Neues Profil 'openhands' (COMPOSE_PROFILES=llm,openhands) mit Port/Bind/Modell
  aus der .env, lokales LLM vorbelegt. Ohne Profil aendert sich nichts.
- .env.example + README: alle Variablen, Sicherheitshinweise (offener Endpunkt,
  Docker-Socket bei OpenHands), curl-Test und wann der Key greift.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-09-30 22:30:37 +02:00
co-authored by Claude Opus 4.8
parent dc77933014
commit d6c7502810
7 changed files with 319 additions and 1 deletions
+29
View File
@@ -56,3 +56,32 @@ RVS_SNI=
# WHISPER_MODEL=small # tiny|base|small|medium|large-v3 (Hot-Swap via Diagnostic)
# WHISPER_LANGUAGE=de
# LLM_MODEL=qwen3-8b # Key aus llama-swap/config.yaml
# ─── OpenAI-Endpunkt des lokalen LLM (optional) ───
# llama-swap ist OpenAI-kompatibel (/v1/chat/completions, /v1/models). Damit
# koennen Fremd-Tools direkt auf das lokale Modell: OpenHands, Continue,
# Open WebUI, Aider ... Base-URL dann: http://<box>:<LLM_OPENAI_PORT>/v1
#
# LLM_OPENAI_BIND steuert, WER drankommt:
# 127.0.0.1 nur diese Maschine (Default, sicher)
# 0.0.0.0 das ganze LAN → dann UNBEDINGT LLM_OPENAI_KEY setzen!
LLM_OPENAI_BIND=127.0.0.1
LLM_OPENAI_PORT=8081
# API-Key. Leer = Endpunkt ohne Authentifizierung (nur mit BIND=127.0.0.1 ok).
# WICHTIG: Steht hier ein Wert, hat er VORRANG — das Feld ist dann in der ARIA-
# Diagnostic schreibgeschuetzt. Leer lassen, wenn Du den Key lieber dort pro Box
# setzen willst (er wird dann auf der Box unter /models/openai_key.json abgelegt).
# Der Key wirkt, sobald ein Modell das naechste Mal geladen wird.
LLM_OPENAI_KEY=
# ─── OpenHands (optional, eigenes Profil) ─────────
# Standalone-Entwickler-Agent, der das lokale LLM nutzt. Start:
# COMPOSE_PROFILES=llm,openhands docker compose up -d
# Dann http://<box>:<OPENHANDS_PORT> aufrufen.
# ACHTUNG: OpenHands startet eigene Arbeits-Container und bekommt dafuer den
# Docker-Socket — das ist faktisch Root-Zugriff auf diese Maschine.
OPENHANDS_BIND=127.0.0.1
OPENHANDS_PORT=3000
# Wie OpenHands das lokale Modell anspricht (Container-intern, daher :8080):
OPENHANDS_LLM_BASE_URL=http://llama-swap:8080/v1
OPENHANDS_LLM_MODEL=openai/qwen3-8b