Your decisioning problem isn't accuracy.
Run open-source decision models locally-pinned versions, validation, immutable logs-so every approval or denial stays reproducible and auditable.
A hosted decisioning API that returns “denied” with no reason attached, no model version stamped on it, and no way to reproduce the same result six months later is a liability wearing the costume of infrastructure. Ollaya’s premise is narrow and it is correct: run open-source decision models the way Ollama runs open LLMs - pulled to local hardware, versioned, inspectable, and callable as a normal part of a pipeline - so the logic that approves a loan, routes a support ticket, or flags a transaction lives somewhere you can open up and read, instead of behind an endpoint you rent and cannot audit. The point is not a smarter model. The point is a decision you can see.
Most teams reaching for AI-driven decisioning do not actually have an accuracy problem. They have a visibility problem. The model gets the call right most of the time, and then one day it gets it wrong on a case that matters, and nobody can answer three basic questions: what input did it see, which version of the logic ran, and can we make it happen again on demand. A local, open decision-model runtime fixes that operational gap before it touches the accuracy conversation, because it turns each decision into an artifact - input, model version, output, rationale - instead of a transient event that happened inside someone else’s server and left no trace you own.
So the straight answer is this: adopt an Ollaya-style setup when your decisions need to be defensible, reproducible, and versioned - the moment a human, a customer, or a regulator can ask “why did the system do that,” you need the answer to exist. If all you need is a throwaway classification that nobody will ever question and no auditor will ever pull, you do not need this, and adding it would be complexity you have to maintain for no return. The value shows up precisely where decisions carry consequences and have to survive scrutiny after the fact.
Start with what a decision model actually is, because the word “model” is doing too much work in most conversations. A generative model produces open-ended text; its output space is effectively infinite and its job is fluency. A decision model does the opposite. It maps a structured input to a bounded set of outcomes - approve or deny, route to queue A, B, or C, assign a risk score between zero and one - and its job is to be consistent, constrained, and correct within that space. Treating those two things as the same system is the first mistake, because everything about how you validate, log, and control them is different. Ollaya, taken on its own terms, is the runtime for the second kind: a registry you pull a defined decision model from, a local process that runs it against typed input, and a structured result you can act on programmatically.
Mechanically, what an Ollaya-style flow gives you is a pipeline with named stages rather than a single opaque call. Input arrives against a defined schema and gets validated before anything runs. The decision model - which in a Jev-style design is not one monolithic black box but a combination of a learned scoring component and explicit rules, thresholds, and guardrails wrapped around it - produces a candidate decision plus a rationale. That output is validated again against the allowed outcome set, so a malformed or out-of-range result fails closed instead of leaking downstream. Then the input, the model version, the decision, and the rationale are written to an immutable log. The probabilistic part is deliberately fenced in by deterministic control on both sides, which is what makes the whole thing behave like a system you can operate rather than a prediction you have to hope about.
The real advantage was never the model weights, and this is the part teams keep missing. It is that the decision runs on hardware you control, against a version you pinned, with inputs and outputs you retained - which means the same case fed to the same version produces the same decision, and drift becomes visible the moment you change a version rather than something a vendor silently ships underneath you. Data does not leave your boundary, there is no per-call meter running against your budget, and “why did this change” has a concrete answer: a version diff and two logged runs you can put side by side. That is the difference between a decision you can reason about and one you can only observe.
The most expensive misconception is that black-box hosted decisioning is fine because it works. It works right up until the moment someone with authority asks why a specific decision was made, and at that point “the vendor’s API said so” is not an answer that survives an audit, a customer dispute, or a regulator’s request. Black-box systems fail quietly. You do not find out that the provider retrained the model, shifted a threshold, or deprecated a version until your outcomes move and you have no logged history to prove what the old behavior even was. By then the reproducibility you needed is gone, and you are reconstructing a decision from memory and screenshots.
The second mistake is assuming open-source equals transparent by default. It does not. Open weights tell you the model is inspectable in principle; they say nothing about whether a given decision in production was explainable or reproducible. If you pulled an open decision model but never logged the inputs, never pinned the version, and never validated the outputs against a defined outcome set, you have an open black box - which is no better in practice than a closed one when the hard question arrives. Transparency is a property of how you operate the system, not a license attached to the model. The runtime only helps if you actually retain the artifacts it makes available.
The third mistake is collapsing a decision model into “an LLM prompt that returns a label.” Wiring a general chat model to emit “approve” or “deny” feels fast, and it is fragile in every way that matters: the output is non-deterministic across runs, it drifts with every prompt tweak, it carries hallucination risk into a place that can least afford it, and it costs you latency and money on every call for a job a small, constrained model or an explicit rule would do more reliably. The inverse error is just as common - reaching for agents and orchestration where a deterministic threshold plus a compact scoring model would settle the decision cleanly. Both come from the same root: treating the decision as a place to be clever instead of a place to be correct, constrained, and auditable. That is exactly the failure an Ollaya-style discipline is meant to correct.
Build the contract before you build the model. Write down the input schema and the closed set of allowed outcomes first, in code, and treat both as the interface the rest of the system depends on. A loan decision takes a defined set of fields with defined types and ranges; it returns one of a fixed set of results plus a bounded score. Fix that shape before a single weight is pulled. Once the contract exists, everything else is enforcement around it, and the model becomes a component you can swap rather than the thing the whole system is organized around.
Pull a specific version of the decision model and pin it. Not “latest” - a version. The reference to that version lives in your configuration next to the explicit rules, thresholds, and guardrails that wrap the learned component, and all of it sits in version control together, so a change to the scoring model and a change to a cutoff are both commits you can see. This is the Jev-style split doing its job: the learned part handles the graded signal, the deterministic part handles the hard constraints and the boundaries you are not willing to let a probability cross. Keep them separate on purpose. When someone asks why the cutoff moved, you want a diff, not a shrug.
Validate on the way in and on the way out. Input that does not match the schema never reaches the model; output that falls outside the allowed set fails closed and gets routed to a human instead of flowing downstream as a malformed decision. Every run writes one immutable record - input, model version, decision, score, rationale, timestamp - to a log you own and cannot quietly edit. That record is the product. The decision is transient; the artifact is what survives the audit, the dispute, and the six-month-later question. If the log is optional or lossy, you have rebuilt the black box with extra steps.
Roll changes out in shadow before they go live. Run the new version alongside the current one on real traffic, log both, and compare the decisions they produce before either one touches a customer. Drift then becomes something you measure on purpose - a diff between two logged versions on the same inputs - rather than something you discover after outcomes have already moved. This is the piece hosted decisioning cannot give you, because the vendor controls the version and the rollout, and you learn about the change from your own metrics after the fact, if you catch it at all.
Take a mid-size lender routing personal loan applications. The input schema is fixed: income, existing obligations, credit-history fields, requested amount, term. The outcome set is bounded: approve, deny, or refer to manual review, plus a risk score between zero and one. The decision model is pulled at a pinned version and runs locally against each application. A learned component produces the score; explicit rules sit around it - a hard denial below a regulatory threshold, an automatic referral above a certain requested amount regardless of score, and a guardrail that sends any application with a missing required field to manual review instead of guessing. The probabilistic part is fenced by deterministic control on both sides, exactly as designed.
Six months later an applicant disputes a denial, and the complaint reaches someone with the authority to demand an answer. Because every decision was written as an artifact, the case is not reconstructed from memory or screenshots. The team pulls the exact record: the input the model saw, the version that ran, the score it produced, and the rule that fired. They re-run that pinned version against that stored input and get the identical result, on demand, in front of whoever asked. The answer to “why was this denied” is a specific rule and a specific score from a specific version, reproduced live - not an appeal to what a vendor’s endpoint returned on a day nobody logged.
Now the lender wants to tighten approvals. Instead of editing a live threshold and hoping, they pin a new version, run it in shadow against a month of real applications, and diff the two logs. The comparison shows exactly which applications would flip and why: how many additional denials, concentrated in which score band, driven by which changed rule. Leadership approves the change against evidence, the new version is promoted, and both versions stay in the log so the transition itself is auditable. When a regulator later asks what changed and when, the answer already exists as two versions and a dated diff. None of this required a better model. It required treating the decision as something you operate rather than something you call.
Transparency is not a property you get from open weights. It is a property you get from how you run the system. A local open decision-model runtime gives you the conditions for a defensible decision - local execution, a pinned version, retained inputs and outputs - but conditions are not the outcome. Pull an open model and skip the schema, skip the version pin, skip the immutable log, and you have an open black box that will fail you at exactly the moment a closed one would: when someone asks why. The runtime hands you the raw material for an answer; whether the answer exists is on you.
So the runtime is necessary and not sufficient. The work that actually makes a decision auditable is the discipline around the model - the contract, the validation on both sides, the fail-closed defaults, the log you cannot silently rewrite, the shadow rollout that turns drift into a measurement instead of a surprise. That discipline costs something to build and maintain, which is why the honest call is to apply it where decisions carry consequences and skip it where they do not. A throwaway classification nobody will ever question does not need any of this. A decision that has to survive an audit, a dispute, or a regulator needs all of it, and adding it later, after the case you cannot explain has already happened, is not an option the timeline gives you.
The cost of a black box is not felt on the day you deploy it. It is felt on the day someone with authority asks a question you cannot answer, and by then the reproducibility you needed no longer exists to build. Local, versioned, logged decisioning is not about impressing anyone with the model. It is about making sure that when the question arrives - and on decisions that matter, it always arrives - the answer is already sitting in a log you own, reproducible on demand. Build for that day. It is the only day that decides whether your decisioning was infrastructure or a liability in a costume.
Keep Reading
LLM engineeringClaude optimizes what it measures
Claude only makes faster what you let it measure. Build the measure-change-verify loop, carry guardrail metrics, and verify every change against a baseline.
model distillationDistillation makes fast followers, never frontier leaders
Distilling frontier models is a real, cheap fast-follow strategy for small labs - but only for verifiable tasks and legally usable teachers.
AI pipelinesGoogle quietly broke the search-scraping stack
Google's 2025 anti-scraping update killed cheap SERP scraping. How to rebuild AI search pipelines on sanctioned APIs, validation, and budget controls.
Latest on the Wire
Full wire →- 17 Years Frozen in Street View: A Tokyo Car Outlived the House It Sat BesideHacker News
- A distributed-systems veteran wrestles with McKenney's parallel programming bibleHacker News
- AI agents resorted to hacking public data sites to finish routine tasksHacker News
- California's billionaire wealth tax will fail because billionaires can move — the land can'tHacker News
New signal daily · RSS
Stay in the loop
New writing delivered when it's ready. No schedule, no spam.