SÉRIE HERMES AGENT ÉTAPE 1 3/24

Hermes Agent + llama.cpp : brancher un modèle local proprement

Prépare un serveur llama.cpp, vérifie son API et connecte Hermes à ton modèle local. Un parcours guidé jusqu’à une réponse et un premier appel d’outil.

DANS CE TUTORIELAller à une étape

Hermes répond déjà, mais tu veux choisir le modèle qui tourne sur ton ordinateur et garder la main sur son serveur. Nous allons relier Hermes à llama-server, le programme de llama.cpp qui reçoit les demandes et renvoie les réponses du modèle.

Le fil conducteur sera simple : demander une courte explication de la différence entre RAM et VRAM, puis vérifier un appel d’outil sans modifier de fichier. Les commandes sont un parcours à reproduire, pas le compte rendu d’un essai exécuté pour cet article.

Ce que tu auras à la fin
Un serveur local dont tu sais vérifier l’état, Hermes configuré pour lui parler et deux contrôles distincts : obtenir une réponse, puis observer un véritable appel d’outil.
Le point de départ
Hermes est installé et la commande hermes fonctionne. Sinon, commence par le tutoriel d’installation. Le parcours ci-dessous utilise Linux ou Ubuntu sous WSL, avec Hermes et llama-server dans le même environnement. Nous gardons le profil default ; si tu utilises un autre profil, remplace ce nom dans toutes les commandes Hermes.

Hermes propose aussi une gestion intégrée des modèles locaux. Ici, nous suivons le branchement manuel à un serveur que tu lances toi-même. Ce choix permet de comprendre et de régler séparément le serveur et l’agent.

1. Préparer le serveur et le fichier du modèle

Retrouver llama-server

Il te faut le programme llama-server, un fichier de modèle au format GGUF, et curl pour interroger le serveur depuis le terminal. Vérifie d’abord les commandes disponibles :

Terminal · à exécuter
hermes --version
llama-server --version
curl --version

Si llama-server est introuvable mais déjà installé, utilise son chemin complet à la place de son nom dans la suite. Après une compilation dans ~/llama.cpp, ce chemin est généralement ~/llama.cpp/build/bin/llama-server.

Tu ne l’as pas encore installé ? Les versions officielles de llama.cpp proposent des archives selon le système et le matériel. Choisis une version Linux pour ce parcours sous Ubuntu/WSL, extrais l’archive en conservant ses bibliothèques, puis repère llama-server. Pour compiler ou activer une accélération GPU particulière, suis la procédure officielle de construction, dans la section correspondant à ton matériel. Reviens ici lorsque la commande de version fonctionne. Si c’est curl qui manque, installe le paquet curl avec le gestionnaire de paquets de ta distribution.

Choisir un GGUF compatible

Choisis une variante instruct ou chat, prévue pour répondre à des consignes, et dont la fiche documente les appels d’outils avec llama.cpp. Vérifie aussi le contexte pris en charge : ce parcours utilisera 65 536 tokens. Un token est une unité de texte manipulée par le modèle ; le contexte doit accueillir les instructions d’Hermes, la description des outils, les échanges et la réponse.

Le guide pour choisir un LLM local peut t’aider à sélectionner un modèle. Consulte ensuite sa fiche de téléchargement : compatibilité llama.cpp, taille du GGUF, contexte et format des outils. Le fichier doit tenir en mémoire avec la place supplémentaire nécessaire au contexte ; sa taille sur disque ne suffit pas à prévoir toute la consommation.

Crée un dossier pour tes modèles, puis place le GGUF téléchargé dedans :

Terminal · à exécuter
mkdir -p "$HOME/models"
ls -lh "$HOME/models"

Cette commande crée le dossier, elle ne télécharge aucun modèle. Si le téléchargement est découpé en plusieurs GGUF, conserve toutes les parties ensemble et utilise la première dans la commande de lancement, conformément à la fiche du modèle.

Avant de poursuivre
Tu peux afficher la version du serveur et retrouver le fichier téléchargé avec sa taille. Tu connais son chemin complet et tu as vérifié que le modèle et ta mémoire permettent le contexte retenu. Si ces points ne sont pas réunis, règle-les avant de configurer Hermes.

2. Distinguer le modèle, le serveur et l’agent

Le fichier GGUF contient les poids du modèle. llama.cpp fournit le moteur qui les utilise pour générer du texte. Son programme llama-server charge le modèle et expose une API, une interface à laquelle Hermes peut envoyer ses demandes.

L’adresse http://127.0.0.1:8080/v1 désigne cette API dans notre exemple. 127.0.0.1 renvoie à l’environnement local, 8080 au port choisi et /v1 à la base de l’API compatible OpenAI. Cette compatibilité décrit le format des échanges ; elle ne signifie pas que la demande part chez OpenAI.

Qui charge le modèle, qui lui parle ?

Dans cet exemple : Hermes et le serveur dans le même environnement local.

