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.5.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.5.0
File Size Uploaded
fuzzy_jev-0.5.0.tar.gz 211.5 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for fuzzy-jev 0.5.0
File
fuzzy_jev-0.5.0-cp310-abi3-manylinux_2_28_x86_64.whl CPython 3.10 abi3 Linux glibc 2.28+ x86-64 Details
fuzzy_jev-0.5.0-cp310-abi3-manylinux_2_28_aarch64.whl CPython 3.10 abi3 Linux glibc 2.28+ ARM64 Details
fuzzy_jev-0.5.0-cp310-abi3-macosx_11_0_arm64.whl CPython 3.10 abi3 macOS 11.0+ ARM64 Details
fuzzy_jev-0.5.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.5.0.tar.gz

Download URL fuzzy_jev-0.5.0.tar.gz
Size 211.5 kB
Tags Source
SHA-256 checksum
How to use checksums
1f4003d69788661ddd2abfa11baa4f3649a80eb84548986e4c5c62379ac24cf2
BLAKE2b-256 checksum
How to use checksums
253ba9feb2619fd6201b084fc3c6db6ec0a2fe252083dd113a9e5a9d39aefad5
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.5.0-cp310-abi3-manylinux_2_28_x86_64.whl

Download URL fuzzy_jev-0.5.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
d6cf18622d6aab2d4c06b55156d260c34914c1feac28238e1f92732d278a88a7
BLAKE2b-256 checksum
How to use checksums
4b29bd82d67cf4fac76a9c406bdc7567f0d28974fb7f3e27f65b1de40e666cc2
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.5.0-cp310-abi3-manylinux_2_28_aarch64.whl

Download URL fuzzy_jev-0.5.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
4db3a6e4a3d9630101a9cd6e62a64558ad0f44318318638c49575b214c69357e
BLAKE2b-256 checksum
How to use checksums
bd26ac54686649b1d89dc5dc76df118f5b7a0a28eb3bd0e2033ad1e30b3e0a8b
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.5.0-cp310-abi3-macosx_11_0_arm64.whl

Download URL fuzzy_jev-0.5.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
8bf055bcf337864e436afc927f67f1eb608c010af5aca71e1ac47e53f241fed1
BLAKE2b-256 checksum
How to use checksums
3f044f13d3684b8a4b4d87d102a044779519fb77f95e76ad38dee2058ec46f2a
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.5.0-cp310-abi3-macosx_10_12_x86_64.whl

Download URL fuzzy_jev-0.5.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
fc3a60d7b50caf993bf9df6a14f98791fa686c133d54d86135a3912ea42941b0
BLAKE2b-256 checksum
How to use checksums
f1d24d379b3930f91ef4c3655622e88386c7a5e3dbc8b2f5c824b5ec3f22c1a5
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

This release

0.5.0 This release

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