Exécuter DisPatch et mes outils IA dans Docker : un fichier, une seule commande

Publié
19 octobre 2026
Mis à jour
19 octobre 2026
Par
Jacob Lloyd — rédigé avec l'aide de l'IA, une fois le projet terminé
Temps de lecture
20 min de lecture

En clair : DisPatch est une application de chat que vous exécutez sur votre propre ordinateur et à laquelle vous accédez depuis n’importe quel téléphone ou ordinateur portable dans la maison. Docker est un programme gratuit qui exécute ce type de logiciel dans un environnement isolé, de sorte que vous n’avez pas besoin d’installer manuellement Python ou tout autre élément. Cette page vous permet, en utilisant un seul petit fichier texte et une seule commande, de disposer d’un chat IA fonctionnel. Il est possible d’y intégrer un petit modèle d’IA qui s’exécute sur votre propre processeur ; ainsi, aucun compte ni clé API n’est nécessaire.

J’utilise ma propre application de chat IA, DisPatch, pour ma famille. Jusqu’à ce mois-ci, son installation nécessitait Python, un environnement virtuel et un fichier de service. Désormais, elle est fournie sous forme d’image Docker ; toute la configuration se fait via un seul fichier et une seule commande sur votre propre serveur. Cette page vous guide pas à pas, depuis un dossier vide jusqu’à un chat fonctionnel, en utilisant un petit modèle IA qui tourne directement sur votre processeur afin que vous puissiez le tester sans avoir à vous inscrire nulle part.

Chaque commande indiquée sur cette page est exactement celle que j’ai exécutée le 19 octobre 2026. Je ne dispose pas de Docker Desktop sur cette machine ; j’ai donc utilisé Podman 5.8 avec Docker Compose 5.6 sous Linux. Les commandes restent identiques ; lorsque Podman nécessitait quelque chose de supplémentaire, je le précise dans la partie technique à la fin.

Résumé rapide

  • Ce que vous obtenez : DisPatch, une application de chat privée pour navigateur et téléphone, ainsi qu’un petit modèle IA optionnel, tous deux exécutés dans des conteneurs sur votre ordinateur.
  • Ce que vous faites : installer Docker, enregistrer un fichier de 26 lignes, lancer docker compose up -d, ouvrir http://localhost:8765 et suivre un assistant de configuration en six étapes.
  • Coût : rien du tout. Environ 600 Mo pour l’image DisPatch, 860 Mo pour l’image du serveur de modèle, plus un téléchargement de modèle de 2,5 Go.
  • Ce qui ne se produit jamais : vos conversations ne sont envoyées nulle part sans votre accord. Avec le modèle local, rien ne quitte votre ordinateur, sauf les requêtes météo ou web que vous demandez explicitement.
  • Points importants : à la date du 19 octobre 2026, DisPatch est le seul de mes images publié sur un registre ; les autres outils se construisent à partir de leur code source en ajoutant simplement un mot clé. Ce petit modèle local convient bien pour des questions courantes, mais pas pour des raisonnements complexes.

Ce que vous obtenez à la fin

DisPatch dans un navigateur. Atlas, le personnage par défaut, répond à une question sur la façon de faire pousser du basilic sur un rebord de fenêtre en donnant six conseils numérotés. Plus bas, interrogé sur la météo à Lisbonne, Atlas affiche d’abord une petite notification concernant la recherche météo puis donne la température actuelle, le vent et les prévisions pour la semaine. Le nom du modèle indiqué sous chaque réponse est Qwen3 4B.
DisPatch en fonctionnement via Docker, dialoguant avec un modèle de 4 milliards de paramètres sur le processeur de votre ordinateur. La réponse météo a été obtenue grâce à une recherche en temps réel ; la petite notification ci-dessus l’indique clairement.

