JEVDB
DuckDB extension and Python package for semantic SQL that batches row-level filters, joins and classification on Jev.
Overview
JEVDB (Just Evaluation and Verification Database) is a semantic database built on DuckDB that runs semantic filters, semantic joins, classification and scoring over text as part of ordinary SQL, accompanied by an arXiv paper, a website and a Colab notebook. SQL functions include jev_holds for a boolean filter on one record or a join condition on a pair, jev_probability for the underlying probability, jev_choose for one label from a list, and jev_score for a position on ordered levels. Ordinary predicates in the same WHERE clause are applied first, semi and anti joins work through EXISTS, and ORDER BY a score with LIMIT gives top-k.
By default it batches decisions on Jev in a single stage, returning probabilities, labels and scores directly with no generated explanation; run this way without key pruning it is called JEVDB-Flash. Optional key conditions remove impossible pairs, an optional cascade sends uncertain decisions to a second-stage model, and an OpenAI-compatible LLM backend is available for users without a Jev account. It does not generate text, so extraction, rewriting and summarisation are out of scope. Keys come from an environment-backed secret and never appear in SQL.
What the decision model decides
| Type | Question | Answers |
|---|---|---|
| Yes / no | Does this condition hold for the row (e.g. the review is clearly positive)? | — |
| Choice | Which label classifies this row? | — |
| Score | Where does this row fall on the given levels? | — |
| Yes / no | Does the condition hold for this pair of rows (semantic join)? | — |
How it works
- Create a Jev secret from the environment
- Write SQL using jev_holds, jev_choose, jev_score
- Ordinary predicates run first; semantic decisions batched in one stage
- Optional pruning and cascade for uncertain decisions
Strengths
- Semantic operations inside ordinary DuckDB SQL
- Single-stage batching
- LLM fallback backend for users without Jev
Caveats
- Semantic joins can be costly on large tables
- No text generation operators
Getting started
pip install jevdb, then `con = jevdb.connect()` and `CREATE SECRET jev (TYPE jev, PROVIDER env)` with JEV_API_KEY set.At a glance
- Type
- Plugin
- Status
- research
- Language
- C++
- Runtime
- DuckDB extension / Python package
- Has code
- yes
Use cases and integrations
How curated lists describe it
DuckDB extension for semantic queries that batches row-level decisions on Jev in one stage, with an OpenAI-compatible LLM backend as the alternative and a Colab notebook.
MrJev/awesome-jev
Frequently asked questions
What SQL functions does it add?
jev_holds, jev_probability, jev_choose and jev_score.
Can it summarise text?
No, it only makes decisions; extraction and summarisation are out of scope.
Do I need a Jev account?
No, an OpenAI-compatible LLM backend is available as an alternative.
Related projects
Filament table filter that scores each row with a Jev Noul on a plain-English statement and keeps rows at or above 0.8.
PluginbetaPHPdbt package and Terraform module adding jev_noul, jev_choice, jev_score and jev_ask SQL functions to Snowflake.
LibrarybetaSQLPortable SQLite C extension depending only on libcurl that adds jev_noul, jev_choice and jev_score SQL functions.
PluginbetaCHigh-throughput native DuckDB extension that batches and streams Jev Noul, Choice and Score judgments directly from SQL.
PluginbetaC++PostgreSQL extension with jev(), jev_prob, jev_choice and jev_score to filter, rank and classify rows by plain-language conditions.
PluginbetaCSQLite loadable extension and Python package exposing Jev Noul, Choice and Score as SQL functions and batched virtual-table scans.
PluginbetaC