4 puntos por GN⁺ 2025-02-15 | 2 comentarios | Compartir por WhatsApp
  • Zed es un editor diseñado para la velocidad, y siempre ha buscado una experiencia de edición instant
  • Para ser incluso más rápido que instant, adoptó un enfoque que “predice la siguiente acción de edición” del usuario
  • Para ello, Zed presentó una nueva función de edit prediction, que funciona sobre la base de Zeta, un modelo de código abierto
  • Durante el uso, se puede aplicar de inmediato la edición predicha con la tecla tab, y también es posible ejecutar varias ediciones posteriores de forma continua
  • Era una función muy solicitada, y fue desarrollada para integrarse de la manera más natural posible con el entorno de edición de Zed
  • Por ahora, durante la beta pública, si descargas Zed e inicias sesión con una cuenta de GitHub, puedes usar Zeta gratis
  • Sin embargo, edit prediction podría no seguir siendo gratis en el futuro, pero por ahora se publica para experimentar y aprender juntos

Thoughtful Integration

  • Con la incorporación de edit prediction, la tecla tab se volvió más poderosa
  • Sin embargo, puede entrar en conflicto con usos existentes de tab, como indentar o revisar sugerencias proporcionadas por el servidor de lenguaje (LS)
  • Si aparecen sugerencias de código del servidor de lenguaje, solo al presionar la tecla option/alt se mostrará una vista previa de la edición predicha
  • En macOS, puedes confirmar la edición predicha con tab, y al soltar option vuelves a la pantalla original de sugerencias del servidor de lenguaje
  • En Linux, como alt-tab suele estar reservado por el administrador de ventanas, se ofrece alt-l como valor predeterminado
  • Si en tu entorno Linux alt-tab no genera conflicto, puedes seguir usándolo

Introducing Zeta: Zed's Open Source Edit Prediction Model

  • Zeta es un modelo de código abierto desarrollado sobre la base de Qwen2.5-Coder-7B
  • También se está publicando un dataset abierto (enlace)
  • Si trabajas en repositorios de código abierto, esperan que contribuyas al dataset para mejorar Zeta
  • Al principio, los datos se incorporarán después de pasar revisiones de seguridad y privacidad
  • El objetivo es trabajar juntos para convertir edit prediction en una función mejor en general
  • Enlace al video: How Zed’s Open-Source Edit Predictions Work

Editing By Rewriting

  • La mayoría de los modelos para programación se entrenan con el enfoque “fill in the middle”
  • La estructura consiste en dar un prefix y un suffix para que el modelo genere lo que va entre ambos
  • En cambio, Zeta necesita predecir ediciones en posiciones arbitrarias, así que es una tarea que no encaja con esa estructura tradicional
  • Se enfocaron en que el modelo es más hábil reescribiendo bloques de código relativamente grandes que haciendo cambios de grano fino
  • Por eso, optaron por un enfoque que recibe el historial reciente de edición y la posición del cursor, y reescribe ese fragmento de código

Evaluating Predictions

  • Como los resultados de los modelos de lenguaje grandes no siempre salen igual, las pruebas tienen el problema de ser difíciles
  • Se puede controlar parte de la variación configurando la temperatura (temperature) en 0 o especificando una semilla de RNG
  • Pero en código puede haber varias respuestas correctas, así que un resultado puede ser válido aunque no coincida con la respuesta esperada
  • Como las pruebas unitarias tradicionales son difíciles, probaron un método que usa un LLM más grande para inspeccionar en lenguaje natural los resultados de Zeta
  • Por ejemplo, ante un requisito como “si llama recursivamente a la función quicksort para los arreglos izquierdo y derecho”, hicieron que Claude determine si el resultado coincide con la intención

Prompt Engineering

  • Al principio usaron el modelo Qwen2.5-Coder-32B para construir prompts que indicaran con claridad qué edición debía predecirse
  • Pasaron algunas evaluaciones iniciales, pero a medida que aumentaban las pruebas se volvió difícil obtener resultados consistentes cambiando solo el prompt
  • El modelo 32b además tenía demasiada latencia de respuesta, por lo que tampoco cumplía con los estrictos criterios de rendimiento de Zed

Supervised Fine-Tuning

  • Después de probar varios enfoques, cambiaron a supervised fine-tuning usando Unsloth y LoRA
  • El objetivo era enseñarle a inferir, a partir del historial reciente de edición, el cambio que el usuario desea, y a escribir bien el fragmento de código sin inserciones imprecisas
  • Sin embargo, al inicio no había suficientes datos reales de usuarios, así que generaron unas 50 muestras sintéticas con Claude y las agregaron al dataset
  • Luego desplegaron una versión inicial en Zed mediante un feature flag, para que el equipo interno generara ejemplos reales de uso y ampliara el dataset
  • Con unas 400 muestras mejoraron la precisión del modelo, pero seguía existiendo el problema de que el modelo hacía cambios innecesarios al editar solo una parte del archivo

