Updated

Published

A native DuckDB extension batches Jev over SQL rows at about 2,300 rows per second on a live run

Prasanth J posted duckdb-jev, an Apache 2.0 C++ extension that asks TypeSafe's Jev from SQL. A live Choice run classified 2,049 synthetic rows in 0.887 seconds. A cached replay of the same query finished in 28.6 ms with zero API calls. Row text leaves DuckDB.

Prasanth J posted a native DuckDB extension for TypeSafe’s Jev on September 21. He is cofounder of isotopes.ai and previously worked at Apple and Cloudera. The repo is prasanthj/duckdb-jev, Apache 2.0.

The extension is C++. It links DuckDB’s pinned platform static library and talks to POST https://api.typesafe.ai/v1/systemone over libcurl. Callers do not register a Python UDF or run a separate inference server. Builds target DuckDB 1.4.5 and 1.5.5 on macOS and Linux, x86-64 and ARM64. GitHub Releases publish the archives after those eight version and platform jobs pass. The README says DuckDB still treats the contained binary as unsigned, so local loads use -unsigned or allow_unsigned_extensions.

SQL functions cover the three question types. jev is a Noul predicate against an explicit threshold. jev_choice, jev_score, and jev_noul return structs. jev_eval sends several named questions about one row. jev_stream takes a three-column subquery (id, evidence, questions) and returns answers in row order you choose. Evidence can be text, JSON, or nested STRUCT, LIST, and ARRAY values. A DuckDB jev secret is preferred; TYPESAFE_API_KEY is the local fallback. Keys are not written into results or cache keys.

The live Choice table used real jev-1.13.0 on DuckDB 1.5.5, macOS arm64. One hundred unique nested JSON rows, four routing labels: batch 25 and concurrency 10 finished in a median 0.211 seconds (474 rows per second). One thousand rows at batch 100 and concurrency 10 finished in 0.515 seconds (1,943 rows per second). Those medians are three complete queries and include DuckDB, network, and Jev time. A separate terminal capture classified 2,049 distinct serialized rows in 0.887 seconds (2,311 rows per second) at batch 205 and concurrency 10, then replayed the same query from the connection TTL/LRU cache in 28.6 milliseconds with zero API requests. The synthetic corpus repeats 12 clear support-ticket templates with unique IDs. The README treats that as a throughput check, not a general accuracy claim.

Process concurrency is capped at 10 in-flight HTTP requests. Batch size is questions per request, 1 to 1,000. Cross-query reuse is off until you set jev_session_cache_bytes. jev_stats() counts requests, retries, cache hits, tokens, and transport latency. Failures raise a query error rather than a low-confidence label. Row content is sent to TypeSafe.

colliber/duckdb-jev is a separate MIT native extension with bind-time ENUM and STRUCT column types. This README lists it as related work, along with Query-farm’s VGI workers.

We did not load either extension.

This site's reading

Editorial notes evaluating claims against primary sources, contextualizing findings alongside related implementations, and defining technical terms.

Verify

The September 21 post from @prasanth_j is the primary source. The repo is prasanthj/duckdb-jev, Apache 2.0, a native C++ DuckDB extension. It is built for DuckDB 1.4.5 and 1.5.5 on macOS and Linux, x86-64 and ARM64. Prebuilt archives are on GitHub Releases; the README says it is not yet a signed DuckDB Community Extension. Functions include jev, jev_noul, jev_choice, jev_score, jev_eval, jev_stream, and jev_stats. Credentials come from a DuckDB jev secret or TYPESAFE_API_KEY. Calls go to POST https://api.typesafe.ai/v1/systemone. The live Choice table on jev-1.13.0, DuckDB 1.5.5, macOS arm64: 1,000 rows at batch 100 and concurrency 10 finished in a median 0.515 s (1,943 rows/s). A separate VHS capture classified 2,049 distinct serialized rows in 0.887 s (2,311 rows/s) at batch 205 and concurrency 10, then replayed the same query from the connection TTL/LRU cache in 28.6 ms with zero API requests. The corpus repeats 12 support-ticket templates with unique IDs; the README says it tests throughput, not general accuracy. Input data is sent to TypeSafe. We did not load the extension. TypeSafe's Master Customer Agreement section 2.3(f) forbids publishing benchmarks of the Services; the figures are reported as published.

Compare

Jevflake puts noul, choice, and score in Snowflake SQL through dbt and stores the answers. This extension runs inside DuckDB, batches up to 1,000 questions per request, and streams across chunks. colliber/duckdb-jev is a separate MIT native extension with bind-time ENUM and STRUCT result types and one request per row. Query-farm/vgi-typesafe exposes Jev as VGI workers over Arrow subprocesses. The three SQL doors all send row text to TypeSafe.

Terms

duckdb-jev
Prasanth J's Apache 2.0 native C++ DuckDB extension. SQL functions call TypeSafe's Jev over HTTP, with batching, streaming, and an optional connection cache.
jev_stream
A DuckDB table function in duckdb-jev. It takes a subquery of row id, evidence, and questions, packs HTTP batches across chunks, and returns answers keyed by the supplied ids.

Sources

  1. Prasanth J, native DuckDB extension
  2. prasanthj/duckdb-jev
  3. colliber/duckdb-jev