feat(local-llm): B0.5 — llama-swap + lokale Modellauswahl in Diagnostic
Mehrere lokale Modelle, on-demand geladen/geswappt, in Diagnostic waehlbar. Design: das Brain schickt den Modellnamen (aus local_llm.json) im llm_request mit -> Adapter -> llama-swap laedt/swappt. Keine separate Gamebox-Config noetig. - xtts: `llama`-Container -> `llama-swap` (unified-cuda), config.yaml mit qwen3-8b (Standard) + qwen3-4b; Auto-Download via -hf, Cache /models geteilt (qwen3-8b schon da). Adapter -> llama-swap:8080, Timeout 600s (Erst-Download). - adapter: `model` aus dem Request an llama-swap durchreichen (Fallback env). - brain: router.load_config liest localLlmModel; local_llm_chat(model=...); agent gibt cfg-Modell mit; bridge reicht model durch (_local_llm + Route). - diagnostic: /api/local-models-list (aus /shared/config/local_models.json, seeded), local-llm-config um localLlmModel erweitert; Dropdown "Lokales Modell" im Settings-Block + Erst-Download-Hinweis. BLIND gebaut (Gamebox nicht testbar hier): llama-swap CLI/Config-Pfad beim ersten Start via `docker logs aria-llama-swap` pruefen. Live-Lade-Status (Adapter->Diagnostic) ist B0.5-2 (Folgeschritt). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -30,7 +30,8 @@ CONFIG_PATH = os.environ.get("LOCAL_LLM_CONFIG", "/shared/config/local_llm.json"
|
||||
|
||||
ESCALATE_MARKER = "<<ESCALATE>>"
|
||||
|
||||
DEFAULT_CONFIG = {"enabled": False, "localOnly": False, "toolVariant": "slim"}
|
||||
DEFAULT_CONFIG = {"enabled": False, "localOnly": False,
|
||||
"toolVariant": "slim", "localLlmModel": "qwen3-8b"}
|
||||
|
||||
|
||||
def load_config() -> dict:
|
||||
@@ -42,6 +43,9 @@ def load_config() -> dict:
|
||||
"enabled": bool(data.get("enabled", False)),
|
||||
"localOnly": bool(data.get("localOnly", False)),
|
||||
"toolVariant": data.get("toolVariant", "slim") or "slim",
|
||||
# Welches lokale Modell llama-swap laden soll (B0.5). Muss zu einem
|
||||
# Key in xtts/llama-swap/config.yaml passen.
|
||||
"localLlmModel": (data.get("localLlmModel") or "qwen3-8b").strip(),
|
||||
}
|
||||
except (FileNotFoundError, json.JSONDecodeError):
|
||||
return dict(DEFAULT_CONFIG)
|
||||
|
||||
Reference in New Issue
Block a user