DOCUMENTATION
OpenDXP, the open standard
OpenDXP (Open Decision Exchange Protocol) is an open standard that lets any engine run any System One model: portable weights, the input described as data, calibration, conformance tests, and one way to ask over HTTP or MCP.
View as Markdown · for AI agents: llms.txt · skill.md
Every System One model answers the same request: a state, and typed questions with calibrated probabilities, in one pass. What differs is inside: each model ships its own inference code, so running twenty models means installing twenty runtimes, and comparing them means writing twenty harnesses.
OpenDXP, the Open Decision Exchange Protocol, makes a model a package that
any OpenDXP engine runs without code written for it, and gives every
application and AI agent one way to ask it. It is to decision models what MCP
is to agent tools. The specification, its schemas, the converters, the
conformance tools and the reference runtime are open source (Apache-2.0):
github.com/systemonemodels/opendxp,
and pip install opendxp.
Packaging your own model? Read Make your model OpenDXP compatible, a ten-minute guide from your checkpoint to the badge.
Four parts
- Requests and answers: one format for a state and typed questions (choice, score, noul), and for the calibrated answers.
- Packages: the model as data that any engine runs.
- Conformance: proof that an engine answers as the model's own code does.
- Bindings: how requests travel. Over HTTP (
POST /v1/systemone,GET /v1/models) between an application and any server, and over the Model Context Protocol between an AI agent and a tool.
Two profiles
encoder-markers. A bidirectional encoder scores one marker token per
option: Laya, Julia 1, Von, open-jev, GLiNER2.5-Decide. The package ships an
ONNX graph with fixed inputs and one output (option_logits), plus
template.json: how the question, the options and the state are laid out and
truncated.
causal-letters. A language model reads each option letter's probability
at an answer slot: Decider, AnyJev, Kev, Nimble, JevK5, lev. The package ships a
GGUF build and prompt.json: the prompt pieces, the option labels and the
slot. Since 0.2 a prompt can lay out each question type on its own, inside the
model's chat template, and ask a question once per rotation of its options,
combining them so no option wins by its position. That is how
AnyJev (Nokia) turns an
instruction-tuned model into a decision model without training it.
Both add calibration.json (a temperature per question type, optionally per
number of options) and conformance.jsonl: requests with the probabilities
the model's own code gives for them.
The package
An OpenDXP package is a folder with an odxp.json manifest that names every
file it uses, with its SHA-256. Nothing in it is executed: templates are filled
by placeholder substitution, and the weights run through ONNX Runtime or
llama.cpp. In a model version it sits in an odxp/ folder, where the engine
finds it by its manifest:
odxp/odxp.json the manifest: standard, profile, files, limits
odxp/model.onnx encoder-markers (its weights can stay in model.safetensors)
odxp/model.gguf causal-letters
odxp/tokenizer.json
odxp/template.json encoder-markers; causal-letters has prompt.json
odxp/calibration.json
odxp/conformance.jsonl
Run it anywhere
pip install "opendxp[onnx]" # encoder-markers; "opendxp[gguf]" for causal-letters
opendxp run odxp/ --request request.json
opendxp serve odxp/ # POST /v1/systemone on 127.0.0.1:8790
opendxp mcp odxp/ # a tool for AI agents (Claude, Cursor, ...)
GGUF runs through llama.cpp on CPUs and on NVIDIA, AMD, Apple, Intel and Vulkan GPUs; ONNX runs through ONNX Runtime, whose execution providers also reach NPUs (OpenVINO, Core ML, QNN). The engine picks the device, not the model's author.
Compatible
A model is OpenDXP compatible when the reference runtime reproduces its conformance file on a CPU: the same decision on every question, and probabilities within 0.01 of the model's own code. OpenDXP portable adds a named accelerator backend. The System One Engine checks a package when it serves it, and on its own when a package of up to 2.5 GB is published; the model's page shows the badge, and so does its owner's profile. The badge is earned only this way: by publishing a model whose package passes.
Status
OpenDXP 0.2 adds the HTTP and MCP bindings and the typed layouts, chat templates and rotations above. Its reference implementation converts Laya, Julia 1, Decider and AnyJev and checks them against each model's own code: three Laya checkpoints, Julia 1 (from our export and from its authors' own ONNX graph) and Decider pass with every decision the same, and AnyJev on Qwen3-1.7B passes 52 of 52 cases with all 90 decisions the same as Nokia's own code. Julia 1 also passes on Apple's Core ML. The numbers and how they were measured: VALIDATION.md.