Atlas est le personnage par défaut dans DisPatch. Il répond aux questions et, lorsqu’il dispose d’un modèle prenant en charge les outils, il peut effectuer des recherches : recherche web, lecture de pages, météo, Wikipédia, taux de change, heure ou calculatrice. Le même chat s’ouvre également sur un téléphone :

Le même chat DisPatch affiché sur un écran de téléphone : fin des conseils sur le basilic, question météo, notification de recherche météo et réponse d’Atlas, avec une zone de saisie et les onglets Bots, Chats et Messages en bas.
La même conversation, affichée en format téléphone.

Pour découvrir ce que DisPatch peut faire de plus (profils individuels pour chaque membre de la famille, mode enfants, sauvegardes), consultez l’article sur DisPatch 3.0. Cette page se concentre uniquement sur son installation.

Étape 1 : installer Docker

Vérifiez que tout fonctionne en ouvrant un terminal (PowerShell sous Windows) et en tapant docker compose version. Tout numéro de version indique que vous êtes prêt.

Étape 2 : créer un dossier et un fichier

Créez un dossier nommé dispatch puis enregistrez-y le contenu suivant sous le nom docker-compose.yml :

services:
  dispatch:
    image: ghcr.io/laserlloyd/dispatch_chat:main
    ports:
      - "8765:8765"
    volumes:
      - dispatch-data:/data
    restart: unless-stopped
    init: true
    stop_grace_period: 30s

  # Optionnel : un petit modèle IA qui tourne sur votre processeur, sans compte requis.
  # Supprimez ce bloc si vous comptez utiliser Ollama, LM Studio ou un service cloud à la place.
  model:
    image: ghcr.io/ggml-org/llama.cpp:server-b11723
    command: ["-hf", "unsloth/Qwen3-4B-Instruct-2507-GGUF:Q4_K_M", "--jinja",
              "--host", "0.0.0.0", "--port", "8080", "--ctx-size", "8192"]
    environment:
      LLAMA_CACHE: /models
    volumes:
      - model-files:/models
    restart: unless-stopped

volumes:
  dispatch-data:
  model-files:

Deux services sont définis. dispatch correspond à l’application de chat. model est le serveur d’llama.cpp, qui télécharge le modèle Qwen3 4B Instruct (2,5 Go) lors de son premier démarrage et le conserve. Vos conversations sont stockées dans un volume nommé dispatch-data, qui subsiste même après les mises à jour ou redémarrages.

"8765:8765" permet à d’autres appareils du réseau d’accéder à DisPatch, ce qui est idéal pour un chat familial. Si vous souhaitez le limiter uniquement à cet ordinateur, remplacez cette ligne par "127.0.0.1:8765:8765".

Étape 3 : lancer le tout

Dans un terminal, depuis le dossier dispatch :

docker compose up -d
docker compose ps

Lors du premier démarrage, les deux images et le modèle sont téléchargés ; prévoyez donc quelques minutes. Sur ma machine, DisPatch a répondu 5 secondes après l’arrivée de son image, tandis que le serveur de modèle a mis environ 20 secondes pour télécharger et charger le modèle sur mon réseau. docker compose ps devrait alors afficher les deux services comme étant Up.

Étape 4 : créer votre compte

Ouvrez http://localhost:8765 dans un navigateur. Un nouvel install DisPatch reste verrouillé tant qu’un propriétaire n’est pas défini ; comme il tourne dans un conteneur, il demande un token de configuration unique. Récupérez-le via les logs :

docker compose logs dispatch | grep "SETUP TOKEN"

Si grep n’est pas disponible (sous Windows), exécutez simplement docker compose logs dispatch et repérez la ligne commençant par SETUP TOKEN:. Ce token change à chaque démarrage de DisPatch et devient inutilisable dès qu’un propriétaire est créé.

Assistant de configuration DisPatch, étape 1 Votre compte : nom Ada, mot de passe saisi deux fois, code PIN optionnel laissé vide, et section ouverte « Configuration depuis un autre ordinateur » où le token de configuration est collé. Un bouton Créer un compte se trouve en bas.
Première étape sur six. Saisissez un nom et un mot de passe, ouvrez « Configuration depuis un autre ordinateur ? » puis collez le token.

