Text Generation
Transformers
Safetensors
GGUF
English
qwen3_5
image-text-to-text
decision-model
typed-decisions
calibration
calibrated-probabilities
classification
tool-selection
agent-routing
decision-index
jevbench
jev-compatible
systemone
wald
wald-q4b
qwen3.5
4b
vllm
reasoning
llama.cpp
conversational
Eval Results (legacy)
Instructions to use org2ai/Wald-4B with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use org2ai/Wald-4B with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="org2ai/Wald-4B") 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("org2ai/Wald-4B") model = AutoModelForMultimodalLM.from_pretrained("org2ai/Wald-4B", 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 org2ai/Wald-4B with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "org2ai/Wald-4B" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "org2ai/Wald-4B", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/org2ai/Wald-4B
- SGLang
How to use org2ai/Wald-4B 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 "org2ai/Wald-4B" \ --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": "org2ai/Wald-4B", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'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 "org2ai/Wald-4B" \ --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": "org2ai/Wald-4B", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use org2ai/Wald-4B with Docker Model Runner:
docker model run hf.co/org2ai/Wald-4B
Wald-Q4B v1.2 (02600-f19): robustness release; v1.1 stays on main and at tag v1.1
Browse files- CITATION.cff +3 -3
- CONTAMINATION.md +8 -0
- MANIFEST.json +25 -21
- NOTICE +2 -0
- PROVENANCE.md +12 -0
- README.md +160 -35
- RUNBOOK.md +38 -3
- docs/readmes/README.zh.md +116 -33
- evaluation/v1.2/summary.json +268 -0
- llms.txt +7 -5
- model-00001-of-00002.safetensors +1 -1
- model-00002-of-00002.safetensors +1 -1
- model-files/serving.json +1 -1
- model-info.json +102 -33
- serving.json +1 -1
CITATION.cff
CHANGED
|
@@ -1,7 +1,7 @@
|
|
| 1 |
cff-version: 1.2.0
|
| 2 |
message: "If you use Wald-Q4B, please cite it as below."
|
| 3 |
type: software
|
| 4 |
-
title: "Wald-Q4B v1.
|
| 5 |
abstract: >-
|
| 6 |
Wald-Q4B is an open-weight 4B decision model built on Qwen3.5-4B-Base. Given a
|
| 7 |
state and typed questions (choice, yes/no, score), it returns a calibrated
|
|
@@ -12,8 +12,8 @@ authors:
|
|
| 12 |
- name: "Wald-4B authors"
|
| 13 |
alias: Harry19081
|
| 14 |
website: "https://huggingface.co/Harry19081"
|
| 15 |
-
version: "v1.
|
| 16 |
-
date-released: "2026-
|
| 17 |
license: Apache-2.0
|
| 18 |
url: "https://huggingface.co/Harry19081/Wald-4B"
|
| 19 |
repository-code: "https://github.com/Harry19081/wald-4b"
|
|
|
|
| 1 |
cff-version: 1.2.0
|
| 2 |
message: "If you use Wald-Q4B, please cite it as below."
|
| 3 |
type: software
|
| 4 |
+
title: "Wald-Q4B v1.2: an open-weight 4B decision model with calibrated option probabilities"
|
| 5 |
abstract: >-
|
| 6 |
Wald-Q4B is an open-weight 4B decision model built on Qwen3.5-4B-Base. Given a
|
| 7 |
state and typed questions (choice, yes/no, score), it returns a calibrated
|
|
|
|
| 12 |
- name: "Wald-4B authors"
|
| 13 |
alias: Harry19081
|
| 14 |
website: "https://huggingface.co/Harry19081"
|
| 15 |
+
version: "v1.2"
|
| 16 |
+
date-released: "2026-10-01"
|
| 17 |
license: Apache-2.0
|
| 18 |
url: "https://huggingface.co/Harry19081/Wald-4B"
|
| 19 |
repository-code: "https://github.com/Harry19081/wald-4b"
|
CONTAMINATION.md
CHANGED
|
@@ -4,3 +4,11 @@
|
|
| 4 |
- The complete **54.59** run used a frozen **256-row XL-dev calibration** fit after excluding known DI matches. No DI labels or DI index score were used to fit it. HLE calibration screening found no additional match.
|
| 5 |
- The earlier **54.02** sample used the previous calibration table with known overlaps and remains historical. Old v1.0 disclosures apply to its own weights and are preserved under `v1.0-legacy`.
|
| 6 |
- Full-run response artifacts are unchanged. No request payloads or generated reasoning text are included. Official maintainer serial latency validation and leaderboard admission remain pending.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4 |
- The complete **54.59** run used a frozen **256-row XL-dev calibration** fit after excluding known DI matches. No DI labels or DI index score were used to fit it. HLE calibration screening found no additional match.
|
| 5 |
- The earlier **54.02** sample used the previous calibration table with known overlaps and remains historical. Old v1.0 disclosures apply to its own weights and are preserved under `v1.0-legacy`.
|
| 6 |
- Full-run response artifacts are unchanged. No request payloads or generated reasoning text are included. Official maintainer serial latency validation and leaderboard admission remain pending.
|
| 7 |
+
|
| 8 |
+
# v1.2 (checkpoint `02600-f19`)
|
| 9 |
+
|
| 10 |
+
- v1.2 was trained only on perturbed and unperturbed copies of v1.1's own training questions. A Decision Index blocklist scan of its training and hold-out rows found 0 strict matches (329 weak alerts, all states shorter than 8 words).
|
| 11 |
+
- **JevAdvBench is evaluation-only.** An 8-gram overlap check of every inserted text against every JevAdvBench string (the clean questions and all 9,744 attacked variants) found 0 hits. The perturbation kinds were chosen after v1.1's per-attack JevAdvBench results were known, so the benchmark's attack families informed the training design; its texts did not. Robustness to other attack types is not measured.
|
| 12 |
+
- The JevBench public items were again a development scoreboard: v1.2 had a pass line of at least 201/231 set before training. They were never training data.
|
| 13 |
+
- The **54.59** complete-suite Decision Index result and the files under `evaluation/` other than `evaluation/v1.2/` belong to v1.1. v1.2 has only a one-pass read of a 6,948-request sample.
|
| 14 |
+
- v1.2 uses v1.1's temperature table unchanged. No benchmark labels were used to fit it.
|
MANIFEST.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
| 1 |
{
|
| 2 |
"CONTAMINATION.md": {
|
| 3 |
-
"bytes":
|
| 4 |
-
"sha256": "
|
| 5 |
},
|
| 6 |
"Dockerfile": {
|
| 7 |
"bytes": 1201,
|
|
@@ -12,20 +12,20 @@
|
|
| 12 |
"sha256": "c95bae1d1ce0235ecccd3560b772ec1efb97f348a79f0fbe0a634f0c2ccefe2c"
|
| 13 |
},
|
| 14 |
"NOTICE": {
|
| 15 |
-
"bytes":
|
| 16 |
-
"sha256": "
|
| 17 |
},
|
| 18 |
"PROVENANCE.md": {
|
| 19 |
-
"bytes":
|
| 20 |
-
"sha256": "
|
| 21 |
},
|
| 22 |
"README.md": {
|
| 23 |
-
"bytes":
|
| 24 |
-
"sha256": "
|
| 25 |
},
|
| 26 |
"RUNBOOK.md": {
|
| 27 |
-
"bytes":
|
| 28 |
-
"sha256": "
|
| 29 |
},
|
| 30 |
"chat_template.jinja": {
|
| 31 |
"bytes": 7756,
|
|
@@ -44,8 +44,8 @@
|
|
| 44 |
"sha256": "e385b92e333eaaa9395a09daf26c09420645bee242456552a55500db45919bc7"
|
| 45 |
},
|
| 46 |
"docs/readmes/README.zh.md": {
|
| 47 |
-
"bytes":
|
| 48 |
-
"sha256": "
|
| 49 |
},
|
| 50 |
"evaluation/benchmark-summary.json": {
|
| 51 |
"bytes": 36014,
|
|
@@ -85,15 +85,15 @@
|
|
| 85 |
},
|
| 86 |
"model-00001-of-00002.safetensors": {
|
| 87 |
"bytes": 4972947968,
|
| 88 |
-
"sha256": "
|
| 89 |
},
|
| 90 |
"model-00002-of-00002.safetensors": {
|
| 91 |
"bytes": 3438610328,
|
| 92 |
-
"sha256": "
|
| 93 |
},
|
| 94 |
"model-files/serving.json": {
|
| 95 |
"bytes": 128,
|
| 96 |
-
"sha256": "
|
| 97 |
},
|
| 98 |
"model.safetensors.index.json": {
|
| 99 |
"bytes": 41993,
|
|
@@ -185,7 +185,7 @@
|
|
| 185 |
},
|
| 186 |
"serving.json": {
|
| 187 |
"bytes": 128,
|
| 188 |
-
"sha256": "
|
| 189 |
},
|
| 190 |
"temperature.json": {
|
| 191 |
"bytes": 4348,
|
|
@@ -220,19 +220,23 @@
|
|
| 220 |
"sha256": "ad20de47de5bbe7f72417f3d87e6f72aae7987fab913eb814b818e4a4bbc6e1e"
|
| 221 |
},
|
| 222 |
"model-info.json": {
|
| 223 |
-
"bytes":
|
| 224 |
-
"sha256": "
|
| 225 |
},
|
| 226 |
"llms.txt": {
|
| 227 |
-
"bytes":
|
| 228 |
-
"sha256": "
|
| 229 |
},
|
| 230 |
"CITATION.cff": {
|
| 231 |
"bytes": 1075,
|
| 232 |
-
"sha256": "
|
| 233 |
},
|
| 234 |
"docs/api.md": {
|
| 235 |
"bytes": 6085,
|
| 236 |
"sha256": "e2e349bc9d17f01e0d52835f664808f94a6d9c88dd120ba49c9f25af47c235b8"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 237 |
}
|
| 238 |
}
|
|
|
|
| 1 |
{
|
| 2 |
"CONTAMINATION.md": {
|
| 3 |
+
"bytes": 2047,
|
| 4 |
+
"sha256": "108d33ec5188b608e8b293d18ba1bb975b9849638644a682616ca8816b4e1fd1"
|
| 5 |
},
|
| 6 |
"Dockerfile": {
|
| 7 |
"bytes": 1201,
|
|
|
|
| 12 |
"sha256": "c95bae1d1ce0235ecccd3560b772ec1efb97f348a79f0fbe0a634f0c2ccefe2c"
|
| 13 |
},
|
| 14 |
"NOTICE": {
|
| 15 |
+
"bytes": 1553,
|
| 16 |
+
"sha256": "e1f68705275e9539d5d28e0dc20eae470169af869c308a90378db3ede83dd644"
|
| 17 |
},
|
| 18 |
"PROVENANCE.md": {
|
| 19 |
+
"bytes": 2077,
|
| 20 |
+
"sha256": "69225fb813578b0d4f9e453a9f0c140c848ec354cf6cca877bcae828c082d3d7"
|
| 21 |
},
|
| 22 |
"README.md": {
|
| 23 |
+
"bytes": 27727,
|
| 24 |
+
"sha256": "d11e8a5b0dea51265fe170ce16afce4ddeec3e2c350b28c418293e598f0d4e2c"
|
| 25 |
},
|
| 26 |
"RUNBOOK.md": {
|
| 27 |
+
"bytes": 4988,
|
| 28 |
+
"sha256": "e56ba639af5f41d431ec4fd6f03f84c40fc02cf44b42ae67c68242f5ee06507e"
|
| 29 |
},
|
| 30 |
"chat_template.jinja": {
|
| 31 |
"bytes": 7756,
|
|
|
|
| 44 |
"sha256": "e385b92e333eaaa9395a09daf26c09420645bee242456552a55500db45919bc7"
|
| 45 |
},
|
| 46 |
"docs/readmes/README.zh.md": {
|
| 47 |
+
"bytes": 23505,
|
| 48 |
+
"sha256": "49e246c61c6f0f488d73ccb2bbb8c63913eba06f2ccce2fe2254c2c56b49a020"
|
| 49 |
},
|
| 50 |
"evaluation/benchmark-summary.json": {
|
| 51 |
"bytes": 36014,
|
|
|
|
| 85 |
},
|
| 86 |
"model-00001-of-00002.safetensors": {
|
| 87 |
"bytes": 4972947968,
|
| 88 |
+
"sha256": "0b15067f769e7388bd598aabafa2ea3211a3a0c4e49e47d07c4f65c65ffc25dd"
|
| 89 |
},
|
| 90 |
"model-00002-of-00002.safetensors": {
|
| 91 |
"bytes": 3438610328,
|
| 92 |
+
"sha256": "7cff102b314edeb3dc5abfa7063f72ad3e888884da237601239dc3582074120a"
|
| 93 |
},
|
| 94 |
"model-files/serving.json": {
|
| 95 |
"bytes": 128,
|
| 96 |
+
"sha256": "6b4de526ca4c939b626932dcd10d6167e21a68b1e77a090d7a5a87c7c3a353b1"
|
| 97 |
},
|
| 98 |
"model.safetensors.index.json": {
|
| 99 |
"bytes": 41993,
|
|
|
|
| 185 |
},
|
| 186 |
"serving.json": {
|
| 187 |
"bytes": 128,
|
| 188 |
+
"sha256": "6b4de526ca4c939b626932dcd10d6167e21a68b1e77a090d7a5a87c7c3a353b1"
|
| 189 |
},
|
| 190 |
"temperature.json": {
|
| 191 |
"bytes": 4348,
|
|
|
|
| 220 |
"sha256": "ad20de47de5bbe7f72417f3d87e6f72aae7987fab913eb814b818e4a4bbc6e1e"
|
| 221 |
},
|
| 222 |
"model-info.json": {
|
| 223 |
+
"bytes": 6173,
|
| 224 |
+
"sha256": "bac706e42b114f37e34ac978f42a8e3112519511082e2afbc6f59cabd865246a"
|
| 225 |
},
|
| 226 |
"llms.txt": {
|
| 227 |
+
"bytes": 3287,
|
| 228 |
+
"sha256": "3529ee491cd2d2d3cc635799ca9bf8eb8c9ef299702fe7e7197a7aa3ab4c8948"
|
| 229 |
},
|
| 230 |
"CITATION.cff": {
|
| 231 |
"bytes": 1075,
|
| 232 |
+
"sha256": "806a92b1263671f2bce5dfbc5ffc3e926d7a4e3f697f5b067865faf1fdbb3c37"
|
| 233 |
},
|
| 234 |
"docs/api.md": {
|
| 235 |
"bytes": 6085,
|
| 236 |
"sha256": "e2e349bc9d17f01e0d52835f664808f94a6d9c88dd120ba49c9f25af47c235b8"
|
| 237 |
+
},
|
| 238 |
+
"evaluation/v1.2/summary.json": {
|
| 239 |
+
"bytes": 6991,
|
| 240 |
+
"sha256": "1c4231985191eb1f7916baf13dd621d3e5655f192dbad2f842f998f8ba8ffaf5"
|
| 241 |
}
|
| 242 |
}
|
NOTICE
CHANGED
|
@@ -19,3 +19,5 @@ Third-party code and text in server/
|
|
| 19 |
No benchmark items or training data are included in this repository.
|
| 20 |
|
| 21 |
2026-09-29 release: Wald-Q4B 022D0-f7. See PROVENANCE.md for later training-source rights limitations; the code/base license does not grant rights to third-party training texts.
|
|
|
|
|
|
|
|
|
| 19 |
No benchmark items or training data are included in this repository.
|
| 20 |
|
| 21 |
2026-09-29 release: Wald-Q4B 022D0-f7. See PROVENANCE.md for later training-source rights limitations; the code/base license does not grant rights to third-party training texts.
|
| 22 |
+
|
| 23 |
+
2026-10-01 release: Wald-Q4B v1.2 (02600-f19), a robustness LoRA stage merged into Wald-Q4B 022D0-f7. The inserted training texts of this stage were written by Claude Haiku (Anthropic); see PROVENANCE.md.
|
PROVENANCE.md
CHANGED
|
@@ -5,3 +5,15 @@
|
|
| 5 |
Public-source acknowledgments include [ACOS](https://github.com/NUSTM/ACOS), [NLI4CT](https://github.com/ai-systems/Task-2-SemEval-2024), [RAGTruth](https://github.com/ParticleMedia/RAGTruth), and [VAST](https://github.com/emilyallaway/zero-shot-stance). RAGTruth contains third-party MS MARCO/Yelp contexts. [MS MARCO terms](https://microsoft.github.io/msmarco/) limit dataset use to non-commercial research; other source-text permissions are not uniformly specified. Model/code licensing does not grant rights in those texts or constitute commercial clearance.
|
| 6 |
|
| 7 |
Base model: [Qwen3.5-4B-Base](https://huggingface.co/Qwen/Qwen3.5-4B-Base), Apache-2.0. No training rows or benchmark request payloads are distributed here.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5 |
Public-source acknowledgments include [ACOS](https://github.com/NUSTM/ACOS), [NLI4CT](https://github.com/ai-systems/Task-2-SemEval-2024), [RAGTruth](https://github.com/ParticleMedia/RAGTruth), and [VAST](https://github.com/emilyallaway/zero-shot-stance). RAGTruth contains third-party MS MARCO/Yelp contexts. [MS MARCO terms](https://microsoft.github.io/msmarco/) limit dataset use to non-commercial research; other source-text permissions are not uniformly specified. Model/code licensing does not grant rights in those texts or constitute commercial clearance.
|
| 6 |
|
| 7 |
Base model: [Qwen3.5-4B-Base](https://huggingface.co/Qwen/Qwen3.5-4B-Base), Apache-2.0. No training rows or benchmark request payloads are distributed here.
|
| 8 |
+
|
| 9 |
+
# v1.2 (checkpoint `02600-f19`)
|
| 10 |
+
|
| 11 |
+
v1.2 adds one LoRA stage on v1.1. The v1.1 notes above apply unchanged.
|
| 12 |
+
|
| 13 |
+
- **Questions.** 5,300 questions drawn from v1.1's own training text. No new source dataset was added.
|
| 14 |
+
- **Perturbed rows.** 8,064 perturbed copies of those questions (13,674 training rows with repeats and 5,000 unperturbed replay rows). Each perturbed row has a short distracting or pressuring text inserted into the question, after an option or into the state, or is a paraphrase or a typo variant.
|
| 15 |
+
- **Text written by a model.** The inserted texts and the paraphrases were written by **Claude Haiku (Anthropic)** from our own templates. A script inserted them, so the original question text is unchanged. Typos were produced by a script. A separate Claude Haiku call checked every row, and rows on which v1.1 changed its answer were checked again by Claude Sonnet.
|
| 16 |
+
- **Targets.** v1.1's own answer distribution on the unperturbed question.
|
| 17 |
+
- **Benchmarks.** No JevAdvBench text was used. JevAdvBench is evaluation-only.
|
| 18 |
+
|
| 19 |
+
No training rows or benchmark request payloads are distributed here.
|
README.md
CHANGED
|
@@ -16,6 +16,7 @@ tags:
|
|
| 16 |
- tool-use
|
| 17 |
- agent-routing
|
| 18 |
- clarification
|
|
|
|
| 19 |
- decision-index
|
| 20 |
- jevbench
|
| 21 |
- jev
|
|
@@ -32,7 +33,7 @@ tags:
|
|
| 32 |
- vllm
|
| 33 |
- reasoning
|
| 34 |
model-index:
|
| 35 |
-
- name: Wald-Q4B v1.1
|
| 36 |
results:
|
| 37 |
- task:
|
| 38 |
type: text-classification
|
|
@@ -73,15 +74,65 @@ model-index:
|
|
| 73 |
source:
|
| 74 |
name: 'Self-scored with the JevBench harness; row requested in jevbench issue #146'
|
| 75 |
url: https://github.com/fstandhartinger/jevbench/issues/146
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 76 |
---
|
| 77 |
|
| 78 |
<div align="center">
|
| 79 |
-
<h1>Wald-Q4B
|
| 80 |
<p><strong>Decide directly. Think when needed. Return probabilities.</strong></p>
|
| 81 |
<p><a href="https://huggingface.co/Harry19081/Wald-4B">English</a> · <a href="https://huggingface.co/Harry19081/Wald-4B/blob/main/docs/readmes/README.zh.md">简体中文</a> · <a href="https://github.com/Harry19081/wald-4b">GitHub</a> · <a href="https://huggingface.co/Harry19081/Wald-4B/blob/main/docs/api.md">API</a></p>
|
| 82 |
</div>
|
| 83 |
|
| 84 |
-
**Wald-Q4B
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 85 |
|
| 86 |
Wald-Q4B is an independent, self-hosted alternative to TypeSafe's hosted Jev API. It is not Jev, contains no Jev weights, and is not affiliated with or endorsed by TypeSafe AI. The Hugging Face repository is `Harry19081/Wald-4B` (earlier name: Wald-4B).
|
| 87 |
|
|
@@ -91,20 +142,40 @@ Wald-Q4B is an independent, self-hosted alternative to TypeSafe's hosted Jev API
|
|
| 91 |
|
| 92 |
- **4B parameters**, built on Qwen3.5-4B-Base; BF16 weights (8.4 GB).
|
| 93 |
- **Every option gets a probability.** Question types: `choice` (1–255 named options), `noul` (yes/no) and `score` (ordered levels).
|
| 94 |
-
- **
|
| 95 |
-
- **
|
| 96 |
-
- **JevBench public set:
|
|
|
|
|
|
|
| 97 |
- **Self-hosted API:** `POST /v1/systemone`, up to 131,072 prompt tokens.
|
| 98 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 99 |
## Quick start
|
| 100 |
|
| 101 |
On a Linux machine with an NVIDIA GPU and [`uv`](https://docs.astral.sh/uv/):
|
| 102 |
|
| 103 |
```sh
|
| 104 |
-
hf download Harry19081/Wald-4B --revision v1.
|
|
|
|
| 105 |
cd Wald-Q4B
|
| 106 |
EFFORT=none ./run.sh "$PWD" # one pass, lowest latency
|
| 107 |
-
# ./run.sh "$PWD" # default:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 108 |
```
|
| 109 |
|
| 110 |
```sh
|
|
@@ -112,7 +183,7 @@ curl http://localhost:8000/v1/systemone \
|
|
| 112 |
-H 'Content-Type: application/json' \
|
| 113 |
-d '{
|
| 114 |
"state": "The customer wants to return a damaged kettle.",
|
| 115 |
-
"effort": "
|
| 116 |
"questions": {
|
| 117 |
"route": {
|
| 118 |
"type": "choice",
|
|
@@ -131,17 +202,19 @@ The answer for `route` contains the chosen key and a probability for each of `re
|
|
| 131 |
|
| 132 |
## Thinking effort
|
| 133 |
|
| 134 |
-
Start with `none` for direct decisions, `medium` for confidence-gated thinking, or `high` for the evaluated v1.1 configuration.
|
| 135 |
-
|
| 136 |
| Effort | When it thinks | Thought budget |
|
| 137 |
|---|---|---|
|
| 138 |
| `none` | Direct option readout | No generated thought |
|
| 139 |
| `low` | Top initial probability < 0.5 | Up to 512 tokens |
|
| 140 |
| `medium` | Top initial probability < 0.7 | Up to 512 tokens |
|
| 141 |
-
| **`high` (default)** | Every eligible question | Up to 512 tokens |
|
| 142 |
| `high-k2` … `high-k8` | Multiple thoughts; average their answer distributions | Up to 512 tokens per thought |
|
| 143 |
|
| 144 |
-
Thinking applies to questions with 2–26 options when context space permits. Larger option sets use grouped readout and a final winner comparison; if a thought cannot fit, the initial answer is kept. Increasing effort spends more computation; it does not guarantee a better answer.
|
|
|
|
|
|
|
|
|
|
|
|
|
| 145 |
|
| 146 |
Set the server default with `EFFORT=medium ./run.sh "$PWD"`, or override it per request with `"effort": "none"`.
|
| 147 |
|
|
@@ -149,22 +222,66 @@ Set the server default with `EFFORT=medium ./run.sh "$PWD"`, or override it per
|
|
| 149 |
|
| 150 |
Wald first reads option-letter logits from a plain prompt and turns them into a probability distribution. If the effort policy asks for thinking, it generates a short thought and reads the options again. Bucketed temperature scaling calibrates the returned probabilities.
|
| 151 |
|
| 152 |
-
v1.1 combines full-parameter decision training, LoRA refinement, short-thought distillation and RLCD. Training uses **WaldGen**, our generated decision corpus, together with public training datasets.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 153 |
|
| 154 |
## Benchmarks
|
| 155 |
|
| 156 |
-
|
| 157 |
-
|
| 158 |
-
|
|
| 159 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 160 |
|
| 161 |
-
|
| 162 |
|
| 163 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 164 |
|
| 165 |
### Latency
|
| 166 |
|
| 167 |
-
With `none`, the JevBench run
|
| 168 |
|
| 169 |
## Related projects and how Wald compares
|
| 170 |
|
|
@@ -178,11 +295,12 @@ Several projects implement or approximate structured decisions with calibrated o
|
|
| 178 |
|
| 179 |
| System | How it was run | Correct |
|
| 180 |
|---|---|---:|
|
|
|
|
| 181 |
| Wald-Q4B v1.1 · `none` | Self-hosted, RTX PRO 6000, 2026-09-29 | 203/231 |
|
| 182 |
| Jev (`jev-1.13.0`) | TypeSafe's hosted API, 2026-09-25 | 200/231 |
|
| 183 |
| Laya (English checkpoint `55cf4c4e`) | Self-hosted, NVIDIA L4, 2026-09-26 | 134/231 |
|
| 184 |
|
| 185 |
-
A
|
| 186 |
|
| 187 |
**Decision Index 0.2.1:**
|
| 188 |
|
|
@@ -203,40 +321,47 @@ Leaderboard rows are scored by the maintainers; Wald's number is self-run with t
|
|
| 203 |
|
| 204 |
**How do I route tools or decide whether to ask the user?** Send the conversation or task as `state`. For tool routing, ask a `choice` question whose options are your tools. To decide whether to ask a clarifying question, ask a `noul` question such as "Is the request specific enough to act on without asking?" Act when the probability is high, ask when it is low, and set both thresholds on your own validation data. The model picks the tool; it does not write the tool's arguments.
|
| 205 |
|
| 206 |
-
**
|
|
|
|
|
|
|
| 207 |
|
| 208 |
-
**Does it run on a single GPU or a laptop?** The shipped server needs one NVIDIA GPU on Linux (vLLM 0.30.0); the BF16 weights are 8.4 GB. The v1.1 measurements come from an RTX PRO 6000 96 GB; earlier builds of the same 4B architecture have also been served with vLLM on a 24 GB NVIDIA L4 at a 16K context limit. CPU, Apple Silicon and laptop setups are not supported by the shipped server and have not been tested.
|
| 209 |
|
| 210 |
**Kev vs Wald, or Laya vs Wald?** All three are open-weight. Kev adds a pointer head and LoRA to Qwen3.5 base models; Laya is a small encoder with a decision head; Wald is a fully trained 4B decoder with optional thinking. Our same-protocol measurements are in the tables above. Choose on your own task, latency budget and hardware.
|
| 211 |
|
| 212 |
-
**Can I fine-tune it for my task?** It is a standard Transformers checkpoint, so common LoRA tooling applies. For v1.0 we trained per-task LoRAs for $0.12–$1.81 of GPU time each; that tooling is not public yet, and those adapters are not validated on v1.1 ([v1.0 notes](https://huggingface.co/Harry19081/Wald-4B/blob/main/history/v1.0/README.md)).
|
| 213 |
|
| 214 |
-
**What is the license?** Apache-2.0 for the weights and code. The base model, Qwen3.5-4B-Base, is also Apache-2.0. Some public training sources have their own terms or no stated licence; they are listed in [PROVENANCE.md](https://huggingface.co/Harry19081/Wald-4B/blob/main/PROVENANCE.md). The model and code licence does not grant rights in those texts.
|
| 215 |
|
| 216 |
## Limits
|
| 217 |
|
| 218 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 219 |
|
| 220 |
## Versioning
|
| 221 |
|
| 222 |
-
| Version | Checkpoint |
|
| 223 |
-
|---|---|---|
|
| 224 |
-
| **v1.
|
| 225 |
-
|
|
|
|
|
| 226 |
|
| 227 |
-
The v1.0 model card retains its XL, task-LoRA and latency reports, and the [v1.0 walkthrough slides](https://claude.ai/artifact/XfCHVaCuj9A5ectrpaWzV5) describe v1.0 only. Those measurements belong to their documented builds.
|
| 228 |
|
| 229 |
## Citation
|
| 230 |
|
| 231 |
-
Wald-Q4B
|
| 232 |
|
| 233 |
```bibtex
|
| 234 |
@misc{wald_q4b_2026,
|
| 235 |
-
title = {Wald-Q4B
|
| 236 |
author = {{Wald-4B authors}},
|
| 237 |
year = {2026},
|
| 238 |
howpublished = {\url{https://huggingface.co/Harry19081/Wald-4B}},
|
| 239 |
-
note = {Revision v1.
|
| 240 |
}
|
| 241 |
```
|
| 242 |
|
|
|
|
| 16 |
- tool-use
|
| 17 |
- agent-routing
|
| 18 |
- clarification
|
| 19 |
+
- robustness
|
| 20 |
- decision-index
|
| 21 |
- jevbench
|
| 22 |
- jev
|
|
|
|
| 33 |
- vllm
|
| 34 |
- reasoning
|
| 35 |
model-index:
|
| 36 |
+
- name: Wald-Q4B v1.1 (main, revision v1.1)
|
| 37 |
results:
|
| 38 |
- task:
|
| 39 |
type: text-classification
|
|
|
|
| 74 |
source:
|
| 75 |
name: 'Self-scored with the JevBench harness; row requested in jevbench issue #146'
|
| 76 |
url: https://github.com/fstandhartinger/jevbench/issues/146
|
| 77 |
+
- name: Wald-Q4B v1.2 (revision v1.2)
|
| 78 |
+
results:
|
| 79 |
+
- task:
|
| 80 |
+
type: text-classification
|
| 81 |
+
name: Structured decisions (option probabilities)
|
| 82 |
+
dataset:
|
| 83 |
+
name: JevBench public set (231 items)
|
| 84 |
+
type: jevbench
|
| 85 |
+
split: public
|
| 86 |
+
revision: 9ec6f15a
|
| 87 |
+
metrics:
|
| 88 |
+
- type: accuracy
|
| 89 |
+
name: Accuracy, effort none (self-scored, 204/231)
|
| 90 |
+
value: 88.31
|
| 91 |
+
verified: false
|
| 92 |
+
- type: ece
|
| 93 |
+
name: Expected calibration error, 10 bins (self-scored)
|
| 94 |
+
value: 0.045
|
| 95 |
+
verified: false
|
| 96 |
+
- type: brier
|
| 97 |
+
name: Brier score (self-scored)
|
| 98 |
+
value: 0.191
|
| 99 |
+
verified: false
|
| 100 |
+
source:
|
| 101 |
+
name: Self-scored with the JevBench harness; not submitted
|
| 102 |
+
url: https://huggingface.co/Harry19081/Wald-4B/blob/v1.2/evaluation/v1.2/summary.json
|
| 103 |
+
- task:
|
| 104 |
+
type: text-classification
|
| 105 |
+
name: Robustness of structured decisions to distracting and adversarial text
|
| 106 |
+
dataset:
|
| 107 |
+
name: JevAdvBench (812 questions, 9 delivered attack types)
|
| 108 |
+
type: jevadvbench
|
| 109 |
+
revision: "3218e05"
|
| 110 |
+
metrics:
|
| 111 |
+
- type: flip_rate
|
| 112 |
+
name: Mean flip rate in %, effort none, lower is better (self-run)
|
| 113 |
+
value: 4.6
|
| 114 |
+
verified: false
|
| 115 |
+
source:
|
| 116 |
+
name: Self-run with the benchmark's request bytes and analysis code; not submitted
|
| 117 |
+
url: https://huggingface.co/Harry19081/Wald-4B/blob/v1.2/evaluation/v1.2/summary.json
|
| 118 |
---
|
| 119 |
|
| 120 |
<div align="center">
|
| 121 |
+
<h1>Wald-Q4B</h1>
|
| 122 |
<p><strong>Decide directly. Think when needed. Return probabilities.</strong></p>
|
| 123 |
<p><a href="https://huggingface.co/Harry19081/Wald-4B">English</a> · <a href="https://huggingface.co/Harry19081/Wald-4B/blob/main/docs/readmes/README.zh.md">简体中文</a> · <a href="https://github.com/Harry19081/wald-4b">GitHub</a> · <a href="https://huggingface.co/Harry19081/Wald-4B/blob/main/docs/api.md">API</a></p>
|
| 124 |
</div>
|
| 125 |
|
| 126 |
+
**Wald-Q4B is an open-weight 4B decision model: give it a state and a set of options, and it returns a calibrated probability for every option.** It is for developers who build agents and pipelines and need a fast, self-hosted component to pick a tool, route a request, classify an input or decide whether to ask the user. Unlike a chat model, it does not write an answer you have to parse. It reads the options in one pass and can optionally think first. It serves a Jev-compatible `POST /v1/systemone` API, is built on Qwen3.5-4B-Base and is released under Apache-2.0.
|
| 127 |
+
|
| 128 |
+
**Two releases live in this repository.**
|
| 129 |
+
|
| 130 |
+
| Release | Revision | Checkpoint | In one line |
|
| 131 |
+
|---|---|---|---|
|
| 132 |
+
| **v1.2** (2026-10-01) | tag [`v1.2`](https://huggingface.co/Harry19081/Wald-4B/tree/v1.2) | `02600-f19` | The robustness release: v1.1 plus one merged LoRA stage that teaches the model to keep its answer when the input contains distracting sentences, third-party opinions or fake instructions |
|
| 133 |
+
| **v1.1** (2026-09-29) | tag [`v1.1`](https://huggingface.co/Harry19081/Wald-4B/tree/v1.1); also the weights on `main` | `022D0-f7` | The general release, with the complete Decision Index run and the evaluated thinking efforts |
|
| 134 |
+
|
| 135 |
+
`main` still holds the v1.1 weights, so existing downloads and the pending benchmark requests for v1.1 are unaffected. Pin a revision when you download.
|
| 136 |
|
| 137 |
Wald-Q4B is an independent, self-hosted alternative to TypeSafe's hosted Jev API. It is not Jev, contains no Jev weights, and is not affiliated with or endorsed by TypeSafe AI. The Hugging Face repository is `Harry19081/Wald-4B` (earlier name: Wald-4B).
|
| 138 |
|
|
|
|
| 142 |
|
| 143 |
- **4B parameters**, built on Qwen3.5-4B-Base; BF16 weights (8.4 GB).
|
| 144 |
- **Every option gets a probability.** Question types: `choice` (1–255 named options), `noul` (yes/no) and `score` (ordered levels).
|
| 145 |
+
- **v1.2 is more robust than v1.1:** on JevAdvBench the mean flip rate over nine attack types is **4.6 %** (v1.1: 9.2 %; Jev 1.13: 6.1 %). Self-run, effort `none`.
|
| 146 |
+
- **The cost of v1.2:** clean accuracy on JevAdvBench's 143 human-reviewed questions is 76.2 % (v1.1: 79.0 %; −2.8 points, 95 % CI [−6.2, −0.6]).
|
| 147 |
+
- **JevBench public set:** v1.2 **204/231**, v1.1 **203/231**, both with `none`. Self-scored with JevBench's own harness.
|
| 148 |
+
- **Decision Index 0.2.1:** the complete-suite result, **54.59** with `high`, was measured on **v1.1**. v1.2 has only a one-pass sample read, which is level with v1.1 (+0.27, not significant).
|
| 149 |
+
- **Adjustable thinking:** `none`, `low`, `medium`, `high`, or several thoughts with `high-k`. Thinking is evaluated on v1.1. v1.2 is a one-pass model: use it with `none`.
|
| 150 |
- **Self-hosted API:** `POST /v1/systemone`, up to 131,072 prompt tokens.
|
| 151 |
|
| 152 |
+
## Which version should I use?
|
| 153 |
+
|
| 154 |
+
| Use | Revision | Why |
|
| 155 |
+
|---|---|---|
|
| 156 |
+
| Inputs may contain distracting, persuasive or adversarial text (web pages, user messages, tool outputs, retrieved documents) | **`v1.2`** | About half as many changed answers under the nine JevAdvBench attacks |
|
| 157 |
+
| Clean, trusted inputs where the last points of accuracy matter; thinking efforts; the evaluated Decision Index configuration | **`v1.1`** | Slightly higher clean accuracy; the complete Decision Index run (54.59, `high`) and the thinking efforts were measured on it |
|
| 158 |
+
|
| 159 |
+
Both revisions share the same architecture, tokenizer, prompt format, calibration table and server code. The two weight shards differ, and so does the default effort declared in `serving.json`: `none` for v1.2, `high` for v1.1.
|
| 160 |
+
|
| 161 |
## Quick start
|
| 162 |
|
| 163 |
On a Linux machine with an NVIDIA GPU and [`uv`](https://docs.astral.sh/uv/):
|
| 164 |
|
| 165 |
```sh
|
| 166 |
+
hf download Harry19081/Wald-4B --revision v1.2 --local-dir ./Wald-Q4B # v1.2, robustness release
|
| 167 |
+
# hf download Harry19081/Wald-4B --revision v1.1 --local-dir ./Wald-Q4B # v1.1, general release
|
| 168 |
cd Wald-Q4B
|
| 169 |
EFFORT=none ./run.sh "$PWD" # one pass, lowest latency
|
| 170 |
+
# ./run.sh "$PWD" # the release's declared default: none for v1.2, high for v1.1
|
| 171 |
+
```
|
| 172 |
+
|
| 173 |
+
From Python, pin the revision the same way:
|
| 174 |
+
|
| 175 |
+
```python
|
| 176 |
+
from huggingface_hub import snapshot_download
|
| 177 |
+
|
| 178 |
+
path = snapshot_download("Harry19081/Wald-4B", revision="v1.2") # or revision="v1.1"
|
| 179 |
```
|
| 180 |
|
| 181 |
```sh
|
|
|
|
| 183 |
-H 'Content-Type: application/json' \
|
| 184 |
-d '{
|
| 185 |
"state": "The customer wants to return a damaged kettle.",
|
| 186 |
+
"effort": "none",
|
| 187 |
"questions": {
|
| 188 |
"route": {
|
| 189 |
"type": "choice",
|
|
|
|
| 202 |
|
| 203 |
## Thinking effort
|
| 204 |
|
|
|
|
|
|
|
| 205 |
| Effort | When it thinks | Thought budget |
|
| 206 |
|---|---|---|
|
| 207 |
| `none` | Direct option readout | No generated thought |
|
| 208 |
| `low` | Top initial probability < 0.5 | Up to 512 tokens |
|
| 209 |
| `medium` | Top initial probability < 0.7 | Up to 512 tokens |
|
| 210 |
+
| **`high` (v1.1 default)** | Every eligible question | Up to 512 tokens |
|
| 211 |
| `high-k2` … `high-k8` | Multiple thoughts; average their answer distributions | Up to 512 tokens per thought |
|
| 212 |
|
| 213 |
+
Thinking applies to questions with 2–26 options when context space permits. Larger option sets use grouped readout and a final winner comparison; if a thought cannot fit, the initial answer is kept. Increasing effort spends more computation; it does not guarantee a better answer.
|
| 214 |
+
|
| 215 |
+
**On v1.1**, start with `none` for direct decisions, `medium` for confidence-gated thinking, or `high` for the evaluated Decision Index configuration. **54.59 applies to v1.1 with `high` only; 203/231 applies to v1.1 with `none` only.**
|
| 216 |
+
|
| 217 |
+
**v1.2 is a one-pass model.** It was trained and evaluated on the one-pass readout, and every v1.2 number on this card is `none`. In our one check, thinking did not help it: on the JevBench public set, v1.2 scored 198/231 with `medium` and 198/231 with `high` (one run each) against 204/231 with `none`, while v1.1 scored 205/231 with `medium`. v1.2's `serving.json` therefore declares `none` as its default. If you want the thinking efforts, use v1.1.
|
| 218 |
|
| 219 |
Set the server default with `EFFORT=medium ./run.sh "$PWD"`, or override it per request with `"effort": "none"`.
|
| 220 |
|
|
|
|
| 222 |
|
| 223 |
Wald first reads option-letter logits from a plain prompt and turns them into a probability distribution. If the effort policy asks for thinking, it generates a short thought and reads the options again. Bucketed temperature scaling calibrates the returned probabilities.
|
| 224 |
|
| 225 |
+
v1.1 combines full-parameter decision training, LoRA refinement, short-thought distillation and RLCD. Training uses **WaldGen**, our generated decision corpus, together with public training datasets.
|
| 226 |
+
|
| 227 |
+
**v1.2 adds one LoRA stage on v1.1 (rank 16 on every language projection, merged into the weights):**
|
| 228 |
+
|
| 229 |
+
- **Questions:** 5,300 questions drawn from v1.1's own training text. No new source dataset.
|
| 230 |
+
- **Perturbations:** 8,064 perturbed copies. Each one has a short text inserted into the question, after an option or into the state: unrelated sentences and off-topic passages, a bystander's opinion, rumour or analogy that pushes another option, or a fake instruction that claims authority. A smaller share are paraphrases and typos.
|
| 231 |
+
- **Who wrote them:** **the inserted texts and the paraphrases were written by Claude Haiku (an Anthropic model) from our own templates.** A script inserted them, so the original facts stay byte-identical. Typos were made by a script.
|
| 232 |
+
- **Checks:** a separate Claude Haiku call checked every row ("does the edit change the correct answer?") and rejected rows were dropped. Rows on which v1.1 changed its answer were checked a second time by Claude Sonnet.
|
| 233 |
+
- **Targets:** v1.1's own answer distribution on the clean question. The model is taught to answer the perturbed question as v1.1 answers the clean one. 5,000 clean rows are replayed against v1.1 to limit drift.
|
| 234 |
+
- **Separation from the benchmark:** no JevAdvBench text was used. An 8-gram overlap check of every inserted text against every JevAdvBench string (clean questions and all 9,744 attacked variants) found 0 hits.
|
| 235 |
+
|
| 236 |
+
Data sources and evaluation notes: v1.1 [PROVENANCE.md](https://huggingface.co/Harry19081/Wald-4B/blob/main/PROVENANCE.md) · [CONTAMINATION.md](https://huggingface.co/Harry19081/Wald-4B/blob/main/CONTAMINATION.md); v1.2 [PROVENANCE.md](https://huggingface.co/Harry19081/Wald-4B/blob/v1.2/PROVENANCE.md) · [CONTAMINATION.md](https://huggingface.co/Harry19081/Wald-4B/blob/v1.2/CONTAMINATION.md)
|
| 237 |
|
| 238 |
## Benchmarks
|
| 239 |
|
| 240 |
+
All numbers below are self-run and self-reported. None of them is a leaderboard result.
|
| 241 |
+
|
| 242 |
+
| Benchmark | Configuration | v1.1 | **v1.2** | Note |
|
| 243 |
+
|---|---|---:|---:|---|
|
| 244 |
+
| **JevAdvBench, mean flip rate over 9 attack types** (lower is better) | `none` | 9.2 % | **4.6 %** | Paired −4.6 points, 95 % CI [−5.5, −3.6]. Jev 1.13: 6.1 % |
|
| 245 |
+
| **JevAdvBench, clean accuracy on 143 human-reviewed questions** | `none` | 79.0 % | **76.2 %** | Paired −2.8 points [−6.2, −0.6]. Jev 1.13: 87.4 % |
|
| 246 |
+
| **JevBench public set (231 items)** | `none` | 203/231 (87.9 %) · ECE 0.041 · Brier 0.188 | **204/231** (88.3 %) · ECE 0.045 · Brier 0.191 | Self-scored with JevBench's harness. v1.1 row requested in [issue #146](https://github.com/fstandhartinger/jevbench/issues/146); v1.2 not submitted |
|
| 247 |
+
| JevBench public set (231 items) | `medium` | 205/231 | 198/231 | One run each. `high` on v1.2: 198/231 |
|
| 248 |
+
| **Decision Index 0.2.1, 6,948-request sample** | one pass | 49.76 | **50.03** | Paired +0.27 [−0.36, +1.05], not significant |
|
| 249 |
+
| **Decision Index 0.2.1, complete suite** | `high` | **54.59** | not run | v1.1 only. Author-run; [PR #30](https://github.com/apolinario/decision-index/pull/30) awaits maintainer validation |
|
| 250 |
+
|
| 251 |
+
Two of our internal non-regression sets, which are not public benchmarks, also held in one pass: XL-Int 56.4 (v1.1: 56.0) and a 2,857-item tool-selection set 87.22 % (v1.1: 87.15 %).
|
| 252 |
+
|
| 253 |
+
### Robustness: JevAdvBench
|
| 254 |
|
| 255 |
+
[JevAdvBench](https://github.com/JevAdvBench/JevAdvBench) ([paper](https://arxiv.org/abs/2609.31142)) attacks 812 decision questions with nine kinds of edits and counts a **flip** when the model's decision on the attacked question differs from its own decision on the clean question. We sent the benchmark's request bytes to the packaged server with `none` and scored the answers with the benchmark's analysis code (`JevAdvBench@3218e05`). Flip rates are in % of the 812 questions; intervals are 95 % scenario-cluster bootstrap intervals.
|
| 256 |
|
| 257 |
+
| Attack | Jev 1.13 | v1.1 | **v1.2** | v1.2 − v1.1 (paired) |
|
| 258 |
+
|---|---:|---:|---:|---:|
|
| 259 |
+
| Q1 word edits | 1.0 | 1.6 | 1.6 | 0.0 [−0.8, 0.8] |
|
| 260 |
+
| Q2 paraphrase | 1.5 | 1.6 | 1.4 | −0.2 [−1.1, 0.5] |
|
| 261 |
+
| Q3 unrelated sentences in the question | 4.6 | 14.9 | **4.6** | **−10.3 [−13.5, −7.2]** |
|
| 262 |
+
| T1 unrelated note in the state | 2.2 | 2.8 | 1.7 | −1.1 [−2.4, 0.0] |
|
| 263 |
+
| T2 observer's opinion in the state | 12.1 | 16.9 | **5.5** | **−11.3 [−14.6, −8.2]** |
|
| 264 |
+
| T3 opinion through an analogy | 6.9 | 12.7 | **6.3** | **−6.4 [−8.8, −3.6]** |
|
| 265 |
+
| P1 direct override | 8.9 | 7.9 | 5.7 | −2.2 [−3.6, −0.9] |
|
| 266 |
+
| P2 authority impersonation | 10.1 | 13.7 | **6.7** | **−7.0 [−9.0, −5.1]** |
|
| 267 |
+
| P3 fake validation note | 8.1 | 10.3 | 7.8 | −2.6 [−4.2, −1.0] |
|
| 268 |
+
| **Mean of the nine** | **6.1** | **9.2** | **4.6** | **−4.6 [−5.5, −3.6]** |
|
| 269 |
+
| Questions flipped by at least one attack | 29.2 | 41.7 | 20.7 | |
|
| 270 |
+
| Clean accuracy, 143 human-reviewed questions | 87.4 | 79.0 | 76.2 | −2.8 [−6.2, −0.6] |
|
| 271 |
+
|
| 272 |
+
- **Jev column:** `jev-1.13.0`'s responses as released by the benchmark authors, scored by the same code. v1.2 − Jev on the mean: −1.6 points [−2.7, −0.4].
|
| 273 |
+
- **Clean accuracy:** Jev is more accurate than both Wald versions on the clean human-reviewed questions. v1.2 makes the same clean decision as v1.1 on 98.6 % of the 812 questions.
|
| 274 |
+
- **What this does not show:** the perturbation kinds for v1.2 were chosen after we saw v1.1's per-attack results, so the benchmark's attack families informed the training design. Its texts did not. Robustness to attack types outside these families has not been measured.
|
| 275 |
+
|
| 276 |
+
### JevBench and Decision Index
|
| 277 |
+
|
| 278 |
+
**JevBench:** JevBench's own CLI (`fstandhartinger/jevbench` at `9ec6f15a`, `typesafe` adapter) against the packaged server on loopback, one request at a time. v1.2 with `none` on one RTX 5090: easy 48/48, original 72/72, hard 84/111; no tokens generated. v1.1 with `none` on one RTX PRO 6000: easy 48/48, original 72/72, hard 83/111; with `medium` 205/231, p95 1.80 s. The public items were used as a development scoreboard (never as training data), so this is not a held-out result. The JevBench leaderboard publishes a score only after its maintainers run the model themselves.
|
| 279 |
+
|
| 280 |
+
**Decision Index (v1.1):** 150,317/150,317 requests succeeded, including HLE. Measured on one RTX PRO 6000 96 GB with the pinned reproduction kit. [Full results](https://huggingface.co/datasets/Harry19081/Wald-Q4B-decision-index-results/tree/805716601b2466be324ed6716407b4c3d9267faa/runs/wald-q4b-22d0-f7-full021) · [Per-benchmark scores](https://huggingface.co/Harry19081/Wald-4B/blob/main/evaluation/benchmark-summary.json) · [Reproduction guide](https://huggingface.co/Harry19081/Wald-4B/blob/main/RUNBOOK.md). The files under `evaluation/` on `main` belong to this v1.1 run; v1.2's numbers are in [`evaluation/v1.2/summary.json`](https://huggingface.co/Harry19081/Wald-4B/blob/v1.2/evaluation/v1.2/summary.json) at the `v1.2` revision. The v1.2 sample row above is a one-pass read of 6,948 requests and cannot be compared with 54.59.
|
| 281 |
|
| 282 |
### Latency
|
| 283 |
|
| 284 |
+
Latency was measured on v1.1 and not again on v1.2, which has the same architecture, size and server. With `none`, the v1.1 JevBench run measured **33 ms median and 168 ms p95** per decision on one RTX PRO 6000. A 32-request serial preflight of `high` measured **821 ms median** on the same GPU; this small preflight is not a full-suite latency result or the Decision Index maintainers' admission test. Effort, context length, option count and concurrency all affect speed.
|
| 285 |
|
| 286 |
## Related projects and how Wald compares
|
| 287 |
|
|
|
|
| 295 |
|
| 296 |
| System | How it was run | Correct |
|
| 297 |
|---|---|---:|
|
| 298 |
+
| Wald-Q4B v1.2 · `none` | Self-hosted, RTX 5090, 2026-09-30 | 204/231 |
|
| 299 |
| Wald-Q4B v1.1 · `none` | Self-hosted, RTX PRO 6000, 2026-09-29 | 203/231 |
|
| 300 |
| Jev (`jev-1.13.0`) | TypeSafe's hosted API, 2026-09-25 | 200/231 |
|
| 301 |
| Laya (English checkpoint `55cf4c4e`) | Self-hosted, NVIDIA L4, 2026-09-26 | 134/231 |
|
| 302 |
|
| 303 |
+
A difference of a few items on 231 is within run-to-run and sampling noise. The public items informed Wald's development, and 52 of the 231 states are longer than Laya's 512-token window.
|
| 304 |
|
| 305 |
**Decision Index 0.2.1:**
|
| 306 |
|
|
|
|
| 321 |
|
| 322 |
**How do I route tools or decide whether to ask the user?** Send the conversation or task as `state`. For tool routing, ask a `choice` question whose options are your tools. To decide whether to ask a clarifying question, ask a `noul` question such as "Is the request specific enough to act on without asking?" Act when the probability is high, ask when it is low, and set both thresholds on your own validation data. The model picks the tool; it does not write the tool's arguments.
|
| 323 |
|
| 324 |
+
**Is v1.2 safe against prompt injection?** No model is. v1.2 changes its answer about half as often as v1.1 under the nine JevAdvBench attacks, and it still flips on 4.6 % of attacked questions on average and on 20.7 % of questions under at least one attack. Treat it as one layer: keep untrusted text out of the instructions where you can, and check high-stakes decisions.
|
| 325 |
+
|
| 326 |
+
**How calibrated are the probabilities?** On the JevBench public set with `none`, expected calibration error is 0.045 for v1.2 and 0.041 for v1.1 (10 bins); the Brier scores are 0.191 and 0.188. v1.2 uses v1.1's temperature table unchanged. It was fitted on held-out rows of our own development data, with no JevBench items and with known Decision Index matches excluded. A confidence is not a guarantee; check calibration on your task.
|
| 327 |
|
| 328 |
+
**Does it run on a single GPU or a laptop?** The shipped server needs one NVIDIA GPU on Linux (vLLM 0.30.0); the BF16 weights are 8.4 GB. The v1.1 measurements come from an RTX PRO 6000 96 GB and the v1.2 measurements from an RTX 5090 32 GB; earlier builds of the same 4B architecture have also been served with vLLM on a 24 GB NVIDIA L4 at a 16K context limit. CPU, Apple Silicon and laptop setups are not supported by the shipped server and have not been tested.
|
| 329 |
|
| 330 |
**Kev vs Wald, or Laya vs Wald?** All three are open-weight. Kev adds a pointer head and LoRA to Qwen3.5 base models; Laya is a small encoder with a decision head; Wald is a fully trained 4B decoder with optional thinking. Our same-protocol measurements are in the tables above. Choose on your own task, latency budget and hardware.
|
| 331 |
|
| 332 |
+
**Can I fine-tune it for my task?** It is a standard Transformers checkpoint, so common LoRA tooling applies. For v1.0 we trained per-task LoRAs for $0.12–$1.81 of GPU time each; that tooling is not public yet, and those adapters are not validated on v1.1 or v1.2 ([v1.0 notes](https://huggingface.co/Harry19081/Wald-4B/blob/main/history/v1.0/README.md)).
|
| 333 |
|
| 334 |
+
**What is the license?** Apache-2.0 for the weights and code. The base model, Qwen3.5-4B-Base, is also Apache-2.0. Some public training sources have their own terms or no stated licence; they are listed in [PROVENANCE.md](https://huggingface.co/Harry19081/Wald-4B/blob/main/PROVENANCE.md). The model and code licence does not grant rights in those texts. v1.2 adds no new source dataset; its added training text was written by Claude Haiku, as described above.
|
| 335 |
|
| 336 |
## Limits
|
| 337 |
|
| 338 |
+
- **v1.2 trades a little clean accuracy for robustness:** −2.8 points on JevAdvBench's 143 human-reviewed clean questions (95 % CI [−6.2, −0.6]). Use `v1.1` if that matters more to you.
|
| 339 |
+
- **v1.2 is a one-pass model.** Its results are all `none`, it has no complete Decision Index run, and in our one check the thinking efforts lowered its JevBench public score (198/231 against 204/231). Use v1.1 for thinking.
|
| 340 |
+
- **Robustness is measured on one benchmark** and on the attack families that informed the training design. It is not a security guarantee.
|
| 341 |
+
- Confidence is not a guarantee of correctness; validate thresholds on your own task. Oversized prompts are rejected rather than truncated.
|
| 342 |
+
- Known exact training overlaps were filtered, but semantic overlap and pretraining contamination are not ruled out; development used visible benchmark samples. Source-text rights vary. See [evaluation notes](https://huggingface.co/Harry19081/Wald-4B/blob/main/CONTAMINATION.md) and [source attribution](https://huggingface.co/Harry19081/Wald-4B/blob/main/PROVENANCE.md).
|
| 343 |
|
| 344 |
## Versioning
|
| 345 |
|
| 346 |
+
| Version | Revision | Checkpoint | What it is |
|
| 347 |
+
|---|---|---|---|
|
| 348 |
+
| **v1.2 — robustness release** | tag [`v1.2`](https://huggingface.co/Harry19081/Wald-4B/tree/v1.2) | `02600-f19` | v1.1 + merged robustness LoRA; default effort `none` |
|
| 349 |
+
| **v1.1 — general release** | tag [`v1.1`](https://huggingface.co/Harry19081/Wald-4B/tree/v1.1); weights on `main` | `022D0-f7` | Complete Decision Index run (54.59); default effort `high` |
|
| 350 |
+
| v1.0 — archive | tag [`v1.0`](https://huggingface.co/Harry19081/Wald-4B/tree/v1.0) | `021A0-f10` | Default effort `medium` |
|
| 351 |
|
| 352 |
+
The pending benchmark requests for v1.1 (JevBench issue #146, Decision Index PR #30) name fixed commits of this repository and are not affected by v1.2. The v1.0 model card retains its XL, task-LoRA and latency reports, and the [v1.0 walkthrough slides](https://claude.ai/artifact/XfCHVaCuj9A5ectrpaWzV5) describe v1.0 only. Those measurements belong to their documented builds.
|
| 353 |
|
| 354 |
## Citation
|
| 355 |
|
| 356 |
+
Wald-Q4B (2026), an open-weight 4B decision model with calibrated option probabilities. https://huggingface.co/Harry19081/Wald-4B. Name the revision you used (`v1.2` or `v1.1`).
|
| 357 |
|
| 358 |
```bibtex
|
| 359 |
@misc{wald_q4b_2026,
|
| 360 |
+
title = {Wald-Q4B: an open-weight 4B decision model with calibrated option probabilities},
|
| 361 |
author = {{Wald-4B authors}},
|
| 362 |
year = {2026},
|
| 363 |
howpublished = {\url{https://huggingface.co/Harry19081/Wald-4B}},
|
| 364 |
+
note = {Revision v1.2}
|
| 365 |
}
|
| 366 |
```
|
| 367 |
|
RUNBOOK.md
CHANGED
|
@@ -1,10 +1,45 @@
|
|
| 1 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2 |
|
| 3 |
Release: **v1.1** · checkpoint `022D0-f7`. Previous release: **v1.0**.
|
| 4 |
|
| 5 |
Download the immutable HF tag 22D0-f7 (or the full HF commit in the submission) into a fresh directory. Do not mix old v1.0 single-file weights with the new shards. MANIFEST.json lists the exact model, tokenizer, temperature and code hashes.
|
| 6 |
|
| 7 |
-
## Convenient packaged server
|
| 8 |
|
| 9 |
```sh
|
| 10 |
hf download Harry19081/Wald-4B --revision v1.1 --local-dir ./Wald-Q4B-22D
|
|
@@ -14,7 +49,7 @@ cd Wald-Q4B-22D
|
|
| 14 |
|
| 15 |
Default policy is high, repeat_state_plain, context 131072. Lower effort modes are alternative configurations with no 54.59 claim. GPU requirements: vLLM 0.30.0, BF16, NVIDIA RTX PRO 6000 96GB for comparison. The packaged server has parity tests against the reference below for prompts and answer probabilities. Scheduling may differ; latency is not established by those tests.
|
| 16 |
|
| 17 |
-
## Frozen reference protocol
|
| 18 |
|
| 19 |
The full run used eval.systemone_vllm from the private development checkout; that checkout was not committed at launch. The included reference/ files freeze the release-time implementation, with hashes in MANIFEST.json. This code provenance limitation is disclosed rather than presenting a later public commit as the original launch commit.
|
| 20 |
|
|
|
|
| 1 |
+
# Runbook
|
| 2 |
+
|
| 3 |
+
This revision (`v1.2`) holds **Wald-Q4B v1.2**, checkpoint `02600-f19`. Section 1 serves it and reproduces its JevBench public read. Section 2 is the unchanged v1.1 runbook for the complete Decision Index run: that run belongs to **v1.1** (checkpoint `022D0-f7`), so download `--revision v1.1` for it.
|
| 4 |
+
|
| 5 |
+
The server code, prompt format, tokenizer and temperature table are byte-identical in v1.1 and v1.2. The two weight shards differ, and `serving.json` declares effort `none` in v1.2 (`high` in v1.1). MANIFEST.json lists the exact model, tokenizer, temperature and code hashes of this revision.
|
| 6 |
+
|
| 7 |
+
## 1. Wald-Q4B v1.2
|
| 8 |
+
|
| 9 |
+
```sh
|
| 10 |
+
hf download Harry19081/Wald-4B --revision v1.2 --local-dir ./Wald-Q4B-v1.2
|
| 11 |
+
cd Wald-Q4B-v1.2
|
| 12 |
+
./run.sh "$PWD" # effort none (declared in serving.json), repeat_state_plain, context 131072
|
| 13 |
+
```
|
| 14 |
+
|
| 15 |
+
`GET /health` must report `"effort": "none"`. v1.2's JevBench and JevAdvBench results were measured with effort `none` and `repeat_state_plain` on one NVIDIA RTX 5090 32 GB (vLLM 0.30.0, BF16); the JevAdvBench read used a 32,768-token context limit.
|
| 16 |
+
|
| 17 |
+
JevBench public set (204/231), with `fstandhartinger/jevbench` at `9ec6f15a`:
|
| 18 |
+
|
| 19 |
+
```sh
|
| 20 |
+
cd jevbench # a checkout of fstandhartinger/jevbench at 9ec6f15a
|
| 21 |
+
for T in easy original hard; do
|
| 22 |
+
python -m jevbench.cli run --tasks datasets/public/$T.jsonl --adapter typesafe --endpoint http://127.0.0.1:8000 \
|
| 23 |
+
--model jev-latest --key-env '' --reserve-usd 0 --cost-basis self_hosted_loopback_no_tariff \
|
| 24 |
+
--results out/$T/results.jsonl --raw-dir out/raw-$T --ledger out/$T/ledger.jsonl --manifest out/$T/manifest.json \
|
| 25 |
+
--run-label wald-q4b-v1.2-pub-$T
|
| 26 |
+
done
|
| 27 |
+
cat out/easy/results.jsonl out/original/results.jsonl out/hard/results.jsonl > out/results-all.jsonl
|
| 28 |
+
python -m jevbench.cli summarize --tasks datasets/public/easy.jsonl,datasets/public/original.jsonl,datasets/public/hard.jsonl \
|
| 29 |
+
--results out/results-all.jsonl --public-export out/summary-all.json
|
| 30 |
+
```
|
| 31 |
+
|
| 32 |
+
JevAdvBench: send the benchmark's requests (`JevAdvBench/JevAdvBench` at `3218e05`, one question per request) to the same endpoint and score the answers with the benchmark's own analysis code. The benchmark data is CC BY-NC 4.0 and is not redistributed here.
|
| 33 |
+
|
| 34 |
+
## 2. Wald-Q4B v1.1: complete Decision Index run
|
| 35 |
+
|
| 36 |
+
### Reproduce Wald-Q4B 22D0-f7
|
| 37 |
|
| 38 |
Release: **v1.1** · checkpoint `022D0-f7`. Previous release: **v1.0**.
|
| 39 |
|
| 40 |
Download the immutable HF tag 22D0-f7 (or the full HF commit in the submission) into a fresh directory. Do not mix old v1.0 single-file weights with the new shards. MANIFEST.json lists the exact model, tokenizer, temperature and code hashes.
|
| 41 |
|
| 42 |
+
### Convenient packaged server
|
| 43 |
|
| 44 |
```sh
|
| 45 |
hf download Harry19081/Wald-4B --revision v1.1 --local-dir ./Wald-Q4B-22D
|
|
|
|
| 49 |
|
| 50 |
Default policy is high, repeat_state_plain, context 131072. Lower effort modes are alternative configurations with no 54.59 claim. GPU requirements: vLLM 0.30.0, BF16, NVIDIA RTX PRO 6000 96GB for comparison. The packaged server has parity tests against the reference below for prompts and answer probabilities. Scheduling may differ; latency is not established by those tests.
|
| 51 |
|
| 52 |
+
### Frozen reference protocol
|
| 53 |
|
| 54 |
The full run used eval.systemone_vllm from the private development checkout; that checkout was not committed at launch. The included reference/ files freeze the release-time implementation, with hashes in MANIFEST.json. This code provenance limitation is disclosed rather than presenting a later public commit as the original launch commit.
|
| 55 |
|
docs/readmes/README.zh.md
CHANGED
|
@@ -1,10 +1,19 @@
|
|
| 1 |
<div align="center">
|
| 2 |
-
<h1>Wald-Q4B
|
| 3 |
<p><strong>直接决策,按需思考,返回概率。</strong></p>
|
| 4 |
<p><a href="https://huggingface.co/Harry19081/Wald-4B">English</a> · <a href="https://huggingface.co/Harry19081/Wald-4B/blob/main/docs/readmes/README.zh.md">简体中文</a> · <a href="https://github.com/Harry19081/wald-4b">GitHub</a> · <a href="https://huggingface.co/Harry19081/Wald-4B/blob/main/docs/api.md">API</a></p>
|
| 5 |
</div>
|
| 6 |
|
| 7 |
-
**Wald-Q4B
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8 |
|
| 9 |
Wald-Q4B 是 TypeSafe 托管 Jev API 之外、可自行部署的独立替代方案。它不是 Jev,不含 Jev 权重,与 TypeSafe AI 没有隶属或背书关系。Hugging Face 仓库为 `Harry19081/Wald-4B`(旧名 Wald-4B)。
|
| 10 |
|
|
@@ -14,20 +23,40 @@ Wald-Q4B 是 TypeSafe 托管 Jev API 之外、可自行部署的独立替代方
|
|
| 14 |
|
| 15 |
- **4B 参数**,基于 Qwen3.5-4B-Base,BF16 权重(8.4 GB)。
|
| 16 |
- **每个选项都有概率。** 题型:`choice`(1–255 个命名选项)、`noul`(是/否)、`score`(有序等级)。
|
| 17 |
-
- **
|
| 18 |
-
- **
|
| 19 |
-
- **JevBench 公开集:203/231**,使用 `none`
|
|
|
|
|
|
|
| 20 |
- **可自行部署的 API**:`POST /v1/systemone`,最多 131,072 个提示 token。
|
| 21 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 22 |
## 快速开始
|
| 23 |
|
| 24 |
在装有 NVIDIA GPU 和 [`uv`](https://docs.astral.sh/uv/) 的 Linux 机器上:
|
| 25 |
|
| 26 |
```sh
|
| 27 |
-
hf download Harry19081/Wald-4B --revision v1.
|
|
|
|
| 28 |
cd Wald-Q4B
|
| 29 |
EFFORT=none ./run.sh "$PWD" # 一遍读出,延迟最低
|
| 30 |
-
# ./run.sh "$PWD" # 默认
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 31 |
```
|
| 32 |
|
| 33 |
```sh
|
|
@@ -35,7 +64,7 @@ curl http://localhost:8000/v1/systemone \
|
|
| 35 |
-H 'Content-Type: application/json' \
|
| 36 |
-d '{
|
| 37 |
"state": "The customer wants to return a damaged kettle.",
|
| 38 |
-
"effort": "
|
| 39 |
"questions": {
|
| 40 |
"route": {
|
| 41 |
"type": "choice",
|
|
@@ -54,17 +83,19 @@ curl http://localhost:8000/v1/systemone \
|
|
| 54 |
|
| 55 |
## 思考程度
|
| 56 |
|
| 57 |
-
直接决策可从 `none` 开始;按置信度触发思考用 `medium`;复现 v1.1 的评测配置用 `high`。
|
| 58 |
-
|
| 59 |
| Effort | 何时思考 | 思考预算 |
|
| 60 |
|---|---|---|
|
| 61 |
| `none` | 直接读取选项概率 | 不生成思考文本 |
|
| 62 |
| `low` | 初次最高概率 < 0.5 | 最多 512 token |
|
| 63 |
| `medium` | 初次最高概率 < 0.7 | 最多 512 token |
|
| 64 |
-
| **`high`(默认)** | 每个符合条件的问题 | 最多 512 token |
|
| 65 |
| `high-k2` … `high-k8` | 多次思考,平均答案分布 | 每次最多 512 token |
|
| 66 |
|
| 67 |
-
思考适用于 2–26 个选项且上下文空间足够的问题。更多选项采用分组读取,再比较各组优胜项;若放不下思考文本,则保留初次答案。提高 effort 会增加计算量,但不保证每道题都更准确。
|
|
|
|
|
|
|
|
|
|
|
|
|
| 68 |
|
| 69 |
通过 `EFFORT=medium ./run.sh "$PWD"` 设置服务默认值,也可在单次请求中传入 `"effort": "none"` 覆盖。
|
| 70 |
|
|
@@ -72,22 +103,66 @@ curl http://localhost:8000/v1/systemone \
|
|
| 72 |
|
| 73 |
Wald 先从普通文本提示末尾读取选项字母的 logits,得到初始概率。如果 effort 策略触发思考,就生成一段短思考,再读取选项。返回的概率经过分桶温度校准。
|
| 74 |
|
| 75 |
-
v1.1 结合全参数决策训练、LoRA 精修、短思考蒸馏和 RLCD。训练使用我们的自生成决策语料 **WaldGen**,并混合公开训练数据。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 76 |
|
| 77 |
## 评测
|
| 78 |
|
| 79 |
-
|
| 80 |
-
|
| 81 |
-
|
|
| 82 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 83 |
|
| 84 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 85 |
|
| 86 |
-
**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 87 |
|
| 88 |
### 速度
|
| 89 |
|
| 90 |
-
使用 `none` 时,
|
| 91 |
|
| 92 |
## 相关项目与对比
|
| 93 |
|
|
@@ -101,11 +176,12 @@ v1.1 结合全参数决策训练、LoRA 精修、短思考蒸馏和 RLCD。训
|
|
| 101 |
|
| 102 |
| 系统 | 运行方式 | 答对 |
|
| 103 |
|---|---|---:|
|
|
|
|
| 104 |
| Wald-Q4B v1.1 · `none` | 自行部署,RTX PRO 6000,2026-09-29 | 203/231 |
|
| 105 |
| Jev(`jev-1.13.0`) | TypeSafe 托管 API,2026-09-25 | 200/231 |
|
| 106 |
| Laya(英文 checkpoint `55cf4c4e`) | 自行部署,NVIDIA L4,2026-09-26 | 134/231 |
|
| 107 |
|
| 108 |
-
231 题上
|
| 109 |
|
| 110 |
**Decision Index 0.2.1:**
|
| 111 |
|
|
@@ -126,40 +202,47 @@ v1.1 结合全参数决策训练、LoRA 精修、短思考蒸馏和 RLCD。训
|
|
| 126 |
|
| 127 |
**如何做工具路由,或判断是否需要向用户提问?** 把对话或任务作为 `state` 发送。工具路由:提一个 `choice` 问题,选项就是你的工具。是否澄清:提一个 `noul` 问题,例如“这个请求是否足够具体,可以不问就执行?”概率高就执行,概率低就提问,两个阈值都在你自己的验证数据上确定。模型只选工具,不生成工具参数。
|
| 128 |
|
| 129 |
-
**
|
| 130 |
|
| 131 |
-
**
|
|
|
|
|
|
|
| 132 |
|
| 133 |
**Kev 和 Wald、Laya 和 Wald 怎么选?** 三者都开放权重。Kev 在 Qwen3.5 基座上加指针头和 LoRA;Laya 是带决策头的小型编码器;Wald 是完整训练的 4B 解码器,可选思考。我们在同一协议下的测量见上表。请根据你自己的任务、延迟预算和硬件选择。
|
| 134 |
|
| 135 |
-
**能针对我的任务微调吗?** 它是标准的 Transformers checkpoint,常见的 LoRA 工具都适用。v1.0 时我们为单个任务训练 LoRA,每个花费 $0.12–$1.81 的 GPU 时间;这套工具尚未公开,这些 adapter 也未在 v1.1 上验证([v1.0 说明](https://huggingface.co/Harry19081/Wald-4B/blob/main/history/v1.0/README.md))。
|
| 136 |
|
| 137 |
-
**许可证是什么?** 权重与代码为 Apache-2.0。基座 Qwen3.5-4B-Base 也是 Apache-2.0。部分公开训练数据有各自的条款或没有注明许可证,列在 [PROVENANCE.md](https://huggingface.co/Harry19081/Wald-4B/blob/main/PROVENANCE.md)。模型与代码的许可证不授予这些文本的权利。
|
| 138 |
|
| 139 |
## 使用限制
|
| 140 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 141 |
置信度不保证正确性,应在自己的任务上验证阈值。超过上下文限制的提示会被拒绝,不会截断。已过滤已知的严格训练重叠,但无法排除语义重叠和预训练污染;开发过程中使用了可见的基准样本。各来源文本的使用权不同,详见[评测说明](https://huggingface.co/Harry19081/Wald-4B/blob/main/CONTAMINATION.md)与[来源声明](https://huggingface.co/Harry19081/Wald-4B/blob/main/PROVENANCE.md)。
|
| 142 |
|
| 143 |
## 版本
|
| 144 |
|
| 145 |
-
| 版本 |
|
| 146 |
-
|---|---|---|
|
| 147 |
-
| **v1.
|
| 148 |
-
|
|
|
|
|
| 149 |
|
| 150 |
-
v1.0 模型卡保留其 XL、任务 LoRA 和延迟报告,[v1.0 讲解幻灯片](https://claude.ai/artifact/XfCHVaCuj9A5ectrpaWzV5)只描述 v1.0。这些测量属于各自注明的模型版本。
|
| 151 |
|
| 152 |
## 引用
|
| 153 |
|
| 154 |
-
Wald-Q4B
|
| 155 |
|
| 156 |
```bibtex
|
| 157 |
@misc{wald_q4b_2026,
|
| 158 |
-
title = {Wald-Q4B
|
| 159 |
author = {{Wald-4B authors}},
|
| 160 |
year = {2026},
|
| 161 |
howpublished = {\url{https://huggingface.co/Harry19081/Wald-4B}},
|
| 162 |
-
note = {Revision v1.
|
| 163 |
}
|
| 164 |
```
|
| 165 |
|
|
|
|
| 1 |
<div align="center">
|
| 2 |
+
<h1>Wald-Q4B</h1>
|
| 3 |
<p><strong>直接决策,按需思考,返回概率。</strong></p>
|
| 4 |
<p><a href="https://huggingface.co/Harry19081/Wald-4B">English</a> · <a href="https://huggingface.co/Harry19081/Wald-4B/blob/main/docs/readmes/README.zh.md">简体中文</a> · <a href="https://github.com/Harry19081/wald-4b">GitHub</a> · <a href="https://huggingface.co/Harry19081/Wald-4B/blob/main/docs/api.md">API</a></p>
|
| 5 |
</div>
|
| 6 |
|
| 7 |
+
**Wald-Q4B 是一个开放权重的 4B 决策模型:给它一段状态和一组选项,它为每个选项返回校准过的概率。** 它面向构建 agent 和数据流水线的开发者:需要一个快速、可自行部署的组件来选择工具、路由请求、分类输入,或判断是否需要向用户澄清。和聊天模型不同,它不生成需要再解析的答案,而是一遍读出所有选项的概率,也可以先思考再回答。它提供与 Jev 兼容的 `POST /v1/systemone` API,基于 Qwen3.5-4B-Base,以 Apache-2.0 发布。
|
| 8 |
+
|
| 9 |
+
**这个仓库里有两个版本。**
|
| 10 |
+
|
| 11 |
+
| 版本 | Revision | Checkpoint | 一句话说明 |
|
| 12 |
+
|---|---|---|---|
|
| 13 |
+
| **v1.2**(2026-10-01) | tag [`v1.2`](https://huggingface.co/Harry19081/Wald-4B/tree/v1.2) | `02600-f19` | 抗干扰版:在 v1.1 上再合并一个 LoRA 阶段,让模型在输入里混有无关句子、旁人意见或伪造指令时保持原来的答案 |
|
| 14 |
+
| **v1.1**(2026-09-29) | tag [`v1.1`](https://huggingface.co/Harry19081/Wald-4B/tree/v1.1);`main` 上的权重也是它 | `022D0-f7` | 通用版:完整 Decision Index 结果和思考档的评测都在这个版本上 |
|
| 15 |
+
|
| 16 |
+
`main` 上仍然是 v1.1 的权重,所以已有的下载和 v1.1 正在排队的基准提交都不受影响。下载时请指定 revision。
|
| 17 |
|
| 18 |
Wald-Q4B 是 TypeSafe 托管 Jev API 之外、可自行部署的独立替代方案。它不是 Jev,不含 Jev 权重,与 TypeSafe AI 没有隶属或背书关系。Hugging Face 仓库为 `Harry19081/Wald-4B`(旧名 Wald-4B)。
|
| 19 |
|
|
|
|
| 23 |
|
| 24 |
- **4B 参数**,基于 Qwen3.5-4B-Base,BF16 权重(8.4 GB)。
|
| 25 |
- **每个选项都有概率。** 题型:`choice`(1–255 个命名选项)、`noul`(是/否)、`score`(有序等级)。
|
| 26 |
+
- **v1.2 比 v1.1 更抗干扰**:在 JevAdvBench 上,九类攻击的平均翻转率为 **4.6%**(v1.1:9.2%;Jev 1.13:6.1%)。自测,effort `none`。
|
| 27 |
+
- **v1.2 的代价**:JevAdvBench 143 道人工复核题的干净准确率为 76.2%(v1.1:79.0%;−2.8 个百分点,95% 置信区间 [−6.2, −0.6])。
|
| 28 |
+
- **JevBench 公开集**:v1.2 **204/231**,v1.1 **203/231**,都使用 `none`。用 JevBench 自己的评测工具自评。
|
| 29 |
+
- **Decision Index 0.2.1**:完整套件的 **54.59**(`high`)是在 **v1.1** 上测的。v1.2 只有一遍读出的抽样结果,与 v1.1 持平(+0.27,不显著)。
|
| 30 |
+
- **可调思考程度**:`none`、`low`、`medium`、`high`,以及多次思考的 `high-k`。思考档的评测在 v1.1 上。v1.2 是一遍读出的模型,请用 `none`。
|
| 31 |
- **可自行部署的 API**:`POST /v1/systemone`,最多 131,072 个提示 token。
|
| 32 |
|
| 33 |
+
## 该用哪个版本?
|
| 34 |
+
|
| 35 |
+
| 场景 | Revision | 原因 |
|
| 36 |
+
|---|---|---|
|
| 37 |
+
| 输入里可能混有干扰、劝说或对抗性文本(网页、用户消息、工具输出、检索到的文档) | **`v1.2`** | 在 JevAdvBench 的九类攻击下,答案被改变的次数大约减半 |
|
| 38 |
+
| 输入干净可信、看重最后几个点的准确率;需要思考档;需要评测过的 Decision Index 配置 | **`v1.1`** | 干净准确率略高;完整 Decision Index(54.59,`high`)和思考档都是在它上面测的 |
|
| 39 |
+
|
| 40 |
+
两个版本的结构、分词器、提示格式、校准表和服务代码完全相同。不同的是两个权重分片,以及 `serving.json` 声明的默认 effort:v1.2 为 `none`,v1.1 为 `high`。
|
| 41 |
+
|
| 42 |
## 快速开始
|
| 43 |
|
| 44 |
在装有 NVIDIA GPU 和 [`uv`](https://docs.astral.sh/uv/) 的 Linux 机器上:
|
| 45 |
|
| 46 |
```sh
|
| 47 |
+
hf download Harry19081/Wald-4B --revision v1.2 --local-dir ./Wald-Q4B # v1.2,抗干扰版
|
| 48 |
+
# hf download Harry19081/Wald-4B --revision v1.1 --local-dir ./Wald-Q4B # v1.1,通用版
|
| 49 |
cd Wald-Q4B
|
| 50 |
EFFORT=none ./run.sh "$PWD" # 一遍读出,延迟最低
|
| 51 |
+
# ./run.sh "$PWD" # 该版本声明的默认值:v1.2 为 none,v1.1 为 high
|
| 52 |
+
```
|
| 53 |
+
|
| 54 |
+
在 Python 里同样指定 revision:
|
| 55 |
+
|
| 56 |
+
```python
|
| 57 |
+
from huggingface_hub import snapshot_download
|
| 58 |
+
|
| 59 |
+
path = snapshot_download("Harry19081/Wald-4B", revision="v1.2") # 或 revision="v1.1"
|
| 60 |
```
|
| 61 |
|
| 62 |
```sh
|
|
|
|
| 64 |
-H 'Content-Type: application/json' \
|
| 65 |
-d '{
|
| 66 |
"state": "The customer wants to return a damaged kettle.",
|
| 67 |
+
"effort": "none",
|
| 68 |
"questions": {
|
| 69 |
"route": {
|
| 70 |
"type": "choice",
|
|
|
|
| 83 |
|
| 84 |
## 思考程度
|
| 85 |
|
|
|
|
|
|
|
| 86 |
| Effort | 何时思考 | 思考预算 |
|
| 87 |
|---|---|---|
|
| 88 |
| `none` | 直接读取选项概率 | 不生成思考文本 |
|
| 89 |
| `low` | 初次最高概率 < 0.5 | 最多 512 token |
|
| 90 |
| `medium` | 初次最高概率 < 0.7 | 最多 512 token |
|
| 91 |
+
| **`high`(v1.1 默认)** | 每个符合条件的问题 | 最多 512 token |
|
| 92 |
| `high-k2` … `high-k8` | 多次思考,平均答案分布 | 每次最多 512 token |
|
| 93 |
|
| 94 |
+
思考适用于 2–26 个选项且上下文空间足够的问题。更多选项采用分组读取,再比较各组优胜项;若放不下思考文本,则保留初次答案。提高 effort 会增加计算量,但不保证每道题都更准确。
|
| 95 |
+
|
| 96 |
+
**v1.1**:直接决策可从 `none` 开始;按置信度触发思考用 `medium`;复现 Decision Index 的评测配置用 `high`。**54.59 仅对应 v1.1 的 `high`;203/231 仅对应 v1.1 的 `none`。**
|
| 97 |
+
|
| 98 |
+
**v1.2 是一遍读出的模型。** 它按一遍读出训练和评测,本页上 v1.2 的数字全部是 `none`。我们做过一次检查,思考对它没有帮助:在 JevBench 公开集上,v1.2 用 `medium` 和 `high` 各得 198/231(各跑一次),用 `none` 是 204/231;v1.1 用 `medium` 是 205/231。所以 v1.2 的 `serving.json` 把默认 effort 声明为 `none`。需要思考档请用 v1.1。
|
| 99 |
|
| 100 |
通过 `EFFORT=medium ./run.sh "$PWD"` 设置服务默认值,也可在单次请求中传入 `"effort": "none"` 覆盖。
|
| 101 |
|
|
|
|
| 103 |
|
| 104 |
Wald 先从普通文本提示末尾读取选项字母的 logits,得到初始概率。如果 effort 策略触发思考,就生成一段短思考,再读取选项。返回的概率经过分桶温度校准。
|
| 105 |
|
| 106 |
+
v1.1 结合全参数决策训练、LoRA 精修、短思考蒸馏和 RLCD。训练使用我们的自生成决策语料 **WaldGen**,并混合公开训练数据。
|
| 107 |
+
|
| 108 |
+
**v1.2 在 v1.1 上再加一个 LoRA 阶段(秩 16,作用于所有语言投影层,已合并进权重):**
|
| 109 |
+
|
| 110 |
+
- **题目**:从 v1.1 自己的训练文本里取 5,300 道题。没有新增数据来源。
|
| 111 |
+
- **扰动**:8,064 条扰动副本。每条在题干、某个选项后或状态里插入一小段文字:无关句子和离题段落,旁观者把答案往另一个选项推的意见、传言或类比,或自称有权限的伪造指令。少部分是改写和错别字。
|
| 112 |
+
- **谁写的**:**插入的文字和改写由 Claude Haiku(Anthropic 的模型)按我们自己的模板写成。** 插入由脚本完成,所以原题的事实逐字节不变。错别字由脚本生成。
|
| 113 |
+
- **核对**:每一条都由另一次 Claude Haiku 调用核对(“这处改动会不会改变正确答案?”),被判会改变的丢弃。v1.1 答案发生变化的那些行再由 Claude Sonnet 复核一遍。
|
| 114 |
+
- **训练目标**:v1.1 自己在干净题上的答案分布。也就是教模型在被扰动的题上,答得和 v1.1 在干净题上一样。另外回放 5,000 条干净题并向 v1.1 对齐,限制漂移。
|
| 115 |
+
- **与基准隔离**:没有使用任何 JevAdvBench 文本。把每段插入文字与 JevAdvBench 的全部字符串(干净题和全部 9,744 个攻击变体)做 8-gram 重叠检查,命中 0 处。
|
| 116 |
+
|
| 117 |
+
数据来源与评测说明:v1.1 [PROVENANCE.md](https://huggingface.co/Harry19081/Wald-4B/blob/main/PROVENANCE.md) · [CONTAMINATION.md](https://huggingface.co/Harry19081/Wald-4B/blob/main/CONTAMINATION.md);v1.2 [PROVENANCE.md](https://huggingface.co/Harry19081/Wald-4B/blob/v1.2/PROVENANCE.md) · [CONTAMINATION.md](https://huggingface.co/Harry19081/Wald-4B/blob/v1.2/CONTAMINATION.md)
|
| 118 |
|
| 119 |
## 评测
|
| 120 |
|
| 121 |
+
下面的数字全部是我们自己跑、自己报告的,没有一个是排行榜结果。
|
| 122 |
+
|
| 123 |
+
| 基准 | 配置 | v1.1 | **v1.2** | 说明 |
|
| 124 |
+
|---|---|---:|---:|---|
|
| 125 |
+
| **JevAdvBench,九类攻击的平均翻转率**(越低越好) | `none` | 9.2% | **4.6%** | 配对差 −4.6 个百分点,95% 置信区间 [−5.5, −3.6]。Jev 1.13:6.1% |
|
| 126 |
+
| **JevAdvBench,143 道人工复核题的干净准确率** | `none` | 79.0% | **76.2%** | 配对差 −2.8 个百分点 [−6.2, −0.6]。Jev 1.13:87.4% |
|
| 127 |
+
| **JevBench 公开集(231 题)** | `none` | 203/231(87.9%)· ECE 0.041 · Brier 0.188 | **204/231**(88.3%)· ECE 0.045 · Brier 0.191 | 用 JevBench 的评测工具自评。v1.1 已在 [issue #146](https://github.com/fstandhartinger/jevbench/issues/146) 请维护者测量;v1.2 没有提交 |
|
| 128 |
+
| JevBench 公开集(231 题) | `medium` | 205/231 | 198/231 | 各跑一次。v1.2 用 `high`:198/231 |
|
| 129 |
+
| **Decision Index 0.2.1,6,948 个请求的抽样** | 一遍读出 | 49.76 | **50.03** | 配对差 +0.27 [−0.36, +1.05],不显著 |
|
| 130 |
+
| **Decision Index 0.2.1 完整套件** | `high` | **54.59** | 未跑 | 只有 v1.1。作者自测;[PR #30](https://github.com/apolinario/decision-index/pull/30) 等待维护者验证 |
|
| 131 |
+
|
| 132 |
+
我们内部的两个非回退检查集(不是公开基准)在一遍读出下也保持住了:XL-Int 56.4(v1.1:56.0),2,857 题的工具选择集 87.22%(v1.1:87.15%)。
|
| 133 |
+
|
| 134 |
+
### 抗干扰:JevAdvBench
|
| 135 |
+
|
| 136 |
+
[JevAdvBench](https://github.com/JevAdvBench/JevAdvBench)([论文](https://arxiv.org/abs/2609.31142))对 812 道决策题做九类改动;模型在被攻击的题上的决定与它自己在干净题上的决定不同,就记一次**翻转**。我们把基准的请求原样发给打包服务(`none`),再用基准自己的分析代码(`JevAdvBench@3218e05`)判分。翻转率是占 812 道题的百分比,区间是按场景聚类自助法的 95% 区间。
|
| 137 |
|
| 138 |
+
| 攻击 | Jev 1.13 | v1.1 | **v1.2** | v1.2 − v1.1(配对) |
|
| 139 |
+
|---|---:|---:|---:|---:|
|
| 140 |
+
| Q1 改词 | 1.0 | 1.6 | 1.6 | 0.0 [−0.8, 0.8] |
|
| 141 |
+
| Q2 改写 | 1.5 | 1.6 | 1.4 | −0.2 [−1.1, 0.5] |
|
| 142 |
+
| Q3 题干里插入无关句子 | 4.6 | 14.9 | **4.6** | **−10.3 [−13.5, −7.2]** |
|
| 143 |
+
| T1 状态里插入无关说明 | 2.2 | 2.8 | 1.7 | −1.1 [−2.4, 0.0] |
|
| 144 |
+
| T2 状态里插入旁观者意见 | 12.1 | 16.9 | **5.5** | **−11.3 [−14.6, −8.2]** |
|
| 145 |
+
| T3 用类比表达的意见 | 6.9 | 12.7 | **6.3** | **−6.4 [−8.8, −3.6]** |
|
| 146 |
+
| P1 直接要求改答案 | 8.9 | 7.9 | 5.7 | −2.2 [−3.6, −0.9] |
|
| 147 |
+
| P2 冒充权威 | 10.1 | 13.7 | **6.7** | **−7.0 [−9.0, −5.1]** |
|
| 148 |
+
| P3 伪造的校验说明 | 8.1 | 10.3 | 7.8 | −2.6 [−4.2, −1.0] |
|
| 149 |
+
| **九类平均** | **6.1** | **9.2** | **4.6** | **−4.6 [−5.5, −3.6]** |
|
| 150 |
+
| 至少被一类攻击翻转的题 | 29.2 | 41.7 | 20.7 | |
|
| 151 |
+
| 干净准确率,143 道人工复核题 | 87.4 | 79.0 | 76.2 | −2.8 [−6.2, −0.6] |
|
| 152 |
|
| 153 |
+
- **Jev 一列**:随基准一起发布的 `jev-1.13.0` 回答,用同一套代码判分。v1.2 与 Jev 的平均翻转率之差:−1.6 个百分点 [−2.7, −0.4]。
|
| 154 |
+
- **干净准确率**:在人工复核的干净题上,Jev 比两个 Wald 版本都���。在全部 812 道题上,v1.2 的干净决定有 98.6% 与 v1.1 相同。
|
| 155 |
+
- **这张表不能说明的**:v1.2 的扰动类型是在看到 v1.1 的分项结果之后选的,所以基准的攻击类别影响了训练设计;基准的文本没有被使用。对这些类别之外的攻击是否更稳,没有测过。
|
| 156 |
+
|
| 157 |
+
### JevBench 与 Decision Index
|
| 158 |
+
|
| 159 |
+
**JevBench:** 使用 JevBench 自己的命令行工具(`fstandhartinger/jevbench` @ `9ec6f15a`,`typesafe` 适配器),通过本机回环逐条请求打包服务。v1.2 用 `none`,单张 RTX 5090:easy 48/48、original 72/72、hard 84/111;不生成任何 token。v1.1 用 `none`,单张 RTX PRO 6000:easy 48/48、original 72/72、hard 83/111;`medium` 为 205/231,p95 1.80 s。公开题在开发中被用作计分板(从未作为训练数据),因此这不是留出集结果。JevBench 排行榜只在维护者自己跑过模型后才公布分数。
|
| 160 |
+
|
| 161 |
+
**Decision Index(v1.1):** 150,317/150,317 个请求全部成功,包含 HLE。在单张 RTX PRO 6000 96 GB 上使用固定版本的复现工具运行。[完整结果](https://huggingface.co/datasets/Harry19081/Wald-Q4B-decision-index-results/tree/805716601b2466be324ed6716407b4c3d9267faa/runs/wald-q4b-22d0-f7-full021) · [分项成绩](https://huggingface.co/Harry19081/Wald-4B/blob/main/evaluation/benchmark-summary.json) · [复现指南](https://huggingface.co/Harry19081/Wald-4B/blob/main/RUNBOOK.md)。`main` 上 `evaluation/` 里的文件属于这次 v1.1 运行;v1.2 的数字在 `v1.2` revision 的 [`evaluation/v1.2/summary.json`](https://huggingface.co/Harry19081/Wald-4B/blob/v1.2/evaluation/v1.2/summary.json)。上表 v1.2 的抽样结果是 6,948 个请求的一遍读出,不能与 54.59 比较。
|
| 162 |
|
| 163 |
### 速度
|
| 164 |
|
| 165 |
+
延迟是在 v1.1 上测的,v1.2 没有重测;两者结构、大小和服务端相同。使用 `none` 时,v1.1 的 JevBench 运行单次决策**中位延迟 33 ms、p95 168 ms**(单张 RTX PRO 6000)。`high` 在同一 GPU 上的 32 请求串行预检中,**中位延迟为 821 ms**;这只是小规模预检,不代表完整套件延迟或 Decision Index 维护者的准入测试。effort、上下文长度、选项数量和并发都会影响速度。
|
| 166 |
|
| 167 |
## 相关项目与对比
|
| 168 |
|
|
|
|
| 176 |
|
| 177 |
| 系统 | 运行方式 | 答对 |
|
| 178 |
|---|---|---:|
|
| 179 |
+
| Wald-Q4B v1.2 · `none` | 自行部署,RTX 5090,2026-09-30 | 204/231 |
|
| 180 |
| Wald-Q4B v1.1 · `none` | 自行部署,RTX PRO 6000,2026-09-29 | 203/231 |
|
| 181 |
| Jev(`jev-1.13.0`) | TypeSafe 托管 API,2026-09-25 | 200/231 |
|
| 182 |
| Laya(英文 checkpoint `55cf4c4e`) | 自行部署,NVIDIA L4,2026-09-26 | 134/231 |
|
| 183 |
|
| 184 |
+
231 题上几题的差距在多次运行和抽样的噪声范围内。公开题影响过 Wald 的开发;231 题中有 52 题的状态超过 Laya 的 512 token 窗口。
|
| 185 |
|
| 186 |
**Decision Index 0.2.1:**
|
| 187 |
|
|
|
|
| 202 |
|
| 203 |
**如何做工具路由,或判断是否需要向用户提问?** 把对话或任务作为 `state` 发送。工具路由:提一个 `choice` 问题,选项就是你的工具。是否澄清:提一个 `noul` 问题,例如“这个请求是否足够具体,可以不问就执行?”概率高就执行,概率低就提问,两个阈值都在你自己的验证数据上确定。模型只选工具,不生成工具参数。
|
| 204 |
|
| 205 |
+
**v1.2 能防住提示注入吗?** 没有模型能完全防住。在 JevAdvBench 的九类攻击下,v1.2 改变答案的次数大约是 v1.1 的一半,但平均仍有 4.6% 的被攻击题发生翻转,20.7% 的题至少被一类攻击翻转。请把它当作多层防护中的一层:尽量不要让不可信文本进入指令,重要决定要复核。
|
| 206 |
|
| 207 |
+
**概率��准得怎么样?** 在 JevBench 公开集上使用 `none`,v1.2 的期望校准误差为 0.045,v1.1 为 0.041(10 个分桶);Brier 分数分别为 0.191 和 0.188。v1.2 沿用 v1.1 的温度表,没有改动。温度是在我们自己开发数据的留出行上拟合的,不含 JevBench 题目,并排除了已知的 Decision Index 匹配项。置信度不是保证,请在你的任务上检查校准。
|
| 208 |
+
|
| 209 |
+
**能在单张 GPU 或笔记本上运行吗?** 内置服务需要 Linux 上的一张 NVIDIA GPU(vLLM 0.30.0);BF16 权重为 8.4 GB。v1.1 的测量来自 RTX PRO 6000 96 GB,v1.2 的测量来自 RTX 5090 32 GB;同一 4B 架构的早期版本也曾用 vLLM 在 24 GB 的 NVIDIA L4 上以 16K 上下文上限运行。内置服务不支持 CPU、Apple Silicon 和笔记本环境,也没有测试过。
|
| 210 |
|
| 211 |
**Kev 和 Wald、Laya 和 Wald 怎么选?** 三者都开放权重。Kev 在 Qwen3.5 基座上加指针头和 LoRA;Laya 是带决策头的小型编码器;Wald 是完整训练的 4B 解码器,可选思考。我们在同一协议下的测量见上表。请根据你自己的任务、延迟预算和硬件选择。
|
| 212 |
|
| 213 |
+
**能针对我的任务微调吗?** 它是标准的 Transformers checkpoint,常见的 LoRA 工具都适用。v1.0 时我们为单个任务训练 LoRA,每个花费 $0.12–$1.81 的 GPU 时间;这套工具尚未公开,这些 adapter 也未在 v1.1 或 v1.2 上验证([v1.0 说明](https://huggingface.co/Harry19081/Wald-4B/blob/main/history/v1.0/README.md))。
|
| 214 |
|
| 215 |
+
**许可证是什么?** 权重与代码为 Apache-2.0。基座 Qwen3.5-4B-Base 也是 Apache-2.0。部分公开训练数据有各自的条款或没有注明许可证,列在 [PROVENANCE.md](https://huggingface.co/Harry19081/Wald-4B/blob/main/PROVENANCE.md)。模型与代码的许可证不授予这些文本的权利。v1.2 没有新增数据来源;它新增的训练文字由 Claude Haiku 写成,见上文。
|
| 216 |
|
| 217 |
## 使用限制
|
| 218 |
|
| 219 |
+
- **v1.2 用一点干净准确率换抗干扰能力**:JevAdvBench 143 道人工复核的干净题上 −2.8 个百分点(95% 置信区间 [−6.2, −0.6])。如果你更看重这一点,请用 `v1.1`。
|
| 220 |
+
- **v1.2 是一遍读出的模型。** 它的结果全部是 `none`,没有完整 Decision Index 运行;我们的一次检查里,思考档让它的 JevBench 公开集成绩变低(198/231 对 204/231)。需要思考请用 v1.1。
|
| 221 |
+
- **抗干扰能力只在一个基准上测过**,而且是在影响过训练设计的攻击类别上。它不是安全保证。
|
| 222 |
+
|
| 223 |
置信度不保证正确性,应在自己的任务上验证阈值。超过上下文限制的提示会被拒绝,不会截断。已过滤已知的严格训练重叠,但无法排除语义重叠和预训练污染;开发过程中使用了可见的基准样本。各来源文本的使用权不同,详见[评测说明](https://huggingface.co/Harry19081/Wald-4B/blob/main/CONTAMINATION.md)与[来源声明](https://huggingface.co/Harry19081/Wald-4B/blob/main/PROVENANCE.md)。
|
| 224 |
|
| 225 |
## 版本
|
| 226 |
|
| 227 |
+
| 版本 | Revision | Checkpoint | 说明 |
|
| 228 |
+
|---|---|---|---|
|
| 229 |
+
| **v1.2 — 抗干扰版** | tag [`v1.2`](https://huggingface.co/Harry19081/Wald-4B/tree/v1.2) | `02600-f19` | v1.1 + 合并的抗干扰 LoRA;默认 effort `none` |
|
| 230 |
+
| **v1.1 — 通用版** | tag [`v1.1`](https://huggingface.co/Harry19081/Wald-4B/tree/v1.1);`main` 上的权重 | `022D0-f7` | 完整 Decision Index 运行(54.59);默认 effort `high` |
|
| 231 |
+
| v1.0 — 历史版本 | tag [`v1.0`](https://huggingface.co/Harry19081/Wald-4B/tree/v1.0) | `021A0-f10` | 默认 effort `medium` |
|
| 232 |
|
| 233 |
+
v1.1 正在排队的基准提交(JevBench issue #146、Decision Index PR #30)指向本仓库的固定 commit,不受 v1.2 影响。v1.0 模型卡保留其 XL、任务 LoRA 和延迟报告,[v1.0 讲解幻灯片](https://claude.ai/artifact/XfCHVaCuj9A5ectrpaWzV5)只描述 v1.0。这些测量属于各自注明的模型版本。
|
| 234 |
|
| 235 |
## 引用
|
| 236 |
|
| 237 |
+
Wald-Q4B (2026), an open-weight 4B decision model with calibrated option probabilities. https://huggingface.co/Harry19081/Wald-4B。请注明使用的 revision(`v1.2` 或 `v1.1`)。
|
| 238 |
|
| 239 |
```bibtex
|
| 240 |
@misc{wald_q4b_2026,
|
| 241 |
+
title = {Wald-Q4B: an open-weight 4B decision model with calibrated option probabilities},
|
| 242 |
author = {{Wald-4B authors}},
|
| 243 |
year = {2026},
|
| 244 |
howpublished = {\url{https://huggingface.co/Harry19081/Wald-4B}},
|
| 245 |
+
note = {Revision v1.2}
|
| 246 |
}
|
| 247 |
```
|
| 248 |
|
evaluation/v1.2/summary.json
ADDED
|
@@ -0,0 +1,268 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"schema": "wald-q4b-release-evaluation/1",
|
| 3 |
+
"release": "Wald-Q4B v1.2",
|
| 4 |
+
"checkpoint": "02600-f19",
|
| 5 |
+
"parent": "Wald-Q4B v1.1 (022D0-f7, revision v1.1)",
|
| 6 |
+
"date": "2026-10-01",
|
| 7 |
+
"status": "All numbers are self-run and self-reported. Nothing here is a leaderboard result and nothing was submitted for v1.2.",
|
| 8 |
+
"configuration": "packaged wald-serve 0.1.0 + vLLM 0.30.0, BF16, effort none (one pass), prompt format repeat_state_plain, v1.1 temperature table; one NVIDIA RTX 5090 32 GB unless noted",
|
| 9 |
+
"weights_sha256": {
|
| 10 |
+
"model-00001-of-00002.safetensors": "0b15067f769e7388bd598aabafa2ea3211a3a0c4e49e47d07c4f65c65ffc25dd",
|
| 11 |
+
"model-00002-of-00002.safetensors": "7cff102b314edeb3dc5abfa7063f72ad3e888884da237601239dc3582074120a"
|
| 12 |
+
},
|
| 13 |
+
"jevadvbench": {
|
| 14 |
+
"benchmark": {
|
| 15 |
+
"repo": "JevAdvBench/JevAdvBench@3218e05",
|
| 16 |
+
"paper": "arXiv 2609.31142",
|
| 17 |
+
"questions": 812,
|
| 18 |
+
"scenarios": 66,
|
| 19 |
+
"attack_variants": 9744,
|
| 20 |
+
"data_licence": "CC BY-NC 4.0 (used for evaluation only; no items are redistributed here)"
|
| 21 |
+
},
|
| 22 |
+
"metric": "flip = the decision on the attacked question differs from the same model's decision on the clean question; % of 812 questions; 95% scenario-cluster bootstrap intervals (66 clusters, 2,000 resamples), the authors' analysis code",
|
| 23 |
+
"jev_column": "jev-1.13.0 responses as released with the benchmark, scored by the same code",
|
| 24 |
+
"flip_rate_pct": {
|
| 25 |
+
"Q1": {
|
| 26 |
+
"name": "word edits",
|
| 27 |
+
"jev_1_13": 1.0,
|
| 28 |
+
"v1_1": 1.6,
|
| 29 |
+
"v1_2": 1.6,
|
| 30 |
+
"v1_2_minus_v1_1_paired_pp": {
|
| 31 |
+
"point": 0.0,
|
| 32 |
+
"ci95": [
|
| 33 |
+
-0.8,
|
| 34 |
+
0.8
|
| 35 |
+
]
|
| 36 |
+
}
|
| 37 |
+
},
|
| 38 |
+
"Q2": {
|
| 39 |
+
"name": "paraphrase",
|
| 40 |
+
"jev_1_13": 1.5,
|
| 41 |
+
"v1_1": 1.6,
|
| 42 |
+
"v1_2": 1.4,
|
| 43 |
+
"v1_2_minus_v1_1_paired_pp": {
|
| 44 |
+
"point": -0.2,
|
| 45 |
+
"ci95": [
|
| 46 |
+
-1.1,
|
| 47 |
+
0.5
|
| 48 |
+
]
|
| 49 |
+
}
|
| 50 |
+
},
|
| 51 |
+
"Q3": {
|
| 52 |
+
"name": "unrelated sentences in the question",
|
| 53 |
+
"jev_1_13": 4.6,
|
| 54 |
+
"v1_1": 14.9,
|
| 55 |
+
"v1_2": 4.6,
|
| 56 |
+
"v1_2_minus_v1_1_paired_pp": {
|
| 57 |
+
"point": -10.3,
|
| 58 |
+
"ci95": [
|
| 59 |
+
-13.5,
|
| 60 |
+
-7.2
|
| 61 |
+
]
|
| 62 |
+
}
|
| 63 |
+
},
|
| 64 |
+
"T1": {
|
| 65 |
+
"name": "unrelated note in the state",
|
| 66 |
+
"jev_1_13": 2.2,
|
| 67 |
+
"v1_1": 2.8,
|
| 68 |
+
"v1_2": 1.7,
|
| 69 |
+
"v1_2_minus_v1_1_paired_pp": {
|
| 70 |
+
"point": -1.1,
|
| 71 |
+
"ci95": [
|
| 72 |
+
-2.4,
|
| 73 |
+
0.0
|
| 74 |
+
]
|
| 75 |
+
}
|
| 76 |
+
},
|
| 77 |
+
"T2": {
|
| 78 |
+
"name": "observer's opinion in the state",
|
| 79 |
+
"jev_1_13": 12.1,
|
| 80 |
+
"v1_1": 16.9,
|
| 81 |
+
"v1_2": 5.5,
|
| 82 |
+
"v1_2_minus_v1_1_paired_pp": {
|
| 83 |
+
"point": -11.3,
|
| 84 |
+
"ci95": [
|
| 85 |
+
-14.6,
|
| 86 |
+
-8.2
|
| 87 |
+
]
|
| 88 |
+
}
|
| 89 |
+
},
|
| 90 |
+
"T3": {
|
| 91 |
+
"name": "opinion through an analogy",
|
| 92 |
+
"jev_1_13": 6.9,
|
| 93 |
+
"v1_1": 12.7,
|
| 94 |
+
"v1_2": 6.3,
|
| 95 |
+
"v1_2_minus_v1_1_paired_pp": {
|
| 96 |
+
"point": -6.4,
|
| 97 |
+
"ci95": [
|
| 98 |
+
-8.8,
|
| 99 |
+
-3.6
|
| 100 |
+
]
|
| 101 |
+
}
|
| 102 |
+
},
|
| 103 |
+
"P1": {
|
| 104 |
+
"name": "direct override",
|
| 105 |
+
"jev_1_13": 8.9,
|
| 106 |
+
"v1_1": 7.9,
|
| 107 |
+
"v1_2": 5.7,
|
| 108 |
+
"v1_2_minus_v1_1_paired_pp": {
|
| 109 |
+
"point": -2.2,
|
| 110 |
+
"ci95": [
|
| 111 |
+
-3.6,
|
| 112 |
+
-0.9
|
| 113 |
+
]
|
| 114 |
+
}
|
| 115 |
+
},
|
| 116 |
+
"P2": {
|
| 117 |
+
"name": "authority impersonation",
|
| 118 |
+
"jev_1_13": 10.1,
|
| 119 |
+
"v1_1": 13.7,
|
| 120 |
+
"v1_2": 6.7,
|
| 121 |
+
"v1_2_minus_v1_1_paired_pp": {
|
| 122 |
+
"point": -7.0,
|
| 123 |
+
"ci95": [
|
| 124 |
+
-9.0,
|
| 125 |
+
-5.1
|
| 126 |
+
]
|
| 127 |
+
}
|
| 128 |
+
},
|
| 129 |
+
"P3": {
|
| 130 |
+
"name": "fake validation note",
|
| 131 |
+
"jev_1_13": 8.1,
|
| 132 |
+
"v1_1": 10.3,
|
| 133 |
+
"v1_2": 7.8,
|
| 134 |
+
"v1_2_minus_v1_1_paired_pp": {
|
| 135 |
+
"point": -2.6,
|
| 136 |
+
"ci95": [
|
| 137 |
+
-4.2,
|
| 138 |
+
-1.0
|
| 139 |
+
]
|
| 140 |
+
}
|
| 141 |
+
}
|
| 142 |
+
},
|
| 143 |
+
"mean_of_nine_delivered_attacks_pct": {
|
| 144 |
+
"jev_1_13": 6.1,
|
| 145 |
+
"v1_1": 9.2,
|
| 146 |
+
"v1_2": 4.6,
|
| 147 |
+
"v1_2_minus_v1_1_paired_pp": {
|
| 148 |
+
"point": -4.6,
|
| 149 |
+
"ci95": [
|
| 150 |
+
-5.5,
|
| 151 |
+
-3.6
|
| 152 |
+
]
|
| 153 |
+
},
|
| 154 |
+
"v1_2_minus_jev_pp": {
|
| 155 |
+
"point": -1.6,
|
| 156 |
+
"ci95": [
|
| 157 |
+
-2.7,
|
| 158 |
+
-0.4
|
| 159 |
+
]
|
| 160 |
+
}
|
| 161 |
+
},
|
| 162 |
+
"questions_flipped_by_at_least_one_attack_pct": {
|
| 163 |
+
"jev_1_13": 29.2,
|
| 164 |
+
"v1_1": 41.7,
|
| 165 |
+
"v1_2": 20.7
|
| 166 |
+
},
|
| 167 |
+
"clean_accuracy_143_human_reviewed_pct": {
|
| 168 |
+
"jev_1_13": 87.4,
|
| 169 |
+
"v1_1": 79.0,
|
| 170 |
+
"v1_2": 76.2,
|
| 171 |
+
"v1_2_minus_v1_1_paired_pp": {
|
| 172 |
+
"point": -2.8,
|
| 173 |
+
"ci95": [
|
| 174 |
+
-6.2,
|
| 175 |
+
-0.6
|
| 176 |
+
]
|
| 177 |
+
}
|
| 178 |
+
},
|
| 179 |
+
"clean_decisions_equal_to_v1_1_pct": 98.6,
|
| 180 |
+
"note": "The perturbation kinds used to train v1.2 were chosen after v1.1's per-attack results were known. No JevAdvBench text was used in training (8-gram overlap 0)."
|
| 181 |
+
},
|
| 182 |
+
"jevbench_public_231": {
|
| 183 |
+
"harness": "fstandhartinger/jevbench@9ec6f15a, jevbench.cli run + summarize, typesafe adapter, serial, loopback",
|
| 184 |
+
"dataset_hash": "dc3995d8ae1e2fc8e81ce38431add509eb8bb39b85aadfd0c7c32079382dde51",
|
| 185 |
+
"v1_2": {
|
| 186 |
+
"none": {
|
| 187 |
+
"correct": 204,
|
| 188 |
+
"of": 231,
|
| 189 |
+
"easy": "48/48",
|
| 190 |
+
"original": "72/72",
|
| 191 |
+
"hard": "84/111",
|
| 192 |
+
"ece": 0.045,
|
| 193 |
+
"brier": 0.191,
|
| 194 |
+
"gpu": "RTX 5090"
|
| 195 |
+
},
|
| 196 |
+
"medium": {
|
| 197 |
+
"correct": 198,
|
| 198 |
+
"of": 231,
|
| 199 |
+
"ece": 0.037,
|
| 200 |
+
"brier": 0.208,
|
| 201 |
+
"gpu": "RTX 5090",
|
| 202 |
+
"runs": 1
|
| 203 |
+
},
|
| 204 |
+
"high": {
|
| 205 |
+
"correct": 198,
|
| 206 |
+
"of": 231,
|
| 207 |
+
"ece": 0.072,
|
| 208 |
+
"brier": 0.204,
|
| 209 |
+
"gpu": "RTX 5090",
|
| 210 |
+
"runs": 1
|
| 211 |
+
}
|
| 212 |
+
},
|
| 213 |
+
"v1_1": {
|
| 214 |
+
"none": {
|
| 215 |
+
"correct": 203,
|
| 216 |
+
"of": 231,
|
| 217 |
+
"ece": 0.041,
|
| 218 |
+
"brier": 0.188,
|
| 219 |
+
"gpu": "RTX PRO 6000"
|
| 220 |
+
},
|
| 221 |
+
"medium": {
|
| 222 |
+
"correct": 205,
|
| 223 |
+
"of": 231,
|
| 224 |
+
"gpu": "RTX PRO 6000",
|
| 225 |
+
"runs": 1
|
| 226 |
+
}
|
| 227 |
+
},
|
| 228 |
+
"note": "The public items were a development scoreboard (never training data); not a held-out result. Latency was not measured for v1.2."
|
| 229 |
+
},
|
| 230 |
+
"decision_index_0_2_1_sample": {
|
| 231 |
+
"requests": 6948,
|
| 232 |
+
"read": "one pass (no thinking), both versions on the same RTX 5090",
|
| 233 |
+
"metric": "balanced_skill, bootstrap B=300",
|
| 234 |
+
"v1_1": {
|
| 235 |
+
"value": 49.76,
|
| 236 |
+
"ci95": [
|
| 237 |
+
47.82,
|
| 238 |
+
51.35
|
| 239 |
+
]
|
| 240 |
+
},
|
| 241 |
+
"v1_2": {
|
| 242 |
+
"value": 50.03,
|
| 243 |
+
"ci95": [
|
| 244 |
+
48.18,
|
| 245 |
+
51.65
|
| 246 |
+
]
|
| 247 |
+
},
|
| 248 |
+
"v1_2_minus_v1_1_paired": {
|
| 249 |
+
"point": 0.27,
|
| 250 |
+
"ci95": [
|
| 251 |
+
-0.36,
|
| 252 |
+
1.05
|
| 253 |
+
]
|
| 254 |
+
},
|
| 255 |
+
"note": "A sample, not the complete suite. Not comparable with the 54.59 complete-suite result, which was measured on v1.1 with effort high. v1.2 has no complete-suite run."
|
| 256 |
+
},
|
| 257 |
+
"internal_non_regression_sets": {
|
| 258 |
+
"note": "Our own sets, not public benchmarks; one pass.",
|
| 259 |
+
"xl_int": {
|
| 260 |
+
"v1_1": 56.0,
|
| 261 |
+
"v1_2": 56.4
|
| 262 |
+
},
|
| 263 |
+
"tool_selection_2857_items_accuracy_pct": {
|
| 264 |
+
"v1_1": 87.15,
|
| 265 |
+
"v1_2": 87.22
|
| 266 |
+
}
|
| 267 |
+
}
|
| 268 |
+
}
|
llms.txt
CHANGED
|
@@ -1,13 +1,14 @@
|
|
| 1 |
-
# Wald-Q4B v1.
|
| 2 |
|
| 3 |
> Open-weight 4B decision model. Given a state and typed questions (choice, yes/no, score), it returns a calibrated probability for every option through a Jev-compatible `POST /v1/systemone` API. Built on Qwen3.5-4B-Base; Apache-2.0 weights and serving code; self-hosted on one NVIDIA GPU with vLLM. Independent project, not affiliated with or endorsed by TypeSafe AI.
|
| 4 |
|
| 5 |
Key facts:
|
| 6 |
-
- Hugging Face repository: Harry19081/Wald-4B (
|
| 7 |
- Uses: tool selection, agent routing, classification, deciding whether to ask the user a clarifying question.
|
| 8 |
-
- Effort levels: `none` (one pass, no generated tokens), `low`, `medium`, `high`
|
| 9 |
-
-
|
| 10 |
-
-
|
|
|
|
| 11 |
|
| 12 |
## Docs
|
| 13 |
|
|
@@ -21,6 +22,7 @@ Key facts:
|
|
| 21 |
- [Decision Index results dataset](https://huggingface.co/datasets/Harry19081/Wald-Q4B-decision-index-results): untouched responses and scores
|
| 22 |
- [Decision Index submission PR #30](https://github.com/apolinario/decision-index/pull/30)
|
| 23 |
- [JevBench request issue #146](https://github.com/fstandhartinger/jevbench/issues/146)
|
|
|
|
| 24 |
- [model-info.json](https://huggingface.co/Harry19081/Wald-4B/blob/main/model-info.json): machine-readable facts
|
| 25 |
|
| 26 |
## Optional
|
|
|
|
| 1 |
+
# Wald-Q4B v1.2
|
| 2 |
|
| 3 |
> Open-weight 4B decision model. Given a state and typed questions (choice, yes/no, score), it returns a calibrated probability for every option through a Jev-compatible `POST /v1/systemone` API. Built on Qwen3.5-4B-Base; Apache-2.0 weights and serving code; self-hosted on one NVIDIA GPU with vLLM. Independent project, not affiliated with or endorsed by TypeSafe AI.
|
| 4 |
|
| 5 |
Key facts:
|
| 6 |
+
- Hugging Face repository: Harry19081/Wald-4B (earlier name Wald-4B). Releases: `v1.2` (tag `v1.2`, robustness release, checkpoint 02600-f19) and `v1.1` (tag `v1.1`, general release, checkpoint 022D0-f7; also the weights on `main`). Pin a revision when downloading. GitHub: Harry19081/wald-4b.
|
| 7 |
- Uses: tool selection, agent routing, classification, deciding whether to ask the user a clarifying question.
|
| 8 |
+
- Effort levels: `none` (one pass, no generated tokens), `low`, `medium`, `high`, `high-k2`…`high-k8`. Default effort: `high` for v1.1, `none` for v1.2. v1.2 is a one-pass model; thinking is evaluated on v1.1.
|
| 9 |
+
- v1.2 robustness (JevAdvBench, 812 questions, nine attack types, effort `none`, self-run): mean flip rate 4.6 % (v1.1 9.2 %, Jev 1.13 6.1 %). Cost: clean accuracy on the 143 human-reviewed questions 76.2 % (v1.1 79.0 %).
|
| 10 |
+
- JevBench public set (231 items), effort `none`: v1.2 204/231, ECE 0.045; v1.1 203/231, ECE 0.041, p50 33 ms / p95 168 ms on one RTX PRO 6000. Self-scored with JevBench's harness; the public items were a development scoreboard, not held out. Leaderboard row for v1.1 requested in fstandhartinger/jevbench issue #146; v1.2 is not submitted.
|
| 11 |
+
- Decision Index 0.2.1 complete suite, v1.1 with effort `high`: 54.59 balanced-skill index (v1.2 has no complete-suite run). Author-run; submission apolinario/decision-index PR #30 awaits maintainer validation.
|
| 12 |
|
| 13 |
## Docs
|
| 14 |
|
|
|
|
| 22 |
- [Decision Index results dataset](https://huggingface.co/datasets/Harry19081/Wald-Q4B-decision-index-results): untouched responses and scores
|
| 23 |
- [Decision Index submission PR #30](https://github.com/apolinario/decision-index/pull/30)
|
| 24 |
- [JevBench request issue #146](https://github.com/fstandhartinger/jevbench/issues/146)
|
| 25 |
+
- [v1.2 evaluation summary](https://huggingface.co/Harry19081/Wald-4B/blob/v1.2/evaluation/v1.2/summary.json): robustness and non-regression numbers for v1.2
|
| 26 |
- [model-info.json](https://huggingface.co/Harry19081/Wald-4B/blob/main/model-info.json): machine-readable facts
|
| 27 |
|
| 28 |
## Optional
|
model-00001-of-00002.safetensors
CHANGED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
size 4972947968
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:0b15067f769e7388bd598aabafa2ea3211a3a0c4e49e47d07c4f65c65ffc25dd
|
| 3 |
size 4972947968
|
model-00002-of-00002.safetensors
CHANGED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
size 3438610328
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:7cff102b314edeb3dc5abfa7063f72ad3e888884da237601239dc3582074120a
|
| 3 |
size 3438610328
|
model-files/serving.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
| 1 |
{
|
| 2 |
-
"effort": "
|
| 3 |
"prompt_format": "repeat_state_plain",
|
| 4 |
"max_model_len": 131072,
|
| 5 |
"temperature": "temperature.json"
|
|
|
|
| 1 |
{
|
| 2 |
+
"effort": "none",
|
| 3 |
"prompt_format": "repeat_state_plain",
|
| 4 |
"max_model_len": 131072,
|
| 5 |
"temperature": "temperature.json"
|
model-info.json
CHANGED
|
@@ -1,15 +1,14 @@
|
|
| 1 |
{
|
| 2 |
"name": "Wald-Q4B",
|
| 3 |
-
"version": "v1.
|
| 4 |
"aliases": [
|
| 5 |
"Wald-4B"
|
| 6 |
],
|
| 7 |
-
"checkpoint": "
|
| 8 |
-
"description": "Open-weight 4B decision model that returns a calibrated probability for every option through a Jev-compatible POST /v1/systemone API; one pass or optional thinking; self-hosted. Independent, not affiliated with TypeSafe AI.",
|
| 9 |
"base_model": "Qwen/Qwen3.5-4B-Base",
|
| 10 |
"model_url": "https://huggingface.co/Harry19081/Wald-4B",
|
| 11 |
-
"
|
| 12 |
-
"weights_tag": "v1.1",
|
| 13 |
"weight_precision": "BF16",
|
| 14 |
"parameter_scale": "4B",
|
| 15 |
"license": "Apache-2.0 (weights and code); see PROVENANCE.md for source-data usage limitations",
|
|
@@ -26,7 +25,7 @@
|
|
| 26 |
"effort"
|
| 27 |
],
|
| 28 |
"output": "per-option probabilities",
|
| 29 |
-
"default_effort": "
|
| 30 |
"efforts": {
|
| 31 |
"none": {
|
| 32 |
"gate": 0,
|
|
@@ -51,17 +50,58 @@
|
|
| 51 |
},
|
| 52 |
"thinking_scope": "2–26 options and sufficient context; wider sets use grouped readout; insufficient thought space retains initial answer",
|
| 53 |
"evaluation": {
|
| 54 |
-
"
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 65 |
},
|
| 66 |
"documentation_languages": [
|
| 67 |
"en",
|
|
@@ -80,20 +120,36 @@
|
|
| 80 |
"affiliation": "Independent; not affiliated with TypeSafe AI",
|
| 81 |
"evaluations": [
|
| 82 |
{
|
| 83 |
-
"
|
| 84 |
-
"
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 97 |
}
|
| 98 |
],
|
| 99 |
"links": {
|
|
@@ -102,6 +158,19 @@
|
|
| 102 |
"results_dataset": "https://huggingface.co/datasets/Harry19081/Wald-Q4B-decision-index-results",
|
| 103 |
"decision_index_submission": "https://github.com/apolinario/decision-index/pull/30",
|
| 104 |
"jevbench_request": "https://github.com/fstandhartinger/jevbench/issues/146",
|
| 105 |
-
"api": "https://huggingface.co/Harry19081/Wald-4B/blob/main/docs/api.md"
|
| 106 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 107 |
}
|
|
|
|
| 1 |
{
|
| 2 |
"name": "Wald-Q4B",
|
| 3 |
+
"version": "v1.2",
|
| 4 |
"aliases": [
|
| 5 |
"Wald-4B"
|
| 6 |
],
|
| 7 |
+
"checkpoint": "02600-f19",
|
| 8 |
+
"description": "Open-weight 4B decision model that returns a calibrated probability for every option through a Jev-compatible POST /v1/systemone API; one pass or optional thinking; self-hosted. Independent, not affiliated with TypeSafe AI. v1.2 is the robustness release: v1.1 plus one merged LoRA stage against distracting and adversarial text.",
|
| 9 |
"base_model": "Qwen/Qwen3.5-4B-Base",
|
| 10 |
"model_url": "https://huggingface.co/Harry19081/Wald-4B",
|
| 11 |
+
"weights_tag": "v1.2",
|
|
|
|
| 12 |
"weight_precision": "BF16",
|
| 13 |
"parameter_scale": "4B",
|
| 14 |
"license": "Apache-2.0 (weights and code); see PROVENANCE.md for source-data usage limitations",
|
|
|
|
| 25 |
"effort"
|
| 26 |
],
|
| 27 |
"output": "per-option probabilities",
|
| 28 |
+
"default_effort": "none",
|
| 29 |
"efforts": {
|
| 30 |
"none": {
|
| 31 |
"gate": 0,
|
|
|
|
| 50 |
},
|
| 51 |
"thinking_scope": "2–26 options and sufficient context; wider sets use grouped readout; insufficient thought space retains initial answer",
|
| 52 |
"evaluation": {
|
| 53 |
+
"jevadvbench": {
|
| 54 |
+
"questions": 812,
|
| 55 |
+
"attack_types": 9,
|
| 56 |
+
"effort": "none",
|
| 57 |
+
"mean_flip_rate_pct": 4.6,
|
| 58 |
+
"v1_1_mean_flip_rate_pct": 9.2,
|
| 59 |
+
"jev_1_13_mean_flip_rate_pct": 6.1,
|
| 60 |
+
"paired_diff_vs_v1_1_pp": [
|
| 61 |
+
-4.6,
|
| 62 |
+
-5.5,
|
| 63 |
+
-3.6
|
| 64 |
+
],
|
| 65 |
+
"clean_accuracy_143_human_reviewed_pct": 76.2,
|
| 66 |
+
"v1_1_clean_accuracy_pct": 79.0,
|
| 67 |
+
"clean_paired_diff_vs_v1_1_pp": [
|
| 68 |
+
-2.8,
|
| 69 |
+
-6.2,
|
| 70 |
+
-0.6
|
| 71 |
+
],
|
| 72 |
+
"harness": "JevAdvBench/JevAdvBench@3218e05 request bytes and analysis code",
|
| 73 |
+
"status": "self-run; not submitted"
|
| 74 |
+
},
|
| 75 |
+
"jevbench_public": {
|
| 76 |
+
"items": 231,
|
| 77 |
+
"effort": "none",
|
| 78 |
+
"correct": 204,
|
| 79 |
+
"accuracy": 0.8831,
|
| 80 |
+
"ece": 0.045,
|
| 81 |
+
"brier": 0.191,
|
| 82 |
+
"hardware": "NVIDIA RTX 5090 32 GB",
|
| 83 |
+
"harness": "fstandhartinger/jevbench@9ec6f15a (jevbench.cli, typesafe adapter, serial, loopback)",
|
| 84 |
+
"status": "self-scored; public items were a development scoreboard, not held out; not submitted",
|
| 85 |
+
"thinking_check": {
|
| 86 |
+
"medium_correct": 198,
|
| 87 |
+
"high_correct": 198,
|
| 88 |
+
"runs_each": 1
|
| 89 |
+
}
|
| 90 |
+
},
|
| 91 |
+
"decision_index_sample": {
|
| 92 |
+
"edition": "0.2.1",
|
| 93 |
+
"requests": 6948,
|
| 94 |
+
"read": "one pass",
|
| 95 |
+
"balanced_skill": 50.03,
|
| 96 |
+
"v1_1_balanced_skill": 49.76,
|
| 97 |
+
"paired_diff": [
|
| 98 |
+
0.27,
|
| 99 |
+
-0.36,
|
| 100 |
+
1.05
|
| 101 |
+
],
|
| 102 |
+
"status": "sample only; no complete-suite run for v1.2"
|
| 103 |
+
},
|
| 104 |
+
"details": "https://huggingface.co/Harry19081/Wald-4B/blob/v1.2/evaluation/v1.2/summary.json"
|
| 105 |
},
|
| 106 |
"documentation_languages": [
|
| 107 |
"en",
|
|
|
|
| 120 |
"affiliation": "Independent; not affiliated with TypeSafe AI",
|
| 121 |
"evaluations": [
|
| 122 |
{
|
| 123 |
+
"note": "v1.1 results (not this revision's weights)",
|
| 124 |
+
"decision_index_complete_suite": {
|
| 125 |
+
"benchmark": "Decision Index",
|
| 126 |
+
"edition": "0.2.1",
|
| 127 |
+
"scope": "complete suite",
|
| 128 |
+
"score": 54.59,
|
| 129 |
+
"metric": "balanced_skill",
|
| 130 |
+
"requests": 150317,
|
| 131 |
+
"ok": 150317,
|
| 132 |
+
"effort": "high",
|
| 133 |
+
"hardware": "NVIDIA RTX PRO 6000 96 GB",
|
| 134 |
+
"status": "author-run; maintainer validation pending",
|
| 135 |
+
"submission": "https://github.com/apolinario/decision-index/pull/30"
|
| 136 |
+
},
|
| 137 |
+
"jevbench_public": {
|
| 138 |
+
"benchmark": "JevBench",
|
| 139 |
+
"split": "public",
|
| 140 |
+
"items": 231,
|
| 141 |
+
"effort": "none",
|
| 142 |
+
"correct": 203,
|
| 143 |
+
"accuracy": 0.8788,
|
| 144 |
+
"ece": 0.041,
|
| 145 |
+
"brier": 0.188,
|
| 146 |
+
"latency_p50_ms": 33,
|
| 147 |
+
"latency_p95_ms": 168,
|
| 148 |
+
"hardware": "NVIDIA RTX PRO 6000 96 GB",
|
| 149 |
+
"harness": "fstandhartinger/jevbench@9ec6f15a (jevbench.cli, typesafe adapter, serial, loopback)",
|
| 150 |
+
"status": "self-scored; public items were a development scoreboard, not held out; leaderboard measurement requested",
|
| 151 |
+
"request": "https://github.com/fstandhartinger/jevbench/issues/146"
|
| 152 |
+
}
|
| 153 |
}
|
| 154 |
],
|
| 155 |
"links": {
|
|
|
|
| 158 |
"results_dataset": "https://huggingface.co/datasets/Harry19081/Wald-Q4B-decision-index-results",
|
| 159 |
"decision_index_submission": "https://github.com/apolinario/decision-index/pull/30",
|
| 160 |
"jevbench_request": "https://github.com/fstandhartinger/jevbench/issues/146",
|
| 161 |
+
"api": "https://huggingface.co/Harry19081/Wald-4B/blob/main/docs/api.md",
|
| 162 |
+
"evaluation_summary": "https://huggingface.co/Harry19081/Wald-4B/blob/v1.2/evaluation/v1.2/summary.json"
|
| 163 |
+
},
|
| 164 |
+
"weights_sha256": {
|
| 165 |
+
"model-00001-of-00002.safetensors": "0b15067f769e7388bd598aabafa2ea3211a3a0c4e49e47d07c4f65c65ffc25dd",
|
| 166 |
+
"model-00002-of-00002.safetensors": "7cff102b314edeb3dc5abfa7063f72ad3e888884da237601239dc3582074120a"
|
| 167 |
+
},
|
| 168 |
+
"parent_release": {
|
| 169 |
+
"version": "v1.1",
|
| 170 |
+
"checkpoint": "022D0-f7",
|
| 171 |
+
"tag": "v1.1",
|
| 172 |
+
"revision": "50f94ecd5d6e7e8459e9c198ef811bfaba12a3fe"
|
| 173 |
+
},
|
| 174 |
+
"thinking_note": "v1.2 is a one-pass model. On the JevBench public set it scored 198/231 with medium and with high (one run each) against 204/231 with none. Thinking efforts are evaluated on v1.1.",
|
| 175 |
+
"training_data_note": "perturbed copies of v1.1 training questions; inserted texts written by Claude Haiku (Anthropic) from our templates; targets are v1.1 answers on the clean questions; no JevAdvBench text"
|
| 176 |
}
|
serving.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
| 1 |
{
|
| 2 |
-
"effort": "
|
| 3 |
"prompt_format": "repeat_state_plain",
|
| 4 |
"max_model_len": 131072,
|
| 5 |
"temperature": "temperature.json"
|
|
|
|
| 1 |
{
|
| 2 |
+
"effort": "none",
|
| 3 |
"prompt_format": "repeat_state_plain",
|
| 4 |
"max_model_len": 131072,
|
| 5 |
"temperature": "temperature.json"
|