evals/stream Benchmark LLMs in italiano
← tutti gli eval

Turni PMI: incastrare persone, riposi e competenze (italiano)

8 domande · scoring agentic · contaminazione none

Caso d'uso: Il tabellone dei turni di un bar, un negozio, un piccolo laboratorio: coprire gli slot rispettando disponibilita', riposi, tetti settimanali e competenze — l'incastro combinatorio che ogni titolare fa a mano la domenica sera, dove la soluzione comoda spesso viola un vincolo che si scopre tre mosse dopo.

Cosa misura

Il turnario della PMI come CSP (constraint satisfaction problem): coprire gli slot della settimana rispettando vincoli incrociati — disponibilità, vietato il doppio turno nello stesso giorno, riposo (chi fa un pomeriggio non fa la mattina dopo), tetto settimanale di turni, e le competenze richieste da ogni slot (banco e cucina ovunque, tedesco il sabato mattina, responsabile la domenica). Le regole dure le valida l'ambiente con ko esplicativi; le competenze no: comporre le persone giuste è il compito. 8 task, fino a 14 turni.

La novità di scoring: il check accetta qualsiasi soluzione valida (copertura + requisiti + turnario preesistente intatto), non un'unica risposta — è constraint checking, non confronto con uno stato atteso. Un mini-solver a forza bruta (in scripts/check_turni.py) certifica ogni affermazione dei task: che U6 sia davvero infeasibile, che il sostituto di U3 sia unico, che la preferenza di U5 sia soddisfacibile. Ground truth eseguibile, nessun giudice LLM — vedi /scoring/agentic/.

Gli 8 task: completamento semplice (U1), competenza obbligata (U2: il tedesco ce l'hanno in due, una è in ferie → Bruno forzato), sostituzione con trappola (U3: il sostituto ovvio è bloccato dal riposo, resta un'unica scelta), incrocio di riposi su due slot (U4), preferenza soft da rispettare quando possibile (U5), infeasibile vero da riconoscere e segnalare senza forzare (U6: domenica senza responsabili disponibili), giornata intera (U7) e weekend (U8) con esclusioni incrociate.

Com'è andata

Sonnet 4.6: 8/8 ($0.29), e nel modo più netto: traiettorie minime (consulta, assegna, chiude) e zero ko — risolve gli incastri a mente prima di agire, comprese la trappola-riposo di U3 e l'infeasibile. Per lui la logica dei vincoli, a questa taglia, è satura.

Haiku 4.5: 8/8 ($0.09), ma con uno stile opposto a Sonnet: su U1 e U3 la prima assegna è proprio la trappola (Fabio), l'ambiente la respinge col ko esplicativo ("riposo violato: Fabio ha il pomeriggio di lunedì...") e Haiku corregge al colpo successivo. Il feedback usato da professionista — un tentativo, una lettura, la mossa giusta — non il brute-force dei GPT piccoli in agenda. È il caso d'uso che giustifica i ko esplicativi.

qwen3-235b: 6/8 ($0.009) — e i due errori sono entrambi il suo (ormai documentato) narratore: su U4 e U5 fotografa perfettamente la situazione ("manca una persona con banco accanto a Carla…") e chiude il turno senza mai chiamare assegna. La logica c'è, l'azione no. È lo stesso failure mode visto su DeepSeek Pro e Kimi nei magazzini: turni-it lo fa emergere anche in un modello che sui PMI precedenti era impeccabile.

DeepSeek Flash: 8/8 ($0.008, zero ko) — il pianificatore economico si conferma anche sugli incastri. GPT-5.5, GPT-5.4, Opus 4.8, Fable 5, GLM 5.2 e DeepSeek Pro: 8/8 — Pro stavolta senza cedimenti da narratore. Kimi 87.5: perde solo U8, e proprio col narratore (descrive perfettamente il weekend da coprire e chiude senza assegnare).

Sonnet 5: 6/8, e il modo è nuovo per la suite: su U4 e U7 sfora il budget di output (finish_reason: max_tokens, 2048 token per turno come per tutti) scrivendo l'analisi degli incastri, senza mai arrivare alla tool call — il prolisso. Non è mancanza di logica ma di disciplina sul budget: gli stessi task il fratello 4.6 li chiude in tre chiamate asciutte.

I piccoli GPT si aprono in due, a 62.5 (5/8), con fallimenti tutti diversi. gpt-5.4-mini: su U3 produce una resa argomentata — dichiara impossibile la sostituzione con una motivazione elaborata e falsa ("gli altri dipendenti non hanno la competenza cucina": Elisa ce l'ha ed è disponibile); su U5 assegna Dario, esattamente la mossa pigra che la preferenza vietava; su U7 completa la mattina e molla il pomeriggio a metà. gpt-5.4-nano: su U6 forza l'infeasibile (riempie la domenica con due persone senza responsabile) e su U4/U8 ignora le competenze — gio-M senza cucina, sab-M senza tedesco: i vincoli che l'ambiente non valida al posto suo semplicemente non esistono.

Verdetto sulla difficoltà: discrimina davvero. Nove modelli al 100 ma con tre stili diversi (pianificazione a mente, ko+recupero, economia), kimi a 87.5 e qwen a 75 col narratore, Sonnet 5 a 75 col prolisso, i piccoli a 62.5 su logica e giudizio (resa falsa, infeasibile forzato, competenze ignorate). Se il vertice andrà comunque compresso, la leva v2 è pronta per costruzione: vincoli più stretti, task "copri il resto della settimana" a organico contato — il check-solver funziona identico.

Note di metodo