Le mot de passe doit comporter au moins 8 caractères. Le code PIN est facultatif, il sert à déverrouiller rapidement l’application. Si vous en indiquez un, DisPatch enregistre un code de récupération dans ses données ; il convient alors de le copier en lieu sûr :

docker compose exec dispatch cat /data/RECOVERY-CODE.txt

Étape 5 : connecter l’IA

La deuxième étape de l’assistant cherche un serveur de modèles sur la même machine. En contexte Docker, il ne repère pas automatiquement le service model ; vous devez donc le renseigner manuellement :

Étape 2 de l’assistant, Un modèle. Saisissez « OpenAI-compatible », adresse http://model:8080/v1, aucune clé API, modèle par défaut unsloth/Qwen3-4B-Instruct-2507-GGUF:Q4_K_M. Sous « Tester et enregistrer », une ligne verte indique 1 modèle disponible, 14 ms, serveur OpenAI-compatible ; Atlas l’utilise désormais.
Indiquez « OpenAI-compatible », l’adresse http://model:8080/v1, ne renseignez aucune clé et précisez le nom du modèle. Le bouton « Tester et enregistrer » devrait afficher un message vert.
ChampValeur à saisir
TypeOpenAI-compatible
Adressehttp://model:8080/v1
Clé APIlaisser vide
Modèle par défautunsloth/Qwen3-4B-Instruct-2507-GGUF:Q4_K_M

Vous souhaitez utiliser un modèle cloud à la place ? Choisissez-le dans le même champ et indiquez votre clé API. J’ai testé cela avec un fournisseur cloud compatible OpenAI : « Tester et enregistrer » a listé ses modèles, et Atlas a pu dialoguer via celui-ci. La clé API est stockée dans les données de DisPatch, jamais dans le fichier compose.

Étape 6 : finaliser et dire bonjour

Les dernières étapes sont rapides. La fonction vocale est un add-on séparé que vous pouvez ignorer. « Famille » permet d’ajouter d’autres personnes (vous le ferez plus tard). « Réseau » demande de préciser qui peut accéder à DisPatch : choisissez la même option que pour le port au moment de l’étape 2.

Étape 6 de l’assistant, Terminé : coches pour Compte propriétaire, Connexion au modèle et Qui peut accéder à DisPatch ; tirets pour Voix et Famille ; cercles ouverts pour Sauvegardes chiffrées et Code de récupération enregistré. Un bouton Terminer se trouve en bas.
Dernière étape : une liste de vérification des actions effectuées et des options restantes.

Cliquez sur Terminer. Si la page affiche encore le formulaire de création du compte propriétaire après cela, rechargez-la. Il s’agit d’un bug d’affichage dans la version actuelle (le compte a bien été créé, mais l’ancien formulaire reste visible). Ensuite, sélectionnez Atlas à gauche, appuyez sur + pour ouvrir un nouveau chat et posez-lui une question.

Pour utiliser DisPatch depuis un téléphone connecté au même Wi-Fi, ouvrez http://<your computer's address>:8765. L’installation sur l’écran d’accueil, les notifications et le micro nécessitent HTTPS ; la partie technique aborde ce point.

C’est tout pour la configuration. Ce qui suit s’adresse à ceux qui souhaitent en savoir davantage, sécuriser leurs données ou ajouter mes autres outils.

Comment les différents éléments s’assemblent

L’image DisPatch s’exécute en tant qu’utilisateur ordinaire (uid 1000), et non en tant que root. Toutes les données écrites le sont dans /data, qui correspond au volume dispatch-data : la base de données SQLite, les fichiers téléchargés, les avatars, les paramètres ainsi que les sauvegardes quotidiennes. Si vous supprimez le conteneur, rien n’est perdu ; en revanche, si vous supprimez le volume, tout disparaît.

