Introduzione

Fastino Labs ha presentato GLiNER2.5-Decide, un modello decisionale open‑weight da 340  milioni di parametri, progettato per gestire le scelte operative ricorrenti all’interno delle pipeline basate su intelligenza artificiale. Il modello è distribuito con licenza Apache 2.0, può essere installato tramite pip install gliner2 e funziona sia su CPU che su GPU, inclusi ambienti air‑gapped. Fastino offre inoltre un servizio di inferenza ospitata e la possibilità di fine‑tuning tramite la GLiNER API.

Caratteristiche principali

GLiNER2.5-Decide è un classificatore non generativo che utilizza un encoder DeBERTa‑v3‑large, fine‑tuned a partire da gliner2‑large‑v1. Non richiede prompt template né genera token, ma restituisce direttamente risposte strutturate. Le risposte includono:

    • Distribuzione di probabilità per ogni etichetta
    • Punteggio di confidenza
    • Metadati di fattibilità rispetto a vincoli definiti nello schema

Gli schemi di domanda vengono passati al momento della chiamata e possono specificare:

    • Set di etichette consentite per ogni domanda
    • Se la risposta è singola, multipla o ordinata
    • Istruzioni, esempi, descrizioni delle etichette e regole che collegano le risposte tra domande

Come funziona

Il flusso di elaborazione si articola in due fasi:

    • L’encoder legge contemporaneamente il testo di ingresso e lo schema, assegnando un punteggio a ciascuna risposta ammissibile.
    • Un decoder vincolato esegue una ricerca per individuare l’assegnazione congiunta di risposte che massimizza il punteggio rispettando le regole dichiarate nello schema.

Il modello non effettua ragionamento, spiegazioni o risposte a domande aperte; è invece specializzato nelle decisioni operative.

Perché la decodifica congiunta è importante

Fastino dimostra il valore della decodifica congiunta con un esempio di guardrail. Quando le risposte sono decodificate in modo indipendente, il modello segnala “prompt injection” con una probabilità di 0,82 e allo stesso tempo classifica lo stesso prompt come “sicuro” con 0,52, creando una contraddizione.

Applicando una regola che ogni segnale di danno richiede un verdict “non sicuro”, la decodifica congiunta produce simultaneamente safety=unsafe e harmtype=promptinjection. Il codice downstream può quindi bloccare, instradare o escalation la richiesta in modo coerente.

Gli schemi possono esprimere implicazioni, esclusioni, limiti di cardinalità e vincoli ordinali, consentendo al medesimo encoder di estrarre entità, relazioni e record strutturati con offset a livello di carattere in un unico forward pass.

Risultati sui benchmark “Fast Decisions”

Il team Fastino ha valutato GLiNER2.5-Decide su Fast Decisions, un insieme di test interno contenente 5.100 esempi distribuiti su 17 dataset, che coprono operazioni clienti, routing di dominio (bancario, clinico, viaggi, benefit) e comprensione generale del contenuto. La metrica è l’accuratezza exact‑match, ovvero il risultato è considerato corretto solo se l’intero set di etichette corrisponde esattamente al riferimento.

ModelloTipoAccuratezza media
GLiNER2.5-DecideEncoder 340 M60,1 %
JevK5Decoder Qwen3.5 da 4 B57,5 %
SemIfDecoder Qwen3.5 da 4 B56,4 %
GLiFormer large‑v1Encoder a passaggio unico49,0 %
LayaEncoder ModernBERT da 421 M46,6 %

GLiNER2.5-Decide ha dominato 9 dei 17 dataset. Il suo punto forte è il routing dell’intento: 75,3 % su “support intent” e 64,3 % su “banking intent”, rispettivamente 18,6 e 8,6 punti percentuali al di sopra del secondo modello migliore.

Latenza pratica su CPU e GPU

Il benchmark end‑to‑end è stato effettuato con batch = 1, schema a 2 teste e 15 etichette, su un input di 64 token. La latenza mediana (p50) è risultata:

    • 167,3 ms su una CPU Intel Xeon Platinum 8581C a 48 vCPU
    • 43,6 ms su GPU NVIDIA T4
    • 43,4 ms su GPU NVIDIA L4
    • 38,3 ms su GPU NVIDIA V100
    • 47,3 ms su GPU NVIDIA A100

Per richieste brevi, la latenza è dominata da preprocessing fisso e overhead di lancio kernel, motivo per cui le GPU rimangono entro 9 ms tra loro. Con 1.024 token, la A100 guadagna vantaggio con 52,6 ms contro 75,6 ms della V100 e 131,4 ms della L4.

Esempio di utilizzo in codice

Di seguito è riportato un esempio di chiamata multi‑head basata sulla model card:

from gliner2 import AutoExtractor

model = AutoExtractor.from_pretrained("fastino/GLiNER2.5-Decide")

model.classify_text(

"Please confirm the new retention rule is applied before Friday's audit.",

{

"intent": ["fyi", "