Liberamos el dataset en código abierto: drupal7-dataset-api en Hugging Face
Dataset de la API de Drupal 7 en código abierto, con 7.952 ejemplos de pregunta-respuesta para fine-tuning, evaluación y RAG. GPL-2.0-or-later, listo para descargar desde Hugging Face.
Si venís siguiendo esta serie, ya sabés cómo va esta historia. En "A Day With a 1.5B Model: What Qwen2.5-Coder Can (and Can't) Do" pasamos un día poniendo a prueba un modelo local pequeño contra código real de Drupal 7 y dejamos registrado, con honestidad, dónde se sostuvo y dónde no. En "Building a Drupal Training Dataset: A Practical Playbook" recorrimos el pipeline que construimos para convertir esa experimentación en algo reutilizable: un modelo pequeño redactando pares candidatos de pregunta-respuesta, modelos más fuertes actuando como jueces, y mucho filtrado deliberado antes de que algo llegara al conjunto final.
Hoy ese dataset deja de ser un artefacto interno. Lo publicamos públicamente en Hugging Face: drupal7-dataset-api. Este post es el detalle técnico detrás de ese lanzamiento: qué contiene, cómo se construyó cada parte, qué dejamos deliberadamente afuera, y para qué ya confirmamos que sirve.
Qué es
drupal7-dataset-api son 7,952 ejemplos sobre la API de Drupal 7, extraídos exclusivamente de api.drupal.org. Está pensado para fine-tuning, para evaluar el conocimiento de un modelo sobre Drupal 7, o como corpus de recuperación para RAG. Se distribuye en formato Parquet, 8.77 MB, solo en inglés. Fue creado por Daniel Ricardo Ramirez Marin como parte de Codicem, el proyecto interno de Danemar Parceros detrás de este pipeline de datasets. La licencia es GPL-2.0-or-later, heredada directamente de api.drupal.org — no elegimos una licencia distinta a la que ya trae el material fuente.
El dataset se distribuye en dos configs, y se construyeron de maneras casi opuestas.
El config reference: 4,382 ejemplos, generados por LLMs y verificados por LLMs
reference contiene preguntas sobre símbolos de la API —una función, una constante, una clase, una variable global— emparejadas con su firma exacta y una explicación breve. El desglose por tipo de símbolo:
- 4,010 funciones
- 247 constantes
- 91 clases
- 34 globales
Este config fue generado, no extraído. El pipeline funcionó en etapas: varios LLMs propusieron pares candidatos de pregunta/respuesta a partir del material fuente en api.drupal.org; otros LLMs actuaron como jueces, descartando los pares que eran fabricados o que no se sostenían frente al símbolo real; y un paso de traducción separado movió el contenido de español a inglés, con validación explícita de que los identificadores de código —nombres de variables, nombres de funciones, constantes, cadenas entre comillas— sobrevivieran la traducción intactos. Esa última verificación importa más de lo que suena: es exactamente el tipo de paso que es fácil saltarse y que termina corrompiendo silenciosamente un dataset pensado para enseñarle a un modelo firmas de API precisas.
El config code: 3,570 ejemplos, cero intervención de LLM
code es un animal distinto. Contiene tareas de programación donde la respuesta es el cuerpo real de una función de Drupal 7 —no una descripción de lo que hace el código, sino el código mismo. Desglose:
- 2,501 funciones
- 739 implementaciones de hooks
- 330 ejemplos de definición de hooks (de archivos
*.api.php)
Ningún LLM tocó este config en ninguna etapa. Se extrae directamente del código fuente oficial del núcleo de Drupal 7 (7.104-dev). Las tareas se generan a partir de los docblocks que ya existen encima de cada función en el código fuente; las respuestas son los cuerpos exactos de las funciones, copiados tal cual. Si reference responde a «¿puede un modelo explicar esta API con precisión?», code responde a «¿puede un modelo reproducir o reconocer la implementación real?» — anclado en código fuente sin ningún paso de generación que introduzca desviaciones.
Qué excluimos, y por qué
Un dataset se define tanto por lo que deja afuera como por lo que conserva. Durante la curación, esto se excluyó deliberadamente, con los conteos registrados en lugar de descartados en silencio:
- 1,294 ejemplos de scaffolding de simpletest — boilerplate de pruebas que no enseña conocimiento de la API.
- 35 explicaciones vacías o demasiado cortas para ser útiles.
- 5 firmas que no coincidían exactamente con la fuente — mejor descartarlas que entregar una firma incorrecta.
- 20 referencias a otras versiones de Drupal que se filtraron pero no corresponden a un dataset específico de Drupal 7.
- 5 ejemplos marcados como posibles datos personales.
- 28 traducciones que fallaron la verificación de preservación de identificadores es→en descrita arriba.
- 413 métodos de clase sin una forma confiable de verificarlos contra api.drupal.org.
Esa última cifra merece detenerse un momento. Se eliminaron 413 ejemplos no porque estuvieran mal, sino porque no había forma de confirmar que estuvieran bien. Es el tipo de decisión que es fácil saltarse bajo presión de plazos y difícil de notar después —si la precisión importa más que el volumen, se toma igual.
¿Realmente funciona?
No lo publicamos sin más y seguimos adelante. Usamos drupal7-dataset-api para hacer fine-tuning de un modelo Qwen 7B y confirmamos después una mejora medible en su conocimiento de Drupal 7. ¿El porcentaje exacto? La dataset card no reporta uno, y nosotros tampoco —no vamos a redondear un número que no existe. Lo que sí podemos decir es que no es un dataset que quedó sin probar: ya pasó por una ronda real de fine-tuning con un resultado real.
Por qué esto importa si mantenés o migrás Drupal 7
Drupal 7 llegó a su fin de vida oficial el 5 de enero de 2025 —sin más parches de seguridad oficiales para core ni contrib. Según un snapshot de BuiltWith tomado el 2 de septiembre de 2026, todavía había 149,752 sitios Drupal 7 activos identificados globalmente. Eso es mucho código que todavía necesita personas (y, cada vez más, herramientas de IA) capaces de leerlo con precisión, ya sea para parchearlo, auditarlo o migrarlo fuera de Drupal 7 por completo. El conocimiento de la API es lo primero de lo que depende cualquiera de esos trabajos —no se puede reescribir o explicar con seguridad un código cuya superficie realmente no se entiende. Esa es la brecha específica que este dataset está construido para ayudar a cerrar.
Cómo usarlo
Cada registro lleva: id, drupal_version (siempre "7"), source_type, source_url, instruction, context, response, tags, y created_at. Esa estructura alcanza para filtrar por tipo de fuente, rastrear cualquier ejemplo hasta su página exacta en api.drupal.org, o dividir los dos configs de forma distinta a como lo hicimos si tu caso de uso lo requiere. Está en Hugging Face bajo la ruta estándar de carga de datasets, listo para fine-tuning, para medir el conocimiento de Drupal 7 de un modelo, o para indexarlo como corpus de RAG.
Licencia
GPL-2.0-or-later, heredada de api.drupal.org. Si construís algo sobre este dataset, esa es la licencia que tu trabajo derivado necesita respetar.
Este dataset salió de Codicem, el trabajo de pipeline sobre el que venimos escribiendo en esta serie mientras construimos mejores herramientas para las migraciones de Drupal 7 → 11 que hacemos en Danemar Parceros. Lo liberamos porque un mejor conocimiento de la API para cualquier modelo que trabaje con código de Drupal 7 es útil sin importar quién lo use —no solo nosotros.