L’étiquette d’image main correspond à la branche principale du dépôt DisPatch. Au 19 octobre 2026, les étiquettes publiées étaient main ainsi qu’une étiquette sha-<commit> par build ; il n’y a pour l’instant aucune étiquette basée sur un numéro de version. Si vous souhaitez conserver la même image jusqu’à ce que vous décidiez de la mettre à jour, utilisez une étiquette sha- disponible sur la page du paquet. Des images sont proposées pour les architectures Intel/AMD 64 bits et ARM ; j’ai utilisé celle destinée à Intel/AMD.

Vos données : sauvegardez-les, restaurez-les, mettez-les à jour en toute sécurité

Arrêtez d’abord DisPatch afin que sa base de données soit complètement écrite, puis copiez le volume dans un fichier :

docker compose stop dispatch
docker run --rm -v dispatch_dispatch-data:/data:ro -v "$PWD":/backup alpine \
  tar czf /backup/dispatch-backup.tgz -C /data .
docker compose start dispatch

Compose nomme le volume d’après le nom du dossier ; ainsi, un dossier appelé dispatch donne le nom dispatch_dispatch-data. La commande docker volume ls affiche le nom réel du volume. Lors de mes tests, avec quelques conversations enregistrées, j’ai obtenu un fichier de 3,7 Mo.

Pour restaurer ces données dans un nouveau volume (j’ai ainsi restauré mon ancien volume et lancé un second DisPatch : mêmes propriétaires, même contenu avec 8 messages) :

docker volume create dispatch_dispatch-data
docker run --rm -v dispatch_dispatch-data:/data -v "$PWD":/backup:ro alpine \
  sh -c 'tar xzf /backup/dispatch-backup.tgz -C /data && chown -R 1000:1000 /data'
docker compose up -d

Ne copiez pas isolément le fichier chats.db depuis un conteneur en cours d’exécution : les messages récents se trouvent dans le fichier chats.db-wal à côté de celui-ci, tant que DisPatch n’est pas arrêté.

Mettre à jour nécessite deux commandes. Sur une installation déjà remplie, j’ai exécuté docker compose down, pull puis up -d ; les propriétaires et tous les messages sont restés en place, et aucun nouveau token de configuration n’a été généré.

docker compose pull
docker compose up -d

Faites une sauvegarde avant toute mise à jour majeure : DisPatch migre sa base de données au démarrage, et une image plus ancienne pourrait ne pas être capable de lire cette version mise à jour.

Paramètres de sécurité par défaut, et un réglage à vérifier

  • Bloqué tant qu’aucun propriétaire n’est défini. Jusqu’à ce que la première étape de l’assistant de configuration soit effectuée, seule une page de connexion est accessible depuis le réseau ; pour créer un propriétaire, il faut utiliser le token affiché dans les logs.
  • Les visiteurs non connectés accèdent à la vue Restricted. Ce point m’a surpris lors des tests : depuis un navigateur jamais utilisé pour se connecter, j’ai pu ouvrir Atlas et recevoir des réponses. Il s’agit d’une caractéristique de DisPatch 3.0 (un visiteur est traité comme un profil Restricted d’enfant, avec 200 réponses autorisées par jour), mais ces réponses sont générées via votre connexion IA. Si DisPatch se trouve sur votre réseau et utilise une clé cloud payante, modifiez dans les paramètres : « Settings → All settings → People & Profiles → “A device that has not signed in” » pour le valeur Sign-in screen only.
  • L’accès au service dépend de la ligne ports. "8765:8765" autorise l’accès depuis tout le réseau ; "127.0.0.1:8765:8765" limite l’accès à la seule machine locale. Le conteneur écoute toujours sur toutes les adresses de son propre réseau interne.
  • HTTPS reste à votre responsabilité. Le docker-compose.yml fourni dans le dépôt propose un proxy Caddy optionnel (--profile proxy) pour mettre en place un nom de domaine réel avec certificats ; je ne l’ai pas testé cette fois-ci. Si vous utilisez nginx, conservez proxy_set_header Host $host;, sinon le chat s’affiche mais ne se mettra jamais à jour (DisPatch vérifie que l’origine du navigateur correspond au header Host).
  • Le serveur modèle n’utilise aucune clé. Son port n’étant pas publié dans le fichier ci-dessus, seul DisPatch peut y accéder. N’ajoutez pas de ligne ports: à la section model sauf si vous fournissez également à llama.cpp un paramètre --api-key.

