7 puntos por GN⁺ 2024-01-01 | 1 comentarios | Compartir por WhatsApp
  • Emacs Copilot genera completado de código dentro del buffer de Emacs usando un LLM (Large Language Model) que se ejecuta localmente
  • El LLM se ejecuta como un subcomando que recuerda el historial de edición local por archivo, y se puede interrumpir en cualquier momento con C-g
  • Al borrar código, ese historial también puede eliminarse del contexto del LLM, y el lenguaje de programación se determina por la extensión del archivo, sin depender del lenguaje en sí

Modelo WizardCoder 34b

  • WizardCoder 34b es un LLM destacado que obtuvo la misma puntuación que GPT-4 en HumanEval.
  • Para usar este modelo se necesita una computadora potente, como una Mac Studio M2 Ultra; los usuarios de Macbook Pro pueden considerar la versión Q3, y los usuarios de PC comunes pueden considerar el modelo WizardCoder-Python-13b.
  • Los usuarios con menor capacidad de cómputo, como una Raspberry Pi, pueden usar el modelo Phi-2.

Cómo empezar

  • Después de escribir la primera línea de la función, presiona C-c C-k para cederle el control al LLM y que genere el resto de la implementación.
  • El LLM está ajustado para detenerse cuando la función queda completa, y evita explicaciones o comentarios tipo ELI5 (explicados de forma sencilla).

Implementación de referencia

  • Después de descargar el LLM, copia el siguiente código en un buffer de Emacs y ejecuta M-x eval-buffer.
  • Puedes ajustar el código según tus preferencias personales.

Enlace de descarga de Emacs

  • Si no tienes Emacs instalado o usas una plataforma donde es difícil conseguirlo, como Windows, se ofrece un enlace a una compilación de Emacs en un solo archivo ejecutable que puede usarse sin instalación.

Enlaces de descarga de LLM

  • Se ofrecen enlaces para descargar gratis algunos LLM que se sabe que funcionan bien con Emacs Copilot.
  • El tamaño del modelo puede elegirse según el hardware disponible.

Archivos de caché

  • Si decides cambiar de modelo, debes eliminar todos los archivos FILE.cache creados en el sistema de archivos local.

Avisos

  • Si usas Apple Silicon en macOS, debes tener Xcode instalado.
  • Si usas zsh, puede que necesites ejecutarlo con sh -c ./llamafile.
  • En algunos sistemas Linux pueden producirse errores relacionados con el registro de binfmt_misc.

SO y CPU compatibles

  • llamafile es compatible con varios sistemas operativos y tiene requisitos mínimos de instalación.
  • llamafile es compatible con CPU específicas y requiere un microprocesador AMD64 con conjunto de instrucciones SSSE3 o superior, o un microprocesador ARM64 con ARMv8a+.

Notas sobre los modelos

  • Los ejemplos de llamafile proporcionados arriba no deben interpretarse como respaldo o recomendación de Mozilla sobre ningún modelo, licencia o conjunto de datos en particular.

Opinión de GN⁺

  • Experiencia de edición innovadora: Emacs Copilot ofrece a los desarrolladores una nueva dimensión de asistencia para programar, con el potencial de mejorar significativamente la eficiencia y la productividad.
  • Accesibilidad y personalización: Los usuarios pueden elegir el LLM y ajustar el entorno de Emacs según sus necesidades y preferencias, lo que permite construir un entorno de desarrollo personalizado.
  • Compatibilidad técnica: Al ser compatible con varios sistemas operativos y CPU, Emacs Copilot puede ser usado por una amplia gama de usuarios, lo que impulsa la inclusión y la accesibilidad dentro de la comunidad de desarrolladores.

