Modelle erscheinen jetzt mit ihrem ECHTEN Namen (= API-Name, den man in Zed/
OpenCode angibt) statt unter "coder"/"vision". Die Rolle wird ein zusaetzlicher,
sprechender Name (llama-swap-`aliases`) -> in der API funktionieren BEIDE.
- llamaswap.py: model_id_from_path (Repo-Ordner ohne -GGUF) + set_role_alias
(Rolle als eindeutiger Alias, beim Setzen bei anderen Modellen entfernt) +
ROLE_IDS (vision/coder/scout/reviewer/manager).
- models.py: register schreibt Key=Modellname, Rolle als Alias; /status liefert
role + aliases + api_ids; neuer POST /set_role. Rueckwaertskompatibel: Legacy-
Eintraege (coder/vision ohne Alias) behalten ihren Key als Rolle.
- cookbook.py: install-recipe/-model nutzen dasselbe Schema (Name + Rollen-Alias).
- models.js: Zeile zeigt echten Namen + Rollen-Tag + API-Name (klick=kopieren);
neuer "Rolle"-Dialog mit 5 Schnellwahl-Rollen + freier Eingabe.
- cookbook.js: Profi-Download-Feld ist jetzt optionale Rolle (Name kommt vom
Modell), Pflichtfeld-Pruefung entsprechend gelockert.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- status(): Flag "incomplete" fuer Rollen ohne Modell (-m), z.B. provision.sh-
Platzhalter. Wurden bisher irrefuehrend als "bereit / ? . 8K . ?" gezeigt.
- Modelle-Tab: leere Rollen klar als "kein Modell hinterlegt / leer" + Aktion
"Modell zuweisen" (-> Cookbook); nicht im Schnelltest-Dropdown waehlbar
- register(): erkennt einen mmproj-Projektor im selben Ordner und ergaenzt
--mmproj + --jinja automatisch (Vision braucht das in llama.cpp)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- POST /api/delete_model: entlaedt das Modell, traegt es aus der config.yaml
aus und loescht optional die GGUF-Dateien, um Speicher freizugeben
- Sicherheit: Loeschen STRENG auf MODELS_DIR begrenzt (Pfad-Resolve-Check);
loescht den ganzen Repo-Unterordner inkl. .cache nur, wenn er ein direktes
Kind von MODELS_DIR ist und kein anderes Modell eine Datei darin nutzt,
sonst nur die einzelne GGUF-Datei. Meldet freigegebene GB zurueck.
- Modelle-Tab: roter "Loeschen"-Button je Zeile mit Klartext-Sicherheitsabfrage
(unwiderruflich) via confirmModal(danger)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
`hf` gibt im Nicht-TTY-Modus keinen Fortschritt aus (am Bosgame verifiziert:
0 CR-Frames). Stattdessen pollt jobengine.attach_download_progress die
wachsende <local-dir>/.cache/huggingface/download/*.incomplete-Datei gegen die
Gesamtgroesse aus der HF-Tree-API (cookbook.hf_file_size) -> exaktes %.
- attach_download_progress an /api/download, install-recipe, install-model
- Frontend (Aktivitaet + Server-Karte): nutzt job.progress bevorzugt,
Log-%-Parsing bleibt Fallback fuer Tools, die selbst Prozente ausgeben
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Backend:
- hf_bin() + HF_DOWNLOAD_ENV zentral in config.py; install-recipe und
install-model in cookbook.py nutzten weiter das fehlende `hf` + falsches
XET-Env -> Haupt-Installationsweg war ebenso kaputt, jetzt konsistent gefixt
Frontend:
- Server: laufende Updates (LLM-Engine/OS) live auf der Server-Seite mitlesbar,
inkl. klarer Fertig-/Fehlgeschlagen-Meldung (onJobs + Aktueller-Vorgang-Karte)
- Cookbook/Profi-Modus: meistgeladenes, passendes Modell wird als
"★ Beste Wahl für dein System" hervorgehoben (analog zu den Templates)
- Verbinden: OpenCode korrekt per opencode.json (@ai-sdk/openai-compatible)
statt irrefuehrender Felder; erklaert "Connect to API"-Fehler (LAN-IP statt
localhost)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- write_config schreibt atomar (tmp + os.replace) -> llama-swap (-watch-config)
sieht nie eine halb geschriebene config.yaml; PermissionError wird in eine
klare Klartext-Meldung uebersetzt (Hinweis auf chown)
- generischer Exception-Handler: unerwartete Fehler kommen als lesbare JSON-
Meldung im UI an statt als nackter 500 (Anfaenger-Diagnose)
- Download: nutzt die `hf`-CLI aus dem venv (Dienst-PATH kennt venv/bin nicht)
+ HF_HUB_DISABLE_XET=1 statt HF_XET_HIGH_PERFORMANCE (XET-Haenger bei ~6 MB)
- huggingface_hub als Dependency ergaenzt (liefert `hf`)
- favicon.ico: themed SVG (Link-Tag + Route) -> kein 404 mehr
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Swapping-Klartext + Spitzenbedarf (peak_ram) pro Modell: Modelle-Konfig + Cookbook-Setup-Modal
zeigen 'nur ein Modell gleichzeitig, groesstes zaehlt'. models.py: peak_ram_gb/_optimal in Meta.
- Kontextfenster: infoDot(ⓘ)-Helfer in ui.js + Tooltips an ctx-Feldern.
- Guides-Tab komplett neu = echter Anfaenger-Guide (LLM/GGUF/Quant/Kontext/Swapping/MCP/Skills/Agenten).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>