Le guide complet sur l’utilisation de Docker avec DisPatch, incluant les montages bind, les identifiants utilisateurs et l’intégration de l’agent qui ne fonctionne pas bien dans un conteneur, se trouve dans le fichier docs/deploy-docker.md du dépôt.

Intégration de mes autres outils

Chacun de mes autres outils possède un fichier deploy/compose/compose.yml dans son propre dépôt. Leurs images ne sont pas encore publiées sur un registre ; il faut donc cloner le dépôt et ajouter l’option --build. Sur ma machine, chaque compilation a pris moins d’une minute, les images de base étant déjà téléchargées. Le 19 octobre 2026, j’ai cloné ces dépôts et lancé chacun des outils suivants :

OutilDescriptionImagePortVérifications effectuées
DisPatchl’application de chatpubliée, 599 Mo8765Tout ce qui a été mentionné ci-dessus
MailForgeassistant de messagerie ne pouvant pas envoyer de courriels seulà compiler, 420 Mo8090Le tableau de bord s’ouvre, aucune boîte mail n’est connectée
InfoForge + kiwixmoteur de recherche Wikipédia hors ligne pour les réponses IAà compiler, 128 Mo, plus 66 Mo pour Kiwixaucun (Kiwix utilise le port 8090)Fonctionnement des outils doctor et search sur un fichier Wikipédia de 23 Mo
ThemeForgepage de prévisualisation des thèmesà compiler, 13,8 Mo8185La page s’ouvre correctement
StudioForgeserveur modèle GPUà compiler, 568 Mo (Vulkan)1234, 8080, 1235Sert un modèle sur une GPU intégrée AMD ; détails ci-dessous
CrucibleForgeoutil de benchmark pour modèles IAà compiler, 129 Mo8777L’outil démarre et s’ouvre ; aucun benchmark n’a été exécuté
TransForgetraducteur de sites webà compileraucunPas testé lors de cette série d’essais

Les tailles indiquées correspondent à ce que Podman a rapporté sur le disque. Les fichiers compose propres à ces outils publient leurs ports uniquement sur 127.0.0.1, sauf si vous modifiez cette configuration.

MailForge

MailForge chiffre les mots de passe de vos boîtes mail à l’aide d’un mot de passe de clé que vous choisissez ; ce mot de passe ne peut pas être récupéré, alors conservez-le dans un gestionnaire de mots de passe. Vous devez également indiquer à LLM_BASE_URL l’adresse de votre propre serveur de modèles (192.0.2.10 ci-dessous représente cette adresse). Par défaut, le port utilisé est le 1234 sur l’hôte Docker ; toutes les requêtes de MailForge seront envoyées à cet endroit.

git clone https://github.com/LaserLloyd/MailForge.git
cd MailForge
read -rsp 'Phrase de passe du keyring MailForge : ' MAILFORGE_KEYRING_PASSWORD; export MAILFORGE_KEYRING_PASSWORD
LLM_BASE_URL=http://192.0.2.10:1234/v1 \
  docker compose -f deploy/compose/compose.yml up -d --build
docker compose -f deploy/compose/compose.yml logs app | grep "MailForge UI"

La ligne de journal affiche une adresse du type http://127.0.0.1:8090/?token=… ; ouvrez-la dans un navigateur.

