Danemar Parceros

Disponibilizámos o Dataset em Código Aberto: drupal7-dataset-api no Hugging Face

Dataset da API do Drupal 7 em código aberto, com 7952 exemplos de pergunta-resposta para fine-tuning, avaliação e RAG. GPL-2.0-or-later, pronto a descarregar do Hugging Face.

Se tens seguido esta série, já conheces o rumo desta história. Em "A Day With a 1.5B Model: What Qwen2.5-Coder Can (and Can't) Do" passámos um dia a testar um modelo local pequeno contra código real de Drupal 7 e registámos, com honestidade, onde se saiu bem e onde não. Em "Building a Drupal Training Dataset: A Practical Playbook" percorremos o pipeline que construímos para transformar essa experimentação em algo reutilizável: um modelo pequeno a redigir pares candidatos de pergunta-resposta, modelos mais fortes a atuar como juízes, e muita filtragem deliberada antes de algo chegar ao conjunto final.

Hoje esse dataset deixa de ser um artefacto interno. Publicámo-lo publicamente no Hugging Face: drupal7-dataset-api. Este post é o detalhe técnico por trás desse lançamento — o que contém, como cada parte foi construída, o que deixámos deliberadamente de fora, e para que já confirmámos que serve.

O que é

drupal7-dataset-api são 7,952 exemplos sobre a API do Drupal 7, extraídos exclusivamente de api.drupal.org. Destina-se a fine-tuning, a avaliar o conhecimento de um modelo sobre Drupal 7, ou como corpus de recuperação para RAG. É distribuído em formato Parquet, 8.77 MB, apenas em inglês. Foi criado por Daniel Ricardo Ramirez Marin como parte do Codicem, o projeto interno da Danemar Parceros por detrás deste pipeline de datasets. A licença é GPL-2.0-or-later, herdada diretamente de api.drupal.org — não escolhemos uma licença diferente da que o material de origem já trazia.

O dataset é distribuído em dois configs, e foram construídos de formas quase opostas.

O config reference: 4,382 exemplos, gerados por LLMs e verificados por LLMs

reference contém perguntas sobre símbolos da API — uma função, uma constante, uma classe, uma variável global — associadas à sua assinatura exata e a uma explicação breve. A distribuição por tipo de símbolo:

  • 4,010 funções
  • 247 constantes
  • 91 classes
  • 34 globais

Este config foi gerado, não extraído. O pipeline funcionou em etapas: vários LLMs propuseram pares candidatos de pergunta/resposta a partir do material de origem em api.drupal.org; outros LLMs atuaram como juízes, descartando os pares que eram fabricados ou que não se sustentavam face ao símbolo real; e uma passagem de tradução separada moveu o conteúdo de espanhol para inglês, com validação explícita de que os identificadores de código — nomes de variáveis, nomes de funções, constantes, strings entre aspas — sobreviviam à tradução intactos. Essa última verificação importa mais do que parece: é exatamente o tipo de passo que é fácil saltar e que acaba por corromper silenciosamente um dataset pensado para ensinar a um modelo assinaturas de API precisas.

O config code: 3,570 exemplos, zero intervenção de LLM

code é um animal diferente. Contém tarefas de programação em que a resposta é o corpo real de uma função de Drupal 7 — não uma descrição do que o código faz, mas o código em si. Distribuição:

  • 2,501 funções
  • 739 implementações de hooks
  • 330 exemplos de definição de hooks (de ficheiros *.api.php)

Nenhum LLM tocou neste config em qualquer etapa. É extraído diretamente do código fonte oficial do núcleo do Drupal 7 (7.104-dev). As tarefas são geradas a partir dos docblocks que já existem acima de cada função no código fonte; as respostas são os corpos exatos das funções, copiados tal como estão. Se reference responde a «consegue um modelo explicar esta API com precisão?», code responde a «consegue um modelo reproduzir ou reconhecer a implementação real?» — ancorado em código fonte, sem qualquer passo de geração que introduza desvios.

O que excluímos, e porquê

Um dataset define-se tanto pelo que se deixa de fora como pelo que se mantém. Durante a curadoria, estes foram excluídos deliberadamente, com as contagens registadas em vez de descartadas em silêncio:

  • 1,294 exemplos de scaffolding de simpletest — boilerplate de testes que não ensina conhecimento da API.
  • 35 explicações vazias ou demasiado curtas para serem úteis.
  • 5 assinaturas que não coincidiam exatamente com a fonte — melhor descartá-las do que entregar uma assinatura errada.
  • 20 referências a outras versões de Drupal que se infiltraram mas não pertencem a um dataset específico de Drupal 7.
  • 5 exemplos marcados como possíveis dados pessoais.
  • 28 traduções que falharam a verificação de preservação de identificadores es→en descrita acima.
  • 413 métodos de classe sem uma forma confiável de os verificar contra api.drupal.org.

Esse último número merece uma pausa. Foram eliminados 413 exemplos não porque estivessem errados, mas porque não havia forma de confirmar que estavam certos. É o tipo de decisão que é fácil saltar sob pressão de prazos e difícil de notar mais tarde — se a precisão importa mais do que o volume, toma-se assim mesmo.

Funciona mesmo?

Não nos limitámos a publicá-lo e a avançar. Usámos o drupal7-dataset-api para fazer fine-tuning a um modelo Qwen 7B e confirmámos depois uma melhoria mensurável no seu conhecimento de Drupal 7. A percentagem exata? A dataset card não indica nenhuma, e nós também não — não vamos arredondar um número que não existe. O que podemos dizer é que não é um dataset que ficou sem testar: já passou por uma ronda real de fine-tuning com um resultado real.

Porque é que isto importa se manténs ou migras Drupal 7

O Drupal 7 chegou ao fim de vida oficial em 5 de janeiro de 2025 — sem mais patches de segurança oficiais para o core nem para os contrib. Segundo um snapshot do BuiltWith feito a 2 de setembro de 2026, continuava a haver 149,752 sites Drupal 7 ativos identificados globalmente. Isso é muito código que continua a precisar de pessoas (e, cada vez mais, de ferramentas de IA) capazes de o ler com precisão, quer o objetivo seja corrigi-lo, auditá-lo, ou migrá-lo por completo do Drupal 7. O conhecimento da API é a primeira coisa de que depende qualquer um desses trabalhos — não se pode reescrever ou explicar com segurança um código cuja superfície não se compreende realmente. É essa a lacuna específica que este dataset foi construído para ajudar a fechar.

Como utilizá-lo

Cada registo traz: id, drupal_version (sempre "7"), source_type, source_url, instruction, context, response, tags, e created_at. Essa estrutura é suficiente para filtrar por tipo de fonte, rastrear qualquer exemplo até à sua página exata em api.drupal.org, ou dividir os dois configs de forma diferente da que fizemos, se o teu caso de uso assim o exigir. Está no Hugging Face sob o caminho de carregamento padrão de datasets, pronto para fine-tuning, para avaliar o conhecimento de Drupal 7 de um modelo, ou para indexar como corpus de RAG.

Licença

GPL-2.0-or-later, herdada de api.drupal.org. Se construíres algo sobre este dataset, é essa a licença que o teu trabalho derivado precisa de respeitar.

Este dataset surgiu do Codicem, o trabalho de pipeline sobre o qual temos escrito nesta série enquanto construímos melhores ferramentas para as migrações de Drupal 7 → 11 que fazemos na Danemar Parceros. Estamos a disponibilizá-lo porque um melhor conhecimento da API para qualquer modelo que trabalhe com código de Drupal 7 é útil independentemente de quem o utiliza — não só nós.

drupal7-dataset-api no Hugging Face →