Direct Preference Optimization

  • Para resolver este problema, introdujeron la técnica DPO (Direct Preference Optimization)
  • No solo mostraron “buenos ejemplos”, sino también “ejemplos que deben evitarse”, entrenando al modelo para distinguir ediciones inapropiadas
  • Incluso con unas 150 muestras cuidadosamente seleccionadas, el comportamiento del modelo mejoró mucho en casos difíciles
  • Esperan que reunir ejemplos más diversos permita mejoras adicionales

Minimizing Latency: Speculative Decoding

  • Como con todas las funciones de Zed, en edit prediction minimizar la latencia es clave
  • La meta es que el p50 sea menor a 200 ms y el p90 menor a 500 ms
  • Reescribir parte del código aumenta la cantidad de tokens que hay que generar, por lo que puede ser más lento que el enfoque típico de fill-in-the-middle
  • Sin embargo, aprovecharon que durante la reescritura hay muchas partes bastante parecidas al código original y aplicaron la técnica de speculative decoding
  • La estrategia consiste en usar la entrada como referencia y generar tokens en paralelo con búsqueda n-gram para acelerar el proceso sin perder calidad

Minimizing Latency: Serving The Model

  • Además de la velocidad de inferencia del modelo, la forma de servir el modelo en el entorno de servidores también fue un gran desafío
  • Es el problema con mayor carga computacional que el equipo ha abordado hasta ahora
  • Tras un breve proceso de validación en el lanzamiento, eligieron Baseten
  • Los ingenieros de Baseten optimizaron el modelo Zeta y lograron alcanzar los objetivos de latencia deseados
  • Como el tiempo de transmisión por red también es un factor importante, desplegaron GPUs en Estados Unidos y Europa para procesar solicitudes desde ubicaciones físicamente cercanas
  • A través de Cloudflare Workers, retransmiten las solicitudes desde centros de datos cercanos a los usuarios

Conclusion

  • En adelante planean explorar varias direcciones para hacer edit prediction aún más potente
  • Tienen previsto aumentar la cantidad de contexto que recibe el modelo, realizar fine-tuning adicional y ampliar el dataset de Zeta para seguir mejorándolo
  • Han aprendido mucho desde el lanzamiento de Zed AI el otoño pasado
  • Como el mundo cambia rápidamente, siguen experimentando y construyendo funciones que los usuarios puedan llegar a amar
  • También quieren hacer avanzar la IA con el mismo espíritu de código abierto que Zed ha perseguido desde siempre
  • Esperan que cualquiera pueda sumarse como usuario, contribuidor o miembro del equipo, mientras avanzan hacia un futuro aún mejor

2 comentarios

 
GN⁺ 2025-02-15
Opiniones en Hacker News
  • La función de edición predictiva de Zed es gratuita por ahora, pero es posible que más adelante pase a ser de pago. El usuario decidirá si la integra en su flujo de trabajo cuando se defina el precio. Le gustaría una prueba gratuita, pero no la usaría si el precio es alto
    • Zed solo puede ejecutar un LSP por tipo de archivo. Rust y C++ funcionan bien, pero Angular no
    • La función de edición remota no funciona en Windows. Para usar la edición remota en Windows, se necesita soporte para SSH
  • La función predictiva se está usando de forma demasiado excesiva. El usuario siente que esta función estorba y que interfiere con su flujo de trabajo
    • Si la función predictiva se usa demasiado, termina dejando de ser útil. Como el algoritmo no puede leer la mente de las personas, debería evitar interrumpir el trabajo del usuario
  • No quieren que el código se envíe a terceros. Especialmente al editar archivos confidenciales, podrían enviarse claves privadas o API keys
    • Esperan que se ofrezca una opción local
  • Les gusta cómo Zed promociona sus nuevas funciones. Se muestran como un banner en la parte superior izquierda y no interrumpen el trabajo del usuario
    • No obliga al usuario a revisar las nuevas funciones como hace otro software
  • Zed intenta autocompletar comentarios. El usuario no quiere autocompletado en la parte de comentarios, y se agregó una opción para desactivarlo
  • La interfaz para aceptar sugerencias de CoPilot es incómoda. Al usar la tecla Tab aparecen muchas sugerencias de IA no deseadas
  • En un editor de texto se prefiere la estabilidad. Tener muchas funciones relacionadas con IA resulta más bien incómodo
    • Probar Zed fue una buena experiencia
  • El Intellisense moderno ofrece funciones de predicción adecuadas. La predicción con IA se usa de forma demasiado excesiva
    • Sería útil si la IA ofreciera recomendaciones sobre la estructura y los patrones del programa. Cuanto más grande es el programa, más difícil es estructurarlo
  • Se pueden definir archivos de modelo para usar las funciones de Zed localmente. Pero no está claro si Zed permite cambiar el endpoint de esta función