Deux chemins vers le local
Il y a deux façons d’atteindre un modèle local, et elles ne sont pas équivalentes pour la lecture de souveraineté.
Le fournisseur local natif, verrouillable d’un seul réglage, avec le label zéro-egress par construction.
La prise compatible OpenAI pointée vers votre serveur - les octets restent chez vous si votre adresse est bien chez vous, ce que le moteur ne peut pas vérifier depuis une adresse arbitraire : le label reste donc prudent, sauf déclaration explicite de votre part.
Les deux sont documentés ci-dessous.
Ollama et le réglage unique
Les modèles d’abord, sur votre serveur Ollama :
L’adresse du serveur, partagée par le chat et la recherche, se déclare dans le .env de votre déploiement. Attention au point qui fait échouer la plupart des premières tentatives : votre Kastel tourne dans un conteneur, donc cette adresse est celle que le conteneur voit, pas celle de votre navigateur. Si Ollama tourne comme service de la pile, c’est son nom de service ; s’il tourne ailleurs, mettez une adresse joignable depuis le conteneur.
Puis le verrou, une ligne dans kastel.config.yaml :
C’est tout le réglage. max implique le chat local et la recherche locale : vous n’avez rien d’autre à écrire. Et c’est un verrou, pas une préférence : combiner max avec la prise BYOK, côté chat comme côté recherche, est une erreur de configuration refusée au chargement. Une réserve à connaître plutôt qu’à découvrir : ce refus vise la prise BYOK ; si vous désignez explicitement un fournisseur cloud d’une autre famille dans votre configuration, le chargement ne vous arrête pas aujourd’hui. Sur un profil souverain, vérifiez que votre fournisseur de chat est bien local.
Enfin, construisez l’index sur le modèle local :
vLLM ou LM Studio
Ces serveurs exposent une API compatible OpenAI : la prise BYOK s’y branche comme à n’importe quelle adresse, pointée vers chez vous :
La clé doit être non vide même si votre serveur n’en vérifie aucune : mettez une valeur factice. Pour la recherche, gardez le modèle local Ollama - rien n’oblige le chat et la recherche à vivre sur le même serveur.
Sur ce chemin, sovereignty_profile: max est refusé : le moteur ne peut pas vérifier qu’une adresse arbitraire est vraiment locale, il ne tamponne donc pas le label zéro-egress dessus. C’est la même variable qui sert à joindre un fournisseur distant : sur cette route, c’est vous qui savez où pointe votre adresse, le moteur ne le déduit pas. Si vous voulez que la lecture de souveraineté reflète votre réalité, déclarez-la vous-même dans la configuration, sous inference.provider_postures : c’est vous qui l’affirmez, sur votre parole et au dossier, pas le moteur qui devine.
La garantie zéro-egress, en deux couches
La télémétrie est opt-in et éteinte par défaut : dans la configuration par défaut, aucun client réseau n’est même construit. Zéro octet sortant vers nos serveurs, vérifié par des tests dédiés, pas déclaré.
Avec un chat local et une recherche locale, les appels de modèle vont vers votre serveur local. Ce qui est prouvé par un test, et il faut le dire précisément : une vraie indexation complète tourne sous le profil max, et le test vérifie qu’aucune requête n’a quitté la machine. C’est le chemin de la recherche ; celui du chat repose sur la même prise locale, sans test d’égress équivalent.
Une honnêteté d’architecte pour finir : « local » est une propriété de l’endroit où pointent vos adresses. La garantie tient tant que KASTEL_LOCAL_BASE_URL désigne une infrastructure qui est vraiment la vôtre.
La télémétrie mérite sa phrase : éteinte par défaut, elle ne transporte, si vous l’allumez un jour, que des signaux d’ingénierie anonymisés dont le schéma est documenté - jamais votre contenu. Sur un profil 100 % local, laissez-la éteinte : c’est le défaut.
Ce qui marche, ce qui se dégrade
Tourner en local est une vraie capacité, pas une note de bas de page - mais elle a un prix, et le voici sans détour :
Intégrales. Aucun appel de modèle dans le chemin de lecture directe ; le reste est déterministe.
bge-m3)Solide. C’est un très bon modèle multilingue : la partie la moins dégradée du chemin local.
Se dégrade. Elle suit le modèle de chat local que vous faites tourner, plus faible qu’un grand modèle hébergé.
Dit sans détour : le chemin local est testé pour la plomberie et pour le zéro-egress, pas étalonné à qualité égale avec un grand modèle hébergé. Une entreprise qui ne peut envoyer ses données vers aucune API externe obtient un système réel, complet et coupé du monde pour l’inférence. Une entreprise qui cherche la meilleure synthèse sans cette contrainte sera mieux servie par une clé BYOK vers un grand modèle - où vous décidez ce que chaque IA a le droit de voir.