7 points par GN⁺ 2024-01-01 | 1 commentaires | Partager sur WhatsApp
  • Emacs Copilot génère de la complétion de code dans les buffers Emacs à l’aide d’un LLM (Large Language Model) exécuté en local
  • Le LLM s’exécute comme une sous-commande qui mémorise l’historique d’édition local, fichier par fichier, et il peut être interrompu à tout moment avec C-g
  • Lorsqu’on supprime du code, cet historique peut aussi être supprimé du contexte du LLM, et le langage de programmation est déterminé par l’extension du fichier, indépendamment du langage lui-même

Modèle WizardCoder 34b

  • WizardCoder 34b est un excellent LLM qui a obtenu le même score HumanEval que GPT-4.
  • Pour utiliser ce modèle, il faut une machine puissante comme un Mac Studio M2 Ultra ; les utilisateurs de Macbook Pro peuvent envisager la version Q3, et les utilisateurs de PC classiques le modèle WizardCoder-Python-13b.
  • Les utilisateurs disposant d’une puissance de calcul plus limitée, comme avec un Raspberry Pi, peuvent utiliser le modèle Phi-2.

Pour commencer

  • Après avoir écrit la première ligne d’une fonction, appuyez sur C-c C-k pour donner le contrôle au LLM, qui générera le reste de l’implémentation de la fonction.
  • Le LLM est réglé pour s’arrêter lorsque la fonction est terminée, et pour éviter les explications ou les commentaires de type ELI5.

Implémentation de référence

  • Après avoir téléchargé le LLM, copiez le code ci-dessous dans un buffer Emacs puis exécutez M-x eval-buffer.
  • Vous pouvez ajuster le code selon vos préférences.

Lien de téléchargement d’Emacs

  • Si Emacs n’est pas installé ou si vous utilisez une plateforme où il est difficile à obtenir, comme Windows, un lien vers une version autonome sous forme de fichier exécutable unique est fourni, sans nécessiter d’installation.

Liens de téléchargement des LLM

  • Des liens sont fournis pour télécharger gratuitement plusieurs LLM connus pour bien fonctionner avec Emacs Copilot.
  • La taille du modèle peut être choisie en fonction du matériel disponible.

Fichiers de cache

  • Si vous décidez de changer de modèle, vous devez supprimer tous les fichiers FILE.cache créés sur le système de fichiers local.

Remarques

  • Sur macOS avec Apple Silicon, Xcode doit être installé.
  • Si vous utilisez zsh, il peut être nécessaire de lancer avec sh -c ./llamafile.
  • Sur certains systèmes Linux, des erreurs liées à l’enregistrement de binfmt_misc peuvent se produire.

OS et CPU pris en charge

  • llamafile prend en charge plusieurs systèmes d’exploitation avec des exigences minimales d’installation.
  • llamafile prend en charge certains CPU et nécessite un microprocesseur AMD64 avec un jeu d’instructions SSSE3 ou supérieur, ou un microprocesseur ARM64 avec ARMv8a+.

Remarques sur les modèles

  • Les exemples de llamafile fournis ci-dessus ne doivent pas être interprétés comme un soutien ou une recommandation de Mozilla concernant un modèle, une licence ou un jeu de données particulier.

L’avis de GN⁺

  • Une expérience d’édition innovante : Emacs Copilot offre aux développeurs une nouvelle génération d’assistance au code, avec le potentiel d’améliorer fortement l’efficacité et la productivité.
  • Accessibilité et personnalisation : les utilisateurs peuvent choisir le LLM et ajuster leur environnement Emacs selon leurs besoins et leurs préférences, ce qui permet de construire un environnement de développement personnalisé.
  • Compatibilité technique : la prise en charge de divers systèmes d’exploitation et CPU permet à un large éventail d’utilisateurs d’utiliser Emacs Copilot, renforçant ainsi l’inclusion et l’accessibilité au sein de la communauté des développeurs.

