llm mode

llm mode schaltet das Inferenz-Backend in einem Schritt um — also die Dienste, die Apparat für Bedeutungssuche (Embeddings) und für den Dialog mit dem Vault (Sprachmodell) nutzt. Damit wechselst du bequem zwischen zwei Betriebsarten:

Der eigentliche Aufwand beim Umschalten ist eine Handvoll Einstellungen in der .env. llm mode schreibt genau die — du tippst ein Wort statt acht Zeilen.

Aktiven Modus anzeigen

Ohne Argument zeigt das Kommando, welcher Modus gerade aktiv ist:

apparat llm mode
LLM:
  driver:   ollama
  endpoint: http://ollama:11434
  model:    qwen2.5:7b-instruct
  auth:     none
Embedding:
  driver:   ollama
  endpoint: http://ollama:11434
  model:    jina/jina-embeddings-v2-base-de
  auth:     none

Reachability: apparat vector:ping && apparat chat:ping

Die Anzeige liest nur die Konfiguration und nimmt selbst keine Verbindung auf. Ob die Dienste tatsächlich antworten, prüfen vector ping und chat ping — die laufen im Container, wo die Dienst-Adressen auflösbar sind.

Auf lokal zurückstellen

apparat llm mode local

Setzt beide Dienste auf den mitgelieferten lokalen Container zurück — der Auslieferungszustand. Jeder vorher gesetzte Wert (Endpunkt, Modell, Zugangstoken) wird dabei sauber überschrieben, du musst nichts von Hand zurückräumen.

Auf ein Remote-Backend umstellen

Ein Remote-Modus ist ein Profil. Die Zugangsdaten dafür liegen in einer eigenen Datei .env.<name>.local im Projektverzeichnis — sie wird bewusst nicht mitversioniert, damit der Zugangstoken niemals im Repository landet. Lege die Datei einmalig an, zum Beispiel als Profil studio:

# .env.studio.local
APPARAT_LLM_DRIVER=openai
APPARAT_LLM_ENDPOINT=http://192.168.10.20:8001
APPARAT_LLM_MODEL=qwen3.6-35b-a3b
APPARAT_LLM_API_KEY=<zugangstoken>
APPARAT_EMBEDDING_DRIVER=openai
APPARAT_EMBEDDING_ENDPOINT=http://192.168.10.20:8002
APPARAT_EMBEDDING_MODEL=bge-m3
APPARAT_EMBEDDING_API_KEY=<zugangstoken>
COMPOSE_PROFILES=

Die Adresse ist jeweils die Basis-URL ohne /v1 — Apparat hängt den Rest selbst an. Der Zugangstoken ist optional; ein Endpunkt ohne Anmeldung lässt die beiden API_KEY-Zeilen einfach weg. COMPOSE_PROFILES= leer zu setzen verhindert, dass der lokale Container im Remote-Modus unnötig mitstartet.

Danach genügt der Profilname:

apparat llm mode studio

Das Kommando übernimmt die Profilwerte, ergänzt fehlende Schlüssel aus dem lokalen Standard und zeigt zum Schluss, was sich geändert hat (der Zugangstoken wird dabei nur maskiert ausgegeben). Anschließend nennt es die zwei Schritte, mit denen der laufende Webdienst die neue Konfiguration übernimmt:

php artisan config:clear
docker compose exec -T web-local php artisan octane:reload

Zum Prüfen, ob das Backend antwortet:

apparat vector ping && apparat chat ping

Umschalten kostet keinen Neuaufbau

Jedes Embedding-Modell führt seinen eigenen Vektor-Index pro Vault. Lokales und Remote-Modell überschreiben sich also nicht: Du kannst hin- und herschalten, ohne jedes Mal neu zu indizieren — der jeweils andere Index bleibt erhalten und steht beim Zurückwechseln sofort wieder bereit.

Nur wenn du ein Embedding-Modell zum ersten Mal verwendest, ist sein Index noch leer. Dann baust du ihn einmalig auf:

apparat vector rebuild <vault>

Bis dahin fällt die Bedeutungssuche auf diesem Modell automatisch auf die Volltextsuche zurück — Suchen bleibt also immer möglich.