Every System One model answers the same kind of request: a state, a few typed questions, and a calibrated probability for every option. But every one of them ships its own inference code, so running ten models means installing ten runtimes. OpenDXP fixes that: a model becomes a package that any engine runs without code written for it, with a conformance file that proves the engine answers as the model's own code does.
Version 0.2 is out today, on GitHub
and on PyPI (pip install opendxp).
What 0.2 adds
One way to ask, everywhere. OpenDXP now has a wire protocol. Over HTTP,
POST /v1/systemone takes a request and GET /v1/models lists what a server
holds, each model with its conformance summary; opendxp serve runs such a
server on any machine. Over the Model Context Protocol, opendxp mcp gives
every package to AI agents as a tool, so Claude or any MCP client can ask a
decision model a typed question and get calibrated probabilities back. It is to
decision models what MCP is to agent tools.
Models asked in rotation. A model that reads option letters prefers some positions: ask it which of four teams should take a ticket, and the first option gets a head start. A 0.2 package can ask a question once per cyclic shift of its options and combine the answers by their log-mean, so no option wins by where it was listed. Prompts can now also be laid out per question type, inside the model's own chat template, which is how instruction-tuned models are asked without being trained for decisions.
AnyJev, packaged
AnyJev, from Nokia's applied research team, turns an instruction-tuned language model into a decision model without fine-tuning it. Its L0 level needs no labels at all: it reads the answer from the model's next-token probabilities, once per rotation of the options. That is exactly what 0.2 can now describe as data.
We packaged AnyJev L0 on Qwen3-1.7B and checked it against AnyJev 0.2.0's own code, running the model in float32 on the CPU, on the OpenDXP request set (52 requests, 91 questions, 11 languages):
| Package | Cases | Same decision | Largest difference |
|---|---|---|---|
| F16 weights, f32 cache | 52 / 52 | 90 / 90 | 0.0054 |
| F16 weights, llama.cpp defaults | 51 / 52 | 90 / 90 | 0.0116 |
| Qwen's Q8_0 file | 35 / 52 | 88 / 90 | 0.25 |
The first row is OpenDXP compatible: every decision is the same, and every probability is within 0.01 of Nokia's own code. The prompts match token for token (286 rows, no difference), and on a test model our rotations and AnyJev's agree to twelve decimal places. The last row is why OpenDXP checks packages rather than trusting them: an 8-bit copy of the same weights changes two decisions out of 90. It is still a useful, smaller build, and the check says what it is. The full method is in VALIDATION.md.
What it means if you make a model
- Package once, run anywhere. A laptop, a server, a GPU, or an agent's toolbox, with no code of yours in the loop.
- The badge comes to you. Publish a package in an
odxp/folder with your model on System One Models. The engine checks published packages by itself (up to 2.5 GB today; larger ones on request), and when yours passes, OpenDXP compatible appears on the model's page and on your profile. - Ten minutes to learn it. The guide, Make your model OpenDXP compatible, takes you from your own checkpoint to a package that passes.
- Or hand it to your agent. "Get the skill" on the guide gives Claude Code, Cursor or any coding agent everything it needs to package, check and publish your model.
Try it
pip install "opendxp[gguf]"
opendxp serve path/to/package # POST /v1/systemone on 127.0.0.1:8790
opendxp mcp path/to/package # the same model as a tool for AI agents
AnyJev is by Jiamu Zhang, Tianze Yang, Yucheng Shi and Liang Wu (Nokia), Apache-2.0; Qwen3-1.7B is by the Qwen team, Apache-2.0. This packaging is ours, not an official Nokia or Qwen release.