Au démarrage, llama-server charge le fichier GGUF. Hermes envoie ensuite ses requêtes à l’API de ce serveur, qui utilise le modèle pour produire les réponses. L’adresse désigne l’API ; elle n’est pas un logiciel supplémentaire.

Dans ce branchement manuel, Hermes n’ouvre pas le GGUF : il dialogue avec le serveur. C’est donc llama-server qu’il faut examiner si le modèle ne se charge pas, et la configuration d’Hermes si les demandes partent à une autre adresse.

3. Lancer le serveur avec un contexte explicite

Ouvre un premier terminal. Dans la commande suivante, remplace /chemin/complet/ton-modele.gguf par le chemin de ton fichier, en gardant les guillemets. Remplace aussi llama-server par son chemin complet si nécessaire.

Nous donnons au modèle le nom d’API modele-local. C’est un alias, un nom pratique pour le désigner dans Hermes ; il ne renomme pas ton fichier.

Terminal · à adapter
llama-server \
  -m "/chemin/complet/ton-modele.gguf" \
  --alias modele-local \
  --host 127.0.0.1 --port 8080 \
  --ctx-size 65536 --parallel 1 \
  --jinja

Le serveur reste attaché à ce terminal : laisse-le ouvert pendant les essais. Lis ses messages de chargement et vérifie qu’il écoute sur le port prévu. Un échec d’allocation mémoire ou une erreur de fichier doit être résolu ici.

Les réglages ont chacun un rôle :

RéglageCe qu’il fixe pour cet essai
--host 127.0.0.1Une écoute locale, dans le même environnement qu’Hermes.
--port 8080Le port repris dans toutes les adresses du parcours.
--ctx-size 65536Le contexte alloué par le serveur, à faire correspondre au réglage d’Hermes.
--parallel 1Un seul emplacement de traitement, pour ne pas répartir ce contexte entre plusieurs sessions.
--jinjaLe traitement du modèle de conversation utilisé notamment pour les appels d’outils ; le modèle choisi doit lui aussi les prendre en charge.

La documentation Hermes demande au moins 64 000 tokens par session active pour ce branchement. La valeur retenue ici suppose un modèle compatible et assez de mémoire. Si elle ne tient pas, choisis un modèle ou une quantification moins volumineux, ou revois la configuration matérielle. Annoncer un grand contexte à Hermes ne l’ajoute pas au serveur.

L’utilisation du GPU dépend de ta version de llama.cpp et de ses bibliothèques. Les journaux indiquent où les couches sont chargées. Le réglage --n-gpu-layers permet d’ajuster leur placement si ton installation le prend en charge ; il ne transforme pas une version CPU en version CUDA. Commence par vérifier le fonctionnement de la version installée avant d’optimiser ses performances.

4. Vérifier l’API avant de passer à Hermes

Dans un deuxième terminal du même environnement, interroge son état :

Terminal · à exécuter
curl -i http://127.0.0.1:8080/health

Le résultat attendu est un code HTTP 200 avec {"status":"ok"}. Un code 503 accompagné de Loading model indique que le chargement n’est pas terminé. Une erreur de connexion signifie que le serveur n’est pas joignable à cette adresse.

Vérifie ensuite le nom du modèle proposé par l’API :

Terminal · à exécuter
curl -fsS http://127.0.0.1:8080/v1/models

Dans la réponse JSON, repère l’identifiant id du modèle. Avec notre commande, tu dois retrouver modele-local. Si tu utilises un serveur déjà configuré avec un autre nom, conserve l’identifiant qu’il renvoie réellement.

Ce que ce contrôle confirme
Le modèle est chargé et l’API répond à l’adresse prévue. Nous n’avons pas encore vérifié une génération de texte ni un appel d’outil : ce seront les deux derniers essais.

5. Configurer le même profil Hermes

Dans le deuxième terminal, lance le sélecteur de modèle :

Terminal · à exécuter
hermes -p default model

Choisis Custom endpoint, l’option destinée à une API que tu fournis. Son intitulé complet peut varier selon la version. Renseigne les valeurs suivantes :

ChampValeur pour notre serveur
Adresse de base / Base URLhttp://127.0.0.1:8080/v1
Clé APILaisse vide si l’assistant le permet : notre commande serveur n’active pas d’authentification. Si le client exige une valeur non vide, un texte comme local-key sert uniquement de valeur de remplacement.
Modèlemodele-local, ou l’identifiant exact relevé dans /v1/models.
Contexte, si demandé65536, correspondant au serveur lancé avec un seul emplacement.

La clé de remplacement n’ajoute aucune protection au serveur. Si tu utilises une installation qui exige déjà une véritable clé API, fournis cette clé à Hermes.

Garde /v1 dans l’adresse de base ; n’y ajoute pas /chat/completions, qui désigne une requête particulière. Une fois le choix enregistré, consulte la configuration :

Terminal · à exécuter
hermes -p default config show

Repère l’adresse et le modèle du profil. Si tu avais déjà configuré des fournisseurs de secours ou des modèles auxiliaires, vérifie-les aussi : le modèle principal local ne rend pas automatiquement toute l’installation hors ligne. Pour comprendre ces réglages, consulte le tutoriel sur la configuration.

