Skip to main content

fuzzy-jev for Python

Python bindings for fuzzy-jev: ask TypeSafe's Jev typed questions about a piece of text through OpenRouter's decisions endpoint, and get probabilities back — a Choice between named options, a Score on an ordered scale, or a Noul, the probability that something is true. Rules then combine those answers by fuzzy logic into decisions and amounts, and draw themselves as SVG.

The package is fuzzy-jev; it is imported as jev. It is the Rust library underneath, so a question, a reply and a rules file mean exactly what they mean to the jev command.

Install

pip install fuzzy-jev

Wheels are built for Linux and macOS (x86_64 and arm64), for CPython 3.10 and later. Anywhere else pip builds from source, which needs a Rust toolchain. From a checkout of this repository:

pip install ./python          # or: uv pip install ./python

For development, maturin develop builds it into the active virtual environment.

Ask

import jev

client = jev.Client()  # the key from OPENROUTER_API_KEY; or jev.Client("sk-or-...")
reply = client.decide(
    "Help! My payouts have been failing for 3 days.",
    {
        "is_urgent": jev.Question.noul(
            "Does this message convey urgency?", yes="Explicitly time-sensitive", no="No urgency expressed"
        ),
        "department": jev.Question.choice(
            "Which team should handle this?",
            {"billing": "Payments, invoicing, refunds", "technical": "Bugs, outages, integrations", "sales": "Pricing"},
        ),
        "frustration": jev.Question.score("How frustrated is the customer?", ["Calm", "Frustrated", "Very angry"]),
    },
)

reply.noul("is_urgent")                  # 0.95
department = reply.choice("department")  # ChoiceAnswer: .choice, .confidence, .probabilities
reply.score("frustration").score         # 1.04, between levels 1 and 2
print(reply.render("table"))             # as `jev --table` prints it
reply.usage.cost                         # in US dollars

The state can be a string, a dict or a list; instructions and criteria can be any JSON value too. Questions are a dict of id to Question, or (id, question) pairs; a question can also be a dict in the endpoint's shape ({"type": "noul", "instructions": ...}), and jev.load_questions(text) reads a jev -q questions file.

decide releases the GIL while it waits, so threads ask in parallel; await client.decide_async(...) is the same for asyncio. client.request(state, questions) is the request body decide would send, without sending it.

Errors are all jev.JevError: StatusError (with .status), HttpError, DecodeError, InvalidQuestionError (raised before any call), MissingAnswerError, WrongTypeError, BadAnswerError, NumericalError and RulesError.

Rules

questions = jev.load_questions(open("examples/rules/triage.json").read())
rules = jev.Rules(open("examples/rules/triage.toml").read(), questions)  # checked now, before a call

reply = client.decide(ticket, questions)
outcome = rules.evaluate(reply)
outcome.yes                              # ["page on-call", ...]: the items at or over the threshold
outcome["reply_within"].value            # an output's crisp value, in hours here
print(outcome.text())

open("triage.svg", "w").write(rules.graph_svg(reply))

See docs/rules.md for the whole of the rules file.

More

The whole guide: questions, the reply, rules, drawings, errors, threads and asyncio, and releasing.

Tests

maturin develop && pytest

Metadata

Release files for fuzzy-jev 0.4.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 fuzzy-jev 0.4.0
File Size Uploaded
fuzzy_jev-0.4.0.tar.gz 206.6 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for fuzzy-jev 0.4.0
File
fuzzy_jev-0.4.0-cp310-abi3-manylinux_2_28_x86_64.whl CPython 3.10 abi3 Linux glibc 2.28+ x86-64 Details
fuzzy_jev-0.4.0-cp310-abi3-manylinux_2_28_aarch64.whl CPython 3.10 abi3 Linux glibc 2.28+ ARM64 Details
fuzzy_jev-0.4.0-cp310-abi3-macosx_11_0_arm64.whl CPython 3.10 abi3 macOS 11.0+ ARM64 Details
fuzzy_jev-0.4.0-cp310-abi3-macosx_10_12_x86_64.whl CPython 3.10 abi3 macOS 10.12+ x86-64 Details

Total release size: 11.9 MB

Release files / fuzzy_jev-0.4.0.tar.gz

Download URL fuzzy_jev-0.4.0.tar.gz
Size 206.6 kB
Tags Source
SHA-256 checksum
How to use checksums
c94cdad6293a1360f88e40b9d6ce6f7488d25552f2ec06aa89b05fac305fe8dc
BLAKE2b-256 checksum
How to use checksums
c1476ff369264b080eb1d8f5350f662d8975d9102e0b663d67e04ee74d388d4b
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 26, 2026.

Transparency log

Release files / fuzzy_jev-0.4.0-cp310-abi3-manylinux_2_28_x86_64.whl

Download URL fuzzy_jev-0.4.0-cp310-abi3-manylinux_2_28_x86_64.whl
Size 3.1 MB
Tags CPython 3.10 Linux glibc 2.28+ x86-64 abi3
SHA-256 checksum
How to use checksums
8b8fb960b51fb7687c32b3b5da8ae5258b2e556a3494ae9bee6bf9d828aac483
BLAKE2b-256 checksum
How to use checksums
a95730233c9b4e5774f0ac9b4a939392ec264e00d1566f8fda250db8a745e90a
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 26, 2026.

Transparency log

Release files / fuzzy_jev-0.4.0-cp310-abi3-manylinux_2_28_aarch64.whl

Download URL fuzzy_jev-0.4.0-cp310-abi3-manylinux_2_28_aarch64.whl
Size 2.9 MB
Tags CPython 3.10 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
8b808d5e4077230fe18db52d82075b00b2b1fa141e9ea08fbfe36dd2d559769b
BLAKE2b-256 checksum
How to use checksums
b3646611a517ee1f56255696f8f793e390a1208aad025bace7e8cb009f30dd22
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 26, 2026.

Transparency log

Release files / fuzzy_jev-0.4.0-cp310-abi3-macosx_11_0_arm64.whl

Download URL fuzzy_jev-0.4.0-cp310-abi3-macosx_11_0_arm64.whl
Size 2.8 MB
Tags CPython 3.10 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
e9155206e9f1527ab12d39d52cfd94a760b4976e0206430a053dff4fd79cfdc4
BLAKE2b-256 checksum
How to use checksums
c14de538d8b03092936f0f029ed29cbe06f2a7a0e72a213f7b86929a21bb1fab
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 26, 2026.

Transparency log

Release files / fuzzy_jev-0.4.0-cp310-abi3-macosx_10_12_x86_64.whl

Download URL fuzzy_jev-0.4.0-cp310-abi3-macosx_10_12_x86_64.whl
Size 3.0 MB
Tags CPython 3.10 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
06e76bcca4be8ce24de0d01bcba36ec37052905954d04386e54076dd796a5ba9
BLAKE2b-256 checksum
How to use checksums
af39c6392427fb88f32986e2f9fb588ea7ae676402a2fe19664a9997ce93181d
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 26, 2026.

Transparency log

Release history Release notifications | RSS feed

0.6.0

5 release files

0.5.0

5 release files

This release

0.4.0 This release

5 release files

0.3.1

5 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