Repository navigation
decision engine vs decision model
A decision engine executes logic you wrote, as rules, decision tables or scoring formulas, over structured inputs; a decision model reads unstructured text and returns a probability for each allowed answer. They do different halves of one job. The engine cannot tell whether "The box arrived empty. This is the second time!" reports a missing item; the model should not be the one comparing 5 days with a 30-day limit or adding up risk points. Combined, the model answers the fuzzy questions about the text and the engine applies the rule to those answers.
Conflict of interest, in one line: we build jevos, a decision model.
The names make this harder than it should be. In the OMG standard DMN, "Decision Model and Notation", a decision model is the logic itself, which an analyst can read and an engine can execute. On this wiki, a decision model is a model such as jevos, TypeSafe's Jev or Microsoft-Decision-1 that reads text and returns probabilities. Same two words, opposite sides of the split.
This page is what each one is, where each fits, a decision table fed by a model, how an engine should take choice and score answers, and when you need neither. The measured case for the split, by kind of question, is on a yes/no LLM vs a business rules engine.
Software that evaluates logic someone wrote over facts it is given: rules in code, a scoring formula or a decision table. The same facts give the same outcome, and a policy change is a reviewed edit to one rule.
DMN, an OMG standard, covers the decision-table kind. OMG calls it "a modeling language and notation for the precise specification of business decisions", whose expression language defines decision logic "in sufficient detail to allow execution", and which "is designed to be usable alongside the standard business process notation BPMN". In Camunda's documentation, a decision table "consists of inputs, outputs and rules", and its hit policy decides what the result holds: under FIRST, "the output of the first satisfied rule".
An engine needs fields such as item_missing = true, and nothing in it gets there from a
customer's sentence.
A model that takes a text and typed questions and returns probabilities instead of generated text.
jevos answers in TypeSafe Jev's wire format: a noul returns P(yes), a choice the most probable
option with a probability per option and a confidence, and a score an expected level with a
probability per level and a confidence. Microsoft says of its hosted Microsoft-Decision-1 that it
"doesn't generate a free-form response or written rationale" and "returns a typed, numerical
decision". The category is defined on what is a decision model in AI?.
It is strong at tone, intent and what the text says, in words nobody listed in advance, and weak at everything exact: on an earlier test with jevos-v2, a fraud score from six rules was right 34% of the time, barely above the most common level, and confidently wrong.
| Decision engine | Decision model | |
|---|---|---|
| Input | structured fields | free text, or JSON with text in it |
| Output | an outcome | a probability per allowed answer |
| Strong at | dates, sums, limits | tone, intent, what the text says |
| A policy change is | an edited rule | a reworded question, to re-test |
| Explains itself by | the rule that fired | the question and its probability |
| Fails by | a case no rule covers | a misreading that can look confident |
Use the engine alone when every input is already a field, the model alone for light, reversible routing ("Is this a billing problem?"), and both whenever a written policy depends on what a person wrote.
The model turns text into facts; the engine applies the policy to those facts and to the fields your systems already hold. One request asks both questions about the message:
{
"model": "jev-latest",
"state": {"customer_message": "The box arrived empty. This is the second time!"},
"questions": {
"missing": {"type": "noul", "instructions": "Does the customer say the item was missing from the package?"},
"team": {"type": "choice", "instructions": "Which team should handle this message?",
"criteria": {"billing": "payments, invoices, refunds",
"shipping": "deliveries, missing or damaged parcels",
"tech": "a product that does not work"}}
}
}Code turns missing into yes, no or unsure with two thresholds, and a table does the rest. This
one is illustrative, with hit policy FIRST, so row order matters:
| missing (model) | days since delivery | amount | outcome |
|---|---|---|---|
| unsure | any | any | review by a person |
| yes | 30 or less | 50 or less | refund |
| yes | 30 or less | above 50 | review by a person |
| yes | above 30 | any | a person confirms the decline |
| no | any | any | ask what went wrong |
The model fills one column; the window, the cap and the rule order stay readable, and a dispute traces to a misread column or a rule.
The other way works too: code computes what is exact and writes it into the state as words, like the README's "delivered": "5 days ago". Our game races go furthest: the game code words each move's effect ("Moving up: the snake moves closer to the food. Should the snake move up?"), the model answers, and code plays the move with the highest P(yes), as on Snake AI: a local model vs a cloud API.
As a category plus a confidence, never as a bare label or a raw average.
Choice. Pass the option and the confidence, with a low-confidence rule first. The README's
choice example, the same message with the item name, returns shipping at 0.93 with confidence
0.89. On jevos-v2, answers with confidence 0.75 or more were right 95% of the time, on 46% of the
questions; below 0.25, 47%. More on
multi-class text classification with a choice question.
Score. The score field is an expected level, an average, so a rule such as "score at least
1" can fire on a spread with no peak. The README's "How angry is the customer?" returns 1.25 with
probabilities 0.32, 0.27, 0.25 and 0.16 and confidence 0.0. Give the engine the most probable
level and the confidence, send confidence 0 to a person, or ask "is it at least angry?" as a
yes/no, as on scores as yes/no thresholds.
Sums. Ask each signal as a yes/no question and let the engine add the points.
- The output must be text. Microsoft's guidance for its model: "Use a generative LLM instead when the application needs to create, summarize, rewrite, or explain content." The same holds for jevos.
- One fixed task, many labelled examples, high volume. A classifier trained for that task can fit better, as on a yes/no LLM vs a fine-tuned BERT classifier.
- The decision is a search, such as a schedule: a job for a solver.
What is the difference between a decision engine and a decision model? The engine executes rules you wrote over structured fields. The model reads text and returns probabilities.
Is DMN an AI decision model? No. In DMN's vocabulary a decision model is logic you write, for an engine to execute. Its tables can take a model's answers as inputs, like any other field.
What about decision intelligence? We could not fetch a primary definition today, so we leave it undefined. Whatever the product is called, ask which part runs rules you wrote and which part reads text.
See also: AI decision making with probabilities and thresholds, an open-source alternative to Microsoft-Decision-1 and combining yes/no answers with AND, OR and NOT.
- OMG, DMN overview and the Decision Model and Notation specification page, fetched 2026-10-12.
- Camunda docs, decision table and hit policy, fetched 2026-10-12.
- Microsoft Learn, Deploy and use Microsoft-Decision-1 in Microsoft Foundry, fetched 2026-10-12. We have not measured jevos against Microsoft-Decision-1.
- Our measurements, in the jev README: the jevos-v2 fraud score and choice confidence figures. The choice and score answers are README examples; the Snake question is from our game races. The decision table is illustrative.
From the notes of jev, which ships the model half of this page and leaves the rules to whatever engine, or plain code, you already trust.
- Ask a local LLM a yes/no question and get P(yes)
- Zero-shot text classification with yes/no questions
- LLM policy decisions: put the rule in the question
- LLM as a judge on a CPU
- What is a decision model in AI?
- AI decision making with probabilities and thresholds
- Why a small LLM says yes when the answer is no
- Small LLMs and arithmetic in yes/no questions
- Our held-out benchmark said 0.855, new questions said 0.757
- Does an LLM know when a fact is missing?
- Snake AI: a local model vs a cloud API
- jevos vs Jev vs Laya for yes/no decisions
- An open-source alternative to Jev for yes/no decisions
- jevos vs the OpenAI API for yes/no classification
- jevos vs Ollama for yes/no decisions
- jevos vs bart-large-mnli for zero-shot classification
- A yes/no LLM vs a fine-tuned BERT classifier
- jevos vs SetFit: zero-shot vs few-shot classification
- jevos vs Llama Guard for content safety checks
- jev serve vs llama.cpp server for classification
- jevos vs LM Studio: a decision server, not a chat app
- Local vs hosted LLM decisions: latency, cost, privacy
- A yes/no LLM vs a business rules engine
- LLM decisions vs keyword rules and regex
- An open-source alternative to Microsoft-Decision-1
- Decision engine vs decision model
- The fastest AI model for yes/no decisions
- What makes a local LLM fast on a CPU
- Why one forward pass beats generating an answer
- Prefill vs decode: where LLM latency comes from
- Why LLM latency grows with the length of the text
- Why a hosted LLM API cannot answer in 50 ms
- Many questions about one text: why the extra ones are cheap
- CPU or GPU for a small LLM
- Latency budgets: where a 200 ms model fits
- Measuring LLM latency: median, p90 and warm-up
- Q4_K_M vs Q8_0: speed and size for a small model
- Throughput vs latency for a decision server
- OpenVINO for LLM inference on a CPU
- INT8 weight quantization explained
- What P(yes) means, and what it does not
- LLM calibration explained with yes/no answers
- Expected calibration error (ECE), explained
- Temperature scaling for LLM probabilities
- Platt scaling for a yes/no model
- Reading a reliability diagram
- How to choose a threshold for P(yes)
- Thresholds when a wrong yes costs more than a wrong no
- Human in the loop AI with a review band
- Precision and recall at a P(yes) threshold
- Base rates: why a 0.9 yes can still be wrong often
- Combining yes/no answers with AND, OR and NOT
- Logits, log-odds and P(yes)
- LLM confidence scores: probabilities vs self-reports
- How to write yes/no questions an LLM answers well
- Negation in yes/no questions for an LLM
- One condition per question: splitting compound questions
- Ask whether the text says it at all
- Scores as yes/no thresholds: is it at least high?
- Sending JSON as the text: designing the state
- Why wording changes an LLM's answer, and how to test it
- Mainly about: questions for messages with several topics
- Yes/no questions about tone and emotion
- Asking about intent: what does the writer want?
- Yes/no questions about long documents
- Using an English-only LLM with other languages
- Multi-class text classification with a choice question
- Content moderation with a local LLM
- A Discord moderation bot with a local LLM
- Spam detection with yes/no questions
- Review moderation with a local LLM
- Email triage with a local LLM
- Support ticket routing with yes/no questions
- Urgency detection in customer messages
- Sentiment analysis with yes/no questions
- Intent detection with a local LLM
- Lead qualification with yes/no questions
- Fraud case triage with a local LLM
- Phishing email screening with a local LLM
- Log and alert triage with a local LLM
- Checking text for personal data with yes/no questions
- Prompt injection screening with a small model
- Document classification with a local LLM
- Product categorization with yes/no questions
- Contract clause detection with a local LLM
- Refund request triage with a local LLM
- Detecting cancellation intent in customer messages
- Reranking search results with yes/no questions
- RAG evaluation with yes/no questions
- RAG faithfulness check with a local LLM
- Hallucination detection with a local LLM
- LLM regression tests in CI with yes/no checks
- Rubric design for an LLM judge
- Pairwise comparison with a yes/no judge
- LLM judge bias and how to control it
- Evaluation metrics for yes/no classifiers
- Building a yes/no test set for your own data
- Accuracy by kind of question: why one number hides failures
- Generating test questions with answers computed by code
- Benchmark contamination and truly held-out tests
- An LLM router with yes/no questions
- A model cascade: small model first, large model on doubt
- Semantic routing vs yes/no questions
- Gating AI agent tool calls with yes/no checks
- AI agent guardrails with yes/no questions
- Stop conditions for AI agents
- Logging LLM decisions for audit
- Reducing LLM cost with local yes/no decisions
- Replacing chat LLM calls with yes/no questions
- Structured output vs a probability
- A Python client for local LLM decisions
- Calling a local LLM decision server from JavaScript
- Local LLM yes/no decisions in n8n
- A Slack bot that uses local LLM decisions
- Home Assistant automations with local LLM decisions
- A LangChain tool for local yes/no decisions
- Batch decisions from files with jev decide
- Running LLM yes/no checks in GitHub Actions
- Securing a local LLM server with an API key
- curl examples for a local LLM decision API
- Self-hosted AI for decisions
- A private LLM for text classification
- On-premise LLM for business decisions
- GDPR and automated decision-making with an LLM
- Offline AI for decisions: no network needed
- Edge AI decisions on a CPU
- Run an LLM locally without a GPU
- Small language models explained
- When a small model is enough, and when it is not
- An LLM on a laptop: what it can do in real time
- What is GGUF, for someone deploying a classifier
- GGUF quantization types explained: Q4_K_M, Q8_0 and others
- GGUF vs safetensors
- llama.cpp vs Ollama for a classification service
- llama-cpp-python vs calling llama.cpp through ctypes
- llama.cpp on Windows without compiling
- Running llama.cpp CPU only
- Using llama.cpp prebuilt binaries instead of building
- Download a GGUF model from Hugging Face