wfzyx/von

认证创作者 wfzyx 已认证
🤗 Hugging Face 来源zero-shot-classificationapache-2.0395M 参数1.6 GBsafetensors✓ 3 个校验和今天更新
磁力链接🌱 0✓ 与 Hugging Face 一致

Von 1.3

Von is an open-source, non-autoregressive System One decision model. It answers structured decisions — pick an option, judge a condition, rate a level — in a single bidirectional forward pass, with no token generation and no chain of thought.

  • Version: 1.3 (von-1.3.0; engine release, weights unchanged from 1.2)
  • Size: 395M (ModernBERT-large backbone + Option-Marker scoring head)
  • Context: 8192 tokens
  • Repo: https://github.com/wfzyx/von
  • License: Apache-2.0

Previously published as wfzyx/von-1.0. The repo was renamed once model naming moved to version numbers; the old id still redirects, so existing installs keep working.

How it works

The premise and every candidate option are packed into one sequence. Each option gets a [MASK] marker whose final hidden state is scored by a small head. One forward pass yields a full probability distribution over the options.

This is why Von is fast: cost is a single encoder pass regardless of option count, instead of one generation per candidate.

New in 1.3: chain-of-options, real usage tokens

1.3 changes the inference engine, not the weights. A deterministic chain-of-options controller runs on states with computable structure (two dates, a date and a duration, two amounts): a regex proposer lists typed spans, every chain whose typed slots bind is executed by a fixed operator library (date math with month-end clamping, DST-aware zone conversion, proration, cumulative sums), computed datetimes feed a bounded second round so chains compose, and Von reads the original state plus the computed facts in its normal single forward pass. Von's own Choice decisions bind the slots; nothing reads the question; zero generated tokens. Paired gate on the JevBench public items, chains on vs off: hard 37.8 → 44.1 % (2 vs 9 discordant, p = 0.065), zero discordant pairs on easy, standard and jabr v2 (989 items). usage.input_tokens is now the tokenizer's count over every encoder pass (was chars/4). Details: README.md and results/speed_remeasure.md in the repo.

New in 1.2: order-invariant option scoring

In 1.1, every option marker also attended to the other options, and its rotary position depended on how many options preceded it. That made the answer depend on the order the options happened to be listed in: on JevBench's option-order diagnostic, 49.5% of Von 1.1's hard-tier answers changed when the options were reordered (reference models: 0–5%).

1.2 removes that dependence at the architecture level. Inside the encoder:

  • an option's tokens attend only to the shared premise and to that option's own tokens (never to another option),
  • every option's position ids restart at the end of the premise, as if it were the only option present,
  • ModernBERT's local sliding-window attention is computed from those position ids, not from raw sequence index.

Each option's logit is therefore a function of (premise, that option) alone. This is a mathematical guarantee, not a training tendency: permuting the options permutes the logits and changes nothing else. Measured on the trained weights, JevBench hard tier, 111 items × 4 orderings: 0 flips.

The trade: options can no longer "look at each other" inside the encoder. Comparison happens in the softmax over per-option logits instead. 1.2 was retrained from the 1.1 weights under the new mask and recovers 1.1's accuracy on every public tier.

Usage

pip install "von-sdk>=1.3.1"
import von

answer = von.decide(
    state="Order #123 was never delivered and the customer is asking for their money back.",
    choices={
        "refund": "Issue a refund",
        "track_order": "Help track the package",
        "escalate": "Escalate to a human agent",
    },
)
print(answer.choice, answer.confidence)

Serve the native TypeSafe-compatible /v1/systemone endpoint:

von serve --port 8000            # chains on; --no-chains for the plain 1.2 path

A TypeScript/JavaScript SDK is also available: npm install von-sdk.

Calibration

Von returns calibrated probabilities. Confidence is produced by an input-conditioned temperature map — a bounded linear function of the option-distribution entropy, the state length, and the option count — stored in marker_calibration.json as calibration_map.

A single global temperature cannot serve both ends of a difficulty range: easy items should stay sharp, hard items must admit they are near chance. Temperature scaling is monotonic, so this never changes an answer — only how confident Von claims to be.

Measured on JevBench's public items using its own ece_top_label metric:

Tier Accuracy Mean confidence ECE
easy 100.0% 89.1% 0.109
standard 63.9% 65.9% 0.045
hard 36.9% 44.4% 0.089

The map was fitted on the 231 public JevBench items, so treat these as in-sample. In-sample JevBench Calibration axis 77.4; split-half validation (fit on half, score the untouched half) gives 67.6. No JevBench item was used for gradient training.

Evaluation

JevBench public splits (official harness):

Split n Von 1.1 Von 1.2 Order flips (4 orderings)
easy 48 0.938 1.000 —
original (standard) 72 0.653 0.639 —
hard (public half) 111 0.387 0.387 1.1: 49.5% → 1.2: 0.0%

Von is strongest on short, well-posed decisions and weakest on long multi-clause policy documents requiring multi-hop composition. A marker-distance probe confirms the model reads its premise accurately out to ~2048 tokens, so the hard-tier gap is compositional depth rather than a retrieval or context-length limitation.

Files

File Purpose
model.safetensors ModernBERT-large backbone
option_marker.pt Option-Marker scoring head
marker_calibration.json Fitted calibration map, zero-shot noul prior, and independent_options: true (tells the SDK to run the order-invariant attention mode — required for these weights)
config.json, tokenizer* Standard HF config and tokenizer

Limitations

  • English only.
  • Not a generative model: it selects and scores, it does not write text.
  • Near-chance on long multi-hop legal/policy reasoning; do not use it unsupervised for high-stakes contract adjudication.
  • Zero-shot Noul (no criteria given) uses a fitted context-free prior correction; on a held-out 175-item dev set it scores 85.1% (1.1: 81.7%).
  • Calibration was fitted on public benchmark data and may drift on very different domains. Refit with benchmarks/fit_calibration.py if you depend on the confidence values.

Citation

@software{von2026,
  title  = {Von: An Open-Source System One Decision Model},
  author = {Panisa, Victor Hugo},
  year   = {2026},
  url    = {https://github.com/wfzyx/von}
}