Zum Hauptinhalt springen

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.

DokumentVerantwortlichStrukturZweck
cordis.patch.ymlCordis LoaderYAML-Array auf oberster EbenePlugin-Einträge zum Einbinden der Engine
cordis.config.ymlLibre-WebUI-HostYAML-MappingAnbieter, 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

Optionale Aktivierung der Cordis-Engine in den Einstellungen neben der Agentenaktivierung.

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:

QuelleWirkung
Umgebungsvariable LIBRE_CORDIS_ENABLEDtrue/false legt den Funktionszustand für die Bereitstellung fest
features.enabled in cordis.config.ymlEin 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üsselTypStandardBedeutung
tracebooleschfalseJeden Cordis-Aktivierungsübergang protokollieren
modelMappingModelladapter auswählen; siehe unten
featuresMappingFunktionsschalter; siehe unten

features

SchlüsselTypStandardBedeutung
enabledbooleschfalseEngine einbinden. Bei false liefert jede Route 503.
streamingbooleschtrueDurchläufe mit gestreamter Modellausgabe zulassen
toolsbooleschtrueEngine-Werkzeuge erlauben und ihre Registry bereitstellen
persistencebooleschtrueJSONL-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üsselTypStandardBedeutung
providerZeichenfolgelibre-webuilibre-webui, deepseek, pi-ai oder none
apiKeyEnvZeichenfolgeOPENAI_API_KEYName der Umgebungsvariable mit dem Schlüssel
routeZeichenfolgelibre-webuiAnbieterroute, die die Engine in Anfragen benennt
modelZeichenfolge''Angeforderte Modell-ID. Für eine manuell deklarierte Route festlegen
baseUrlZeichenfolge''Abweichender Endpunkt; leer verwendet den Standard des Adapters
providersMapping{}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-webui bedient die Engine über die eigene Anbieterschicht der Bereitstellung. Das ist der unterstützte Standardmodus.
  • none startet 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.
  • deepseek und pi-ai binden 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:

FeldBedeutung
displayNameLesbarer Name
apiÜbertragungsprotokoll, zum Beispiel openai-completions
baseURLBasis des Endpunkts
apiKeyEnvUmgebungsvariable mit dem Schlüssel
modelsModellliste; 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

FeldErforderlichBedeutung
idneinStabile ID zum Ansprechen des Eintrags; ohne Angabe aus name abgeleitet
namejaVom Loader importierter Modulbezeichner; muss eine literale Zeichenfolge sein
configneinPlugin-Konfiguration; !!js-Ausdrücke zulässig
disabledneinEintrag ohne Löschen überspringen; !!js zulässig
injectneinWeitere 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:

EintragStellt bereitBenötigt von
dsh-llmllmAgentenschleife
dsh-sessionsessionsAgentenschleife, Brücke
dsh-session-projectionsessionProjectionsAgentenschleife
dsh-system-promptsystemPromptWerkzeuge, Agentenschleife
dsh-toolstoolsAgentenschleife, Brücke
dsh-agentagentsBrücke
dsh-agent-loopAgententreiberBeantwortung von Durchläufen
BrückeneintraglibreDshEngineJede 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ÜberschreibtStandard
LIBRE_CORDIS_ENABLEDfeatures.enabledfalse
LIBRE_CORDIS_STREAMINGfeatures.streamingtrue
LIBRE_CORDIS_TOOLSfeatures.toolstrue
LIBRE_CORDIS_PERSISTENCEfeatures.persistencetrue
LIBRE_CORDIS_TRACEtracefalse
LIBRE_CORDIS_MODEL_PROVIDERmodel.providerlibre-webui
LIBRE_CORDIS_MODEL_ROUTEmodel.routelibre-webui
LIBRE_CORDIS_MODELmodel.model''
LIBRE_CORDIS_API_KEY_ENVmodel.apiKeyEnvOPENAI_API_KEY
LIBRE_CORDIS_BASE_URLmodel.baseUrl''
LIBRE_CORDIS_CONFIGPfad zum Kompositionsdokument<cwd>/cordis.patch.yml
LIBRE_CORDIS_SETTINGSPfad zum EinstellungsdokumentNeben dem Kompositionsdokument
LIBRE_CORDIS_WORKSPACEStandardarbeitsbereich der Engine<DATA_DIR>/cordis-workspace
LIBRE_CORDIS_SESSION_STOREVerzeichnis 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_USER ausdrü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.