Open source · Early preview

Jev forgets every call.
DecideDB doesn't.

Call Jev through our SDK and every request and response is saved to your database. You make the calls, so your Jev API key never leaves your app. Grade each answer, and let those scores feed your best past decisions back into new calls with Jev RAG.

Get started
requests
IDTimeTypeAnswerConfidenceGrade
req_8f2a1c14:02:11Choicerefund_request0.91Good
req_8f29e714:01:58Noulyes0.74Ungraded
req_8f29b014:01:40Score7.2 / 100.62Bad
req_8f298114:01:12Choicebilling0.88Good
req_8f294414:00:57Noulno0.55Ungraded
Sample data

How it works

One SDK. No schema to design.

Advanced Experimental

Gets better as you grade.

Turn on retrieval and the SDK adds your best-graded past decisions to new Jev calls as examples. They're cached in the SDK, so most calls get them with no extra network trip. Off by default, and built to be A/B tested.

plain requestRAG-augmented (examples, and the response to them)

What gets saved

Your JSON, already in SQL.

We split every call into clean Postgres tables for you, labeled with who made it: user ID, group and tags. Query it with any SQL tool.

sent to DecideDB
{
  "decidedb_user_id": "user_482",
  "decidedb_group_id": "support-bot",
  "tags": ["prod", "tickets"],
  "request": {
    "model": "jev-latest",
    "state": "I was charged twice.",
    "questions": {
      "tone": {
        "type": "choice",
        "instructions": "What is the tone?",
        "criteria": {
          "calm": null,
          "frustrated": null,
          "angry": null
        }
      }
    }
  }
}

blob_req

req_idbody
r1{ …jsonb… }

states

idtexthash
s1I was charged twice…9f2c…

requests

idmodel_reqstate_iduser_idgroup_id
r1jev-latests1user_482support-bot

request_tags

request_idtag
r1prod
r1tickets

instructions

idtext
i1What is the tone?

question_versions

idquestion_keytypeinstruction_id
qv1tonechoicei1

criteria

qv_idpositionoption_key
qv10calm
qv11frustrated
qv12angry

request_questions

request_idqv_id
r1qv1

Grading

Judge decisions by outcomes, not vibes.

Confidence tells you how sure Jev was. Grades tell you whether it was right. Send one request when the real result comes in, and the dashboard shows which question types and confidence ranges you can actually trust.

  • Grade minutes or weeks later, using the request ID
  • Re-grade any time; the latest grade wins
  • Filter the table by graded, ungraded, good or bad
terminal
# Every proxied response carries an x-decidedb-request-id header.
# Once you know the outcome, grade that request:
curl -X POST http://localhost:8080/v1/requests/req_8f2a1c/grade \
  -H "Content-Type: application/json" \
  -d '{ "grade": "good", "note": "customer accepted the refund" }'

Built to stay boring

The plumbing, already assembled.

Postgres, nothing else

Hot fields get real columns, the full payload is kept as JSONB. Query it with any tool you already know.

One command

Proxy, database and dashboard ship in one Docker Compose file. Self-host it on a laptop or a single small VM.

Retrieval Experimental

Optionally feed graded past examples back into new requests. Off by default, because few-shot injection can help, hurt, or do nothing.

Start logging your Jev calls in a few minutes.

Read the quickstart