0481GitHub
jevclient
Async Python client for typed Jev questions and probabilities.
AboveColin/jevclientREADME ↗
# jevclient
Async Python client for [TypeSafe](https://typesafe.ai) Jev, the System One decision
model. Jev answers typed questions about a state and returns values, so there is no
text to parse.
```python
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 |