Configuration Cordis
Le moteur Cordis/DSH intégré se configure avec deux documents et un ensemble de variables d’environnement. Les deux documents se trouvent par défaut à côté du backend ; LIBRE_CORDIS_CONFIG et LIBRE_CORDIS_SETTINGS permettent de les déplacer.
| Document | Responsable | Structure | Rôle |
|---|---|---|---|
cordis.patch.yml | Chargeur Cordis | Tableau YAML à la racine | Entrées de plugins qui montent le moteur |
cordis.config.yml | Hôte Libre WebUI | Correspondance YAML | Fournisseur, source des identifiants et options de fonctionnalités |
Il faut deux documents, car le porteur d’arbre Cordis Include lit directement la composition et refuse tout fichier dont la racine n’est pas un tableau. Les paramètres de l’hôte ne peuvent donc pas partager ce fichier.
Activation
Un administrateur active le moteur dans Paramètres → Gestion des utilisateurs → Accès et politiques → Moteur Cordis. Le changement s’applique immédiatement : l’activation démarre le moteur à sa prochaine requête, tandis que la désactivation le détruit. Aucun redémarrage n’est nécessaire.
Deux sources au niveau du déploiement peuvent imposer cette valeur. Toutes deux grisent le commutateur au lieu d’être remplacées silencieusement :
| Source | Effet |
|---|---|
Variable d’environnement LIBRE_CORDIS_ENABLED | true/false impose l’état de la fonctionnalité pour le déploiement |
features.enabled dans cordis.config.yml | Une valeur explicite l’impose ; omettre la clé laisse le choix à l’administrateur |
Le moteur a également besoin d’une composition. Partez des exemples fournis :
cd backend
cp cordis.patch.example.yml cordis.patch.yml
cp cordis.config.example.yml cordis.config.yml
L’hôte lit cordis.patch.yml, fusionne ses valeurs par défaut dans l’entrée du pont et écrit le résultat dans <DATA_DIR>/cordis-runtime/cordis.composed.yml. Ce fichier généré est jetable et ne doit pas être modifié : le document faisant autorité est le cordis.patch.yml de l’opérateur.
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
Clés de premier niveau
| Clé | Type | Valeur par défaut | Signification |
|---|---|---|---|
trace | booléen | false | Journaliser chaque transition d’activation Cordis |
model | correspondance | – | Sélection de l’adaptateur de modèle ; voir ci-dessous |
features | correspondance | – | Commutateurs de fonctionnalités ; voir ci-dessous |
features
| Clé | Type | Valeur par défaut | Signification |
|---|---|---|---|
enabled | booléen | false | Monter le moteur. Tant que la valeur est fausse, chaque route renvoie 503. |
streaming | booléen | true | Accepter les tours qui diffusent la sortie du modèle en continu |
tools | booléen | true | Autoriser les outils du moteur et exposer leur registre |
persistence | booléen | true | Activer la persistance JSONL et exiger son service ; les sessions survivent aux redémarrages |
features.enabled est le seul commutateur qui doit être défini pour activer le pont. Une clé enabled au premier niveau n’est pas lue ; regrouper tous les commutateurs dans features donne un emplacement unique pour savoir ce qui est activé.
model
| Clé | Type | Valeur par défaut | Signification |
|---|---|---|---|
provider | chaîne | libre-webui | libre-webui, deepseek, pi-ai ou none |
apiKeyEnv | chaîne | OPENAI_API_KEY | Nom de la variable d’environnement contenant la clé |
route | chaîne | libre-webui | Route de fournisseur nommée dans les requêtes du moteur |
model | chaîne | '' | Identifiant du modèle demandé par le moteur. À définir pour une route déclarée manuellement |
baseUrl | chaîne | '' | Remplacement du point d’accès ; vide, utilise la valeur par défaut de l’adaptateur |
providers | correspondance | {} | Routes de fournisseurs déclarées manuellement, indexées par nom de route |
Origine des modèles du moteur
Le moteur n’a pas sa propre configuration de fournisseurs. Il appelle ceux déjà présents dans Libre WebUI via la route libre-webui, enregistrée par l’entrée libre-webui-llm-adapter de la composition. Les modèles avec lesquels vous pouvez discuter dans l’interface sont ceux que le moteur peut utiliser : téléchargez un modèle dans l’interface et le moteur le voit, avec les identifiants et le point d’accès déjà configurés.
Définissez model.provider: libre-webui pour utiliser ce fonctionnement. C’est la valeur par défaut fournie ; les identifiants et points d’accès restent dans les paramètres existants de Libre WebUI.
model nomme le modèle demandé par le moteur. Une valeur vide signifie « utiliser le modèle par défaut de l’application ». Si le déploiement n’a pas de valeur par défaut, le moteur prend le premier modèle de chat signalé par la couche fournisseur, en privilégiant les modèles locaux disponibles. Les modèles d’embedding sont exclus. Les routes choisies en interne conservent le fournisseur et le modèle : lwui:ollama:<encoded-model> ou lwui:plugin:<encoded-provider>:<encoded-model>. Cela empêche des noms identiques ou une panne d’Ollama de rediriger une requête locale vers un fournisseur distant. Une sélection explicite de fournisseur échoue si celui-ci est indisponible ; elle ne bascule jamais silencieusement vers un autre.
Un model vide n’est sûr que sur la route libre-webui. Une route desservie par un package fournisseur exige un nom explicite : dsh-llm-pi-ai résout le catalogue d’une route pour répondre aux requêtes de catalogue, mais ne choisit pas sa première entrée par défaut. Une route déclarée manuellement sans model n’accepte donc aucun tour et échoue avec :
provider "<route>" resolves no models; the installed catalog does not describe
this route, so its models must be listed in configuration
Définissez model sur un identifiant de la liste models de cette route. L’exemple fourni associe route: ollama à model: llama3.2, ce qui correspond à son entrée llama3.2.
provider sélectionne le package d’adaptateur à monter :
libre-webuidessert le moteur via la couche fournisseur du déploiement. C’est le mode pris en charge et utilisé par défaut.nonedémarre le moteur sans accès aux modèles. Les outils sont listés et les sessions fonctionnent, mais aucun tour ne peut recevoir de réponse ; c’est utile pour tester une composition.deepseeketpi-aimontent directement un package fournisseur. Ces packages ne sont pas des dépendances de ce backend : embarquer tous les SDK fournisseurs ajoutait 59 packages transitifs, dont certains obsolètes pour des fonctions que le moteur n’utilise jamais. Installez le package souhaité et montez son entrée dans la composition ; l’hôte nomme le package manquant s’il est absent.
Une route de fournisseur est décrite par :
| Champ | Signification |
|---|---|
displayName | Nom lisible |
api | Protocole d’échange, par exemple openai-completions |
baseURL | URL de base du point d’accès |
apiKeyEnv | Variable d’environnement contenant la clé |
models | Liste des modèles ; chaque entrée accepte id, name, contextWindow, maxTokens |
Les identifiants ne sont jamais écrits dans l’un ou l’autre document. apiKeyEnv nomme une variable d’environnement que l’adaptateur résout à chaque requête ; renouveler une clé ne nécessite donc pas de redémarrage.
cordis.patch.yml
Un tableau d’entrées du chargeur Cordis à la racine. L’exemple fourni monte neuf entrées et constitue le point de départ recommandé.
- 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'
Champs d’une entrée
| Champ | Obligatoire | Signification |
|---|---|---|
id | non | Identifiant stable utilisé pour cibler l’entrée. Dérivé de name s’il est omis |
name | oui | Spécificateur de module importé par le chargeur. Doit être une chaîne littérale |
config | non | Configuration du plugin ; expressions !!js autorisées |
disabled | non | Ignorer l’entrée sans la supprimer ; !!js autorisé |
inject | non | Services requis supplémentaires ou configuration d’interception pour l’entrée |
name est importé directement par le chargeur et n’est jamais évalué ; il ne peut donc pas être une expression !!js. Les valeurs de config peuvent utiliser !!js ; ces expressions sont évaluées plus tard dans la fibre de l’entrée propriétaire, avec le contexte du chargeur accessible. process.env et ctx.get(...) fonctionnent, mais pas import.meta.
Les spécificateurs relatifs sont résolus depuis le répertoire du fichier de composition lui-même. Les spécificateurs nus sont résolus via le package backend : @deepseek-ai/dsh-tools trouve ainsi la copie dans backend/node_modules.
L’ordre des entrées n’impose aucun ordre de chargement. Cordis active une entrée lorsque les services qu’elle déclare sont disponibles ; le regroupement ci-dessus sert uniquement à la lecture.
Entrées requises
Un moteur qui répond au chat a besoin de tous les éléments suivants :
| Entrée | Fournit | Utilisé par |
|---|---|---|
dsh-llm | llm | boucle de l’agent |
dsh-session | sessions | boucle de l’agent, pont |
dsh-session-projection | sessionProjections | boucle de l’agent |
dsh-system-prompt | systemPrompt | outils, boucle de l’agent |
dsh-tools | tools | boucle de l’agent, pont |
dsh-agent | agents | pont |
dsh-agent-loop | pilote d’agent | réponses aux tours |
| entrée du pont | libreDshEngine | toutes les routes |
Monter aussi une entrée de plugin d’outil, par exemple @deepseek-ai/dsh-fs-sandbox et @deepseek-ai/dsh-tool-fs, permet à GET /api/cordis/tools de renvoyer des éléments ; un registre sans plugin d’outil peut légitimement être vide.
Variables d’environnement
Chaque valeur de paramètre peut être remplacée par une variable d’environnement. La variable prime sur le document, qui prime sur la valeur intégrée par défaut.
| Variable | Remplace | Valeur par défaut |
|---|---|---|
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 | Chemin du document de composition | <cwd>/cordis.patch.yml |
LIBRE_CORDIS_SETTINGS | Chemin du document de paramètres | À côté du document de composition |
LIBRE_CORDIS_WORKSPACE | Espace de travail par défaut du moteur | <DATA_DIR>/cordis-workspace |
LIBRE_CORDIS_SESSION_STORE | Répertoire des sessions persistantes | <DATA_DIR>/cordis-sessions |
Les variables booléennes acceptent 1/true/yes/on et 0/false/no/off. Une valeur illisible laisse la priorité au document plutôt que de tenter de deviner.
LIBRE_CORDIS_SESSION_STORE et LIBRE_CORDIS_WORKSPACE sont aussi lues par les expressions !!js de la composition fournie ; l’hôte les exporte donc avant de monter l’arbre.
Exemples détaillés
Ollama local, entièrement hors ligne
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 ignore la clé, mais le client OpenAI exige qu’une valeur soit définie. Exportez OLLAMA_API_KEY=ollama pour satisfaire cette exigence sans inventer de secret. Rien ne quitte la machine.
Une passerelle compatible OpenAI
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
DeepSeek officiel
features:
enabled: true
model:
provider: deepseek
route: deepseek
apiKeyEnv: DEEPSEEK_API_KEY
Définissez DEEPSEEK_API_KEY dans l’environnement du backend.
Aucun fournisseur, uniquement les outils
features:
enabled: true
model:
provider: none
Le moteur démarre, des sessions peuvent être créées et GET /api/cordis/tools liste les plugins d’outils configurés. Envoyer un message échoue, car aucun adaptateur ne peut traiter la requête.
Notes de migration
Le pont Cordis est additif. Lorsqu’il est désactivé, aucun comportement existant ne change ; il est désactivé par défaut.
Mise à niveau d’un déploiement existant. Aucune action n’est nécessaire. Les deux documents d’exemple sont fournis sous les noms cordis.patch.example.yml et cordis.config.example.yml : aucun n’est chargé avant sa copie et l’activation de la fonctionnalité. Aucune migration ne s’exécute, aucune table n’est créée et aucun répertoire de données existant n’est modifié.
Première activation. Copiez les deux exemples, définissez features.enabled: true et n’installez rien de plus : les packages du moteur sont déjà des dépendances du backend. À la première requête, le moteur crée <DATA_DIR>/cordis-workspace, <DATA_DIR>/cordis-sessions et <DATA_DIR>/cordis-runtime. Ces trois nouveaux répertoires se trouvent dans le répertoire de données existant ; une sauvegarde ou restauration qui couvre celui-ci les couvre donc aussi.
Mise à niveau du moteur. Les versions résolues du moteur sont enregistrées dans package-lock.json. backend/package.json déclare des plages compatibles avec les versions alpha. Effectuez les mises à niveau volontairement et validez les contrats des fournisseurs et des sessions après npm install. Si un package DSH acquiert une dépendance pair, npm le signale à l’installation plutôt qu’au montage. Les formats des modèles et sessions appartiennent à DSH ; un changement de format relève des notes de version DSH, pas d’une migration Libre WebUI.
Retour arrière. Définissez features.enabled: false et redémarrez, ou retirez l’entrée du pont de cordis.patch.yml. Le service libreDshEngine est retiré, son écouteur libéré et les agents qu’il a créés détruits. Les fichiers de session restent sur disque en tant que données ; supprimez le répertoire sessionStorePath pour récupérer l’espace. Désinstaller les packages est facultatif et n’affecte aucune autre fonctionnalité de Libre WebUI.
Déploiements Chat et Work existants. Chat gagne une sélection DeepSeek Harness réservée aux administrateurs, utilisant des sessions transitoires du moteur et la transcription Chat existante. Work gagne un choix de moteur DeepSeek Harness distinct, fondé sur un pilote DSH isolé et le mécanisme existant de bac à sable et d’autorisations de Work. Les sélections de modèles existantes gardent leur fonctionnement habituel.
Avec l’adaptateur standard libre-webui, le sélecteur Agents de Chat comprend des choix explicites de modèle/fournisseur DSH en plus du profil de base. Les choix explicites conservent leur identité de fournisseur qualifiée. Le profil de base utilise le modèle par défaut de la composition active. Les titres et résumés de raisonnement de ces choix DSH appellent directement le fournisseur sous-jacent sans outils d’agent. Une route d’adaptateur personnalisée ne conserve que son entrée Chat de base et exige un modèle de tâche Ollama ou de plugin distinct pour générer les titres et résumés de raisonnement.
DSH respecte le commutateur Ollama de l’administrateur. Lorsque Ollama est désactivé, ses modèles ne sont ni listés ni sondés, et un choix Ollama explicite échoue sans changer de fournisseur. Les noms de modèles non qualifiés imposés par l’opérateur exigent aussi le catalogue d’Ollama pour être résolus sans risque ; choisissez une valeur qualifiée lwui:plugin:<plugin>:<model> pour un déploiement utilisant uniquement des plugins.
Limites opérationnelles
- Le moteur hôte et Chat sont réservés aux administrateurs et au mode solo. La page du moteur est une console administrateur partagée avec un stockage JSONL local. Elle ne peut pas être montée en mode équipe. Work en bac à sable utilise ses dépôts SQL existants à la place.
- Les appels au modèle utilisent l’appelant authentifié. Les tours interactifs de l’hôte utilisent les identifiants de fournisseur et la préférence de modèle par défaut de cet administrateur. Une composition de confiance non interactive peut définir explicitement
LIBRE_CORDIS_USERsur l’identifiant d’un administrateur actif. Il n’existe aucun repli implicite vers l’administrateur le plus ancien. - Les outils de système de fichiers de l’hôte sont limités à l’espace de travail. Lectures et écritures vérifient la cible canonique ; une session ne peut pas choisir un répertoire de travail hors de la racine configurée. Les restrictions natives de modification de DSH s’appliquent toujours. Les plugins supplémentaires installés par l’opérateur sont du code serveur de confiance.
- Les outils de l’hôte utilisent les politiques de DSH. La page du moteur propose des réglages par session de lecture seule ou d’écriture dans l’espace de travail, ainsi que des cartes natives d’autorisation ponctuelle. Ces commandes ne contournent jamais les limites configurées de l’espace de travail. Les tours Chat sans interface refusent les demandes d’autorisation qu’ils ne peuvent pas présenter. Le pilote DSH de Work utilise à la place les autorisations Work et l’isolation en conteneur, sans outils de système de fichiers de l’hôte.
- Les flux contiennent le texte en direct et le raisonnement exposé. Les messages durables conservent la transcription achevée ; les clients ne reçoivent pas de seconde copie du texte en direct.
- Redémarrage et suppression utilisent les sessions stockées. Les sessions vides et terminées du moteur survivent aux redémarrages. Supprimer une session JSONL créée par le pont arrête son écrivain et retire l’artefact. Les autres implémentations de persistance doivent fournir un adaptateur de suppression adapté.
- Les anciens journaux malformés nécessitent une réparation explicite. D’anciennes révisions du pont écrivaient les messages utilisateur sans identifiants obligatoires. Le lecteur strict refuse ces journaux au lieu de les abandonner. Consultez la procédure de récupération dans Dépannage.
- Les titres sont dérivés localement. Les résumés de session utilisent le premier message humain comme titre court ; les sessions vides n’ont pas de titre dérivé.
Connecter les modèles d’une instance DSH active
Le plugin facultatif dsh-native-provider expose les modèles et connexions de fournisseurs déjà configurés dans une autre instance DSH, telle que l’application web locale sur le port 3080. Installez-le dans le profil existant de cette instance. Il appelle uniquement ctx.llm : les clés de fournisseurs restent dans DSH et la connexion ne peut ni créer de sessions, ni lancer d’agents, ni lire des fichiers de pièces jointes natifs, ni exécuter des outils natifs.
Les deux processus doivent s’exécuter sur le même hôte Unix sous le même compte du système d’exploitation. Le transport utilise un socket Unix explicitement configuré, dans un répertoire physique appartenant à ce compte avec le mode 0700, et un socket en mode 0600. Il n’ajoute aucun écouteur TCP et ne réutilise ni n’affaiblit l’authentification du navigateur DSH. Windows et les hôtes DSH distants ne sont pas pris en charge par cette connexion locale.
Le compte du système d’exploitation délimite l’accès local : les autres processus exécutés sous ce compte peuvent utiliser son socket. Cette connexion ne fournit pas d’identifiants natifs distincts ni d’isolation entre applications partageant ce compte.
Installer le plugin autonome
Dans DSH → Plugins → Add plugin, collez cette URL de dépôt public dans Package name or address, puis cliquez sur Install :
https://github.com/libre-webui/dsh-native-provider
Activez le composant lorsque DSH le demande. Le package public est en version 0.1.1, sous licence Apache-2.0, et contient son environnement précompilé et son patch de bundle. Il n’exige ni compilation locale, ni script d’installation, ni dépendance npm d’exécution. Le nom de package nu @libre-webui/dsh-native-provider n’est pas publié sur npm ; utilisez l’URL GitHub dans la boîte de dialogue.
Le bundle choisit <DSH home>/lwui-provider/llm.sock, généralement $HOME/.dsh/lwui-provider/llm.sock. Un DSH_HOME configuré est prioritaire. Le répertoire privé du socket est créé s’il manque. Utilisez un seul pont actif par répertoire d’accueil DSH, ou remplacez le chemin du socket dans le cordis.patch.yml utilisateur du profil pour les profils supplémentaires. Le chemin complet doit tenir dans 100 octets UTF-8 et ne comporter aucun lien symbolique. Consultez le guide de configuration autonome pour ces remplacements.
L’équivalent facultatif en ligne de commande est :
dsh plugin --profile web add https://github.com/libre-webui/dsh-native-provider
Remplacez web par le profil qui exécute réellement votre instance DSH s’il est différent. Redémarrez ce profil après une installation en ligne de commande ; une installation depuis l’interface active peut activer le plugin immédiatement. Suivez tout avis de redémarrage affiché par DSH. Aucune modification du code source DSH ni copie des clés de fournisseur n’est nécessaire.
Préparer un bundle depuis Libre WebUI
Libre WebUI fournit aussi un script de préparation. Depuis une copie des sources, compilez le backend et préparez un nouveau répertoire de sortie :
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
Les distributions npm installées contiennent déjà le backend compilé et le script de préparation ; exécutez les deux dernières commandes depuis leur répertoire d’installation, sans l’étape de compilation. Redémarrez ensuite le profil DSH sélectionné. Les deux méthodes de préparation refusent les répertoires de sortie existants et incluent les métadonnées du package, la licence et les notes d’installation.
Connecter Libre WebUI
Faites pointer le cordis.config.yml de Libre WebUI vers le même chemin absolu de socket. Pour la valeur par défaut du bundle public, remplacez /absolute/home par votre véritable répertoire personnel :
nativeProvider:
socketPath: /absolute/home/.dsh/lwui-provider/llm.sock
Vous pouvez aussi définir LIBRE_DSH_PROVIDER_SOCKET sur ce chemin absolu. Une valeur d’environnement vide désactive la connexion même si le fichier déclare un chemin. Activez Moteur Cordis dans LWUI. Les administrateurs actifs peuvent alors choisir les modèles natifs dans le moteur DeepSeek Harness de Work, sur la page du moteur et dans le groupe Agents de Chat (Chat exige aussi Modèles d’agents CLI). Work conserve le modèle natif brut et l’identifiant du fournisseur avec providerType: dsh ; les tâches DSH existantes appuyées sur LWUI conservent leur identité de fournisseur et leur marqueur de moteur d’origine.
La liste des modèles natifs est lue en direct. Toute modification de configuration d’un fournisseur ou de ses identifiants invalide la génération de la connexion et annule les appels natifs en cours. Un socket, modèle ou fournisseur natif indisponible arrête la requête ; LWUI ne se replie pas sur Ollama ou un autre fournisseur. Les titres et résumés de raisonnement appellent directement le LLM natif sélectionné sans outils. Cette première connexion accepte le texte, le raisonnement et les messages d’outils ; les références à des images ou fichiers natifs sont refusées.
Les identifiants natifs appartiennent à l’opérateur DSH : cette connexion reste donc réservée aux administrateurs même si Work ordinaire est accessible à davantage d’utilisateurs. Les requêtes de modèles peuvent quitter l’hôte selon le fournisseur configuré dans DSH ; Work affiche son avis de fournisseur distant. Dans un déploiement d’équipe, chaque worker traitant ces tâches doit accéder à la connexion locale configurée ; son absence entraîne un refus. Désactiver Cordis ou retirer le réglage du socket supprime l’accès natif tout en conservant les tâches enregistrées. Si DSH plante en laissant un socket, arrêtez l’instance propriétaire et retirez uniquement ce socket obsolète avant de redémarrer ; le plugin refuse de remplacer une entrée existante du système de fichiers.
Mettre à niveau ou supprimer le plugin
Terminez ou annulez les requêtes natives actives avant de modifier le plugin. Pour remplacer l’ancien bundle local 0.0.0/0.1.0 depuis l’interface DSH, utilisez Uninstall, revenez à Add plugin et installez l’URL GitHub publique ci-dessus. Conservez tout chemin de socket personnalisé au moyen d’un remplacement utilisateur de profil pris en charge. Les sessions et identifiants natifs sont préservés.
Pour une installation provenant déjà de GitHub, la ligne de commande permet de la mettre à jour :
dsh plugin --profile web update @libre-webui/dsh-native-provider
Redémarrez après les mises à jour en ligne de commande et vérifiez la version. Un plugin déjà désactivé reste désactivé ; vérifiez son état avant de tester la connexion. Pour épingler une révision ou revenir en arrière, utilisez github:libre-webui/dsh-native-provider#<commit> comme source. Pour les bundles préparés localement, créez plutôt un nouveau répertoire de sortie et ajoutez-le à nouveau ; mettre à jour une dépendance locale ne récupère pas les changements GitHub.
Pour retirer la connexion, supprimez d’abord le réglage nativeProvider.socketPath de LWUI ou définissez LIBRE_DSH_PROVIDER_SOCKET sur une valeur vide, puis exécutez :
dsh plugin --profile web remove @libre-webui/dsh-native-provider
Redémarrez le profil DSH après la suppression. Les tâches LWUI enregistrées sont conservées, mais leurs requêtes de modèles natifs échouent jusqu’à la restauration de la même connexion explicite. Supprimer ce plugin ne supprime ni les fournisseurs configurés dans DSH ni leurs identifiants. Supprimez les anciens répertoires de bundles générés uniquement lorsqu’ils ne sont plus installés.
Utilisation des fournisseurs natifs
Les requêtes natives apparaissent dans Utilisation des fournisseurs sous DeepSeek Harness · fournisseur, avec le modèle brut sélectionné. Chaque requête réelle au modèle est comptée une fois, y compris les tours d’outils, les titres et les résumés de raisonnement. Le tableau de bord comprend les appels réussis, échoués et annulés, la latence et les jetons signalés par DSH. Les entrées mises en cache sont incluses une seule fois dans le total d’entrée ; une utilisation absente reste non mesurée au lieu d’être estimée. Les identifiants de fournisseurs utilisent dsh-native:<percent-encoded-native-provider-id> pour les règles existantes de tarification et de coûts. Les tarifs inconnus restent sans prix.
Les requêtes DSH passant par des fournisseurs configurés dans LWUI conservent les enregistrements d’utilisation existants de ces fournisseurs. Les lectures de catalogue et les requêtes refusées avant l’inférence native n’ajoutent pas d’enregistrement d’appel au modèle. La mesure commence à l’installation de cette version de la connexion ; elle n’invente aucun historique. L’utilisation stockée contient l’identité, le statut, l’heure et les compteurs, sans invites, réponses, identifiants, points d’accès ni texte d’erreur du fournisseur.
Vérifier une configuration
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" }
]
}
Un 503 avec code: CORDIS_UNAVAILABLE signifie que la composition n’a pas été montée. Le champ error en donne la raison, et LIBRE_CORDIS_TRACE=true ajoute le journal d’activation Cordis. Consultez Dépannage pour les causes courantes.