Instructions to use cribl-ai/cribl-decision-1.0 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use cribl-ai/cribl-decision-1.0 with PEFT:
from peft import PeftModel from transformers import AutoModelForCausalLM base_model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen3.5-4B-Base") model = PeftModel.from_pretrained(base_model, "cribl-ai/cribl-decision-1.0") - Transformers
How to use cribl-ai/cribl-decision-1.0 with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="cribl-ai/cribl-decision-1.0") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# pip install -U transformers accelerate # Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("cribl-ai/cribl-decision-1.0", device_map="auto") - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use cribl-ai/cribl-decision-1.0 with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "cribl-ai/cribl-decision-1.0" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "cribl-ai/cribl-decision-1.0", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/cribl-ai/cribl-decision-1.0
- SGLang
How to use cribl-ai/cribl-decision-1.0 with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "cribl-ai/cribl-decision-1.0" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "cribl-ai/cribl-decision-1.0", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "cribl-ai/cribl-decision-1.0" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "cribl-ai/cribl-decision-1.0", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use cribl-ai/cribl-decision-1.0 with Docker Model Runner:
docker model run hf.co/cribl-ai/cribl-decision-1.0
Table of Contents
- Summary
- Base model
- Highlights
- Evaluation
- Intended use
- Loading the adapter with PEFT
- Structured decision readout
- Decision types
- Local API usage
- Training data and training details
- Limitations
- Security and responsible use
- License
- Citation
cribl-decision
cribl-decision is a parameter-efficient LoRA adapter for structured decision prediction. It is designed to read a state, one or more typed questions, and explicit candidate options, then return probability distributions over the supplied candidates.
This repository contains the LoRA adapter only. The Qwen base-model weights are not included.
Summary
Unlike a conventional chat model, cribl-decision is intended to be called from software. Its structured readout scores the candidate options supplied by the caller rather than generating an unconstrained textual answer.
The model uses:
Qwen3.5-4B-Base transformer backbone
+ LoRA adaptation
+ native Qwen language-model readout
+ candidate probability normalization
+ typed decision response formatting
The public model name is:
cribl-decision
Base model
Base model: Qwen/Qwen3.5-4B-Base
Base revision: 1001bb4d826a52d1f399e183466143f4da7b741b
The base model is downloaded separately by users. The adapter configuration points to the public Qwen model identifier, not to a local filesystem path.
Highlights
- LoRA adapter released separately from the 4B base model.
- Structured candidate scoring rather than free-form answer generation.
- Supports typed
choice,noul, andscoredecisions through the accompanying readout implementation. - Up to 255 candidate options in the training/evaluation format.
- Trained on a broad structured-decision mixture containing public classification, intent, preference, safety, knowledge, reasoning, agent/tool, and programmatic rule families.
- Compatible with local deployment; no hosted inference service is required.
Evaluation
26-task held-out evaluation
The final release was evaluated on 29,743 held-out records across 26 tasks.
| Metric | Result |
|---|---|
| Overall accuracy | 77.34% |
| Task-macro accuracy | 78.64% |
| Task-macro Macro-F1 | 78.65% |
The held-out corpus was kept separate from training and was not used for checkpoint selection.
Intended use
cribl-decision is intended for:
- classification and intent routing;
- structured policy and safety judgments;
- tool and agent-action selection;
- preference and quality comparisons;
- knowledge and question answering over explicit candidates;
- ordinal or rubric-based scoring;
- local decision services that require probabilities over a supplied option set.
It is not intended to replace human review in safety-critical, legal, medical, financial, or other high-impact decisions.
Loading the adapter with PEFT
Install the required packages:
pip install transformers peft torch huggingface_hub
Load the base model at the pinned revision and attach the adapter:
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
base_id = "Qwen/Qwen3.5-4B-Base"
base_revision = "1001bb4d826a52d1f399e183466143f4da7b741b"
adapter_id = "cribl-ai/cribl-decision-1.0"
tokenizer = AutoTokenizer.from_pretrained(
base_id,
revision=base_revision,
)
base_model = AutoModelForCausalLM.from_pretrained(
base_id,
revision=base_revision,
torch_dtype="auto",
)
model = PeftModel.from_pretrained(
base_model,
adapter_id,
)
model.eval()
The base model and adapter are loaded separately. The base model is not duplicated in this repository.
Structured decision readout
The adapter is not intended to be used with unconstrained text generation alone. The structured readout is:
hidden state at the decision slot
→ native Qwen lm_head candidate logits
→ normalization over the supplied candidates
→ typed choice/noul/score output
Conceptually:
candidate_logits = candidate_weights @ decision_hidden_state
probabilities = candidate_logits.softmax(dim=-1)
For exact reproduction of the structured outputs, use the accompanying candidate-scoring implementation with the same tokenizer, candidate ordering, prompt format, dtype, and model revision.
Decision types
Choice
Returns the selected candidate and a probability for every supplied option.
{
"type": "choice",
"choice": "network",
"probabilities": {
"network": 0.999,
"file": 0.001
}
}
Noul
Returns a probability for a Boolean proposition, such as whether an action is required or whether a condition is true.
Score
Returns a distribution over ordered levels and an expected score.
Local API usage
Uploading this adapter to Hugging Face does not create a hosted API endpoint. For local serving, load the base model and adapter on the deployment machine and run the structured readout server.
The API request shape is:
POST /v1/systemone
Authorization: Bearer <PRIVATE_TOKEN>
Content-Type: application/json
Example request:
curl -X POST \
http://127.0.0.1:8241/v1/systemone \
-H 'Authorization: Bearer <PRIVATE_TOKEN>' \
-H 'Content-Type: application/json' \
-d '{
"model": "cribl-decision",
"state": "A host made a network connection.",
"questions": {
"decision": {
"type": "choice",
"instructions": "Which event type is this?",
"criteria": {
"network": "network activity",
"file": "file activity"
}
}
}
}'
Do not put API tokens in this repository or in model-card examples.
Training data and training details
The training mixture contained 1,541,922 converted structured-decision records with:
maximum context: 8,192 tokens
maximum candidate options: 255
format: packed typed readout
The source families included:
- general text classification;
- intent and routing;
- preference, quality, and safety judgments;
- knowledge and question answering;
- reasoning and language understanding;
- tools and agent actions;
- programmatic and synthetic rule families.
The base transformer was frozen while LoRA parameters were trained. The held-out evaluation corpus and public JevBench items were kept separate from training.
Limitations
- The model can produce incorrect or overconfident decisions.
- Accuracy varies substantially by task family.
- The model is sensitive to prompt formatting, candidate wording, candidate order, and tokenizer behavior.
- Generic text generation is not the same as the structured decision readout.
- Latency depends on hardware, precision, context length, and batching.
- The 26-task held-out result does not establish performance on every deployment domain.
- Calibration should be checked again on the target application's data.
- The adapter requires the exact compatible Qwen base model revision for reproducible results.
Security and responsible use
Deployers are responsible for:
- protecting API credentials;
- keeping private states and questions out of logs;
- validating candidate sets and input sizes;
- monitoring probability calibration;
- adding human review for high-impact decisions;
- controlling access to local model servers;
- avoiding exposure of sensitive data through model outputs or debug logs.
The model is provided as an adapter for research and engineering use. It is not a guarantee of correctness, safety, or suitability for a particular application.
License
This adapter is released under Apache-2.0 where compatible with the base-model license. The Qwen base model remains subject to its own license and terms.
Citation
@misc{cribl-decision-2026,
title = {cribl-decision: A LoRA Adapter for Structured Decision Prediction},
author = {{Cribl AI}},
year = {2026},
publisher = {Hugging Face},
howpublished = {\url{https://huggingface.co/cribl-ai/cribl-decision-1.0}}
}
- Downloads last month
- 94
Model tree for cribl-ai/cribl-decision-1.0
Base model
Qwen/Qwen3.5-4B-Base