Codice software con commenti e modifiche evidenziate, dataset Open-SWE-Traces

Preparare dati di Supervised Fine-Tuning da NVIDIA Open-SWE-Traces: parsing, analisi e filtri

Il dataset Open-SWE-Traces di NVIDIA è una risorsa pensata per studiare e preparare traiettorie di ingegneria del software per il fine-tuning supervisionato (SFT). In questo tutorial vediamo come streammarlo da Hugging Face, analizzare i record, normalizzare le conversazioni multi-turno, estrarre le patch e costruire un subset di alta qualità.

Lavoriamo direttamente in Google Colab senza scaricare l’intero dataset: la libreria datasets di Hugging Face permette di streammare i dati in modo efficiente. Dopo aver installato le dipendenze (datasets, huggingface_hub, tiktoken, pandas, matplotlib), configuriamo le impostazioni di visualizzazione e definiamo le costanti: dataset, combinazioni agente/modello, size del campione e limiti per il filtraggio SFT.

Helper per il parsing delle traiettorie

Le funzioni helper rendono il dataset più gestibile, anche quando i campi appaiono in formati diversi. Normalizziamo le traiettorie (convertendo stringhe JSON in liste di dizionari), estraiamo il testo dei messaggi, contiamo i ruoli, rileviamo l’uso di tool, analizziamo le patch di codice e stimiamo la lunghezza in token con tiktoken (codifica cl100k_base). Le funzioni sono costruite in modo difensivo per gestire variazioni di schema nei dati streammati.

Streaming e ispezione delle traiettorie

Streammiamo un campione di 2000 record (400 per ciascuna delle quattro combinazioni agente/modello: openhands/minimax_m25, openhands/qwen35_122b, sweagent/minimax_m25, sweagent/qwen35_122b). Ispezioniamo la struttura di un singolo record: campi come instance_id, repo, language, resolved (1/0/-1), metadata e la traiettoria vera e propria. Stampiamo i primi messaggi della traiettoria e le prime righe della patch finale (model_patch).

Costruzione del DataFrame di analisi

Costruiamo un DataFrame pandas con le seguenti metriche per ogni record:

  • Lunghezza traiettoria: numero di messaggi normalizzati
  • Conteggio tool: nomi e frequenze degli strumenti invocati (tool_calls, tag XML, bash fence)
  • Patch info: numero di file modificati, righe aggiunte/cancellate, estensioni dei file
  • Token totali: stima con tiktoken
  • Risoluzione: valore del campo resolved
  • Linguaggio: dal campo language del dataset

Generiamo visualizzazioni: istogramma della distribuzione delle lingue, boxplot della lunghezza delle traiettorie per stato di risoluzione, e distribuzione del numero di tool unici per traiettoria.

Creazione del subset SFT curato

Filtriamo il DataFrame per ottenere solo traiettorie di alta qualità:

  • Risolte: resolved == 1
  • Token massimi: < 32.000 token (limite di contesto tipico)
  • Patch non vuota: almeno un file modificato
  • Linguaggio: se specificato, filtra per linguaggio target (es. Python)

Il subset finale è pronto per essere esportato in formato JSONL per il fine-tuning. Salviamo anche le statistiche di riepilogo: numero di record prima/dopo, linguaggi inclusi, tool più frequenti.

Il codice completo del tutorial è disponibile nel notebook di esempio su GitHub.

Articoli simili