Skip to main content

jevclient

Async Python client for TypeSafe Jev, the System One decision model. Jev answers typed questions about a state and returns values, so there is no text to parse.

import asyncio
from jevclient import JevClient, Noul, Choice, Score

async def main():
    async with JevClient("your-api-key") as jev:
        answers = await jev.ask(
            "The front door has been unlocked for 40 minutes and nobody is home.",
            {
                "warn": Noul("Should someone be warned about this?"),
                "area": Choice("Which area is this about?",
                               {"security": "Doors, locks, alarms",
                                "climate": "Heating and ventilation"}),
                "urgency": Score("How urgent is it?",
                                 ["Ignore", "Today", "Right now"]),
            },
        )
    print(answers["warn"].noul)          # 0.94
    print(answers["area"].choice)        # "security"
    print(answers["area"].probabilities) # {"security": 0.97, "climate": 0.03}
    print(answers["urgency"].score)      # 1.8, between "Today" and "Right now"

asyncio.run(main())

Three question types

Type Ask it You get back
Noul a yes/no question noul, the probability the answer is yes
Choice pick one of your options choice, probabilities, confidence
Score rate against ordered levels score, legend, probabilities, confidence

A Noul carries no confidence, because the probability is the whole answer.

What one call costs

Every question in a call is evaluated in isolation against the same state, and the API answers them in parallel. Measured from the Netherlands on 2026-09-17:

questions input tokens latency
3 521 712 ms
25 1,242 690 ms
100 4,017 714 ms
400 15,417 1,336 ms

Two things follow. Batching questions into one call is nearly free in time, so ask everything you want to know at once. It is not free in money: question text is billed as input tokens, roughly 38 for a short question, and output is billed at zero.

Those figures are first calls on a cold connection. Over 16 calls from the same place, a warm connection answered in 250 to 580 ms.

A choice takes 2 to 255 options and a score takes 2 to 10 levels. Both are checked locally, so a mistake costs no request.

Install

pip install jevclient

Requires Python 3.12 and aiohttp. Pass your own aiohttp.ClientSession if you have one, and the client will use it and leave closing it to you.

Errors

JevAuthError (401), JevValidationError (422), JevRateLimitError (429, carries retry_after), JevOverloadedError (529) and JevConnectionError, all deriving from JevError. There is no internal retry loop, so the caller decides the policy.

A Choice with fewer than two options and a Score with fewer than two levels are refused locally, before a request is spent on a 422.

Not affiliated with TypeSafe

This is an independent client. See the TypeSafe docs for the API itself.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jevclient-1.1.0.tar.gz (9.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

jevclient-1.1.0-py3-none-any.whl (9.7 kB view details)

Uploaded Python 3

File details

Details for the file jevclient-1.1.0.tar.gz.

File metadata

  • Download URL: jevclient-1.1.0.tar.gz
  • Upload date:
  • Size: 9.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for jevclient-1.1.0.tar.gz
Algorithm Hash digest
SHA256 d60c477f8cb3342595a6a5d3846d80a5d3484d7aa59cbaa1ed28e44881f27a17
MD5 0ffa1d9149b0d46ff2f3891bfa5cbff6
BLAKE2b-256 cf557a223c162d106bc67b9511b92c35204e4a6e3cc3aeb8f6ffb6416c6f2353

See more details on using hashes here.

Provenance

The following attestation bundles were made for jevclient-1.1.0.tar.gz:

Publisher: python-publish.yml on AboveColin/jevclient

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jevclient-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: jevclient-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 9.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for jevclient-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d25187c6a3befeedf7aba79e92eb3e34c83720f1bc8606bfc5e04805836dbe8e
MD5 a846e3ca0adc2a8ca314a17ea1716b5a
BLAKE2b-256 ed09636b680e84a4b8806aff67db86cb86e7652e697340bb860c2871ce8c63e9

See more details on using hashes here.

Provenance

The following attestation bundles were made for jevclient-1.1.0-py3-none-any.whl:

Publisher: python-publish.yml on AboveColin/jevclient

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

1.1.0 This release

2 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