Fill-In-the-Middle
Fill-In-the-Middle (FIM) è un obiettivo di training per modelli di codice in cui il modello deve predire una porzione centrale di testo dato il contesto che la precede (prefix) e quello che la segue (suffix). A differenza della generazione autoregressiva standard da sinistra a destra, FIM consente al modello di completare funzioni parzialmente scritte, docstring, nomi di variabili o blocchi di logica in mezzo a codice esistente. La tecnica riorganizza i token del training nella forma [PREFIX][SUFFIX][MIDDLE] o [PREFIX][MIDDLE][SUFFIX] e addestra il modello a completare la parte mancante. StarCoder, DeepSeek-Coder e Codestral fanno largo uso di FIM ed è la base tecnica di tutti i moderni strumenti di code completion.
In pratica
Un developer che usa GitHub Copilot o Cursor beneficia direttamente di FIM ogni volta che scrive una funzione parziale e chiede al modello di completare il corpo: il modello vede sia il codice prima del cursore sia quello dopo. Per chi addestrasse un proprio code model, la pipeline di training FIM richiede di campionare randomicamente porzioni da mascherare nel corpus di codice sorgente e di riformattare i token con i separatori speciali `<fim_prefix>`, `<fim_suffix>`, `<fim_middle>`. Il ratio tipico è 50% FIM + 50% left-to-right durante il pre-training per preservare anche la capacità generativa standard.