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
languagedel 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.
