- Zed est un éditeur conçu pour la vitesse, avec pour objectif constant une expérience d’édition
instant
- Pour aller encore plus vite que
instant, Zed adopte une approche qui « prédit la prochaine action d’édition » de l’utilisateur
- Pour cela, Zed a dévoilé une nouvelle fonctionnalité d’edit prediction, qui fonctionne sur la base de Zeta, un modèle open source
- Pendant l’utilisation, il est possible d’appliquer immédiatement la modification prédite avec la touche
tab, et même d’exécuter plusieurs modifications successives à la suite
- Il s’agit d’une fonctionnalité très demandée, développée pour s’intégrer le plus naturellement possible à l’environnement d’édition de Zed
- Pendant la bêta publique, il suffit de télécharger Zed et de se connecter avec un compte GitHub pour utiliser Zeta gratuitement
- L’edit prediction ne restera peut-être pas gratuite à l’avenir, mais elle est pour l’instant ouverte afin d’expérimenter et d’apprendre ensemble
Intégration réfléchie
- Avec l’ajout de l’edit prediction, la touche
tab devient encore plus puissante
- Mais cela peut entrer en conflit avec les usages existants de
tab, comme l’indentation ou la consultation des suggestions fournies par le serveur de langage (LS)
- Lorsqu’une suggestion de code fournie par le serveur de langage est visible, il faut appuyer sur
option/alt pour afficher l’aperçu de la modification prédite
- Sur macOS,
tab permet de valider la modification prédite, et relâcher option fait revenir à l’affichage initial des suggestions du serveur de langage
- Sur Linux,
alt-tab est souvent réservé par le gestionnaire de fenêtres, donc alt-l est proposé par défaut
- Si
alt-tab ne provoque pas de conflit dans un environnement Linux, il peut être utilisé tel quel
Présentation de Zeta : le modèle open source de prédiction d’édition de Zed
- Zeta est un modèle open source développé à partir de Qwen2.5-Coder-7B
- Un dataset open source est également publié (lien)
- Si vous travaillez dans un dépôt open source, Zed espère que vous contribuerez au dataset pour améliorer Zeta
- Dans un premier temps, les données ne seront intégrées qu’après examen des questions de sécurité et de confidentialité
- L’objectif est d’améliorer ensemble l’edit prediction dans son ensemble
- Lien vidéo : How Zed’s Open-Source Edit Predictions Work
Éditer par réécriture
- La plupart des modèles de code sont entraînés selon une approche de type « fill in the middle »
- On fournit un préfixe et un suffixe, et le modèle génère ce qui se trouve entre les deux
- Zeta, en revanche, doit prédire des modifications à des positions arbitraires, ce qui ne correspond pas bien à cette structure
- L’équipe a observé que le modèle était plus à l’aise pour réécrire des blocs de code relativement importants que pour produire des changements très fins
- Elle a donc choisi une approche où l’historique récent des modifications et la position du curseur sont donnés en entrée afin de réécrire le fragment de code concerné
Évaluer les prédictions
- Les résultats d’un grand modèle de langage ne sont pas nécessairement identiques à chaque exécution, ce qui complique les tests
- Il est possible de contrôler en partie cette variabilité en réglant la température (
temperature) à 0 ou en fixant une seed RNG
- Mais comme plusieurs réponses correctes sont possibles en code, un résultat peut être juste même s’il diffère de la réponse attendue
- Les tests unitaires traditionnels étant difficiles à appliquer, l’équipe a essayé d’utiliser un LLM plus grand pour vérifier en langage naturel les sorties de Zeta
- Exemple : avec une exigence telle que « appeler récursivement la fonction quicksort sur les tableaux de gauche et de droite », Claude est chargé de juger si le résultat correspond bien à l’intention
Prompt engineering
- Au départ, l’équipe a utilisé le modèle Qwen2.5-Coder-32B pour construire un prompt indiquant clairement quel type de modification devait être prédit
- Les premiers tests (evals) ont été réussis, mais à mesure que leur nombre augmentait, il devenait difficile d’obtenir des résultats cohérents en ne modifiant que le prompt
- Le modèle 32b présentait aussi une latence de réponse trop élevée pour satisfaire les exigences strictes de performance de Zed
Fine-tuning supervisé
- Après avoir essayé plusieurs approches, l’équipe est passée à un fine-tuning supervisé avec Unsloth et LoRA
- L’objectif est d’apprendre au modèle à déduire la modification souhaitée à partir de l’historique récent d’édition et à réécrire correctement un fragment de code sans insertions inexactes
- Au départ, faute de suffisamment de données d’utilisateurs réels, environ 50 exemples synthétiques ont été créés via Claude et ajoutés au dataset
- Une première version a ensuite été déployée dans Zed sous forme de feature flag, afin que l’équipe interne génère des exemples d’usage réels et élargisse le dataset
- Environ 400 exemples ont permis d’améliorer la précision du modèle, mais un problème subsistait : lors de l’édition d’une partie seulement d’un fichier, le modèle effectuait encore des modifications inutiles
Direct Preference Optimization
- Pour résoudre ce problème, l’équipe a introduit la technique DPO (Direct Preference Optimization)
- Au lieu de montrer uniquement de « bons exemples », elle explicite aussi les « exemples à éviter », afin d’apprendre au modèle à distinguer les modifications inappropriées
- Environ 150 exemples soigneusement sélectionnés ont suffi à améliorer nettement le comportement du modèle sur des cas difficiles
- L’équipe estime que des améliorations supplémentaires seront possibles en collectant des exemples plus variés
Minimiser la latence : speculative decoding
- Comme pour toutes les fonctionnalités de Zed, réduire la latence est un point clé pour l’edit prediction
- L’objectif est un p50 inférieur à 200 ms et un p90 inférieur à 500 ms
- Réécrire une partie de code implique de générer davantage de tokens, ce qui peut être plus lent qu’une approche classique de fill-in-the-middle
- Mais comme le processus de réécriture conserve souvent de fortes similarités avec le code d’origine, l’équipe exploite cette caractéristique avec la technique de speculative decoding
- La stratégie consiste à utiliser l’entrée comme référence et à lancer une génération parallèle de tokens via une recherche n-gram, afin d’accélérer le processus sans dégrader la qualité
Minimiser la latence : serving du modèle
- Au-delà de la vitesse d’inférence du modèle, la manière de servir le modèle côté serveur constituait aussi un défi majeur
- C’est le problème le plus gourmand en calcul que l’équipe ait traité jusqu’à présent
- Au moment du lancement, après une courte phase de validation, le choix s’est porté sur Baseten
- Les ingénieurs de Baseten ont optimisé le modèle Zeta, ce qui a permis d’atteindre les objectifs de latence visés
- Le temps de transport réseau étant lui aussi un facteur important, des GPU ont été déployés aux États-Unis et en Europe afin de traiter les requêtes au plus près physiquement des utilisateurs
- Les requêtes sont relayées par Cloudflare Workers via le centre de données le plus proche de l’utilisateur
Conclusion
- L’équipe prévoit d’explorer plusieurs pistes pour rendre l’edit prediction encore plus puissante
- Elle compte augmenter la quantité de contexte reçue par le modèle, poursuivre le fine-tuning et étendre le dataset Zeta
- Beaucoup a été appris depuis le lancement de Zed AI à l’automne dernier
- Alors que le monde évolue rapidement, l’équipe continue d’expérimenter et de construire des fonctionnalités que les utilisateurs pourront aimer
- Elle souhaite aussi faire progresser l’IA dans l’esprit open source que Zed défend depuis le début
- Utilisateurs, contributeurs et membres de l’équipe : chacun est invité à participer pour construire un avenir encore plus enthousiasmant
2 commentaires
Le nouvel éditeur créé par les développeurs d’Atom. Début de la bêta ouverte
Le collaboratif de code 'Zed' passe désormais en open source
Présentation de Zed AI (avec Anthropic)
Avis Hacker News