fenic vs pg-jev
Semantic DataFrames: PySpark-style select, filter and join alongside AI operators — extract, classify, summarize, embed, semantic join — compiled on an engine built for inference. — versus — Postgres extension for plain-language WHERE clauses: jev(row,'the customer is angry') filters, ranks and classifies rows via TypeSafe's Jev decision model. No embeddings, no vector column.
Both put AI judgments beside relational operators — filter, classify, rank rows by a natural-language condition. fenic does it in a PySpark-style DataFrame engine; pg-jev does it in place, as a boolean function inside Postgres SQL.
| fenic | pg-jev | |
|---|---|---|
| Stars | 679 | 1.3k |
| Forks | 48 | 105 |
| Language | Python | Shell |
| License | Apache-2.0 | NOASSERTION |
| Last activity | 3 days ago | 1 months ago |
| Topics | data, orchestration | data, decision-models |
| Curated connections | 5 | 3 |
fenic — the curator's take
Use it when an agent's data discovery has to survive the chat: express the work as typed operators and the pipeline is already the artifact — `explain()`-able, rerunnable, row-level lineage, per-query cost and tokens, promotable to a table, view or MCP tool. `semantic.extract(PydanticModel)` replacing regex-plus-one-off-prompt is the whole pitch, and the engine handles batching, rate limits, retries and response caching so you aren't hand-rolling them. Not the tool for streaming or petabyte scale, and not a pandas replacement: it's a lazy query engine you configure models on, so single-row interactive work feels heavy and every operator is a real inference bill.
pg-jev — the curator's take
Use it when the condition lives in free text and a person would have to read each row — triage tickets, tag products, rank by vibe — and you want the answer inside ordinary SQL next to joins, GROUP BY and LIMIT. Put cheap predicates first so fewer rows get judged, and lean on the per-session cache when iterating. NOT for managed Postgres (Supabase, Neon, RDS lack superuser/plpython3u), not for semantic search over millions of rows, and every new condition sends row contents to TypeSafe's API, priced per token.