Cordis-Konfiguration
Die eingebettete Cordis-/DSH-Engine wird über zwei Dokumente und Umgebungsvariablen konfiguriert. Beide Dokumente liegen standardmäßig neben dem Backend; LIBRE_CORDIS_CONFIG und LIBRE_CORDIS_SETTINGS ändern ihre Pfade.
| Dokument | Verantwortlich | Struktur | Zweck |
|---|---|---|---|
cordis.patch.yml | Cordis Loader | YAML-Array auf oberster Ebene | Plugin-Einträge zum Einbinden der Engine |
cordis.config.yml | Libre-WebUI-Host | YAML-Mapping | Anbieter, Quelle der Zugangsdaten und Funktionsschalter |
Zwei Dokumente sind erforderlich, weil der Cordis-Baumträger Include die Komposition selbst liest und jede Datei ablehnt, die kein Array auf oberster Ebene enthält. Host-Einstellungen können daher nicht in derselben Datei stehen.
Aktivierung
Ein Administrator aktiviert die Engine unter Einstellungen → Benutzerverwaltung → Zugriff und Richtlinien → Cordis-Engine. Die Änderung gilt sofort: Nach dem Aktivieren startet die Engine bei der nächsten Anfrage; das Deaktivieren entsorgt sie. Ein Neustart ist nicht erforderlich.
Zwei Quellen auf Bereitstellungsebene können den Wert festlegen. Beide sperren den Schalter, statt stillschweigend überschrieben zu werden:
| Quelle | Wirkung |
|---|---|
Umgebungsvariable LIBRE_CORDIS_ENABLED | true/false legt den Funktionszustand für die Bereitstellung fest |
features.enabled in cordis.config.yml | Ein ausdrücklicher Wert legt ihn fest; ohne Schlüssel entscheidet der Administrator |
Die Engine benötigt außerdem eine Komposition. Beginne mit den mitgelieferten Beispielen:
cd backend
cp cordis.patch.example.yml cordis.patch.yml
cp cordis.config.example.yml cordis.config.yml
Der Host liest cordis.patch.yml, führt seine Standardwerte im Brückeneintrag zusammen und schreibt das Ergebnis nach <DATA_DIR>/cordis-runtime/cordis.composed.yml. Diese generierte Datei ist ersetzbar und darf nicht bearbeitet werden. Maßgeblich ist die cordis.patch.yml des Betreibers.
cordis.config.yml
trace: false
model:
provider: libre-webui
# Empty selects the authenticated caller's configured default/fallback route.
model: ''
features:
# Omit enabled to let the administrator use the Settings toggle.
streaming: true
tools: true
persistence: true
# Optional absolute paths; defaults live under Libre WebUI's data directory.
# workspacePath: /absolute/path/to/workspace
# sessionStorePath: /absolute/path/to/sessions
Schlüssel der obersten Ebene
| Schlüssel | Typ | Standard | Bedeutung |
|---|---|---|---|
trace | boolesch | false | Jeden Cordis-Aktivierungsübergang protokollieren |
model | Mapping | – | Modelladapter auswählen; siehe unten |
features | Mapping | – | Funktionsschalter; siehe unten |
features
| Schlüssel | Typ | Standard | Bedeutung |
|---|---|---|---|
enabled | boolesch | false | Engine einbinden. Bei false liefert jede Route 503. |
streaming | boolesch | true | Durchläufe mit gestreamter Modellausgabe zulassen |
tools | boolesch | true | Engine-Werkzeuge erlauben und ihre Registry bereitstellen |
persistence | boolesch | true | JSONL-Persistenz aktivieren und ihren Dienst voraussetzen; Sitzungen überstehen Neustarts |
features.enabled ist der einzige Schalter, der zum Einschalten der Brücke gesetzt werden muss. Ein Schlüssel enabled auf oberster Ebene wird nicht gelesen. Alle Funktionsschalter unter features zu halten schafft eine einzige Stelle zum Prüfen der Aktivierung.
model
| Schlüssel | Typ | Standard | Bedeutung |
|---|---|---|---|
provider | Zeichenfolge | libre-webui | libre-webui, deepseek, pi-ai oder none |
apiKeyEnv | Zeichenfolge | OPENAI_API_KEY | Name der Umgebungsvariable mit dem Schlüssel |
route | Zeichenfolge | libre-webui | Anbieterroute, die die Engine in Anfragen benennt |
model | Zeichenfolge | '' | Angeforderte Modell-ID. Für eine manuell deklarierte Route festlegen |
baseUrl | Zeichenfolge | '' | Abweichender Endpunkt; leer verwendet den Standard des Adapters |
providers | Mapping | {} | Manuell deklarierte Anbieterrouten nach Routennamen |
Woher die Modelle der Engine kommen
Die Engine besitzt keine eigene Anbieterkonfiguration. Sie ruft die vorhandenen Libre-WebUI-Anbieter über die Route libre-webui auf, die der Kompositionseintrag libre-webui-llm-adapter registriert. Was im Chat der Oberfläche nutzbar ist, kann auch die Engine verwenden: Lade ein Modell über die Oberfläche, und die Engine sieht es mit den bereits konfigurierten Zugangsdaten und Endpunkten.
Setze dafür model.provider: libre-webui. Dies ist der mitgelieferte Standard; Zugangsdaten und Anbieterendpunkte bleiben in den vorhandenen Einstellungen von Libre WebUI.
model benennt das angeforderte Modell. Leer bedeutet „Standardmodell der Anwendung verwenden“. Hat die Bereitstellung keines, nimmt die Engine das erste von der Anbieterschicht gemeldete Chatmodell und bevorzugt verfügbare lokale Modelle. Embedding-Modelle sind ausgeschlossen. Intern ausgewählte Routen behalten Anbieter und Modell bei: lwui:ollama:<encoded-model> oder lwui:plugin:<encoded-provider>:<encoded-model>. Das verhindert, dass gleiche Modellnamen oder ein Ollama-Ausfall lokale Anfragen an entfernte Anbieter umlenken. Eine ausdrückliche Anbieterwahl schlägt bei dessen Ausfall fehl und wechselt niemals stillschweigend den Anbieter.
Ein leeres model ist nur für libre-webui sicher. Eine durch ein Anbieterpaket bediente Route benötigt einen ausdrücklich benannten Eintrag: dsh-llm-pi-ai löst den Routenkatalog für Katalogabfragen auf, fällt aber nicht auf dessen erstes Modell zurück. Eine manuell deklarierte Route ohne model nimmt daher keinen Durchlauf an und meldet:
provider "<route>" resolves no models; the installed catalog does not describe
this route, so its models must be listed in configuration
Setze model auf eine ID aus der Liste models dieser Route. Das mitgelieferte Beispiel kombiniert route: ollama mit model: llama3.2, passend zu seinem deklarierten Eintrag llama3.2.
provider bestimmt das einzubindende Adapterpaket:
libre-webuibedient die Engine über die eigene Anbieterschicht der Bereitstellung. Das ist der unterstützte Standardmodus.nonestartet die Engine ohne Modellzugriff. Werkzeuge werden aufgelistet und Sitzungen funktionieren, aber Durchläufe können nicht beantwortet werden. Das eignet sich zum Prüfen einer Komposition.deepseekundpi-aibinden direkt ein Anbieterpaket ein. Diese Pakete sind keine Abhängigkeiten dieses Backends: Alle Anbieter-SDKs zusammen brachten 59 transitive Pakete mit, darunter veraltete Pakete für nie genutzte Fähigkeiten. Installiere das gewünschte Paket und binde seinen Eintrag in der Komposition ein; fehlt es, nennt der Host das fehlende Paket.
Eine Anbieterroute wird durch folgende Felder beschrieben:
| Feld | Bedeutung |
|---|---|
displayName | Lesbarer Name |
api | Übertragungsprotokoll, zum Beispiel openai-completions |
baseURL | Basis des Endpunkts |
apiKeyEnv | Umgebungsvariable mit dem Schlüssel |
models | Modellliste; jeder Eintrag enthält id, name, contextWindow, maxTokens |
Zugangsdaten werden niemals in eines der beiden Dokumente geschrieben. apiKeyEnv benennt eine Umgebungsvariable, die der Adapter pro Anfrage auflöst. Ein Schlüsselwechsel benötigt daher keinen Neustart.
cordis.patch.yml
Ein Array mit Cordis-Loader-Einträgen auf oberster Ebene. Das mitgelieferte Beispiel bindet neun Einträge ein und ist der empfohlene Ausgangspunkt.
- id: llm
name: '@deepseek-ai/dsh-llm'
- id: session
name: '@deepseek-ai/dsh-session'
- id: session-projection
name: '@deepseek-ai/dsh-session-projection'
- id: session-persistence
name: '@deepseek-ai/dsh-session-persistence-jsonl'
config:
# The host supplies the resolved sessionStorePath.
- id: system-prompt
name: '@deepseek-ai/dsh-system-prompt'
config:
personaPrefix: ''
- id: tools
name: '@deepseek-ai/dsh-tools'
- id: agent
name: '@deepseek-ai/dsh-agent'
- id: agent-loop
name: '@deepseek-ai/dsh-agent-loop'
config:
agents: []
- id: libre-webui-bridge
name: './dist/cordis/dsh/engine-plugin.js'
Felder der Einträge
| Feld | Erforderlich | Bedeutung |
|---|---|---|
id | nein | Stabile ID zum Ansprechen des Eintrags; ohne Angabe aus name abgeleitet |
name | ja | Vom Loader importierter Modulbezeichner; muss eine literale Zeichenfolge sein |
config | nein | Plugin-Konfiguration; !!js-Ausdrücke zulässig |
disabled | nein | Eintrag ohne Löschen überspringen; !!js zulässig |
inject | nein | Weitere erforderliche Dienste oder Intercept-Konfiguration des Eintrags |
Der Loader importiert name direkt und wertet es nie aus. Es darf daher kein !!js-Ausdruck sein. Werte von config dürfen !!js verwenden; diese Ausdrücke werden später in der Fiber des zugehörigen Eintrags mit Zugriff auf den Loader-Kontext ausgewertet. process.env und ctx.get(...) funktionieren, import.meta nicht.
Relative Modulbezeichner werden zum Verzeichnis der Kompositionsdatei selbst aufgelöst. Paketbezeichner werden über das Backend-Paket aufgelöst. So findet @deepseek-ai/dsh-tools die Kopie in backend/node_modules.
Die Reihenfolge der Einträge gibt keine Ladereihenfolge vor. Cordis aktiviert einen Eintrag, sobald seine deklarierten Dienste bereitstehen; die obige Gruppierung dient nur der Lesbarkeit.
Erforderliche Einträge
Eine Engine, die Chat beantwortet, benötigt sämtliche folgenden Einträge:
| Eintrag | Stellt bereit | Benötigt von |
|---|---|---|
dsh-llm | llm | Agentenschleife |
dsh-session | sessions | Agentenschleife, Brücke |
dsh-session-projection | sessionProjections | Agentenschleife |
dsh-system-prompt | systemPrompt | Werkzeuge, Agentenschleife |
dsh-tools | tools | Agentenschleife, Brücke |
dsh-agent | agents | Brücke |
dsh-agent-loop | Agententreiber | Beantwortung von Durchläufen |
| Brückeneintrag | libreDshEngine | Jede Route |
Zusätzlich muss ein Werkzeug-Plugin eingebunden werden, etwa @deepseek-ai/dsh-fs-sandbox zusammen mit @deepseek-ai/dsh-tool-fs, damit GET /api/cordis/tools Ergebnisse liefert. Eine Werkzeug-Registry ohne Werkzeug-Plugins ist zu Recht leer.
Umgebungsvariablen
Jeder Einstellungswert lässt sich durch eine Umgebungsvariable überschreiben. Die Variable hat Vorrang vor dem Dokument, das wiederum vor dem eingebauten Standardwert gilt.
| Variable | Überschreibt | Standard |
|---|---|---|
LIBRE_CORDIS_ENABLED | features.enabled | false |
LIBRE_CORDIS_STREAMING | features.streaming | true |
LIBRE_CORDIS_TOOLS | features.tools | true |
LIBRE_CORDIS_PERSISTENCE | features.persistence | true |
LIBRE_CORDIS_TRACE | trace | false |
LIBRE_CORDIS_MODEL_PROVIDER | model.provider | libre-webui |
LIBRE_CORDIS_MODEL_ROUTE | model.route | libre-webui |
LIBRE_CORDIS_MODEL | model.model | '' |
LIBRE_CORDIS_API_KEY_ENV | model.apiKeyEnv | OPENAI_API_KEY |
LIBRE_CORDIS_BASE_URL | model.baseUrl | '' |
LIBRE_CORDIS_CONFIG | Pfad zum Kompositionsdokument | <cwd>/cordis.patch.yml |
LIBRE_CORDIS_SETTINGS | Pfad zum Einstellungsdokument | Neben dem Kompositionsdokument |
LIBRE_CORDIS_WORKSPACE | Standardarbeitsbereich der Engine | <DATA_DIR>/cordis-workspace |
LIBRE_CORDIS_SESSION_STORE | Verzeichnis gespeicherter Sitzungen | <DATA_DIR>/cordis-sessions |
Boolesche Variablen akzeptieren 1/true/yes/on und 0/false/no/off. Ein unlesbarer Wert fällt auf das Dokument zurück, statt zu raten.
LIBRE_CORDIS_SESSION_STORE und LIBRE_CORDIS_WORKSPACE werden auch von den !!js-Ausdrücken der mitgelieferten Komposition gelesen. Deshalb exportiert der Host sie vor dem Einbinden des Baums.
Ausgearbeitete Beispiele
Lokales Ollama, vollständig offline
features:
enabled: true
model:
provider: pi-ai
route: ollama
model: llama3.2
apiKeyEnv: OLLAMA_API_KEY
providers:
ollama:
api: openai-completions
baseURL: http://127.0.0.1:11434/v1
apiKeyEnv: OLLAMA_API_KEY
models:
- id: llama3.2
contextWindow: 131072
maxTokens: 4096
Ollama ignoriert den Schlüssel, aber der OpenAI-Client verlangt einen gesetzten Wert. Exportiere OLLAMA_API_KEY=ollama, um dies ohne erfundenes Geheimnis zu erfüllen. Nichts verlässt den Rechner.
Ein OpenAI-kompatibles Gateway
features:
enabled: true
model:
provider: pi-ai
route: gateway
model: acme-large
apiKeyEnv: ACME_GATEWAY_API_KEY
providers:
gateway:
displayName: Acme Gateway
api: openai-completions
baseURL: https://gateway.acme.example/v1
apiKeyEnv: ACME_GATEWAY_API_KEY
models:
- id: acme-large
contextWindow: 65536
maxTokens: 4096
Offizielles DeepSeek
features:
enabled: true
model:
provider: deepseek
route: deepseek
apiKeyEnv: DEEPSEEK_API_KEY
Setze DEEPSEEK_API_KEY in der Backend-Umgebung.
Ohne Anbieter, nur Werkzeuge
features:
enabled: true
model:
provider: none
Die Engine startet, Sitzungen können erstellt werden und GET /api/cordis/tools listet die konfigurierten Werkzeug-Plugins. Nachrichten schlagen fehl, weil kein Adapter die Anfrage bedienen kann.
Migrationshinweise
Die Cordis-Brücke ist eine Ergänzung. Im ausgeschalteten Zustand ändert sie kein bestehendes Verhalten und ist standardmäßig ausgeschaltet.
Bestehende Bereitstellung aktualisieren. Es ist nichts erforderlich. Die Beispieldokumente werden als cordis.patch.example.yml und cordis.config.example.yml ausgeliefert und erst nach dem Kopieren und Aktivieren der Funktion berücksichtigt. Es läuft keine Migration, keine Tabelle wird erstellt und kein bestehendes Datenverzeichnis wird verändert.
Erstmals aktivieren. Kopiere beide Beispieldokumente, setze features.enabled: true und installiere nichts weiter: Die Engine-Pakete sind bereits Backend-Abhängigkeiten. Bei der ersten Anfrage erstellt die Engine <DATA_DIR>/cordis-workspace, <DATA_DIR>/cordis-sessions und <DATA_DIR>/cordis-runtime. Alle drei sind neue Verzeichnisse unter dem vorhandenen Datenverzeichnis. Bestehende Sicherungen und Wiederherstellungen dieses Verzeichnisses erfassen sie daher ebenfalls.
Engine aktualisieren. Die aufgelösten Engine-Versionen stehen in package-lock.json. backend/package.json deklariert Alpha-kompatible Bereiche. Aktualisiere gezielt und prüfe die Anbieter- und Sitzungsverträge nach npm install. Bekommt ein DSH-Paket eine Peer-Abhängigkeit, meldet npm dies bei der Installation statt erst beim Einbinden. Modell- und Sitzungsformate gehören DSH; eine Formatänderung ist ein DSH-Releasehinweis, keine Libre-WebUI-Migration.
Zurückrollen. Setze features.enabled: false und starte neu oder entferne den Brückeneintrag aus cordis.patch.yml. Der Dienst libreDshEngine wird zurückgezogen, sein Listener freigegeben und seine Agenten werden entsorgt. Sitzungsdateien bleiben als Daten auf dem Datenträger; lösche sessionStorePath, um Platz freizugeben. Die Pakete zu deinstallieren ist optional und beeinflusst keine andere Libre-WebUI-Funktion.
Bestehende Chat- und Work-Bereitstellungen. Chat erhält eine DeepSeek-Harness-Auswahl für Administratoren mit temporären Engine-Sitzungen und dem bestehenden Chat-Verlauf. Work erhält eine eigene DeepSeek-Harness-Engine über einen isolierten DSH-Treiber sowie die bestehende Sandbox- und Freigabekette. Vorhandene Modellauswahlen behalten ihr übliches Verhalten.
Mit dem Standardadapter libre-webui enthält die Agentenauswahl in Chat konkrete DSH-Anbieter-/Modelloptionen und das Basisprofil. Explizite Optionen behalten ihre qualifizierte Anbieteridentität. Das Basisprofil verwendet das Standardmodell der laufenden Komposition. Titel und Reasoning-Zusammenfassungen dieser DSH-Auswahlen rufen den Anbieter direkt ohne Agentenwerkzeuge auf. Eine benutzerdefinierte Adapterroute behält nur ihren Basis-Chat-Eintrag und benötigt für Titel und Zusammenfassungen ein separates Ollama- oder Plugin-Aufgabenmodell.
DSH beachtet den Ollama-Schalter des Administrators. Bei ausgeschaltetem Ollama werden dessen Modelle weder aufgelistet noch abgefragt. Eine ausdrückliche Ollama-Auswahl schlägt ohne Anbieterwechsel fehl. Vom Betreiber festgelegte unqualifizierte Modellnamen benötigen ebenfalls Ollamas Katalog zur sicheren Auflösung. Verwende für reine Plugin-Bereitstellungen eine qualifizierte Wahl wie lwui:plugin:<plugin>:<model>.
Betriebsgrenzen
- Host-Engine und Chat sind nur für Administratoren und Solo-Betrieb vorgesehen. Die Engine-Seite ist eine gemeinsame Administratorkonsole mit lokalem JSONL-Speicher. Sie kann im Team-Modus nicht eingebunden werden. Work in der Sandbox verwendet stattdessen seine vorhandenen SQL-Repositories.
- Modellaufrufe verwenden den authentifizierten Aufrufer. Interaktive Host-Durchläufe verwenden Anbieterzugangsdaten und Standardmodellpräferenz dieses Administrators. Eine vertrauenswürdige nicht interaktive Komposition kann
LIBRE_CORDIS_USERausdrücklich auf die ID eines aktiven Administrators setzen. Es gibt keinen impliziten Rückgriff auf den ältesten Administrator. - Host-Dateisystemwerkzeuge bleiben im Arbeitsbereich. Lesen und Schreiben prüfen das kanonische Ziel. Eine Sitzung darf kein Arbeitsverzeichnis außerhalb der konfigurierten Wurzel auswählen. Native DSH-Änderungsbeschränkungen gelten weiter. Zusätzliche Betreiber-Plugins sind vertrauenswürdiger Servercode.
- Host-Werkzeuge verwenden DSH-Richtlinien. Die Engine-Seite bietet je Sitzung Nur-Lesen-/Arbeitsbereich-Schreibrechte und native einmalige Freigabekarten. Diese Kontrollen umgehen niemals die Arbeitsbereichsgrenze. Chat-Durchläufe ohne Oberfläche lehnen nicht darstellbare Freigabeanfragen ab. Der Work-Treiber nutzt stattdessen Work-Freigaben und Containerisolation ohne Host-Dateisystemwerkzeuge.
- Streams enthalten Live-Text und sichtbares Reasoning. Dauerhafte Nachrichten speichern den abgeschlossenen Verlauf. Clients erhalten keine zweite Kopie des Live-Texts.
- Neustart und Löschen verwenden gespeicherte Sitzungen. Leere und abgeschlossene Engine-Sitzungen überstehen Neustarts. Das Löschen einer von der Brücke erstellten JSONL-Sitzung stoppt ihren Writer und entfernt das Artefakt. Andere Persistenzimplementierungen müssen einen passenden Löschadapter bereitstellen.
- Fehlerhafte Altprotokolle brauchen eine ausdrückliche Reparatur. Frühere Brückenrevisionen schrieben Benutzernachrichten ohne erforderliche IDs. Der strikte Leser lehnt diese Protokolle ab, statt sie zu verwerfen. Siehe das Wiederherstellungsverfahren unter Fehlerbehebung.
- Titel werden lokal abgeleitet. Sitzungsübersichten verwenden die erste menschliche Nachricht als Kurztitel. Leere Sitzungen haben keinen abgeleiteten Titel.
Modelle einer laufenden DSH-Instanz verbinden
Das optionale Plugin dsh-native-provider stellt Modelle und Anbieterverbindungen einer anderen DSH-Instanz bereit, etwa der lokalen Web-App auf Port 3080. Installiere es in deren bestehendem Profil. Es ruft nur ctx.llm auf: Anbieterschlüssel bleiben in DSH, und die Verbindung kann weder Sitzungen erstellen noch Agenten ausführen, native Anhangdateien lesen oder native Werkzeuge ausführen.
Beide Prozesse müssen auf demselben Unix-Host unter demselben Betriebssystemkonto laufen. Der Transport nutzt einen ausdrücklich konfigurierten Unix-Socket in einem physischen Verzeichnis dieses Kontos mit Modus 0700; der Socket hat Modus 0600. Es entsteht kein TCP-Listener, und die Browserauthentifizierung von DSH wird weder wiederverwendet noch abgeschwächt. Windows und entfernte DSH-Hosts werden von dieser lokalen Verbindung nicht unterstützt.
Das Betriebssystemkonto bildet die lokale Zugriffsgrenze: Andere Prozesse dieses Kontos können seinen Socket verwenden. Die Verbindung bietet keine getrennten nativen Anbieterzugangsdaten oder Isolation zwischen Anwendungen desselben Kontos.
Eigenständiges Plugin installieren
Füge unter DSH → Plugins → Add plugin diese öffentliche Repository-URL in Package name or address ein und klicke auf Install:
https://github.com/libre-webui/dsh-native-provider
Aktiviere die Komponente, wenn DSH dazu auffordert. Das öffentliche Paket ist Version 0.1.1, steht unter Apache-2.0 und enthält seine vorgebaute Laufzeit sowie den Bundle-Patch. Es benötigt weder lokalen Build noch Installationsskripte oder npm-Laufzeitabhängigkeiten. Der reine Paketname @libre-webui/dsh-native-provider ist nicht auf npm veröffentlicht; verwende die GitHub-URL im Dialog.
Das Bundle wählt <DSH home>/lwui-provider/llm.sock, normalerweise $HOME/.dsh/lwui-provider/llm.sock. Ein konfiguriertes DSH_HOME hat Vorrang. Das private Socket-Verzeichnis wird bei Bedarf erstellt. Nutze eine aktive Brücke pro DSH-Verzeichnis oder überschreibe den Socket-Pfad in der benutzereigenen cordis.patch.yml für weitere Profile. Der vollständige Pfad darf höchstens 100 UTF-8-Bytes umfassen und keine symbolischen Pfadkomponenten enthalten. Überschreibungen beschreibt die eigenständige Konfigurationsanleitung.
Das optionale CLI-Gegenstück lautet:
dsh plugin --profile web add https://github.com/libre-webui/dsh-native-provider
Ersetze web durch das tatsächlich verwendete DSH-Profil, falls es anders heißt. Starte es nach einer CLI-Installation neu. Eine Installation in der laufenden Oberfläche kann das Plugin sofort aktivieren. Beachte etwaige Neustarthinweise von DSH. Änderungen am nativen DSH-Quellcode oder Kopien von Anbieterschlüsseln sind nicht erforderlich.
Bundle aus Libre WebUI vorbereiten
Libre WebUI liefert auch ein Vorbereitungsskript. Baue in einem Quellcheckout das Backend und erstelle ein neues Ausgabeverzeichnis:
npm run build:backend
node scripts/prepare-dsh-provider.mjs /absolute/dsh-provider-bundle /absolute/private-directory/provider.sock
dsh plugin --profile web add /absolute/dsh-provider-bundle
Installierte npm-Distributionen enthalten bereits das kompilierte Backend und das Vorbereitungsskript. Führe aus deren Installationsverzeichnis nur die letzten beiden Befehle ohne Build-Schritt aus. Starte danach das ausgewählte DSH-Profil neu. Beide Vorbereitungswege lehnen vorhandene Ausgabeverzeichnisse ab und enthalten Paketmetadaten, Lizenz und Installationshinweise.
Libre WebUI verbinden
Trage in Libre WebUIs cordis.config.yml denselben absoluten Socket-Pfad ein. Ersetze für den Standard des öffentlichen Bundles /absolute/home durch dein tatsächliches Benutzerverzeichnis:
nativeProvider:
socketPath: /absolute/home/.dsh/lwui-provider/llm.sock
Alternativ setzt du LIBRE_DSH_PROVIDER_SOCKET auf diesen absoluten Pfad. Ein leerer Umgebungswert deaktiviert die Verbindung, selbst wenn die Datei einen Pfad enthält. Aktiviere Cordis-Engine in LWUI. Aktive Administratoren können dann native Modelle in Work mit DeepSeek Harness, auf der Engine-Seite und in Chats Agentengruppe wählen. Chat benötigt zusätzlich Agent-CLI-Modelle. Work speichert die ursprüngliche native Modell-ID und Anbieter-ID mit providerType: dsh; bestehende LWUI-gestützte DSH-Aufgaben behalten ihre ursprüngliche Anbieteridentität und Engine-Markierung.
Die native Modellliste wird live gelesen. Änderungen an Anbieter- oder Zugangsdatenkonfigurationen invalidieren die Verbindungsgeneration und brechen laufende native Aufrufe ab. Ein fehlender Socket, ein Modell oder ein nativer Anbieter stoppt die Anfrage. LWUI weicht nicht auf Ollama oder andere Anbieter aus. Titel und Reasoning-Zusammenfassungen rufen das ausgewählte native LLM direkt ohne Werkzeuge auf. Diese erste Verbindung akzeptiert Text-, Reasoning- und Werkzeugnachrichten; native Bild-/Dateireferenzen werden abgelehnt.
Die nativen Zugangsdaten gehören dem DSH-Betreiber. Deshalb bleibt diese Verbindung Administratoren vorbehalten, auch wenn normales Work weiteren Benutzern offensteht. Modellanfragen können den Host entsprechend dem in DSH gewählten Anbieter verlassen; Work zeigt seinen Remote-Anbieterhinweis. Im Team-Betrieb benötigt jeder zuständige Worker Zugriff auf die konfigurierte lokale Verbindung; fehlt sie, wird die Anfrage sicher abgelehnt. Cordis zu deaktivieren oder die Socket-Einstellung zu entfernen entzieht nativen Zugriff, erhält aber gespeicherte Aufgaben. Bleibt nach einem DSH-Absturz ein Socket zurück, stoppe die zuständige Instanz und entferne nur diesen verwaisten Socket vor dem Neustart. Das Plugin ersetzt keinen bestehenden Dateisystemeintrag.
Plugin aktualisieren oder entfernen
Beende oder storniere aktive native Anfragen vor einer Plugin-Änderung. Um das alte lokale Bundle 0.0.0/0.1.0 über DSH zu ersetzen, wähle Uninstall, gehe zu Add plugin zurück und installiere die öffentliche GitHub-URL oben. Bewahre abweichende Socket-Pfade durch eine unterstützte Benutzerprofil-Überschreibung. Native Sitzungen und Zugangsdaten bleiben erhalten.
Eine bereits von GitHub bezogene Installation lässt sich per CLI aktualisieren:
dsh plugin --profile web update @libre-webui/dsh-native-provider
Starte nach CLI-Updates neu und prüfe die Version. Ein zuvor deaktiviertes Plugin bleibt deaktiviert; kontrolliere seinen Zustand vor dem Verbindungstest. Zum Festlegen oder Zurückrollen einer Revision nutze github:libre-webui/dsh-native-provider#<commit> als Quelle. Baue bei eigenen lokalen Bundles stattdessen ein neues Ausgabeverzeichnis und füge es erneut hinzu. Ein Update einer lokalen Abhängigkeit lädt nichts von GitHub nach.
Entferne zum Trennen zuerst LWUIs Einstellung nativeProvider.socketPath oder setze LIBRE_DSH_PROVIDER_SOCKET leer. Führe dann aus:
dsh plugin --profile web remove @libre-webui/dsh-native-provider
Starte das DSH-Profil nach der Entfernung neu. Gespeicherte LWUI-Aufgaben bleiben erhalten, ihre nativen Modellanfragen scheitern aber bis zur Wiederherstellung derselben ausdrücklichen Verbindung. Das Entfernen löscht keine konfigurierten DSH-Anbieter oder Zugangsdaten. Lösche alte generierte Bundle-Verzeichnisse erst, wenn sie nicht mehr installiert sind.
Nutzung nativer Anbieter
Native Anfragen erscheinen unter Anbieter-Nutzung als DeepSeek Harness · Anbieter mit der ursprünglichen gewählten Modell-ID. Jede tatsächliche Modellanfrage zählt einmal, einschließlich Werkzeugrunden, Titeln und Reasoning-Zusammenfassungen. Das Dashboard enthält erfolgreiche, fehlgeschlagene und abgebrochene Aufrufe, Latenz und von DSH gemeldete Tokens. Gecachte Eingaben zählen einmal zur Gesamteingabe; fehlende Nutzung bleibt ungemessen statt geschätzt. Anbieter-IDs verwenden dsh-native:<percent-encoded-native-provider-id> für bestehende Tarif- und Kostenregeln. Unbekannte Tarife bleiben unbepreist.
DSH-Anfragen über in LWUI konfigurierte Anbieter behalten deren vorhandene Nutzungsaufzeichnungen. Katalogabfragen und vor der nativen Inferenz abgelehnte Anfragen erzeugen keine zusätzlichen Modellaufrufdatensätze. Die Erfassung beginnt mit Installation dieser Verbindungsversion und erfindet keine historische Nutzung. Gespeichert werden Identität, Status, Zeit und Zähler, keine Prompts, Antworten, Zugangsdaten, Endpunkte oder Anbieterfehlertexte.
Konfiguration überprüfen
curl -s http://127.0.0.1:3001/api/cordis/health | jq
{
"success": true,
"enabled": true,
"ready": true,
"services": [
{ "name": "llm", "state": "ready" },
{ "name": "systemPrompt", "state": "ready" },
{ "name": "sessions", "state": "ready" },
{ "name": "tools", "state": "ready" },
{ "name": "agents", "state": "ready" }
]
}
Ein 503 mit code: CORDIS_UNAVAILABLE bedeutet, dass die Komposition nicht eingebunden wurde. error nennt den Grund; LIBRE_CORDIS_TRACE=true ergänzt das Cordis-Aktivierungsprotokoll. Häufige Ursachen findest du unter Fehlerbehebung.