Skip to content
System One

jevals

A Python evals and guardrails library for agent traces that uses Jev-style decision models instead of an LLM judge, running Jev through TypeSafe or Vercel, or Kev or Laya locally on a Mac. All checks for a trace go out as one request in a few hundred milliseconds.

openlayer-ai/jevals on GitHub

Stars
81
Forks
3
Language
Python
License
MIT
Last push
23 Sep 2026

Read from GitHub on . Counts change daily.

Reported by the author

Variance vs LLM
92-913x92x to 913x the score variance of Jevgithub.com

jevals is a Python library for evaluating and guardrailing agent traces using typed decision models instead of a general LLM as judge. All the checks for one trace go out as a single request that the project says costs a few thousandths of a cent and returns in a few hundred milliseconds, cheap and fast enough to run on every trace, including inside the agent’s own loop rather than as a separate offline pass. It works with Jev over the TypeSafe or Vercel APIs, with Kev or Laya running locally on a Mac, or with a regular chat LLM as a slower, more expensive fallback. Traces can be passed in as OpenAI chat format, Anthropic content blocks, or LangChain message objects directly.

The project’s stated motivation is that an LLM-as-judge setup like Ragas is expensive by design: faithfulness alone costs two LLM calls, answer relevancy costs three plus embeddings, and context precision costs one call per retrieved chunk, which the authors calculate works out to six to eleven round trips and several seconds for four metrics on a single sample. That cost is why most teams eval only a small fraction of traffic, if any, rather than running checks on the request path. The authors also cite a LangChain comparison in which GPT and Claude judges showed 92 to 913 times the score variance of Jev on identical traces.

How it uses Jev

    self.api_key = api_key or os.environ.get("TYPESAFE_API_KEY")
    self.base_url = (base_url or os.environ.get("TYPESAFE_BASE_URL") or "https://api.typesafe.ai").rstrip(
        "/"
    )
    self.model = model or os.environ.get("TYPESAFE_MODEL")
    self.name = name or "jev"
    self.timeout = timeout
    self.zero_data_retention = zero_data_retention
    self.price_per_m_input = JEV_PRICE_PER_M_INPUT if self.name == "jev" else 0.0
    self.price_per_m_output = 0.0
    if not self.api_key:
        raise BackendError("TYPESAFE_API_KEY is not set")
    self.timeout = timeout

async def evaluate(self, state: Any, questions: dict[str, Question]) -> BackendResponse:

View in src/jevals/backends/typesafe.py

Open on GitHub

More like this

Use cases this is tagged with