1 comentarios

 
GN⁺ 2024-01-01
Opiniones de Hacker News
  • Dudas sobre la utilidad de la integración de LLM/IDE

    No está seguro de que la integración de LLM/IDE aporte una gran mejora de productividad en tareas normales de programación. La productividad promedio de un programador es de unas 100 LOC al día, pero al hacer prototipos se pueden escribir fácilmente más de 1000 LOC al día. La diferencia de productividad entre código de calidad para producción y hacking/prototipado se debe a cuestiones de calidad, y la mayoría de los programadores competentes pueden producir mejor código escribiéndolo ellos mismos que copiándolo de un LLM u otra fuente. El tiempo que toma analizar el código y verificar que no tenga vulnerabilidades y que el diseño sea adecuado para el mantenimiento futuro parece compensar el ahorro de tiempo de no escribirlo directamente. Puede ser útil usar LLM para aprender o para escribir código desechable donde la calidad no importa, pero para código de producción todavía falta mucho para que la salida de un LLM llegue al nivel de un desarrollador y no requiera una revisión/corrección minuciosa.

  • Agradecimiento por desarrollar herramientas LLM autoalojadas

    Expresa su agradecimiento a Justine por impulsar el desarrollo de herramientas LLM autoalojadas. Llamafiles debería convertirse en un estándar. Pregunta si hay alguna forma de conectarse a un LLM remoto alojado en la misma LAN; no usa dispositivos Apple, pero tiene una máquina potente en la red y le gustaría aprovecharla. Se pregunta si Llamafile podría ofrecer una API; eso entraría en el terreno de LSP, y sería bueno apoyarse en Llamafiles.

  • Experiencia compartida sobre integración de LLM con Emacs

    Usa Emacs para la mayor parte de su trabajo de programación y documentación técnica. Está ejecutando phind-v2-codellama, openhermes, ollama, gptel y GitHub Copilot. Le gusta la posibilidad de enviar cualquier región al LLM y hacerle solicitudes. Dice que la UX aún está en una etapa temprana, pero invita a imaginar qué pasaría si el modelo base pudiera aceptar todo el contexto (por ejemplo, archivos orgmode y buffers abiertos) y usar herramientas como LSP.

  • Experiencia ejecutando LLM en una MacBook Pro M1 Max

    Usa una MacBook Pro M1 Max con 64GB de RAM, descargó el modelo 34B Q55 (un modelo grande) y confirmó que funciona bien. Es lento, pero usable. Lo está ejecutando en una partición con Asahi Fedora Linux y no sabe cómo está aprovechando la GPU. Configuró el entorno con ZSH 5.9 y, si invoca directamente el LLM mediante SUDO, carga rápidamente como servidor web y puede interactuar con él desde el navegador a través de localhost:8080. Sin embargo, cuando intenta ejecutar el LLM desde Emacs, aparece el error Doing vfork: Exec format error.. Siguiendo la demo del Readme, escribe el comienzo de la función isPrime y luego presiona C-c C-k, momento en el que aparece ese error. Pregunta si alguien tiene alguna idea de qué está mal.

  • Crítica a la función is_prime de la demostración en video

    La función is_prime mostrada en la demostración en video es muy mala. Aunque la entrada no sea divisible entre 2, sigue haciendo comprobaciones con módulo para 4, 6, 8, etc., lo cual no tiene ningún sentido. Agregando solo una línea de código (comprobación de impar) se puede hacer que el bucle recorra solo números impares y duplicar la velocidad. Espera que quienes usen este tipo de LLM revisen el código antes de hacer push a prod.

  • Pregunta sobre compilar llamafile sin un ejecutable realmente portable en NixOS

    Pregunta si se puede compilar su propio llamafile sin cosmopolitan/un ejecutable realmente portable. No puede ejecutarlo en NixOS.

  • Solicitud de una integración de LLM más general

    Está satisfecho con lo que se ofrece actualmente, pero quiere una integración de LLM más general que pueda hacer tanto esto como todo lo demás que un LLM puede hacer. Por ejemplo, con una tecla podría hacer “completa este código”, mientras que con otra podría enviar el buffer actual tal cual al LLM, o enviar una región, o enviar una región y reemplazarla con el resultado. Podría haber varias funciones ortogonales para llevar la entrada al LLM de distintas maneras (región, buffer, archivo, prompt inline) y para producir la salida de distintas maneras (insertar en el punto, sobrescribir la región, ponerlo en un nuevo buffer, etc.), y sobre eso construir distintos prompts de sistema automáticos para cosas como autocompletado de código, prosa, etc.

  • Usuario de Vim comparte comando personalizado para integración con LLM

    Usa un comando personalizado que toma el código actualmente seleccionado, abre una ventana del navegador y pide a varios motores de IA que lo mejoren. Comparte el comando que usa en vimrc.

  • Pregunta sobre la ruta de actualización de Llamafile

    Pregunta por la ruta de actualización de Llamafile. Entiende que es una combinación de llama.cpp (un archivo pequeño que se actualiza con frecuencia) y los pesos del modelo (un archivo grande que no se actualiza tan seguido). Se pregunta si cada vez que llama.cpp necesita cambios hay que volver a descargar varios gigabytes del modelo sin cambios.

  • Expresa interés en la integración de LLM y disposición a probarla

    Le parece muy interesante y sin duda lo probará. Pero como funciona de manera muy distinta a GitHub Copilot, quizá el nombre no fue la mejor elección. Le sorprende que, considerando la arquitectura de Emacs y demás, no haya más desarrollo en torno a la integración con LLM, aunque la mayoría de los proyectos no han tenido trabajo en meses. Pero quizá la mayoría de quienes usan Emacs también se oponen a aprovechar los LLM.