jev (Elixir)
Elixir/OTP library treating Jev as a peer process whose answers arrive as messages you pattern match in GenServer clauses.
Overview
The jev Hex package brings TypeSafe Jev and compatible decision models to OTP. Jev acts as a peer process: a GenServer replies with questions, and Jev's answer arrives as a message handled in handle_answer/3. Clause order is the routing and thresholds are guards, so the README's triage example labels an issue as security when that probability exceeds 0.5, or as a high-priority bug when the kind confidence is above 0.85 and severity is high.
The server never blocks on Jev, so many calls can be in flight and each answer finds its clause when it arrives. Because nothing below handle_answer touches the network, tests call it with literal maps. It can also point at self-hosted models using the same wire format. It requires Elixir 1.18+ and OTP 27+, with guides on questions, servers, recursive workflows, telemetry and testing.
What the decision model decides
| Type | Question | Answers |
|---|---|---|
| Choice | What kind of issue is this? | bug · feature · other |
| Score | How severe is it for users? | Cosmetic · Workaround · Blocks · Data loss |
| Yes / no | Does this describe a vulnerability? | — |
How it works
- GenServer handle_call replies with questions for Jev
- Jev processes asynchronously
- handle_answer clauses match on answers and confidence guards
- Reply to the original caller with the result
Strengths
- Idiomatic OTP design with non-blocking calls
- Network-free tests on literal maps
- Works with self-hosted compatible endpoints
Caveats
- Early version (0.1)
- Requires recent Elixir and OTP
Getting started
Add `{:jev, "~> 0.1"}` to deps and set TYPESAFE_API_KEY (or configure a compatible endpoint).At a glance
- Type
- Library
- Status
- beta
- Language
- Elixir
- Runtime
- OTP library
- Has code
- yes
- Has tests
- yes
- License
- MIT
Use cases and integrations
How curated lists describe it
Elixir ecosystem: GenServer client that replies with Jev's answer so callers can pattern match on it directly.
yibie/awesome-jevHex package [`jev`](https://hex.pm/packages/jev): Jev as a peer GenServer; answers arrive as messages you pattern-match, with network-free tests
AnotiaWang/awesome-decision-modelsIntegrates Jev as an asynchronous Elixir/OTP process whose replies are handled with GenServer pattern matching.
logicrw/awesome-jev-projectsTypeSafe Jev for OTP: reply to Jev from a GenServer and pattern match on its…
wh000wh000/awesome-jev-liveElixir/OTP client designed around GenServer replies and pattern matching.
cobanov/awesome-jevTypeSafe Jev for OTP: reply to Jev from a GenServer and pattern match on its answer.
hellogumbo/awesome-jev
Frequently asked questions
How do I route on answers?
Write handle_answer clauses; clause order is the routing and guards hold thresholds.
Does a call block my server?
No, many calls can be in flight and answers arrive as messages.
Can I use a local model?
Yes, any self-hosted model that speaks the same wire format.
Related projects
Local service to define, test and publish versioned Jev judgment functions, callable over HTTP by backends and over MCP by agents.
MCP serverbetaTypeScriptRuby gem that stores Jev Noul, Choice and Score answers about a record's text as ordinary ActiveRecord columns you can query.
LibrarybetaRubyUnofficial Go client for TypeSafe System One with generics that bind each choice, score and noul answer to a declared Go type.
ProjectbetaGoPython dialect that adds a '~' operator and jev/case blocks so a branch can ask Jev a yes/no, scale or choice question.
ProjectprototypePythonProvider-independent .NET decision engine with a separate TypeSafe Jev provider package mapping Choice, Score and Noul to /v1/systemone.
LibrarybetaC#Ruby gem for the Jev API with ask (Noul), choose (Choice) and score (Score) builders and a uniform result accessor.
LibrarybetaRuby