Tableau de bord de MailForge dans un navigateur, installation fraîche : les compteurs indiquant le nombre de mails reçus, non lus, nécessitant une réponse ou une action, ainsi que les brouillons générés par l’IA sont tous à 0 ; des boutons permettent de rédiger un nouveau message et d’ouvrir la boîte de réception. Les panneaux « Nécessite une réponse » et « Boîte de réception récente » sont vides. La barre supérieure indique que toute action nécessite votre approbation humaine, qu’aucun mail ne peut être envoyé sans vous, et qu’aucune boîte mail n’a encore été ajoutée.
MailForge fraîchement installé dans Docker, avant toute configuration de boîtes mail.

InfoForge et Wikipédia hors ligne

Placez un fichier .zim provenant de la bibliothèque Kiwix dans le dossier deploy/compose/zims/, puis indiquez son nom dans le fichier infoforge.config.yaml (copiez-le depuis infoforge.config.example.yaml). J’ai utilisé le petit fichier de 23 Mo intitulé « Chemistry by Wikipedia » pour effectuer les tests.

git clone https://github.com/LaserLloyd/InfoForge.git
cd InfoForge/deploy/compose
docker compose up -d kiwix
docker compose --profile cli build infoforge
docker compose --profile cli run --rm infoforge doctor
docker compose --profile cli run --rm infoforge search "noble gas"

La recherche fonctionne sans aucun modèle d’IA :

[1] Noble Gas  (score 19.0, 4222 caractères)
[2] Gas  (score 16.0, 1586 caractères)
[3] Noble gas compound  (score 10.5, 2045 caractères)

infoforge ask nécessite un serveur de modèles défini dans base_url ; avec l’adresse par défaut, la commande doctor passe tous les tests sauf celui relatif au « llm primary », ce qui est normal.

ThemeForge

git clone https://github.com/LaserLloyd/ThemeForge.git
cd ThemeForge
docker compose -f deploy/compose/compose.yml up -d --build

Ouvrez ensuite http://localhost:8185.

Page d’exemple de ThemeForge utilisant la palette Daylight : boutons de palette en haut, puis interrupteurs, cases à cocher, boutons radio et onglets dans leurs états activé, désactivé, sélectionné ou désactivé ; une série de styles de boutons, des champs de formulaire affichant une erreur, ainsi que des échantillons de couleurs.
Page d’exemple de ThemeForge dans son conteneur de 13,8 Mo.
## Un serveur de modèles GPU : StudioForge

StudioForge est mon propre serveur de modèles. Il exécute les modèles sur une carte graphique, gère plusieurs modèles et plusieurs clients ; depuis la version 2.0, il nécessite un compte propriétaire ainsi qu’une clé API pour chaque client. Son image n’est pas encore disponible sur un registre, donc cette section explique comment la construire.

Je pensais écrire « NVIDIA uniquement » ici. Le mini-PC que j’ai testé ne dispose pas de carte NVIDIA ; il a seulement la GPU Radeon intégrée d’AMD, présente dans le processeur Ryzen AI 9 365. J’ai tout de même compilé l’image Vulkan, fourni la GPU en question, et ça a fonctionné : au premier démarrage, StudioForge a téléchargé depuis GitHub le moteur llama.cpp précompilé correspondant, l’a testé, puis a servi le modèle Qwen3 4B avec toutes les couches exécutées sur la GPU, à un débit de 23 à 28 tokens par seconde. À titre de comparaison, le service de modèles model mentionné plus haut atteignait 22 tokens par seconde avec le même modèle ; sur cette puce, la GPU libère donc davantage le processeur qu’elle ne accélère les réponses.

