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.
| ID | Type | Answer | Grade |
|---|---|---|---|
| req_8f2a1c | Choice | refund_request | Good |
| req_8f29e7 | Noul | yes | Ungraded |
| req_8f29b0 | Score | 7.2 / 10 | Bad |
| req_8f2981 | Choice | billing | Good |
| req_8f2944 | Noul | no | Ungraded |
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.
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.
{ "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_id | body |
|---|---|
| r1 | { …jsonb… } |
states
| id | text | hash |
|---|---|---|
| s1 | I was charged twice… | 9f2c… |
requests
| id | model_req | state_id | user_id | group_id |
|---|---|---|---|---|
| r1 | jev-latest | s1 | user_482 | support-bot |
request_tags
| request_id | tag |
|---|---|
| r1 | prod |
| r1 | tickets |
instructions
| id | text |
|---|---|
| i1 | What is the tone? |
question_versions
| id | question_key | type | instruction_id |
|---|---|---|---|
| qv1 | tone | choice | i1 |
criteria
| qv_id | position | option_key |
|---|---|---|
| qv1 | 0 | calm |
| qv1 | 1 | frustrated |
| qv1 | 2 | angry |
request_questions
| request_id | qv_id |
|---|---|
| r1 | qv1 |
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
# 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