1 commentaires

 
GN⁺ 2024-01-01
Avis sur Hacker News
  • Doutes sur l’utilité de l’intégration LLM/IDE

    Impossible d’être certain que l’intégration LLM/IDE apporte un gros gain de productivité dans le travail de développement courant. La productivité moyenne d’un programmeur tourne autour de 100 LOC par jour, mais pour faire un prototype, on peut facilement écrire plus de 1000 LOC en une journée. L’écart de productivité entre du code de qualité production et du code bricolé/de prototypage vient de la qualité, et la plupart des programmeurs compétents peuvent produire eux-mêmes un code de meilleure qualité que ce qu’ils obtiennent d’un LLM ou en copiant depuis d’autres sources. Le temps nécessaire pour analyser le code et vérifier l’absence de vulnérabilités, ainsi que la pertinence de la conception pour la maintenance future, semble annuler le gain de temps obtenu en ne l’écrivant pas soi-même. Cela peut être utile pour apprendre ou pour écrire du code jetable dont la qualité n’a pas d’importance, mais pour du code de production, il reste encore beaucoup de chemin à parcourir avant que la sortie d’un LLM atteigne le niveau d’un développeur et n’ait plus besoin d’être relue/corrigée minutieusement.

  • Remerciements pour le développement d’outils LLM auto-hébergés

    Remerciements à Justine d’avoir fait avancer le développement d’outils LLM auto-hébergés. Llamafiles devrait devenir un standard. Question sur l’existence d’un moyen de se connecter à un LLM distant hébergé sur le même LAN ; l’auteur n’utilise pas d’appareils Apple mais dispose sur le réseau d’une machine puissante qu’il aimerait exploiter. Peut-être que Llamafile pourrait fournir une API ; cela commencerait à relever du domaine du LSP, et il serait intéressant de tirer parti des Llamafiles.

  • Partage d’expérience sur l’intégration de LLM avec Emacs

    Utilise principalement Emacs pour coder et rédiger de la documentation technique. Fait tourner phind-v2-codellama, openhermes, ollama, gptel, ainsi que Copilot de GitHub. Apprécie la possibilité d’envoyer n’importe quelle zone à un LLM avec une requête. L’UX en est encore à ses débuts, mais il suffit d’imaginer ce qu’on pourrait faire si le modèle de base acceptait tout le contexte (par exemple des fichiers orgmode et les buffers de fichiers ouverts) et pouvait utiliser des outils comme le LSP.

  • Retour d’expérience sur l’exécution d’un LLM sur un MacBook Pro M1 Max

    Utilise un MacBook Pro M1 Max avec 64 Go de RAM, a téléchargé un modèle 34B Q55 (un gros modèle) et a constaté qu’il fonctionnait bien. C’est lent, mais exploitable. L’exécute sur une partition Asahi Fedora Linux et ne sait pas comment le GPU est utilisé. A configuré l’environnement avec ZSH 5.9 et, en appelant directement le LLM via SUDO, celui-ci se charge rapidement comme serveur web, avec interaction possible via un navigateur sur localhost:8080. En revanche, en essayant d’exécuter le LLM depuis Emacs, obtient l’erreur "Doing vfork: Exec format error.". En suivant la démo du Readme, après avoir saisi le début de la fonction isPrime puis tapé C-c C-k, cette erreur apparaît. Demande des pistes sur ce qui pourrait clocher.

  • Critique de la fonction is_prime dans la démonstration vidéo

    La fonction is_prime montrée dans la démonstration vidéo est très mauvaise. Même si l’entrée n’est pas divisible par 2, elle continue à faire des tests modulo avec 4, 6, 8, etc., ce qui est totalement inutile. En ajoutant une seule ligne de code (test d’impair), on peut faire en sorte que la boucle ne parcoure que les nombres impairs et ainsi doubler la vitesse. Espère que les utilisateurs de ce type de LLM relisent leur code avant de le pousser en prod.

  • Question sur la possibilité de construire un llamafile exécutable sur NixOS

    Demande s’il est possible de construire son propre llamafile sans cosmopolitan / sans exécutable réellement portable. Impossible de l’exécuter sur NixOS.

  • Besoin d’une intégration LLM plus générale

    Satisfait de ce qui est proposé actuellement, mais souhaite une intégration LLM plus générale, capable de faire tout ce qu’un LLM peut faire. Par exemple, une touche pourrait servir à « compléter ce code », tandis qu’une autre enverrait le buffer courant tel quel au LLM, ou enverrait une région, ou encore enverrait une région puis la remplacerait par le résultat. Il pourrait y avoir plusieurs fonctions orthogonales pour fournir des entrées au LLM de différentes façons (région, buffer, fichier, prompt inline) et pour restituer les résultats de différentes manières (ajout au point, écrasement de la région, insertion dans un nouveau buffer, etc.), sur lesquelles on pourrait ensuite construire divers system prompts automatiques pour le code, la prose, etc.

  • Partage d’une commande personnalisée d’intégration LLM par un utilisateur de Vim

    Utilise actuellement une commande personnalisée qui récupère le code sélectionné, ouvre une fenêtre de navigateur et demande à différents moteurs d’IA de l’améliorer. Partage la commande utilisée dans son vimrc.

  • Question sur le chemin de mise à niveau de Llamafile

    Pose une question sur le chemin de mise à niveau de Llamafile. Comprend qu’il s’agit d’une combinaison de llama.cpp (petit fichier mis à jour fréquemment) et des poids du modèle (gros fichier mis à jour rarement). Se demande s’il faut retélécharger plusieurs gigaoctets du modèle inchangé à chaque fois qu’une modification de llama.cpp est nécessaire.

  • Intérêt pour l’intégration LLM et intention d’essayer

    Trouve cela très intéressant et compte clairement essayer. Cependant, comme cela fonctionne très différemment de GitHub CoPilot, le nom n’est peut-être pas très bien choisi. Compte tenu de l’architecture d’Emacs et d’autres aspects, il est surprenant qu’il n’y ait pas eu davantage de développements autour de l’intégration avec les LLM, mais la plupart des projets n’ont pas été travaillés depuis plusieurs mois. Il est toutefois possible que la plupart des utilisateurs d’Emacs soient opposés à l’idée d’exploiter des LLM.