Skip to content
ReviewRamble

The weekly brief

AI, reviewed, in your inbox.

  • New reviews of tools, models, MCP servers and repos, with the verdict up front
  • Re-checked prices and ratings when something changes
  • New analysis pieces as they are published

Models, agents, MCP servers and the tools actually worth your time.

One email a week. Unsubscribe with the link in any brief. How we use your email

pg-jev

Postgres extension that filters, ranks and classifies rows with plain-language conditions judged by TypeSafe's Jev model.

Reviewed by Sheela · Updated

View on GitHub Open source

Our rating

3.7/5

A neat way to ask fuzzy questions of a table in SQL, as long as you accept a full scan, a superuser install and rows leaving the database.

What is pg-jev?

pg-jev adds SQL functions such as jev(), jev_prob(), jev_choice() and jev_score() to PostgreSQL. Write WHERE jev(tickets, 'the customer is angry') and each row is sent to TypeSafe's Jev, a decision model that returns a calibrated probability rather than generated text. There is no index, embedding or vector column; it is a full scan by design.

The extension is written in PL/Python. It reads the table ahead, packs 20 rows per request, keeps up to twice the concurrency setting (16 by default) in flight and caches answers for the session. The README measures a 2,000-row table at about 3.5 seconds and $0.012 on the first run and about 50 ms when cached. The endpoint can point at a local Jev-compatible server such as stuntd so rows never leave the network.

The project is by a single developer, under the PostgreSQL Licence, created in September 2026, with about 1,238 stars and 13 commits. The latest release is v0.2.1 (3 October 2026), also published on PGXN.

Is pg-jev worth it?

pg-jev makes a narrow job pleasant: questions about rows that SQL cannot express, such as whether a ticket threatens to cancel or which team should handle it. Because jev() is an ordinary boolean function, it composes with joins, GROUP BY and LIMIT, and cheaper predicates in the same WHERE clause run first, so WHERE age > 60 AND jev(...) only sends the survivors.

The engineering notes are better than most projects this size. The author measured why the batch is 20 rows: batches of 1 to 20 were fully correct against ground truth, 40 dropped to 92 to 98% and 80 to 77 to 94%. The README also explains the cost of a cold connection and that the per-session cache grows without bound until cleared. (The project website still describes batches of 40 and six concurrent requests; the README is newer.)

The limits are structural. Every row the executor asks about goes to the API, so a careless query on a large table is slow and billed. The extension needs plpython3u and a superuser, which rules out Supabase, Neon, RDS and most managed hosts, and its functions run with the server's operating system privileges. Row contents go to a third party unless you run a local server such as stuntd.

It is also very young: 13 commits, one maintainer, no commits since early October. Against pgvector, which answers similarity rather than yes-or-no questions, pg-jev is the right tool for classification and filtering on modest tables, and a spend guard such as jev.max_rows_per_statement should be set before anyone else gets access.

Where it earns its place

  • A support lead with 20,000 tickets in self-hosted Postgres

    Find the tickets where the customer threatens to cancel

    Pre-filter by date in SQL, then ORDER BY jev_prob(tickets, ...) LIMIT 50. At the README's rate of about $0.012 per 2,000 rows, a full pass costs roughly $0.12 and re-sorting within the session is free.

  • A data engineer at a firm that cannot send customer data out

    Route incoming emails to billing, technical or sales

    Set jev.api_url to a local stuntd server and call jev_choice() with the three options. No per-row bill, but the local server's accuracy is your responsibility to check.

  • A startup on Supabase

    Add natural-language filters to their admin queries

    This will not work: managed hosts withhold superuser and plpython3u. They would need a self-managed Postgres or a separate service calling Jev.

Before you commit

Setup
PostgreSQL 14 to 17 with plpython3u and a superuser; pgxn install jev or make install, CREATE EXTENSION jev CASCADE, then set a TypeSafe API key. A Docker image and an agent skill for skills.sh are included.
Integrations
TypeSafe's Jev API by default; any server speaking POST /v1/systemone, such as stuntd; works on tables and views, with subqueries judged one row per request.
Data and privacy
Row contents are sent to TypeSafe unless jev.api_url points elsewhere; answers are cached in the backend session. plpython3u functions run with the server's OS privileges. PostgreSQL Licence; not affiliated with TypeSafe.
Cost at scale
Billed per token by TypeSafe: the README measures about $0.012 for 2,000 rows on first run. jev.max_rows_per_statement and jev.max_chars_per_statement cap spend per query.
Limits
Full scans by design; accuracy drops above about 20 to 25 rows per batch; per-session cache is unbounded until cleared; no managed Postgres support; one maintainer.

What’s good

  • Plain-language filters that compose with ordinary SQL
  • Measured batching, caching and cost figures in the docs
  • Spend guards per statement for shared databases
  • Can point at a local Jev-compatible server

What’s not

  • Full table scan; every row is sent to the API
  • Needs superuser and plpython3u; no managed Postgres
  • Row data leaves your network by default
  • Single maintainer with 13 commits

Best for

Analysts and developers on self-managed Postgres who want to classify or filter thousands of rows by meaning without building an embedding pipeline.

pg-jev alternatives

pg-jev: common questions

Is pg-jev worth it?
A neat way to ask fuzzy questions of a table in SQL, as long as you accept a full scan, a superuser install and rows leaving the database. We rate it 3.7 out of 5.
How much does pg-jev cost?
Free (PostgreSQL Licence). Each row judged is billed by TypeSafe's Jev API unless you point it at a local compatible server.
What are the downsides of pg-jev?
Full table scan; every row is sent to the API; needs superuser and plpython3u; no managed Postgres; row data leaves your network by default; single maintainer with 13 commits.
Who is pg-jev best for?
Analysts and developers on self-managed Postgres who want to classify or filter thousands of rows by meaning without building an embedding pipeline.
How much does pg-jev cost for a team or in production?
Billed per token by TypeSafe: the README measures about $0.012 for 2,000 rows on first run. jev.max_rows_per_statement and jev.max_chars_per_statement cap spend per query.
Is pg-jev safe for company data?
Row contents are sent to TypeSafe unless jev.api_url points elsewhere; answers are cached in the backend session. plpython3u functions run with the server's OS privileges. PostgreSQL Licence; not affiliated with TypeSafe.
What are the best pg-jev alternatives?
The closest alternatives we have reviewed are pgvector, AnyJev and Laya.

Answers checked Oct 31, 2026.