Safety judge
Is the user's request harmful? Did the assistant refuse? Is the assistant's reply itself harmful? Three answers from one read of the conversation.
wildguard(prompt, reply) → {prompt_harm, refusal, response_harm}
Debussy is an open System 1 decision model. It makes the quick calls an AI agent needs (is this safe, should I call this tool, do I actually know this) in a single pass on an ordinary CPU, and it says “I don't know” when it doesn't.
* Our own estimate for Debussy Duo on the Artificial Analysis Decision Index, not an official score.
Each call returns a probability for every option instead of free-form text, so your code can act on it, set its own thresholds, or send the hard cases to a person.
Is the user's request harmful? Did the assistant refuse? Is the assistant's reply itself harmful? Three answers from one read of the conversation.
wildguard(prompt, reply) → {prompt_harm, refusal, response_harm}
Given the tools and the request: call the tool, ask the user for the missing details, or say it can't be done.
when2call(tools, request, candidates) → {tool_call, request_for_info, cannot_answer}
Picks the right option when it knows, and “I don't know” when it isn't sure. On obscure questions it would rather abstain than guess.
choice(question, options + ["I don't know"]) → {option: p, …}
The four parts of the Artificial Analysis Decision Index. Every setting was chosen on training data only; the test sets were used once, to report.
| Benchmark | Debussy Duo | Debussy Light | Test set |
|---|---|---|---|
| When2Call (accuracy) | 93.2% | 93.2% | 600 test questions |
| WildGuardTest (average F1) | 0.936 | 0.905 | the same 500 annotator-agreed rows |
| AA-Omniscience (½ accuracy + ½ non-hallucination) | 53.1 | 51.8 | stand-in: 266 public questions |
| HLE-MultiChoice (accuracy) | 13.6% | 10.5% | all 513 questions (chance 16.4%) |
| Estimated index | ≈ 63.4 | ≈ 61.4 | 0.25 × each part |
All variants make each decision in a single pass. Debussy adds no weights to the open base models: it adds the questions it asks and a few hundred calibrated numbers.
DebussyDuo()
Debussy(profile="k2-horizon", backend="server")
Debussy()
No chain of thought and no long generations. Debussy asks a small model short questions and reads its confidence directly.
The base model reads the input once, then answers a few yes/no questions. Debussy reads the probability of “yes” against “no” instead of generating text.
Small logistic regressions turn those probabilities into calibrated decisions. Which head to use is chosen by cross-validation on training rows only.
For knowledge questions, Debussy answers only when its confidence clears a threshold set on a separate practice set, and says “I don't know” otherwise.
A decision model is only useful if you can trust its numbers, so we report the misses as carefully as the hits.
Clone the repository, download the 2.7 GB base model, and run the demo. The Duo and K2 variants also need
a current build of llama.cpp's llama-server.
# get Debussy and the light base model git clone https://github.com/abutauskas/debussy && cd debussy pip install llama-cpp-python==0.3.36 numpy pandas pyarrow scikit-learn mkdir -p models && curl -L -o models/Qwen3.5-4B-Q4_K_M.gguf \ https://huggingface.co/unsloth/Qwen3.5-4B-GGUF/resolve/main/Qwen3.5-4B-Q4_K_M.gguf # three demo decisions python -m debussy.model