Présentation
Janus est présenté comme un serveur local d’inférence de grands modèles de langage (LLM) encapsulé dans un unique binaire Go. Il accepte les modèles au format .gguf, les charge soit sur le GPU via Vulkan, soit en fallback CPU, et expose une API compatible OpenAI. Aucun conteneur Docker, aucune dépendance Python n’est requis, ce qui simplifie l’installation sur des postes de travail classiques.
Architecture et fonctionnement
Le cœur de Janus repose sur llama.cpp compilé avec le backend Vulkan. Cette couche permet d’utiliser les GPU AMD, Intel ou NVIDIA tant que le pilote expose une implémentation Vulkan compatible. Le binaire s’appuie sur Go 1.22+ pour la partie serveur HTTP et sur les DLL ou bibliothèques partagées de llama.cpp (par ex. llama.dll sous Windows). Les variables d’environnement contrôlent le backend (INFERENCE_BACKEND=vulkan ou cpu), le chemin du modèle (JANUS_MODEL_PATH), le nombre maximal de couches GPU (JANUS_GPU_LAYERS) et la limite de VRAM (JANUS_VRAM_CEILING_MB=9216).
INFERENCE_BACKEND=vulkan
JANUS_MODEL_PATH=./models/Llama-3.2-3B-Instruct-Q8_0.gguf
JANUS_MAX_TOKENS=4096
Le serveur expose les points d’accès /v1/chat/completions et /v1/models, reproduisant les conventions d’OpenAI. La charge du modèle s’effectue à la première requête ou via l’endpoint /models/load, ce qui autorise le hot‑swap sans redémarrage du processus.
Déploiement et utilisation
Le processus d’installation se résume à trois étapes : clonage du dépôt, compilation du binaire (ou exécution du script build.ps1 sous Windows qui télécharge les DLL Vulkan pré‑compilées) et placement du fichier .gguf dans le répertoire models/. Un disque de 2 à 8 Go est généralement nécessaire pour les modèles courants, plus environ 50 Mo pour Janus et les bibliothèques associées. Une fois lancé, le serveur écoute sur 127.0.0.1:8990. Un appel de test via curl illustre l’interaction :
curl http://127.0.0.1:8990/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model":"local","messages":[{"role":"user","content":"Hello!"}]}'
Le même endpoint accepte le streaming en ajoutant le champ stream:true, ce qui le rend compatible avec des clients comme Cursor ou Cline.
Limites et perspectives
Le modèle dépend fortement de la disponibilité d’un pilote Vulkan à jour ; sur Windows, l’absence de llama.dll ou un driver obsolète empêche le démarrage du moteur. En cas d’incompatibilité, Janus bascule automatiquement sur le backend CPU, mais les performances chutent drastiquement. Le serveur ne gère pas d’authentification ; l’API Key est optionnelle, ce qui peut poser des problèmes de sécurité en environnement multi‑utilisateur. Enfin, la prise en charge du backend Vulkan varie selon le matériel : les GPU intégrés offrent des performances limitées, tandis que les cartes haut de gamme exploitent pleinement les 9 216 MiB de VRAM indiqués dans la configuration par défaut. Ces contraintes suggèrent que Janus convient surtout aux développeurs souhaitant tester rapidement des modèles locaux, mais qu’une mise en production nécessiterait un contrôle d’accès renforcé et une validation de la chaîne de pilotes Vulkan.