At a glance
- Does
- Asks Jev to choose one labelled option and takes Confident or Unsure
- Emits
- jev.choice, jev.confidence, jev.probabilities, jev.outlet
- Needs
- A Jev account, an OpenRouter provider, or Watchflows Sparks
Set it up
Give the question and a list of Options — each one a key and a plain-words description. Jev returns a probability for every option; the node takes Confident when the winner clears the Minimum confidence threshold and Unsure when it does not. Downstream, {{jev.choice}} is the key it picked, so a Condition routes on it with no string wrangling.

Add an other or none option so Jev has somewhere to put what does not fit. Without one it must force an answer into a bucket that was never meant for it.
Leave State empty to send the whole payload as an object. A single {{path}} that resolves to an object or array is sent structured, never as stringified JSON. Narrow it where you can — accuracy falls as unrelated context grows.
A third outlet, Failure, is the recovery path. It carries error and errorType when the call itself throws — TypeSafe down, the rate limit exhausted, a question it refuses. Leave it unwired and a thrown call stops the run as it always has; wire it and the run carries on down that branch instead.
Three things can pay for a Jev question, and Account is where you pick: a Jev account connected in Settings → Integrations, any OpenRouter provider you have added in Settings → AI Providers, or Watchflows Sparks if you have any. OpenRouter hosts the same model at the same price, so the answer, the outlets and your thresholds are identical whichever you choose — Sparks run these nodes with nothing to paste — the free 2,000 Sparks included. The Jev nodes stay out of the palette only while you have none of the three.
Configure
| Field | Default | What it does |
|---|---|---|
| Account | — | Who pays: a connected Jev account, OpenRouter — <provider>, or Watchflows Sparks. Left unset it uses whichever one you have — the row says which. |
| Model | jev-latest | jev-latest, jev-preview, or a dated release like jev-1.13.0 to pin a flow whose thresholds must not drift. On OpenRouter and Sparks a dated release is sent without its patch number — jev-1.13.0 asks for jev-1.13, the same release — and jev-preview is not offered at all, so a node pinned to it says so instead of running. |
| State | — | What Jev evaluates. Empty sends the whole payload. |
| Question | — | The instruction, in plain words. |
| Options (key = description) | — | At least two key = description pairs. Descriptions carry the distinguishing detail. |
| Minimum confidence | 0.5 | At or above this the Confident outlet fires; below it, Unsure. |
Output
Every key is available downstream as {{key}}, and jev arrives as real structure, not a JSON string.
| Key | Type | Value |
|---|---|---|
jev.choice | String | The key of the option it picked |
jev.confidence | Number | How peaked the distribution is, 0–1 |
jev.probabilities | Object | Option key to probability, summing to 1 — {{jev.probabilities.billing}} |
jev.outlet | String | The branch taken: Confident or Unsure |
jev.model | String | The Jev release that answered, e.g. jev-1.13.0 |
jev.provider | String | Which route answered: typesafe, openrouter or sparks |
jev.usage.inputTokens | Number | Input tokens billed for this call; output is free |
error | String | Failure outlet only: the human-readable message |
errorType | String | Failure outlet only: the category — apiError for a refused call, invalidConfiguration for a node that is not set up, sparksExhausted when a Sparks-paid question runs out of credit, sparksSettling while Watchflows AI gets this Mac ready (a few minutes) |
Example: route a message to the right team
One inbound message, three options — billing, bugs, other. Confident feeds a Condition on {{jev.choice}} that routes it the rest of the way. Wire Unsure to a person.

Paste this into the Flow Builder to get the same flow:
Ask Jev which team should handle an incoming message — billing, bugs or other — and branch on the answer, sending anything it is unsure about to me.
Good to know
Vague options produce a genuinely ambiguous answer, not a wrong one. Two descriptions that overlap split the probability between them and the node lands on Unsure. Describe what tells the options apart, not what the key already says.
Want the pick with no gate? Drag the slider to 0. Every run takes Confident, and {{jev.choice}} and {{jev.confidence}} ride the payload for a Condition of your own.