Image-Text-to-Text
Transformers
Safetensors
qwen3_5_moe
decision-model
calibration
typed-decisions
classification
multimodal
Mixture of Experts
conversational
Instructions to use kirp/jpt-35b-a3b with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use kirp/jpt-35b-a3b with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-text-to-text", model="kirp/jpt-35b-a3b") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] pipe(text=messages)# pip install -U transformers accelerate # Load model directly from transformers import AutoProcessor, AutoModelForMultimodalLM processor = AutoProcessor.from_pretrained("kirp/jpt-35b-a3b") model = AutoModelForMultimodalLM.from_pretrained("kirp/jpt-35b-a3b", device_map="auto") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] inputs = processor.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=256) print(processor.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use kirp/jpt-35b-a3b with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "kirp/jpt-35b-a3b" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "kirp/jpt-35b-a3b", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker
docker model run hf.co/kirp/jpt-35b-a3b
- SGLang
How to use kirp/jpt-35b-a3b with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "kirp/jpt-35b-a3b" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "kirp/jpt-35b-a3b", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "kirp/jpt-35b-a3b" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "kirp/jpt-35b-a3b", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }' - Docker Model Runner
How to use kirp/jpt-35b-a3b with Docker Model Runner:
docker model run hf.co/kirp/jpt-35b-a3b
Model card: JevBench v1.4 public 0.892, Decision Index 0.2.1 52.89, vs base, GIFs
Browse files- .gitattributes +4 -0
- README.md +322 -0
- assets/2048.gif +3 -0
- assets/decision_index.png +0 -0
- assets/di_areas.png +0 -0
- assets/jevbench.png +0 -0
- assets/snake.gif +3 -0
- assets/tetris.gif +3 -0
- assets/vs_base.png +3 -0
.gitattributes
CHANGED
|
@@ -34,3 +34,7 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
tokenizer.json filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
tokenizer.json filter=lfs diff=lfs merge=lfs -text
|
| 37 |
+
assets/2048.gif filter=lfs diff=lfs merge=lfs -text
|
| 38 |
+
assets/snake.gif filter=lfs diff=lfs merge=lfs -text
|
| 39 |
+
assets/tetris.gif filter=lfs diff=lfs merge=lfs -text
|
| 40 |
+
assets/vs_base.png filter=lfs diff=lfs merge=lfs -text
|
README.md
ADDED
|
@@ -0,0 +1,322 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
license: cc-by-nc-4.0
|
| 3 |
+
base_model: Qwen/Qwen3.5-35B-A3B
|
| 4 |
+
library_name: transformers
|
| 5 |
+
pipeline_tag: image-text-to-text
|
| 6 |
+
tags: [decision-model, calibration, typed-decisions, classification, multimodal, moe]
|
| 7 |
+
---
|
| 8 |
+
|
| 9 |
+
# JPT-35B-A3B
|
| 10 |
+
|
| 11 |
+
[](#β―β―-license)
|
| 12 |
+
[](#β―-jevbench-v140)
|
| 13 |
+
[](#β―-decision-index-021)
|
| 14 |
+
[](https://github.com/tic-top/llm2jev)
|
| 15 |
+
|
| 16 |
+
[JPT-0.8B](https://huggingface.co/kirp/jpt-0.8b) Β· [JPT-4B](https://huggingface.co/kirp/jpt-4b) Β· [JPT-9B](https://huggingface.co/kirp/jpt-9b) Β· **JPT-35B-A3B** Β· [llm2jev](https://github.com/tic-top/llm2jev)
|
| 17 |
+
|
| 18 |
+
| 2048 | Snake | Tetris |
|
| 19 |
+
|:-:|:-:|:-:|
|
| 20 |
+
|  |  |  |
|
| 21 |
+
|
| 22 |
+
<sub>Each move is one `choice` question answered in one forward pass (30 moves each, seed 0, SGLang, recorded headless).</sub>
|
| 23 |
+
|
| 24 |
+
## What is JPT-35B-A3B
|
| 25 |
+
|
| 26 |
+
**JPT-35B-A3B is the largest JPT: an open decision model that takes a situation and typed questions and returns a
|
| 27 |
+
calibrated probability for every option from one forward pass.** No generated explanation, no reasoning tokens β
|
| 28 |
+
latency is one prefill, and only 3B of its 35B parameters are active per token.
|
| 29 |
+
|
| 30 |
+
It implements the typed-decision interface introduced by [Jev](https://typesafe.ai) from TypeSafe AI [1]: a caller
|
| 31 |
+
sends a state plus questions, and each question is one of three types. JPT is an independent model, not derived from
|
| 32 |
+
Jev and not trained on Jev outputs; it is an open alternative behind the same interface.
|
| 33 |
+
|
| 34 |
+
| Question type | What it answers | Options |
|
| 35 |
+
|---|---|---|
|
| 36 |
+
| `choice` | pick one | 2β255 labels |
|
| 37 |
+
| `score` | a level on an ordered scale | the scale's levels |
|
| 38 |
+
| `noul` | yes / no | `true`, `false` |
|
| 39 |
+
|
| 40 |
+
Built on [Qwen/Qwen3.5-35B-A3B](https://huggingface.co/Qwen/Qwen3.5-35B-A3B), a mixture-of-experts model (3B active
|
| 41 |
+
parameters per token): a LoRA fine-tune merged into full weights, with the same recipe and data as JPT-4B and JPT-9B.
|
| 42 |
+
The vision tower is unchanged, so screenshots, photos and video frames work next to the text state.
|
| 43 |
+
|
| 44 |
+
> Probabilities use one temperature T = 1.087, fit once on a held-out split β never per benchmark.
|
| 45 |
+
> Read them as well-ordered confidence; ECE varies by task (0.03β0.17).
|
| 46 |
+
|
| 47 |
+
## β―β― Benchmarks
|
| 48 |
+
|
| 49 |
+
### β― JevBench v1.4.0
|
| 50 |
+
|
| 51 |
+
**[JevBench](https://github.com/fstandhartinger/jevbench) [2] scores general typed decisions; JPT-35B-A3B gets 206 of
|
| 52 |
+
the 231 public items, above every system in the v1.4 results.** v1.4.0 has 231 public items (frozen since v1.2) and
|
| 53 |
+
308 sealed items that only the maintainer can run, so JPT-35B-A3B has no official v1.4 score yet.
|
| 54 |
+
|
| 55 |
+

|
| 56 |
+
|
| 57 |
+
<details>
|
| 58 |
+
<summary>Table</summary>
|
| 59 |
+
|
| 60 |
+
| System | Params | Public accuracy (231) | Sealed accuracy (308) | v1.4 score |
|
| 61 |
+
|---|---:|---:|---:|---:|
|
| 62 |
+
| **JPT-35B-A3B** | 35B-A3B | **0.892** | pending | pending |
|
| 63 |
+
| JPT-4B (ours) | 4B | 0.879 | pending | pending |
|
| 64 |
+
| Jev 1.13.0 (TypeSafe AI, API) | closed | 0.866 | 0.367 | 63.3 |
|
| 65 |
+
| JPT-9B (ours) | 9B | 0.857 | pending | pending |
|
| 66 |
+
| Winnow-12B Q8 | 12B | 0.857 | 0.331 | 55.6 |
|
| 67 |
+
| JevK5 v0.2.0 | 27B | 0.853 | 0.331 | 62.0 |
|
| 68 |
+
| decider-35b-a3b | 35B-A3B | 0.831 | 0.315 | 41.2 |
|
| 69 |
+
| Hopper | β | 0.823 | 0.341 | 59.4 |
|
| 70 |
+
| Qwen3.5-35B-A3B, same prompt, zero-shot (our run) | 35B-A3B | 0.844 | β | β |
|
| 71 |
+
|
| 72 |
+
By tier: easy 48/48, standard 71/72, hard 87/111. Latency on our runner (tensor parallel 4 on A100 40 GB, no other
|
| 73 |
+
load on that replica): p50 56 ms, p95 103 ms.
|
| 74 |
+
|
| 75 |
+
Source: other rows from `results/v1.4/jevbench-v1.4-results.json` at jevbench commit `2fa63fa` (2026-09-23).
|
| 76 |
+
|
| 77 |
+
</details>
|
| 78 |
+
|
| 79 |
+
### β― Decision Index 0.2.1
|
| 80 |
+
|
| 81 |
+
**[Decision Index](https://huggingface.co/spaces/multimodalart/jev-decision-index) [3] (0.2.1, 2026-09-27) is the
|
| 82 |
+
broadest test: 38 scored benchmarks in five areas, chance-corrected. JPT-35B-A3B scores 52.89, 5.8 points above
|
| 83 |
+
Decider 35B-A3B on the same base model and 6.0 above JPT-9B.** We ran the full frozen suite (150,759 requests, every
|
| 84 |
+
one answered) through llm2jev over SGLang and submitted it as
|
| 85 |
+
[apolinario/decision-index#7](https://github.com/apolinario/decision-index/pull/7); it is not on the live board until
|
| 86 |
+
the maintainer validates it.
|
| 87 |
+
|
| 88 |
+

|
| 89 |
+
|
| 90 |
+
<details>
|
| 91 |
+
<summary>Table</summary>
|
| 92 |
+
|
| 93 |
+
| Model | Params | Decision Index 0.2.1 |
|
| 94 |
+
|---|---:|---:|
|
| 95 |
+
| Jev 1.13.0 (TypeSafe AI, API) | closed | 57.91 |
|
| 96 |
+
| Surogate Rune 26B-A4B v3 | 26B-A4B | 57.44 |
|
| 97 |
+
| Decider chat Β· Gemma-4-31B | 31B | 57.33 |
|
| 98 |
+
| AutoJev-27B | 27B | 56.40 |
|
| 99 |
+
| simple-jev Β· Qwen3.8-27B | 27B | 55.74 |
|
| 100 |
+
| Jebadiah 27B | 27B | 54.67 |
|
| 101 |
+
| Eikos-27B | 27B | 53.13 |
|
| 102 |
+
| **JPT-35B-A3B** | 35B-A3B | **52.89** |
|
| 103 |
+
| reflex 27B | 27B | 52.16 |
|
| 104 |
+
| Decider chat Β· Qwen3.6-27B | 27B | 51.35 |
|
| 105 |
+
| Winnow-12B | 12B | 50.02 |
|
| 106 |
+
| Decider 35B-A3B | 35B-A3B | 47.11 |
|
| 107 |
+
| JPT-9B (ours) | 9B | 46.89 |
|
| 108 |
+
|
| 109 |
+
</details>
|
| 110 |
+
|
| 111 |
+
Source: full run and `scores.json` in [kirp/decision-index-results-jpt-35b-a3b](https://huggingface.co/datasets/kirp/decision-index-results-jpt-35b-a3b)
|
| 112 |
+
(gated: it carries the suite's GPQA/HLE item text). Other rows: live board `data/index-v0.2.1.json` (generated 2026-09-27 16:59 UTC).
|
| 113 |
+
|
| 114 |
+
**By area, against Jev 1.13.0 on the same items and scorer:** JPT-35B-A3B is level with Jev on language and
|
| 115 |
+
retrieval, behind it on knowledge, tools and arts, and ahead of it on 7 of the 38 index benchmarks.
|
| 116 |
+
|
| 117 |
+

|
| 118 |
+
|
| 119 |
+
<details>
|
| 120 |
+
<summary>Per-area and per-benchmark skill vs Jev 1.13.0</summary>
|
| 121 |
+
|
| 122 |
+
| Area | Jev 1.13.0 | JPT-35B-A3B |
|
| 123 |
+
|---|---:|---:|
|
| 124 |
+
| Knowledge | 51.4 | 37.0 |
|
| 125 |
+
| Language | 62.0 | 61.9 |
|
| 126 |
+
| Retrieval | 55.4 | **55.7** |
|
| 127 |
+
| Tools | 75.1 | 69.5 |
|
| 128 |
+
| Arts | 37.7 | 34.8 |
|
| 129 |
+
|
| 130 |
+
| Area | Benchmark | Jev 1.13.0 | JPT-35B-A3B |
|
| 131 |
+
|---|---|---:|---:|
|
| 132 |
+
| Arts | BPoMP | 81.8 | 80.4 |
|
| 133 |
+
| Arts | ForecastBench | 30.6 | 25.9 |
|
| 134 |
+
| Arts | Habermas Machine | 21.5 | 18.2 |
|
| 135 |
+
| Arts | Humicroedit | 23.7 | **24.7** |
|
| 136 |
+
| Arts | New Yorker | 62.6 | 60.5 |
|
| 137 |
+
| Arts | POP909-CL | 15.9 | 11.0 |
|
| 138 |
+
| Arts | cfcolor | 28.8 | 24.6 |
|
| 139 |
+
| Games | ChessBench | 9.8 | 8.9 |
|
| 140 |
+
| Knowledge | BBH | 89.7 | 60.8 |
|
| 141 |
+
| Knowledge | CLadder | 45.3 | 38.0 |
|
| 142 |
+
| Knowledge | CRUXEval | 57.1 | 48.8 |
|
| 143 |
+
| Knowledge | GPQA Diamond | 71.4 | 32.0 |
|
| 144 |
+
| Knowledge | GSM8K | 75.6 | 67.5 |
|
| 145 |
+
| Knowledge | HLE | 4.7 | 0.0 |
|
| 146 |
+
| Knowledge | MMLU-Pro | 80.5 | 56.8 |
|
| 147 |
+
| Knowledge | MuSR | 46.1 | 35.3 |
|
| 148 |
+
| Knowledge | SATA-Bench | 25.4 | 21.6 |
|
| 149 |
+
| Language | ACOS | 27.3 | 18.8 |
|
| 150 |
+
| Language | ANLI | 62.2 | 57.2 |
|
| 151 |
+
| Language | ContractNLI | 59.1 | **73.4** |
|
| 152 |
+
| Language | FinEntity | 80.8 | **90.3** |
|
| 153 |
+
| Language | HellaSwag | 92.7 | 89.0 |
|
| 154 |
+
| Language | NLI4CT | 69.0 | 66.0 |
|
| 155 |
+
| Language | RAGTruth | 51.3 | 49.1 |
|
| 156 |
+
| Language | VAST | 46.9 | **52.8** |
|
| 157 |
+
| Language | WinoGrande | 83.9 | 67.3 |
|
| 158 |
+
| Language | iSarcasmEval | 36.3 | **49.3** |
|
| 159 |
+
| Retrieval | Amazon ESCI | 43.8 | 41.5 |
|
| 160 |
+
| Retrieval | BANKING77 | 79.5 | 77.2 |
|
| 161 |
+
| Retrieval | BRIGHT | 40.6 | 37.2 |
|
| 162 |
+
| Retrieval | CLINC150+OOS | 89.2 | 85.0 |
|
| 163 |
+
| Retrieval | HoVer | 45.7 | 35.1 |
|
| 164 |
+
| Retrieval | PhishNChips phishing decisions | 25.1 | **51.5** |
|
| 165 |
+
| Tools | API-Bank | 88.0 | 85.4 |
|
| 166 |
+
| Tools | BFCL | 94.3 | **94.8** |
|
| 167 |
+
| Tools | Home appliance simulator | 52.3 | 35.2 |
|
| 168 |
+
| Tools | ToolRet | 59.9 | 57.9 |
|
| 169 |
+
| Tools | When2Call | 74.6 | 65.9 |
|
| 170 |
+
|
| 171 |
+
Chance-corrected skill Γ 100 (0 = random, 100 = perfect). Jev's numbers are its official entry on the live board
|
| 172 |
+
(`jev-1.13.0`); ours are from the same kit and suite.
|
| 173 |
+
|
| 174 |
+
</details>
|
| 175 |
+
|
| 176 |
+
### β― Against its base model
|
| 177 |
+
|
| 178 |
+
**Same prompt, same serving path, Qwen3.5-35B-A3B zero-shot vs JPT-35B-A3B: fine-tuning lifts every row but ANLI r1, where the strong base is level, and buys +15 points on typed decisions at the cost of calibration there (ECE 0.031 β 0.171).**
|
| 179 |
+
|
| 180 |
+

|
| 181 |
+
|
| 182 |
+
<details>
|
| 183 |
+
<summary>Table, with calibration</summary>
|
| 184 |
+
|
| 185 |
+
| Benchmark (version, n) | What it tests | JPT-35B-A3B | Qwen3.5-35B-A3B zero-shot | Jev 1.13.0 |
|
| 186 |
+
|---|---|---:|---:|---:|
|
| 187 |
+
| JevBench v1.4.0 public hard tier [2] (111) | hardest general decisions | **0.784** (ECE 0.066, Brier 0.297) | 0.703 (ECE 0.069, Brier 0.390) | β |
|
| 188 |
+
| Typed decisions test (ours, 2,000) | in-distribution typed decisions | **0.803** (ECE 0.171, Brier 0.323) | 0.651 (ECE 0.031, Brier 0.449) | β |
|
| 189 |
+
| ANLI r1 / r2 / r3 [4] (dev) | adversarial NLI | 0.773 / **0.680 / 0.737** | **0.777** / 0.650 / 0.703 | β |
|
| 190 |
+
| Banking77 [5] / MASSIVE 1.1 [6] (en / de / zh) | intent classification | **0.777 / 0.893 / 0.867 / 0.833** | 0.720 / 0.840 / 0.787 / 0.773 | β |
|
| 191 |
+
| AG News [7] / Emotion [8] / SST-5 [9] (test) | out-of-distribution classification | **0.917 / 0.593 / 0.593** | 0.887 / 0.517 / 0.543 | β |
|
| 192 |
+
| ScreenSpot-v2 [11] / Screen2Words [12] / ERQA [13] (images) | GUI grounding, screen summary, embodied reasoning | β | β | β |
|
| 193 |
+
| EnvBench v0.1 (ours) public / held-out [10] (skill 0β100) | sequential decisions in game envs | β | β | β |
|
| 194 |
+
|
| 195 |
+
Banking77, MASSIVE and typed rows are in-distribution (train splits in the mix, test items not). The image evals and
|
| 196 |
+
EnvBench have not been run on this checkpoint yet.
|
| 197 |
+
|
| 198 |
+
Jev 1.13.0 has no official score on these splits (our own test/dev cuts, EnvBench, and the image sets), so its column is "β"; its official scores on the Decision Index versions of ANLI and BANKING77 are in the per-benchmark table above. Running the Jev API on these splits would fill them.
|
| 199 |
+
|
| 200 |
+
</details>
|
| 201 |
+
|
| 202 |
+
## β―β― Quick Start
|
| 203 |
+
|
| 204 |
+
**Two pieces: an engine that holds the weights, and [llm2jev](https://pypi.org/project/llm2jev/) (>= 0.6.1) in
|
| 205 |
+
front of it, reading option probabilities off the engine.** The bf16 weights are 66 GB, so below 80 GB per GPU use
|
| 206 |
+
tensor parallelism.
|
| 207 |
+
|
| 208 |
+
### β‘ SGLang (recommended)
|
| 209 |
+
|
| 210 |
+
```bash
|
| 211 |
+
python -m sglang.launch_server --model-path kirp/jpt-35b-a3b --port 30000 --tp 4 --mem-fraction-static 0.7 \
|
| 212 |
+
--context-length 32768 --mamba-scheduler-strategy extra_buffer & # Qwen3.5's DeltaNet layers need this flag
|
| 213 |
+
llm2jev --model kirp/jpt-35b-a3b --backend sglang --url http://127.0.0.1:30000 --port 8080 --temperature 1.087
|
| 214 |
+
```
|
| 215 |
+
|
| 216 |
+
Tested with SGLang 0.5.18 on 4 Γ A100 40 GB. `--mem-fraction-static 0.7` leaves room for the vision tower's warm-up;
|
| 217 |
+
at the 0.8 we use for smaller sizes, the warm-up runs out of memory at TP 4.
|
| 218 |
+
|
| 219 |
+
### π vLLM
|
| 220 |
+
|
| 221 |
+
```bash
|
| 222 |
+
vllm serve kirp/jpt-35b-a3b --tensor-parallel-size 4 --max-logprobs 256 --return-tokens-as-token-ids \
|
| 223 |
+
--enable-scale-out --port 8000
|
| 224 |
+
llm2jev --model kirp/jpt-35b-a3b --backend vllm --url http://127.0.0.1:8000 --port 8080 --temperature 1.087
|
| 225 |
+
```
|
| 226 |
+
|
| 227 |
+
The three flags after `--tensor-parallel-size` are required: without them every request is a bare HTTP 400. Not yet
|
| 228 |
+
tested with this checkpoint.
|
| 229 |
+
|
| 230 |
+
### π¨ Ask it a question
|
| 231 |
+
|
| 232 |
+
```python
|
| 233 |
+
import requests
|
| 234 |
+
r = requests.post("http://127.0.0.1:8080/v1/systemone", json={
|
| 235 |
+
"state": "Refund policy: full refund within 30 days of purchase; 50% until day 60; none after.\n"
|
| 236 |
+
"Order 1182 was bought on 3 March and returned on 20 April.",
|
| 237 |
+
"questions": {
|
| 238 |
+
"refund": {"type": "choice", "instructions": "What refund does order 1182 get?",
|
| 239 |
+
"criteria": {"full": "Full refund", "half": "50% refund", "none": "No refund"}},
|
| 240 |
+
"late": {"type": "noul", "instructions": "Was the return made after day 30?",
|
| 241 |
+
"criteria": {"true": "Yes", "false": "No"}}}})
|
| 242 |
+
print(r.json()["answers"]) # each answer has the per-option probabilities
|
| 243 |
+
```
|
| 244 |
+
|
| 245 |
+
### πΌοΈ With images
|
| 246 |
+
|
| 247 |
+
```python
|
| 248 |
+
state = [{"role": "user", "content": [
|
| 249 |
+
{"type": "image", "image": "https://example.com/screen.png"},
|
| 250 |
+
{"type": "text", "text": "Task: open the settings page. Numbered boxes mark clickable elements."}]}]
|
| 251 |
+
questions = {"click": {"type": "choice", "instructions": "Which box should be clicked?",
|
| 252 |
+
"criteria": {"1": None, "2": None, "3": None, "4": None, "5": None}}}
|
| 253 |
+
```
|
| 254 |
+
|
| 255 |
+
## β―β― Training
|
| 256 |
+
|
| 257 |
+
**LoRA with a Brier loss on 49,221 typed questions, one epoch, trained with Megatron-SWIFT and merged into full
|
| 258 |
+
weights.**
|
| 259 |
+
|
| 260 |
+
| Part | What it is |
|
| 261 |
+
|---|---|
|
| 262 |
+
| Method | LoRA r=16, alpha 32 on every attention, DeltaNet, shared-expert and routed-expert projection of the language model; router and vision tower untouched |
|
| 263 |
+
| Loss | multi-class Brier over the option labels, on llm2jev's chat prompt with thinking disabled |
|
| 264 |
+
| Data | 49,221 questions in 32,835 records; one epoch over two option-shuffled copies (94,172 rows) |
|
| 265 |
+
| Schedule | lr 5e-5, cosine decay, 5% warm-up, global batch 64, 1,471 steps; final validation Brier loss 0.209 |
|
| 266 |
+
| Hardware | Megatron-SWIFT on 8 Γ A100 40 GB: expert parallelism 8, sequence parallelism, 2 h 17 min |
|
| 267 |
+
| Held out | no item from JevBench, EnvBench held-out seeds, the Decision Index frozen suite or our typed test split; 8-gram overlap check vs JevBench |
|
| 268 |
+
|
| 269 |
+
<details>
|
| 270 |
+
<summary>Data sources</summary>
|
| 271 |
+
|
| 272 |
+
The same mix as JPT-4B and JPT-9B (`mix_train_env_v11`):
|
| 273 |
+
|
| 274 |
+
- public classification, NLI, QA, preference and safety datasets;
|
| 275 |
+
- long legal and contract documents (ContractNLI, MAUD, LegalBench, ConditionalQA, ShARC);
|
| 276 |
+
- table and numeric reasoning (TAT-QA, MultiHiertt);
|
| 277 |
+
- multi-hop QA (MuSiQue, BEIR);
|
| 278 |
+
- agent and tool traces (Mind2Web, AgentTraj, ToolACE);
|
| 279 |
+
- community typed-decision sets;
|
| 280 |
+
- oracle-labelled rollouts from 20 small game and puzzle environments;
|
| 281 |
+
- programmatically generated rule-arithmetic items (dates, time zones, day counts, caps; labels computed by code);
|
| 282 |
+
- 1,289 long policy / contract / regulation documents (4,471 questions) written by an LLM (GPT-6 Luna) with no
|
| 283 |
+
JevBench item shown to it.
|
| 284 |
+
|
| 285 |
+
</details>
|
| 286 |
+
|
| 287 |
+
## β―β― Limitations
|
| 288 |
+
|
| 289 |
+
- **Arithmetic and dates** are its weakest area: it answers from the evidence given and has no reasoning phase by design.
|
| 290 |
+
- **Overconfident in-distribution.** At the global temperature, typed-decisions test ECE is 0.171: confidence on
|
| 291 |
+
in-distribution typed questions runs above accuracy.
|
| 292 |
+
- **Up to 255 options** are accepted; training covered up to 77 (Banking77), so beyond that quality is not established.
|
| 293 |
+
- **English first.** Other languages come only from a few multilingual classification sets.
|
| 294 |
+
- **Images are untested** on this checkpoint; they go zero-shot through the base vision tower.
|
| 295 |
+
- **Heavy to host.** 66 GB of bf16 weights need several GPUs, even though only 3B parameters are active per token.
|
| 296 |
+
|
| 297 |
+
## β―β― References
|
| 298 |
+
|
| 299 |
+
1. TypeSafe AI. *Jev.* https://typesafe.ai
|
| 300 |
+
2. F. Standhartinger. *JevBench*, v1.4.0. https://github.com/fstandhartinger/jevbench
|
| 301 |
+
3. *Decision Index*, edition 0.2.1. https://huggingface.co/spaces/multimodalart/jev-decision-index
|
| 302 |
+
4. Nie et al. *Adversarial NLI.* ACL 2020.
|
| 303 |
+
5. Casanueva et al. *Efficient Intent Detection with Dual Sentence Encoders* (Banking77). NLP4ConvAI 2020.
|
| 304 |
+
6. FitzGerald et al. *MASSIVE.* ACL 2023.
|
| 305 |
+
7. Zhang et al. *Character-level Convolutional Networks for Text Classification* (AG News). NeurIPS 2015.
|
| 306 |
+
8. Saravia et al. *CARER: Contextualized Affect Representations for Emotion Recognition.* EMNLP 2018.
|
| 307 |
+
9. Socher et al. *Recursive Deep Models for Semantic Compositionality* (SST). EMNLP 2013.
|
| 308 |
+
10. *EnvBench*, v0.1 (ours, frozen 2026-09-23; not yet public): programmatically solved game, planning and rule decisions with exact gold answers.
|
| 309 |
+
11. Wu et al. *OS-Atlas* (ScreenSpot-v2). 2024.
|
| 310 |
+
12. Wang et al. *Screen2Words.* UIST 2021.
|
| 311 |
+
13. Gemini Robotics Team. *Gemini Robotics* (ERQA). 2025.
|
| 312 |
+
|
| 313 |
+
## β―β― License
|
| 314 |
+
|
| 315 |
+
**CC BY-NC 4.0.** The weights derive from Qwen3.5-35B-A3B (Apache-2.0), but some training datasets allow only
|
| 316 |
+
non-commercial or research use, so the model is released for non-commercial use.
|
| 317 |
+
|
| 318 |
+
---
|
| 319 |
+
|
| 320 |
+
<small>JPT-35B-A3B is an independent open model that implements a typed-decision interface (noul, choice and score
|
| 321 |
+
questions answered with probabilities). It is not affiliated with, endorsed by or derived from TypeSafe AI or its Jev
|
| 322 |
+
model, and it was not trained on Jev outputs.</small>
|
assets/2048.gif
ADDED
|
Git LFS Details
|
assets/decision_index.png
ADDED
|
assets/di_areas.png
ADDED
|
assets/jevbench.png
ADDED
|
assets/snake.gif
ADDED
|
Git LFS Details
|
assets/tetris.gif
ADDED
|
Git LFS Details
|
assets/vs_base.png
ADDED
|
Git LFS Details
|