6. Observer un premier échange complet

Garde le terminal serveur visible et ouvre une nouvelle conversation avec le profil configuré :

Terminal · à exécuter
hermes -p default chat

Envoie cette demande :

À demander à Hermes
Explique en trois phrases la différence entre RAM et VRAM pour faire tourner un modèle de langage. Réponds directement, sans utiliser d’outil.

Au même moment, regarde les journaux de llama-server : tu dois y retrouver le traitement de la requête. Compare aussi le modèle annoncé par la session avec celui choisi à l’étape précédente. L’activité du GPU, prise isolément, ne permet pas d’identifier la destination d’une requête.

Le résultat attendu
Une réponse arrive dans Hermes et le serveur local traite la demande correspondante. Si Hermes répond mais que ce serveur ne reçoit rien, le routage reste à vérifier. Cette première réussite confirme l’échange de texte ; elle ne prouve pas encore que les outils fonctionnent.

7. Vérifier un appel d’outil sans écrire de fichier

Un agent doit aussi pouvoir demander une action et exploiter son résultat. Pour ce premier contrôle, nous allons seulement faire afficher le dossier courant avec pwd.

Dans un autre terminal, ouvre la sélection des outils du même profil :

Terminal · à exécuter
hermes -p default tools

Vérifie que l’outil terminal est disponible. Si tu modifies la sélection, quitte la conversation de l’étape 6 et ouvre-en une nouvelle avec hermes -p default chat. Cet outil donne un accès plus large qu’à la seule commande pwd : garde les permissions adaptées à ton installation. Notre consigne limite l’essai, elle ne constitue pas une restriction du système.

À demander à Hermes
Utilise l’outil terminal pour exécuter uniquement pwd, puis indique le dossier renvoyé. Ne modifie aucun fichier et n’utilise aucun outil réseau. Si l’outil n’est pas disponible, signale-le sans inventer de résultat.

Observe la trace : elle doit montrer un appel de l’outil terminal, son résultat, puis une réponse cohérente avec ce résultat. Du JSON affiché dans le texte ou une affirmation « j’ai exécuté pwd » sans appel visible ne suffit pas.

Le dossier renvoyé appartient à l’environnement d’exécution du terminal. Avec Docker ou SSH configuré dans Hermes, il peut différer du dossier depuis lequel tu as ouvert la conversation ; le tutoriel sur les lieux d’exécution explique cette distinction.

Ce que tu as vérifié
Pour ce modèle et cette configuration, Hermes a reçu une réponse du serveur local et effectué un petit appel d’outil vérifiable. Ce contrôle ne mesure pas les performances et ne garantit pas la réussite des autres outils ou de missions longues.

Retrouver la cause d’un blocage

Ce que tu observesLe premier contrôle utile
Connexion refusée avec curlLe processus serveur est-il toujours actif, au bon port et dans le même environnement ?
/health reste en chargement ou le serveur s’arrêteLire la fin des journaux : fichier incomplet, modèle non pris en charge, mémoire insuffisante.
Modèle introuvable dans HermesComparer le nom configuré avec l’id renvoyé par /v1/models.
Erreur de contexteVérifier la capacité du modèle, le contexte du serveur et celui déclaré à Hermes.
Hermes répond sans requête vers llama-serverVérifier le profil actif, son fournisseur et un éventuel fournisseur de secours.
Un appel d’outil apparaît sous forme de texteVérifier --jinja, le format de conversation du GGUF, la compatibilité du modèle et les outils activés.
Une réponse met longtemps à arriverLire les journaux de traitement et la répartition CPU/GPU avant de relancer.
Windows, WSL et machines distantes
L’exemple suppose Hermes et llama-server dans le même environnement. Un serveur lancé côté Windows et un agent côté WSL peuvent ne pas partager le même accès à 127.0.0.1, selon le mode réseau. Sur un VPS, cette adresse désigne le VPS. Consulte les repères réseau WSL de la documentation Hermes avant d’adapter les adresses ; ouvrir le serveur sur toutes les interfaces n’est pas nécessaire pour notre essai local.

Garder une configuration facile à reprendre

Note le fichier GGUF utilisé, la version de llama.cpp, la commande de lancement et le profil Hermes. À la prochaine session, relance d’abord le serveur, vérifie /health, puis ouvre Hermes. Pour arrêter le serveur lancé au premier plan, utilise Ctrl+C dans son terminal ; les nouvelles demandes ne pourront plus y être traitées.

Tu peux maintenant poursuivre avec la lecture de la configuration Hermes, puis les outils utiles pour démarrer. Garde le même modèle pendant ces premiers essais : tu sauras plus facilement si un changement vient du serveur, d’un réglage ou de l’outil utilisé.

Sources et lectures utiles

Révision pédagogique du 8 novembre 2026. Commandes et distinctions recoupées avec les sources officielles ; parcours non exécuté pour cet article.

↑ Revenir au sommaire