Open source System One–style decision playground: state + typed questions → structured answers.
Three backends:
| Mode | What it is |
|---|---|
| parallel | LLM micro-scorers (one tiny {p} call per option, then softmax) |
| oneshot | Single structured JSON call to any OpenAI-compatible model |
| decider | Mapika/decider — real System One weights (calibration-aware RL on v10) |
cd OpenJev
npm install
cp .env.example .env # set OPENAI_API_KEY
npm run devOpen http://localhost:3001 — mode parallel or oneshot.
decider is an open System One model family (Qwen3.5 fine-tunes).
decider-2b v10 includes calibration-aware RL. It speaks TypeSafe’s wire format: POST /v1/systemone.
pip install "git+https://github.com/Mapika/decider#egg=decider[serve]"
# or: git clone https://github.com/Mapika/decider && cd decider && pip install -e ".[serve]"
scripts/serve.sh Mapika/decider-2b 8000Smoke test:
curl -s localhost:8000/v1/systemone -H 'content-type: application/json' -d '{
"state": "My card was charged twice.",
"questions": {
"team": {
"type": "choice",
"instructions": "Which team?",
"criteria": { "billing": "charges, refunds", "technical": "bugs, outages" }
},
"refund": { "type": "noul", "instructions": "Is a refund needed?" }
}
}'In the UI: set mode = decider, decider url = http://localhost:8000
Or via API:
curl -X POST http://localhost:3001/api/evaluate \
-H "Content-Type: application/json" \
-d '{
"mode": "decider",
"decider_url": "http://localhost:8000",
"state": "Charged twice again!!",
"questions": {
"department": {
"type": "choice",
"instructions": "Which team?",
"criteria": {
"billing": "Charges, refunds",
"technical": "Bugs",
"other": "Else"
}
},
"angry": { "type": "noul", "instructions": "Strong frustration?" }
}
}'Or in .env:
DECIDER_BASE_URL=http://localhost:8000from decider.infer import Decider
d = Decider("Mapika/decider-2b") # ~4 GB VRAM
print(d.system_one(
"I was charged twice for order A-104.",
{
"department": {
"type": "choice",
"instructions": "Which team?",
"criteria": {
"billing": "Charges, refunds",
"technical": "Bugs",
},
},
"refund": {"type": "noul", "instructions": "Is a refund needed?"},
},
))UI / curl → POST /api/evaluate { mode: "decider", ... }
→ OpenJev server
→ POST {decider_url}/v1/systemone (TypeSafe shape)
→ Mapika/decider GPU server
→ typed answers + probabilities
Same question types as TypeSafe Jev: choice, score, noul.
# LLM backends
OPENAI_API_KEY=
# OPENAI_BASE_URL=
# OPENJEV_MODEL=gpt-4o-mini
# decider backend
DECIDER_BASE_URL=http://localhost:8000
# DECIDER_API_KEY=localOpenJev/
├── server/index.ts # Express + Vite, POST /api/evaluate
├── server/loadEnv.ts
├── src/lib/evaluate.ts # parallel | oneshot | decider
├── src/lib/types.ts
├── src/App.tsx
└── package.json
