4 points par GN⁺ 2025-02-15 | 2 commentaires | Partager sur WhatsApp
  • 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

 
GN⁺ 2025-02-15
Avis Hacker News
  • La fonctionnalité d’édition prédictive de Zed est actuellement gratuite, mais elle pourrait devenir payante plus tard. L’utilisateur décidera de l’intégrer à son workflow une fois le prix fixé. Il aimerait un essai gratuit, mais ne l’utilisera pas si le tarif est trop élevé
    • Zed ne peut exécuter qu’un seul LSP par type de fichier. Cela fonctionne bien pour Rust et C++, mais pas pour Angular
    • La fonctionnalité d’édition à distance ne fonctionne pas sous Windows. Pour l’utiliser sur Windows, il faut une prise en charge de SSH
  • La fonctionnalité prédictive est utilisée de manière trop excessive. L’utilisateur la trouve gênante et estime qu’elle perturbe son flux de travail
    • Quand la prédiction est trop présente, elle finit par ne plus être utile. Un algorithme ne peut pas lire dans les pensées, donc il ne devrait pas perturber le travail de l’utilisateur
  • L’utilisateur ne veut pas que son code soit envoyé à un tiers. En particulier lors de l’édition de fichiers confidentiels, des clés privées ou des clés API pourraient être transmises
    • Il souhaite qu’une option locale soit proposée
  • L’utilisateur apprécie la manière dont Zed fait la promotion de ses nouvelles fonctionnalités. Elles apparaissent sous forme de bannière en haut à gauche et n’interrompent pas le travail
    • Contrairement à d’autres logiciels, Zed ne force pas l’utilisateur à aller consulter les nouveautés
  • Zed essaie d’autocompléter les commentaires. L’utilisateur ne veut pas d’autocomplétion dans les commentaires, et une option a été ajoutée pour la désactiver
  • L’interface d’acceptation des suggestions de CoPilot est peu pratique. Avec la touche Tab, beaucoup de suggestions IA non désirées apparaissent
  • Dans un éditeur de texte, l’utilisateur privilégie la stabilité. Trop de fonctionnalités liées à l’IA deviennent au contraire inconfortables
    • Après avoir essayé Zed, il l’a trouvé bon
  • L’Intellisense moderne fournit des fonctionnalités de prédiction appropriées. Les prédictions IA sont utilisées de manière excessive
    • Il serait utile que l’IA fournisse des recommandations sur la structure et les patterns du programme. Plus un programme grossit, plus il devient difficile à structurer
  • Il est possible de définir des fichiers de modèle pour utiliser les fonctionnalités de Zed en local. Mais on ne sait pas clairement si Zed permet de modifier l’endpoint de cette fonctionnalité