Panneau de contrôle de StudioForge 2.0.1, onglet ‘Overview’ : une seule GPU, la GPU Radeon intégrée d’AMD détectée via Vulkan, avec 5,68 Go utilisés sur les 10,48 Go disponibles ; un seul espace mémoire VRAM, llama-server ; et un seul modèle chargé, Qwen3-4B-Instruct-2507 Q4_K_M, actuellement inactif, ayant atteint un débit de 22,79 tokens par seconde lors de la dernière requête, avec le moteur version b11669.
StudioForge en mode Docker utilisant la GPU intégrée AMD transmise via Vulkan ; un seul modèle est chargé.
git clone https://github.com/LaserLloyd/StudioForge.git
cd StudioForge/deploy/compose
cp env.example .env
# Dans .env : SF_BACKEND=vulkan, SF_MODELS=/chemin/vers/vos/fichiers_gguf,
#          SF_OWNER_PASSWORD (mot de passe de 10 caractères minimum),
#          SF_VIDEO_GID et SF_RENDER_GID = valeurs fournies par : getent group video render
docker compose -f compose.yml -f compose.vulkan.yml build
docker compose -f compose.yml -f compose.vulkan.yml up -d
docker compose -f compose.yml -f compose.vulkan.yml exec studioforge \
  studioforge keys create --name dispatch --scope inference

La dernière commande affiche une clé une seule fois. Le panneau de contrôle est accessible à l’adresse http://localhost:8080 (utilisateur owner, mot de passe défini précédemment). Pour une carte NVIDIA, le fichier requis est compose.cuda.yml et il faut définir SF_BACKEND=cuda ; je n’ai pas testé cette configuration ici, et l’image CUDA est nettement plus volumineuse.

DisPatch et StudioForge, ensemble

Le dépôt de DisPatch contient le fichier deploy/compose/stack.yml, qui lance les deux services sur un même réseau et préconfigure la connexion de DisPatch à StudioForge. En sortie de boîte, il tente de récupérer une image StudioForge qui n’est pas encore publique ; il faut donc le configurer pour qu’il utilise l’image que vous venez de construire. Voici les paramètres que j’ai ajoutés dans stack.env :

git clone https://github.com/LaserLloyd/DisPatch_Chat.git
cd DisPatch_Chat
cp deploy/compose/stack.env.example deploy/compose/stack.env
# Ajouter à deploy/compose/stack.env :
#   DISPATCH_IMAGE=ghcr.io/laserlloyd/dispatch_chat:main
#   STUDIOFORGE_IMAGE=ghcr.io/laserlloyd/studioforge:2.0.1-vulkan
#   STUDIOFORGE_MODELS=/chemin/vers/vos/fichiers_gguf
#   STACK_MODEL=<l’identifiant du modèle listé dans StudioForge>
#   SF_OWNER_PASSWORD (le même mot de passe propriétaire de 10 caractères minimum)

Le fichier de configuration réserve une GPU NVIDIA. Pour les systèmes AMD ou Intel utilisant Vulkan, j’ai remplacé cette configuration par un second fichier, stack-amd.yml :

services:
  studioforge:
    deploy: !reset {}
    devices: ["/dev/dri:/dev/dri"]
    group_add: ["39", "105"]   # numéros des groupes vidéo et de rendu sur votre système
docker compose -f deploy/compose/stack.yml -f stack-amd.yml \
  --env-file deploy/compose/stack.env up -d
docker compose -f deploy/compose/stack.yml -f stack-amd.yml \
  --env-file deploy/compose/stack.env exec studioforge \
  studioforge keys create --name dispatch --scope inference

Ensuite, terminez le processus de configuration de DisPatch comme indiqué précédemment, ouvrez les Paramètres → Connexions, cliquez sur Modifier pour la connexion à StudioForge, collez la clé obtenue et appuyez sur Tester.

Paramètres DisPatch, onglet Connexions : une connexion nommée StudioForge à l’adresse http://studioforge:1234/v1, clé enregistrée, utilisée par Atlas ; un encadré vert indique 2 modèles disponibles, temps de réponse de 14 ms, version StudioForge 2.0.1.
La connexion à StudioForge préconfigurée après insertion de la clé. Atlas a ensuite pu interagir via StudioForge sur la GPU.

