Fastino Labs has released GLiNER2.5-Decide, a 340M-parameter open-weight decision model. It takes text and a schema of typed questions and returns structured answers. Each answer comes with a probability distribution, a confidence score, and constraint-feasibility metadata. It targets the frequent judgment calls inside agent pipelines: routing, triage, tool selection, and guardrails.
Is it deployable? Yes, the weights ship under Apache 2.0 and install with pip install gliner2. They run on CPU, GPU, or in air-gapped environments. Fastino team also offers hosted inference and fine-tuning through its GLiNER API.
What GLiNER2.5-Decide Actually Does
GLiNER2.5-Decide is a non-generative classifier. It uses a DeBERTa-v3-large encoder and is fine-tuned from gliner2-large-v1. It produces no generated tokens and needs no prompt template.
Label sets are passed at call time. Each question in the schema declares its permitted answers. It also declares whether it expects one answer, multiple answers, or an ordered value. Schemas can carry instructions, examples, label descriptions, and rules linking answers across questions.
The pipeline has 2 stages. The encoder reads the text and schema together and scores every permitted answer. A constrained decoder then searches for the highest-scoring joint assignment the declared rules allow.
Fastino is explicit about scope. The model does not reason, explain, or answer open questions. It is a specialist for operational decisions.
Why Joint Decoding Matters
Fastino team illustrates the value with a guardrail example. Decoded independently, the model flagged prompt injection at 0.82. It also labeled the same prompt safe at 0.52. The attack was detected, but the 2 outputs conflicted.
Joint decoding applies a rule that any detected harm requires an unsafe verdict. The model then returns safety=unsafe and harm_type=prompt_injection together. Downstream code can use those scores to block, route, or escalate.
Schemas can express implications, exclusions, cardinality limits, and ordinal bounds. The same encoder can also extract entities, relations, and structured records with character-level offsets in 1 forward pass. Classification answers do not return evidence spans.
‘});
el.innerHTML=h;ping();
setTimeout(function(){el.querySelectorAll(“.fill”).forEach(function(f){f.style.width=f.getAttribute(“data-w”)+”%”})},reduce?0:60);
}
function showB(v){var d=B[v];bars($(“bBars”),d.rows,d.max,”%”);$(“bCap”).textContent=d.cap}
function showL(v){var rows=L[v],best=Math.min.apply(null,rows.filter(function(r){return r[1]!=null}).map(function(r){return r[1]}));bars($(“lBars”),rows,180,” ms”,best)}
function seg(id,fn){var s=$(id);s.querySelectorAll(“button”).forEach(function(b){b.onclick=function(){s.querySelectorAll(“button”).forEach(function(x){x.setAttribute(“aria-pressed”,x===b)});fn(b.getAttribute(“data-v”))}})}
seg(“bSeg”,showB);seg(“lSeg”,showL);
document.querySelectorAll(“.tab”).forEach(function(t){t.onclick=function(){document.querySelectorAll(“.tab”).forEach(function(x){x.setAttribute(“aria-selected”,x===t);$(x.getAttribute(“data-p”)).hidden=x!==t});var p=t.getAttribute(“data-p”);if(p===”p2″)showB($(“bSeg”).querySelector(‘[aria-pressed=”true”]’).getAttribute(“data-v”));if(p===”p3″)showL($(“lSeg”).querySelector(‘[aria-pressed=”true”]’).getAttribute(“data-v”));ping()}});
function ping(){try{parent.postMessage({mtpFrame:”gliner-decide”,h:$(“wrap”).offsetHeight+40},”*”)}catch(e){}}
window.addEventListener(“load”,ping);window.addEventListener(“resize”,ping);
if(window.ResizeObserver)new ResizeObserver(ping).observe($(“wrap”));
chips();load();later(run,500);
})();






