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.6.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.6.0
File Size Uploaded
fuzzy_jev-0.6.0.tar.gz 218.9 kB Details

Built distributions (wheels)

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

Total release size: 12.2 MB

Release files / fuzzy_jev-0.6.0.tar.gz

Download URL fuzzy_jev-0.6.0.tar.gz
Size 218.9 kB
Tags Source
SHA-256 checksum
How to use checksums
1e70e9b8dabdf3c9598ba64577d5be6fece1815e8e7837560e65d93a330e4c67
BLAKE2b-256 checksum
How to use checksums
b429cb2f5420de7f714de6fe4bc0038ea2bb412c31f546d824a7c3e060bd6be5
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 Oct 1, 2026.

Transparency log

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

Download URL fuzzy_jev-0.6.0-cp310-abi3-manylinux_2_28_x86_64.whl
Size 3.2 MB
Tags CPython 3.10 Linux glibc 2.28+ x86-64 abi3
SHA-256 checksum
How to use checksums
4e145d6a4c1a68c6b94a69da8574eef20c8408e23479dae8195f5210e86f89cf
BLAKE2b-256 checksum
How to use checksums
1ae7f5773b03331a4c01f61cec122b0a277c5238b2ce733d240ed9ad0256d41e
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 Oct 1, 2026.

Transparency log

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

Download URL fuzzy_jev-0.6.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
9d618a39f845d2a313791939ddde7ce6baa296365f3e9b353d3a81fc22ad19f7
BLAKE2b-256 checksum
How to use checksums
eee95c8299f8e27b122d7a10caf2673d4f0b9f6432c5caeaa9e72b8d44c7eb2b
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 Oct 1, 2026.

Transparency log

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

Download URL fuzzy_jev-0.6.0-cp310-abi3-macosx_11_0_arm64.whl
Size 2.9 MB
Tags CPython 3.10 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
cb9d15811c86ed98dd7284e144ba0e5b8fb6f7b4a74f717c12b218d767165ad7
BLAKE2b-256 checksum
How to use checksums
d66df9ea57ac5918bd327a701f6893e4db4c1ce0109435f751222811959c7c60
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 Oct 1, 2026.

Transparency log

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

Download URL fuzzy_jev-0.6.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
2ad2f3cd8b31e14a698a56d5e82091c7b60712de19012419488a6f19f30300d0
BLAKE2b-256 checksum
How to use checksums
7f56c4c744c512128b19ebcb4f08a2ccb0aeea161d132f9ded2668d2f9e216b4
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 Oct 1, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.6.0 This release

5 release files

0.5.0

5 release files

0.4.0

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