L’identifiant du modèle se trouve en exécutant curl -H "Authorization: Bearer <key>" http://localhost:1234/v1/models ou dans l’onglet Modèles du panneau d’administration. Si vos modèles se trouvent dans un dossier téléchargé depuis Hugging Face, l’identifiant correspond au chemin complet du dossier ; il est long mais fonctionne parfaitement.

## Pièges à éviter
  • Recharger la page après la configuration. Dans la version que j’ai testée, le formulaire de création du compte propriétaire reste affiché après la fermeture du processus de configuration. Le compte existe déjà ; il suffit de recharger la page.
  • Le processus de configuration ne trouve pas le modèle tout seul. À l’intérieur de Docker, sa recherche se limite au conteneur et non aux autres services. Il faut alors indiquer http://model:8080/v1.
  • Modèles de petite taille et requêtes externes. Avec le modèle Qwen2.5 1,5B, Atlas affichait parfois une ligne du type « Recherche web : … » sans effectuer réellement la requête. Le modèle 4B mentionné ci-dessus a quant à lui exécuté correctement les requêtes météo à chaque tentative. Plus le modèle est grand, mieux c’est.
  • Le code de récupération n’existe que si un PIN est défini. Avec uniquement un mot de passe, il n’y a pas de fichier RECOVERY-CODE.txt, bien que la liste de vérification du processus de configuration en fasse mention.
  • Deux outils sollicitent le port 8090. MailForge et kiwix d’InfoForge utilisent tous deux le port 8090 par défaut sur ce système. Si vous exécutez les deux, il faut définir HOST_PORT pour MailForge ou KIWIX_PORT pour kiwix.
  • Le premier démarrage de StudioForge nécessite GitHub. Il télécharge l’moteur llama.cpp via l’API GitHub, qui autorise 60 requêtes anonymes par heure et par adresse IP. Ma première tentative a atteint cette limite ; l’image Vulkan minimale a alors tenté de compiler l’moteur à partir du code source, ce qu’elle ne peut pas faire (il n’y a pas d’git dans l’image), et a affiché can_serve: false. Un redémarrage après réinitialisation de la limite a résolu le problème. Selon les messages de log de StudioForge, définir GITHUB_TOKEN dans .env augmente cette limite.
  • docker compose down -v supprime vos conversations. En revanche, la commande simple down ne le fait pas.
  • Utilisateurs de Podman : sur Fedora et autres systèmes SELinux, ajoutez :z au montage du dossier de sauvegarde ("$PWD":/backup:z). Podman avec Docker Compose rejette également les fichiers de configuration des outils dont le bloc healthcheck ne contient pas de ligne test: (« il faut définir une commande de vérification ») ; j’ai donc ajouté cette commande dans un petit fichier de surcharge en me basant sur chaque Dockerfile. Pour kiwix exécuté sans droits root, il faut spécifier KIWIX_USER=0. Les utilisateurs de Docker peuvent ignorer ce point.
## Ce que je n’ai pas testé
  • Docker Desktop sur Windows ou Mac. J’ai utilisé Podman avec Docker Compose sous Linux, uniquement en architecture x86-64.
  • Ollama ou LM Studio exécutés hors de Docker sur le même ordinateur. Sur Docker Desktop, l’adresse serait http://host.docker.internal:11434/v1 pour Ollama ; ce serveur doit accepter les connexions en provenance du conteneur, mais je ne l’ai pas vérifié.
  • Les images NVIDIA et ROCm de StudioForge, la version incluant le module vocal (VOICE=1), le profil HTTPS Caddy, ainsi que TransForge.
  • L’utilisation de ask dans InfoForge avec un modèle, ainsi que les tests de performance via CrucibleForge.

DisPatch sur GitHub StudioForge MailForge InfoForge

Voir aussi : DisPatch 3.0 : profils familiaux et assistant de configuration, DisPatch, StudioForge, ainsi que comment faire en sorte qu’une IA adapte n’importe quel projet à votre système.


← Plus de IA et LLM locaux