judgevet
Typed client, CLI and MCP server for TypeSafe's Jev (System One) judgment model.
What is verified
This library is on PyPI and usable: pip install judgevet. This section says
how much of it has been checked against the real service, because the answer
is "most, not all" and you should know which parts before you rely on them.
The response shape is verified. The error surface is partly verified. Everything else is still inferred from documentation.
A live-marked test passes against the real API, and three probe calls on
2026-09-21 settled what had been guesswork:
- The success shape parses field for field — including the parts easiest to
get wrong. A noul answer carries no
confidencewhile choice and score do;scoreis continuous, not an index;legendis a map keyed by stringified position. The real probabilities summed to exactly 1.0, the choice appeared in its own map, and the score sat inside its legend, so the domain's invariants do not reject real data. modelin a response is the resolved version. Sendingjev-latestreturnedjev-1.13.0.detailon an error is polymorphic: an object for authentication errors, an array for validation errors. Documentation did not say so, and code that assumes either shape breaks on the other.
Still inferred, and marked as such in STATUS.md: the 429 and 529 bodies —
one needs abusing the service, the other cannot be provoked — every model
other than jev-1.13.0, and any field no call has exercised.
The repository marks README.md and docs/reference/api.md as draft
rather than stable under its own documentation trust levels — one model and
two error statuses is not the whole surface. That is a statement about
documentation coverage, not about whether the package works.
What Jev is
Jev is not a chat model and not a coding model. You send it a piece of state and a set of typed questions, and it returns one answer per question with a calibrated probability:
| question | answer |
|---|---|
Noul |
yes/no, with a probability |
Choice |
one option from a set you defined, with per-option probabilities |
Score |
a position on a scale you defined, with a legend |
Typed answers let code branch, sort and route without parsing prose.
Why this client exists
The official TypeSafe Python SDK provides synchronous and asynchronous clients.
judgevet combines a typed library with two inbound adapters, CLI and MCP, over one contract-tested core. The library is the artifact: scripts, hooks and CI can call it directly. STATUS.md separates verified claims from inferences.
domain/ question and answer types, calibrated probabilities — pure
ports/ protocols the domain calls out through
adapters/outbound/ HTTP to the Jev API
adapters/inbound/ cli.py — scripts, hooks, CI
mcp.py — agents
import-linter enforces that map, and keeps the optional MCP runtime out of
everything but its own adapter.
Use
uv sync
uv run judgevet --help
The MCP server is an optional extra, so the library and CLI install without an MCP runtime:
uv sync --extra mcp
Developer workflows
Version 0.5.0 supports reusable question files, file/stdin state and explicit acceptance policies:
judgevet --state-file document.txt --questions-file questions.json --policy policy.json --json
A successful judgment exits 0 when its policy passes and 3 when it does not. Input/service failures exit 1; invalid usage exits 2. Without a policy, a low probability remains a successful judgment.
See file inputs, policy rules, and the opt-in staged-diff example. Installation covers the library, CLI and MCP command.
CLI and MCP diagnostics stay quiet at the default log level. Set
JEV_LOG__LEVEL=debug to emit one http.call event per HTTP call to stderr.
Events contain the requested model, question count, HTTP status (or null before
an answer arrives), and success/error outcome. They exclude caller payloads,
headers and exception text. Non-TTY diagnostics use JSON lines; JEV_LOG__FORMAT
can force json or console. MCP SDK warnings/errors use a safe mcp.runtime
event with severity only. Debug CLI failures have a diagnostic line followed by
the existing error envelope on stderr; stdout retains its existing JSON shape.
Library imports do not configure logging, and unconfigured library calls stay
silent. Applications may configure structlog themselves to receive events.
Gates
uv run ruff check . && uv run ruff format --check .
uv run ty check
uv run lint-imports
uv run docvet check
uv run pytest -q --cov
Coverage floor is 90%. live-marked tests touch the real API and are excluded
by default.
Sister projects
Shares the toolchain and hex layout used by automarket, vramfit and docvet.
Release files for judgevet 0.6.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| judgevet-0.6.0.tar.gz | 43.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| judgevet-0.6.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 97.1 kB
Release files / judgevet-0.6.0.tar.gz
| Download URL | judgevet-0.6.0.tar.gz |
|---|---|
| Size | 43.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0ddd2f7736b33f63e3f1598a4ab06da1a8f2a01eb6c1aca028ba049615e03b2d
|
|
BLAKE2b-256 checksum How to use checksums |
6cd97a08eaf4cf723f8dd413b182f9e3acb6f4aaa80e35c03dea69c3408233b7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.18 {"installer":{"name":"uv","version":"0.12.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / judgevet-0.6.0-py3-none-any.whl
| Download URL | judgevet-0.6.0-py3-none-any.whl |
|---|---|
| Size | 53.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4f6ceef2b47694feec24e1d5d987f1ebc6d9c1f94b7ec5add4f0eda73f52e547
|
|
BLAKE2b-256 checksum How to use checksums |
1fe676f0d09e21e6f3845deffb456f2b82a160fafa01736126b8cf90032b5fa2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.18 {"installer":{"name":"uv","version":"0.12.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|