Reliable handling of code diffs is central to agents that edit and refactor repositories at scale. We introduce Diff-XYZ, a compact benchmark for code-diff understanding with three supervised tasks: apply (old code $+$ diff $\rightarrow$ new code), anti-apply (new code $-$ diff $\rightarrow$ old code), and diff generation (new code $-$ old code $\rightarrow$ diff). Instances in the benchmark are triples $\langle \textit{old code}, \textit{new code}, \textit{diff} \rangle$ drawn from real commits in CommitPackFT, paired with automatic metrics and a clear evaluation protocol. We use the benchmark to do a focused empirical study of the unified diff format and run a cross-format comparison of different diff representations. Our findings reveal that different formats should be used depending on the use case and model size. For example, representing diffs in search-replace format is good for larger models in the diff generation scenario, yet not suited well for diff analysis and smaller models. The Diff-XYZ benchmark is a reusable foundation for assessing and improving diff handling in LLMs that can aid future development of diff formats and models editing code. The dataset is published on HuggingFace Hub: https://huggingface.co/datasets/JetBrains-Research/diff-xyz.
- ID del Artículo: 2510.12487
- Título: Diff-XYZ: A Benchmark for Evaluating Diff Understanding
- Autores: Evgeniy Glukhov, Michele Conti, Egor Bogomolov, Yaroslav Golubev, Alexander Bezzubov (JetBrains Research)
- Clasificación: cs.SE (Ingeniería de Software), cs.LG (Aprendizaje Automático)
- Conferencia de Publicación: 39th Conference on Neural Information Processing Systems (NeurIPS 2025) Workshop: Deep Learning for Code in the Agentic Era
- Enlace del Artículo: https://arxiv.org/abs/2510.12487
Este artículo propone el benchmark Diff-XYZ para evaluar la capacidad de comprensión de diferencias de código (diff) en modelos de lenguaje grandes. El benchmark incluye tres tareas de aprendizaje supervisado: apply (código antiguo + diff → código nuevo), anti-apply (código nuevo - diff → código antiguo) y generación de diff (código nuevo - código antiguo → diff). Los datos del benchmark provienen de commits reales en CommitPackFT, conteniendo 1000 instancias de tripletas ⟨código antiguo, código nuevo, diff⟩. La investigación revela que diferentes formatos de diff deben seleccionarse según el caso de uso y el tamaño del modelo, proporcionando una base importante para el desarrollo futuro de modelos de edición de código.
Los agentes modernos de edición de código requieren manejo confiable de diferencias de código en ediciones y refactorizaciones de repositorios a gran escala, pero los métodos de evaluación existentes presentan los siguientes problemas:
- Falta de investigación sistemática en selección de formatos: Aunque existen múltiples formatos de representación de diff (diff unificado, búsqueda-reemplazo, etc.), falta una investigación sistemática comparativa de formatos
- Complejidad de evaluación: Los benchmarks existentes de extremo a extremo (como SWE-bench) mezclan múltiples factores (recuperación, uso de herramientas, etc.), dificultando el aislamiento del impacto del formato de diff
- Patrones de fallo diversos: Los parches pueden fallar por errores de sintaxis, desajuste de contexto o errores lógicos, requiriendo análisis más granular
- Valor práctico: El procesamiento de diff de código es una capacidad central para edición automática de código, corrección de bugs, reparación de compilaciones CI, etc.
- Significado teórico: Comprender cómo los LLM procesan información de edición estructurada es importante para mejorar modelos de generación de código
- Valor de ingeniería: Proporciona orientación impulsada por datos para seleccionar formatos de diff apropiados
- Propuesta del benchmark Diff-XYZ: Marco de evaluación ligero y reproducible que incluye tres tareas complementarias
- Comparación sistemática de formatos: Primera comparación controlada y sistemática de múltiples formatos de representación de diff
- Establecimiento de líneas base de rendimiento: Líneas base de rendimiento detalladas para modelos propietarios y de código abierto en tareas de comprensión de diff
- Orientación en selección de formatos: Descubrimiento de relaciones entre tamaño del modelo, tipo de tarea y selección de formato óptimo
- Conjunto de datos abierto: Publicación de un conjunto de datos de evaluación de alta calidad en HuggingFace Hub
Basándose en la ecuación diff = código nuevo - código antiguo, se definen tres tareas:
X. Tarea de Aplicación (Apply Task)
- Entrada: Código antiguo + diff
- Salida: Código nuevo
- Objetivo: Probar la conformidad del formato y la fidelidad a nivel de caracteres
Y. Tarea de Aplicación Inversa (Anti-Apply Task)
- Entrada: Código nuevo + diff
- Salida: Código antiguo
- Objetivo: Explorar la reversibilidad del formato y la pérdida de información
Z. Tarea de Generación de Diff (Diff Generation Task)
- Entrada: Código antiguo + código nuevo
- Salida: diff
- Objetivo: Probar la capacidad confiable de síntesis de diff
Fuente de datos: Commits reales de código abierto del conjunto de datos CommitPackFT
Estrategia de filtrado:
- Retención solo de commits con modificaciones de un único archivo
- Exclusión de archivos binarios, código generado, directorios de proveedores
- Límite de líneas de archivo: 40-1000 líneas
- Exclusión de cambios solo de espacios en blanco
Muestreo estratificado:
- Distribución de lenguajes: Python, JavaScript, Java, Kotlin, Rust con 200 muestras cada uno
- Complejidad de edición: Estratificación por número de bloques de cambio y tamaño de cambio
- Ediciones pequeñas: ≤7 líneas de cambio (40%)
- Ediciones medianas: 8-24 líneas de cambio (40%)
- Ediciones grandes: >24 líneas de cambio (20%)
- Tipo de cambio: 81.5% contiene adiciones y eliminaciones, 16.3% solo adiciones, 2.2% solo eliminaciones
Tareas Apply y Anti-Apply:
- Coincidencia Exacta Depurada (Stripped Exact Match - EM): Tasa de coincidencia exacta después de eliminar líneas en blanco
- Intersección sobre Unión Depurada (Stripped Intersection over Union - IoU): Intersección sobre unión a nivel de línea
Tarea de Generación de Diff:
- Tasa de Análisis (Parsing Rate): Proporción de diff analizables
- Tasa de Aplicación (Applying Rate): Proporción de diff aplicables exitosamente
- EM/IoU después de aplicación: Tasa de coincidencia exacta e IoU después de aplicar diff
- F1+ / F1-: Puntuación F1 para líneas añadidas y eliminadas
- Complementariedad en el diseño de tareas: Tres tareas que evalúan integralmente la capacidad de comprensión de diff desde diferentes ángulos
- Experimentos con variables controladas: Medición precisa del impacto del formato fijando cambios de contexto
- Impulsado por datos reales: Basado en commits reales en lugar de datos sintéticos, asegurando validez ecológica
- Evaluación multidimensional: Combinación de corrección sintáctica, tasa de aplicación exitosa y corrección semántica
- udiff: Formato de diff unificado estándar
- udiff-h: Diff unificado con encabezados de bloque relajados
- udiff-l: Diff unificado con etiquetas explícitas (ADD/DEL/CON)
- search-replace: Formato de búsqueda-reemplazo
Modelos propietarios:
- GPT-4o, GPT-4o-mini
- GPT-4.1, GPT-4.1-mini, GPT-4.1-nano
- Claude 4 Sonnet
- Gemini 2.5 Flash
Modelos de código abierto:
- Serie Qwen2.5-Coder (0.5B-32B)
- sin formato: Indicación de asistente genérico
- con formato: Indicación del sistema que incluye descripción de formato
Rendimiento de modelos propietarios:
- Claude 4 Sonnet muestra el mejor rendimiento en la tarea Apply (EM: 0.95-0.96)
- GPT-4.1 demuestra rendimiento sólido en todas las tareas, pero es sensible a las indicaciones
- Modelos propietarios más pequeños (como GPT-4.1-nano) muestran caídas significativas en tareas complejas
Leyes de escalado de modelos de código abierto:
- El rendimiento mejora claramente con el tamaño del modelo
- Qwen2.5-Coder-32B se acerca al nivel de GPT-4o en tareas Apply/Anti-Apply
- Pero aún hay una brecha significativa en generación de diff
Descubrimientos clave:
- Dependencia de tareas:
- Apply/Anti-Apply: El formato udiff muestra el mejor rendimiento
- Generación de Diff: search-replace es superior para modelos grandes
- Efectos del tamaño del modelo:
- Modelos grandes: search-replace destaca en tareas de generación
- Modelos pequeños: udiff-l (etiquetas explícitas) es más efectivo
- Análisis de características de formato:
- Ventaja de search-replace: Evita restricciones globales, ediciones locales independientes
- Desventaja de udiff-h: La eliminación de andamios de números de línea causa confusión estructural
- Ventaja de udiff-l: Las etiquetas explícitas reducen conflictos de marcado
Impacto de indicaciones:
- La tarea de generación de diff es altamente sensible a descripciones de formato
- GPT-4.1 sin descripción de formato tiende a producir formato V4A
- La tarea Apply es relativamente robusta a cambios de indicaciones
Diferencias de lenguaje:
- Rendimiento relativamente consistente en cinco lenguajes de programación
- Rendimiento ligeramente superior en Python y JavaScript
- HumanEval/MBPP: Generación de código a nivel de función
- BigCodeBench: Tareas complejas de invocación de bibliotecas
- Limitaciones: Se enfoca principalmente en generación desde cero, sin considerar representaciones de edición
- SWE-bench: Resolución de problemas reales de GitHub
- CodeEditorBench: Edición que sigue instrucciones
- Limitaciones: Evaluación de extremo a extremo, difícil de aislar el impacto del formato
- Complementariedad: Se enfoca en investigación aislada de representaciones de edición
- Ligereza: Sin necesidad de configuración de repositorio o entorno de ejecución
- Controlabilidad: Contexto de tarea fijo, variación de formato de representación
- La selección de formato es crítica: Diferentes formatos muestran variaciones significativas de rendimiento en diferentes tareas y tamaños de modelo
- Especificidad de tareas: Las tareas de generación y aplicación requieren formatos óptimos diferentes
- Dependencia de escala: Las estrategias óptimas difieren entre modelos pequeños y grandes
- Brecha con la realidad: Los modelos de código abierto aún tienen un amplio margen de mejora en generación de diff
- Simplificación de tareas: Las tareas del benchmark son proxies simplificados de aplicaciones posteriores
- Alcance de evaluación: Solo considera decodificación codicioso, sin involucrar razonamiento o uso de herramientas
- Cobertura de formatos: No cubre formatos de parches estructurados o a nivel de AST
- Conexión posterior: Falta de asociación cuantitativa entre rendimiento del benchmark y rendimiento de aplicaciones reales
- Extensión de formatos: Exploración de representaciones de edición a nivel de árbol y AST
- Conexión posterior: Establecimiento de asociación entre rendimiento del benchmark y efectos de aplicaciones reales
- Capacidad de razonamiento: Evaluación de escenarios de razonamiento multietapa y uso de herramientas
- Recuperación de errores: Investigación del manejo de diff parciales o dañados
- Definición clara del problema: Identificación precisa de la comprensión de diff como capacidad central pero descuidada
- Diseño experimental riguroso: Método científicamente confiable de comparación de formatos con variables controladas
- Alta calidad de datos: Basado en commits reales, muestreo estratificado asegura representatividad
- Descubrimientos valiosos: La orientación de selección de formato tiene valor práctico directo
- Fuerte reproducibilidad: Configuración experimental detallada y conjunto de datos abierto
- Profundidad teórica limitada: Análisis teórico insuficiente de los mecanismos de diferencias de formato
- Dimensión de evaluación única: Se enfoca principalmente en corrección, carece de consideraciones de eficiencia y legibilidad
- Cobertura de modelos incompleta: Los modelos de código abierto se concentran principalmente en la serie Qwen
- Limitaciones de escenarios de aplicación: No considera edición interactiva y escenarios de actualización incremental
- Valor académico: Llena un vacío importante en evaluación de edición de código, puede catalizar investigación posterior
- Valor de ingeniería: Proporciona apoyo de datos para que la industria seleccione formatos de diff
- Contribución comunitaria: El benchmark abierto y conjunto de datos beneficiarán a toda la comunidad de investigación
- Potencial de estandarización: Puede convertirse en benchmark estándar para evaluación de capacidad de edición de código
- Desarrollo de modelos: Evaluación y mejora de capacidad de modelos de edición de código
- Diseño de formato: Verificación de efectividad de nuevos formatos de diff
- Selección de herramientas: Selección de estrategia de formato para herramientas de edición de código
- Base de investigación: Prueba de capacidad fundamental para tareas complejas de edición de código
El artículo cita 31 referencias relacionadas, incluyendo principalmente:
- Benchmarks de generación de código: HumanEval, MBPP, BigCodeBench, etc.
- Evaluación de edición: SWE-bench, CodeEditorBench, etc.
- Reportes técnicos de modelos: GPT-4o, Claude, Qwen2.5-Coder, etc.
- Herramientas y formatos: Aider, GNU diffutils, etc.
Evaluación General: Este es un artículo de investigación de alta calidad y sistemático que identifica y resuelve con precisión problemas importantes en el campo de la edición de código. Aunque tiene algunas insuficiencias en profundidad teórica, sus contribuciones en valor práctico y metodología son significativas, teniendo importancia considerable para impulsar el desarrollo de la tecnología de edición de código.