Skip to main content

FastJev

English | 简体中文

FastJev semantic decision architecture

An SDK-first toolkit for fast, self-hosted semantic decisions with open models.

An independently maintained fork of TheoLeeCJ/SemIf.

Fork lineage and independence. fastjev preserves the Git history and MIT license of SemIf, formerly OpenJev, while following an independent roadmap. fastjev is not affiliated with or endorsed by TheoLeeCJ, TypeSafe, or Jev. Jev, TypeSafe, and other names and marks remain the property of their respective owners.

Why fastjev

fastjev has three priorities, in this order:

  • SDK-first integration: the public Python package is the primary interface for applications. CLI commands remain available for reproducibility, operations, and debugging.
  • Independent iteration: maintainers can choose release timing, compatibility policy, and engineering priorities without waiting for upstream changes.
  • Faster inference: generation-free scoring, resident model serving, measured cache reuse, and backend profiling are first-class priorities. Performance changes must include reproducible evidence and must not trade away decision quality silently.

Faster inference is a project direction, not an unqualified claim that every fastjev path is faster or more accurate than upstream, Jev, or another serving stack. The measurements below define the hardware, models, workloads, and known semantic differences. Historical benchmark artifacts and media retain SemIf/OpenJev names where renaming would invalidate checksums or misrepresent recorded runs.

Most agent decisions are small: route this, retry that, does the evidence support X? A chat model can answer them, but it spends time generating text that software immediately parses back into an if statement.

Jev is TypeSafe's closed service for runtime-defined semantic decisions. This project reproduces that interface pattern with open models; it does not reproduce Jev's undisclosed model or training.

This baseline reads typed option probabilities directly from a model. No answer sentence, JSON repair, or decoding loop.

Current focus

  • Serve the documented System One wire shape from a resident open model.
  • Reduce decision latency without silently changing direct-scoring semantics.
  • Keep model revisions, benchmark inputs, row-level outputs, and limitations auditable.

SDK quick start

Apple Silicon: use the native MLX backend for direct scoring, serial prefix reuse, and parallel shared-state decisions on macOS arm64. Until MLX-LM publishes the required normalization fix, install the validated source revision explicitly alongside the MLX extra:

pip install -e '.[mlx]' \
  'mlx-lm @ git+https://github.com/ml-explore/mlx-lm.git@a63e24c389382619eb6d9af656e3b46024be217a'

Then add --backend mlx to the scorer command.

Python 3.10+, CUDA, and a GPU that can hold a 4B BF16 model:

python -m venv .venv
. .venv/bin/activate
export HF_HOME=/path/to/large-drive/huggingface
pip install -e '.[torch]'

Keep the backend resident and score runtime-defined decisions through the typed SDK:

from fastjev import Choice, FastJev, Option

jev = FastJev.from_pretrained(
    "Qwen/Qwen3.5-4B",
    revision="851bf6e806efd8d0a36b00ddf55e13ccb7b8cd0a",
)
result = jev.decide(
    state="Customer cannot access an account after a password reset.",
    question=Choice("Which queue should handle this request?", [
        Option("access", "Account access support."),
        Option("billing", "Billing support."),
    ]),
)
print(result.value, result.probabilities)
jev.close()

FastJev depends only on the ScoringBackend protocol. The built-in Torch, MLX, and optional vLLM implementations are adapters, so changing the runtime does not change Choice, Boolean, Score, or result types. Install .[vllm] for batched CUDA inference through vLLM. See the Python SDK guide for setup, batching, result semantics, backend contracts, and System One adaptation.

Install .[api] and import create_app from fastjev.http only when an HTTP boundary is needed.

CLI and service wrappers

Run the owned examples from a shell:

CUDA_VISIBLE_DEVICES=0 fastjev-score \
  --mode direct \
  --model Qwen/Qwen3.5-4B \
  --revision 851bf6e806efd8d0a36b00ddf55e13ccb7b8cd0a \
  --input examples/decisions.jsonl \
  --output results.jsonl

Each result contains typed option scores, timing, the exact model revision, and a prompt hash.

If every row has the same exact state, switch to --mode shared to prefill it once and evaluate the criteria in parallel.

System One-compatible HTTP API

Install the api extra and run fastjev-serve to keep one model resident behind POST /v1/systemone and GET /v1/models. The adapter accepts TypeSafe's documented state, model, and questions wire shape, including noul, choice, and score questions. It does not serve Jev or reproduce Jev calibration; requests must name the configured fastjev model.

See System One-compatible API for the server command, request example, authentication, confidence definition, and compatibility limits.

How it works

flowchart LR
    S[Unstructured state] --> M[4B model]
    C[Runtime criteria] --> M
    O[Typed options] --> M
    M -- native option logits --> P[Probabilities]
  • Runtime-defined: criteria and option descriptions arrive with the request.
  • Decision-native: one forward pass reads declared option logits; no answer token is sampled.
  • Shared-state aware: one long state can be prefetched once, then branched across many criteria.
  • Auditable: the owned fixture, exact runners, row-level outputs, revisions, prompts, and known failures are committed.

