llama.vscode : la complétion FIM locale pilotée par llama.cpp
VS Code extension for LLM-assisted code/text completion
En bref
- De quoi s’agit-il ?
- Extension VS Code du dépôt ggml-org qui branche un serveur llama.cpp local sur l'éditeur pour la complétion, le chat et un agent. Le point à vérifier avant d'adopter : la compatibilité FIM du modèle, pas la richesse des fonctionnalités.
- À qui s’adresse-t-il ?
- À adopter si vous avez déjà du matériel capable de faire tourner un modèle FIM en local et que vous acceptez de gérer llama.cpp à côté de VS Code ; à éviter si vous cherchez une complétion qui fonctionne sans serveur ni modèle téléchargé.
- Puis-je l’utiliser commercialement ?
- Oui. MIT est une licence permissive : vous pouvez utiliser, modifier et vendre un logiciel qui en dépend, à condition de conserver les mentions de droit d’auteur et de licence.
- Est-il encore maintenu ?
- Oui. Les derniers commits datent d’il y a 10 jours.
- En quel langage est-il écrit ?
- Principalement TypeScript, d’après les statistiques de langage de GitHub.
Ces réponses reposent sur les données GitHub du projet (dernière synchronisation le 15 septembre 2026) et sur notre analyse. Elles ne constituent pas un avis juridique.
ANALYSE OPEN SOURCE APPROFONDIE
Un serveur llama.cpp derrière l'éditeur, pas un service distant
Le problème visé est concret : obtenir des suggestions de code sans envoyer le contenu du fichier à un tiers. llama.vscode est une extension VS Code publiée par ggml-org, écrite en TypeScript, sous licence MIT. Elle ne contient pas de modèle. Elle s'appuie sur un serveur llama.cpp lancé séparément, qui fait tourner un modèle local capable de complétion FIM (fill-in-the-middle), c'est-à-dire entraîné à combler un trou entre un préfixe et un suffixe. Le public visé est donc étroit : développeurs qui acceptent d'installer llama.cpp, de télécharger plusieurs gigaoctets de poids et de consacrer de la VRAM ou du CPU à l'éditeur. Le README décrit l'extension comme volontairement simple et légère, avec pour objectif des complétions locales de qualité sur du matériel grand public. C'est un objectif, pas un résultat mesuré dans le dépôt.
Le contexte en anneau et la réutilisation de cache
La mécanique de complétion repose sur ce que le README appelle un ring context : des morceaux de contexte prélevés autour du curseur, dans les fichiers ouverts et modifiés, ainsi que le texte copié. Ce contexte est envoyé au serveur avec le préfixe et le suffixe du point d'insertion. La difficulté habituelle est que ce contexte change à chaque frappe, ce qui invaliderait le cache KV du serveur et ferait retomber la latence. Le README renvoie ici à une pull request de llama.cpp (9787) et à la notion de smart context reuse, présentée comme le moyen de supporter de très grands contextes même sur du matériel modeste. Le détail de l'algorithme n'est pas dans le README : il faut ouvrir la pull request pour comprendre comment les chunks sont ordonnés et réutilisés. C'est un choix de conception assumé, mais cela signifie que la qualité de la complétion dépend d'un composant qui vit dans un autre dépôt et évolue à son propre rythme.
Installation : l'extension, puis llama.cpp, puis un env
L'extension s'installe depuis le marketplace VS Code (identifiant ggml-org.llama-vscode) ou depuis Open VSX. Le README indique que l'installation de llama.cpp est désormais automatique au démarrage de l'extension, via le script shell officiel de llama.app, ou via brew sur Mac et Linux, ou Winget sur Windows. Le chemin manuel reste documenté : brew install llama.cpp sur macOS, winget install llama.cpp sous Windows, et pour les autres systèmes les binaires des releases llama.cpp avec le dossier bin ajouté au PATH. Une fois le serveur disponible, on ouvre le menu llama-vscode depuis la barre d'état ou avec Ctrl+Shift+M et on choisit Select/start env. Le README recommande des commandes selon la VRAM : llama serve --fim-qwen-30b-default au-delà de 64 Go, --fim-qwen-7b-default au-delà de 16 Go, --fim-qwen-3b-default sous 16 Go, --fim-qwen-1.5b-default sous 8 Go. Pour du CPU seul, il donne deux exemples avec -hf, --port 8012, -ub 512 ou 1024, -b 512 ou 1024, --ctx-size 0 et --cache-reuse 256, en prévenant que la qualité sera nettement plus basse. Les modèles téléchargés avec -hf atterrissent dans ~/Library/Caches/llama.cpp/ sur macOS, ~/.cache/llama.cpp sous Linux et LOCALAPPDATA sous Windows.
Le point de friction : FIM obligatoire
La contrainte la plus dure est énoncée sans ambiguïté : l'extension exige des modèles compatibles FIM, et le README renvoie à une collection Hugging Face dédiée. Un modèle de chat généraliste, même excellent en génération de code, ne conviendra pas s'il n'a pas été entraîné au remplissage de trou. Cela réduit le choix réel, et cela explique aussi pourquoi les réglages recommandés pointent vers des variantes Qwen coder. Autre limite : l'absence de page d'accueil et le renvoi systématique au wiki du dépôt pour les détails d'exécution du serveur. Le README couvre l'installation et les fonctionnalités, pas le diagnostic. Si la complétion ne s'affiche pas, les éléments fournis ne permettent pas de savoir quels journaux consulter ni comment vérifier que l'extension parle bien au port du serveur. C'est précisément le genre d'information qu'un utilisateur cherche en premier, et elle n'est pas dans le matériel disponible ici.
Ce que fait Llama Agent, et ce qu'il coûte
L'extension embarque un agent accessible par Ctrl+Shift+A ou depuis le menu. Il fonctionne avec des modèles locaux, le README citant gpt-oss 20B comme le meilleur choix actuel, et peut aussi passer par des modèles externes comme ceux d'OpenRouter. Il expose neuf outils internes, dont custom_tool, qui renvoie le contenu d'un fichier ou d'une page web, et custom_eval_tool, qui permet d'écrire son propre outil en JavaScript sous forme de fonction recevant une entrée et retournant une chaîne. Il sait utiliser les serveurs MCP installés et démarrés dans VS Code, attacher la sélection au contexte, et le nombre maximal de boucles est configurable. Le README mentionne aussi un accès aux agents depuis un téléphone via un bot Telegram, et des liens profonds du type vscode://ggml-org.llama-vscode?view=agent&prompt=Hello. Ces fonctions dépassent largement la complétion, et c'est là que le coût se déplace : un agent qui boucle et appelle des outils consomme beaucoup plus de contexte et de temps de génération qu'une suggestion d'une ligne. Sur un GPU qui suffit à la complétion, l'agent peut devenir impraticable.
Ce qui distingue llama.vscode de Copilot
L'alternative la plus évidente est GitHub Copilot, cité dans les topics du dépôt. La différence n'est pas la qualité brute des suggestions, elle est architecturale. Copilot exécute l'inférence sur l'infrastructure de GitHub et facture un abonnement ; llama.vscode exécute tout sur votre machine et ne facture rien, mais vous payez en VRAM, en électricité et en temps d'installation. Un second point de comparaison, plus proche, est llama.vim, le plugin Vim/Neovim du même dépôt ggml-org, dont le README dit explicitement que l'implémentation initiale de llama.vscode s'est inspirée. Les deux partagent le même modèle de contexte en anneau et le même backend llama.cpp ; le choix entre eux est donc un choix d'éditeur, pas d'architecture. Enfin, les modèles externes configurables dans l'agent (OpenRouter, par exemple) rapprochent llama.vscode d'un client multi-fournisseurs, mais uniquement pour l'agent : la complétion, elle, reste locale et FIM.
Suivi des versions et portée de la licence MIT
Le rythme de publication est soutenu : v0.0.63 le 19 août 2026, v0.0.64 le 1er septembre, v0.0.65 le 5 septembre. Le numéro reste en 0.0.x, ce qui, sans préjuger de la stabilité, indique que l'API et les réglages peuvent bouger d'une version à l'autre. La licence MIT couvre le code de l'extension, pas les modèles que vous téléchargez ni les conditions d'utilisation des fournisseurs externes que vous branchez sur l'agent. Le README ne donne aucune indication sur une quelconque politique de support ni sur un canal de signalement des bogues. Ce que le matériel fourni ne permet pas de trancher : la fréquence réelle des changements de format de configuration entre versions successives, et le coût de mise à jour quand on a pris l'habitude de lancer llama serve à la main avec ses propres drapeaux. Si vous adoptez l'installation automatique de llama.cpp, cette question disparaît en grande partie ; si vous gardez votre propre serveur, chaque montée de version de l'extension est à retester.
Conclusion éditoriale
À adopter si vous avez déjà du matériel capable de faire tourner un modèle FIM en local et que vous acceptez de gérer llama.cpp à côté de VS Code ; à éviter si vous cherchez une complétion qui fonctionne sans serveur ni modèle téléchargé. Avant d'installer quoi que ce soit, vérifiez deux choses dans le dépôt : que le modèle visé figure bien dans la collection FIM liée depuis le README, et que la commande llama serve de votre version accepte bien les alias du type --fim-qwen-7b-default, car c'est cette chaîne précise qui détermine si la complétion démarre ou reste silencieuse.
Notes de la communauté