---
name: bijection-jevex
description: "Evaluate and integrate the Jevex component with Bijection."
---

# Jevex

A small Bijection component that uses Jev to build a semantic index over your tables.

- Package: @bijectionhq/jevex
- Category: AI & Agents
- Status: Preview
- License: MIT
- Bijection source (repository access required): https://github.com/bijectionhq/jevex/tree/fc6cb6fa66579d55968bfede6ac4d3e828af3e40
- Upstream: https://github.com/mbilskilets/jevex/tree/a9ffe44bd52f103ff8e5aaf74b273ca69335d1ab
- Documentation: https://docs.bijection.com/components/using
- Directory: https://bijection.com/components/jevex

## Get the source

Bijection repository access is required. Request access at https://bijection.com/contact.

```sh
git clone https://github.com/bijectionhq/jevex.git
cd jevex
git checkout fc6cb6fa66579d55968bfede6ac4d3e828af3e40
```

## Before using this component

Read the package README at the recorded revision for setup, dependencies, and API examples. Upstream documentation describes the original package and may differ from the Bijection adaptation. This is a source candidate for evaluation. Catalog inclusion does not establish npm availability or runtime qualification. Check compatibility with your SDK and deployment before adoption. External providers run their own compute.

## Integration workflow

1. Read the source README and package manifest at the recorded revision.
2. Confirm the required SDK, dependency availability, and runtime compatibility.
3. Follow the component's documented setup and configuration. Never invent an npm install command from a catalog package name.
4. Keep credentials in the project's existing secret store.
5. Follow the project's execution rules for verification and report what was actually checked.

## Original upstream skill

The following guidance describes @mbilskilets/jevex. Its installation commands and APIs refer to the upstream package. Evaluate compatibility with the Bijection source separately.


> Agents: read this skill fully before writing code that uses Jevex. Follow the installation and configuration steps exactly.

# Jevex

## Instructions

Use Jevex to jevex builds a semantic index over convex tables using jev, storing ai classification answers as queryable indexed data so reads never call a model. This Convex component integrates directly with your backend.

### Installation

```bash
npm install @mbilskilets/jevex
```

Current npm version: `@mbilskilets/jevex@0.1.2`

### Capabilities

- Filter and sort Convex table rows by AI-generated labels using standard indexed queries with no per-read model calls
- Batch writes automatically so a burst of 300 inserts becomes roughly 15 API requests instead of 300
- Trigger judgments on write and cache results so repeated content is classified in the same transaction without hitting the API again
- Support multiple AI gateway providers including TypeSafe, Vercel AI Gateway, OpenRouter, and the Convex AI Gateway

## Examples

### how to filter Convex table rows by AI classification without calling a model on every read

Jevex stores Jev classification answers in an indexed Convex table keyed by question, label, and value. You define questions like 'is this a bug report?' using noul, choice, or score helpers, and Jevex writes answers when rows change via a convex-helpers trigger. Reads like feedbackJudge.top(ctx, 'kind', { label: 'bug' }) hit an index range and never call a model.

### how to triage support tickets automatically in Convex

Jevex lets you define a semantic index over a feedback or tickets table with questions such as category classification and churn probability. When a new message is inserted, the trigger queues it for Jev, and once answered the onJudged callback fires so you can alert on high-churn scores or route to a queue. The demo inbox sorts messages into bugs, requests, billing, questions, and praise in under one second per message.

### how to run content moderation in Convex without blocking writes

Jevex hooks into your mutation via a convex-helpers trigger and queues rows for Jev asynchronously so your transaction is never blocked on a network call. You define spam and abusive questions as noul scores, then query postJudge.top(ctx, 'spam', { min: 0.3, max: 0.7 }) to surface uncertain posts for human review while keeping clean posts live.

### semantic search and classification on Convex database tables

Jevex is not a vector similarity search tool. It runs structured Jev questions against row content on write and stores typed answers in an indexed table. You get classification, scoring, and multi-label filtering over large tables using Convex index ranges, which scales the same way on 100 rows as on 1 million rows.

## When NOT to use

- When a simpler built-in solution exists for your specific use case
- If you are not using Convex as your backend
- When the functionality provided by Jevex is not needed

## Troubleshooting

**Does Jevex make model API calls during Convex queries?**

No. Jevex stores Jev answers in a Convex table with an index on (index, question, label, value). Queries like feedbackJudge.top(ctx, 'churn', { min: 0.8 }) read an index range and return immediately. Model calls happen on write, triggered once per changed row, and results are cached so identical content is never sent to Jev twice.

**How does Jevex avoid slowing down Convex mutations?**

The trigger that Jevex registers with convex-helpers does a few indexed reads, a hash check, and one insert inside the same transaction as your mutation. No network call happens in the transaction. If the state hash is unchanged the trigger returns early. New rows are queued and processed by a dispatcher that batches up to 20 rows per Jev request with a 100 ms debounce.

**What API key do I need to use Jevex?**

Jevex requires access to the Jev model, which is available through four providers: TypeSafe (TYPESAFE_API_KEY), Vercel AI Gateway (AI_GATEWAY_API_KEY), OpenRouter (OPENROUTER_API_KEY), or the Convex AI Gateway (JEV_PROVIDER=convex, no key needed). The Convex AI Gateway option only works on cloud deployments with the gateway enabled, not on a local backend.

**What question types does Jevex support for classification?**

Jevex exposes three question helpers: noul for a 0-to-1 probability score ('the user is likely to cancel'), choice for a typed enum label ('what is this feedback about?' with options like bug, feature, or billing), and score for an ordered categorical value ('how urgent is this?'). Each answer type is reflected in the TypeScript types returned by index.get and index.top.

**How does Jevex handle a row that changes while Jev is processing the previous version?**

Each batch carries a claim token tied to the row's content at the time it was queued. If the row is edited before Jev responds, the late answer is written to the cache but dropped for that row, and the new content is queued separately. The most recent edit always wins. Jevex also runs a cron that re-queues any rows whose batch disappeared without reporting back, such as after a backend restart.

## Resources

- [npm package](https://www.npmjs.com/package/%40mbilskilets%2Fjevex)
- [GitHub repository](https://github.com/mbilskilets/jevex)
- [Live demo](https://github.com/mbilskilets/jevex/tree/main/example)
- [Convex Components Directory](https://www.convex.dev/components/mbilskilets/jevex)
- [Convex documentation](https://docs.convex.dev)