Speed

Decisions versus a compact generated array

Same frozen Qwen3.5-4B, same owned state, same 21 binary criteria, one RTX 3090:

Output path Time Output tokens Result
Direct typed logits, median of 3 1.023 s 0 21 probability pairs
Autoregressive JSON array, median of 3 5.332 s 111 Valid ordered 21-value array

The compact generative baseline emits only ordered "yes"/"no" values—no keys, confidence objects, or explanations. Its median first-token time was 0.489 s, but completing the array took 5.21× as long as direct readout. All three arrays were valid and identical. Their choices agreed with direct argmax on 18/21 criteria, so this is a systems comparison rather than a claim that the two readouts are semantically equivalent. Exact prompt, outputs, token timeline, and runs are committed.

Reusing a state across 21 decisions

On an owned 37-state × 21-criterion workload:

Execution path Decisions/s 777 decisions
Fresh direct scoring 2.33 333.1 s
Serial prefix reuse 10.75 72.3 s
Parallel suffixes 20.03 38.8 s
Native reranker 1.86 417.3 s

The owned 37×21 fixture, direct/reuse runner, reranker runner, raw timings, and row-level predictions are included. The fast reuse paths are experimental: BF16 execution changed 5–6 of 777 argmaxes relative to fresh scoring.

Quality

Browser model ladder

System Browser artifact Download Authored balanced accuracy Perturbation balanced accuracy TypeSafe subset agreement
Qwen3-0.6B Q8_0 639 MB 0.440 0.528 0.407
MiniCPM5-2B Q4_K_M 1.56 GB 0.686 0.693 0.637
Qwen3.5-4B Q4_K_M 3.01 GB 0.813 0.766 0.845
Published Jev Closed hosted service — — — 0.883

Native BF16 scores. Browser builds use quantized GGUF. Jev is TypeSafe's published result on the same 102-row subset.

General decision baseline

Frozen workload Rows Direct logits (4B) Native reranker (4B) Published Jev
Authored decisions, balanced accuracy 144 0.813 0.625 —
WANLI, balanced accuracy 256 0.637 0.522 —
TypeSafe selected subset, modal agreement 102 across 20 cases 0.845 0.560 0.883
Every judgment grid, accuracy 36 0.806 0.694 —
Every action firewall, composed accuracy 10 actions 0.700 0.700 —
Every code retrieval, Recall@1 6 queries 1.000 1.000 —
Every company knowledge, Recall@1 7 queries 0.929 0.929 —

The reranker remained strong at retrieval ranking, but direct logits were the better general-decision baseline.

The Jev number is read from TypeSafe's published records; we did not run a live Jev endpoint. The comparison covers the 102 rows that could be aligned from public artifacts, not TypeSafe's reported 711-row aggregate.

Input

{
  "id": "route-1",
  "state": "Customer cannot access an account after a password reset.",
  "question": "Which queue should handle this request?",
  "options": [
    {"id": "access", "description": "Account access support."},
    {"id": "billing", "description": "Billing support."}
  ]
}

Returned probabilities are conditional on the supplied options. Calibrate and validate them on the workload where they will make decisions. state may also be a nonempty JSON object or array. Direct modes preserve it as structured JSON; reranker mode renders it as document text.

Documentation

Evaluation sources

Model weights and third-party source records are not included. Upstream models retain their licenses. Project code is released under the MIT License.

The installed distribution and public Python package are both named fastjev; fastjev-score and fastjev-serve are secondary wrappers. The internal semif_phase1 package and the semif-score/semif-serve command aliases are retained for compatibility with inherited scripts and artifacts.

Metadata

Release files for fastjev 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fastjev 0.1.0
File Size Uploaded
fastjev-0.1.0.tar.gz 48.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for fastjev 0.1.0
File Interpreter ABI Platform
fastjev-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 92.4 kB

Release files / fastjev-0.1.0.tar.gz

Download URL fastjev-0.1.0.tar.gz
Size 48.9 kB
Tags Source
SHA-256 checksum
How to use checksums
c6e9e4019a07a34c47083b9d2d50ebede872859937fe801892a12b8e3d2ef658
BLAKE2b-256 checksum
How to use checksums
af9448f50435ba387bede570d3ec5c756be962bcf6e1dbf88d839dd10debc1ad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 21, 2026.

Transparency log

Release files / fastjev-0.1.0-py3-none-any.whl

Download URL fastjev-0.1.0-py3-none-any.whl
Size 43.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
079d11c3460b4d5e4a963a550a53c5d2e880f1f63701ced961747381a536d66b
BLAKE2b-256 checksum
How to use checksums
49f1649e3d5a53c06759bdc9c3782335e8df57efc9f1f0116926ced18b480fdc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 21, 2026.

Transparency log

Release history Release notifications | RSS feed

0.2.0

2 release files

0.1.1

2 release files

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page