jev-curate
Support: fuel the next build —
High-Throughput Synthetic & Pretraining Dataset Sifter Powered by TypeSafe AI (Jev)
Beta: v0.2.0 is experimental. Expect rough edges. Please contribute by opening an issue or PR.
Live: jev-curate.vercel.app (measured 24.0 rows/sec single-node on local mock bench examples/bench_mock.rs, 1,500+ cluster target)
Why jev-curate • Quickstart • CLI Reference • Python API • Architecture • Non-Goals • Ecosystem
Why jev-curate?
Cleaning 10M to 1B rows of synthetic reasoning data, instruction tuning pairs, or web-scraped corpora is an economic and technical nightmare:
- Generative LLMs are too slow and expensive: Running Claude 3.5 Sonnet or GPT-4o to judge synthetic rows costs $15,000–$50,000 per billion tokens and crawls at a painful 30–50 rows/sec.
- Regex heuristics are blind to reasoning flaws: Keyword and regex filters can check syntax, but fail to detect circular reasoning, hallucinated derivation steps, or robotic sycophancy.
- Context rot from uncompressed inputs: Naively feeding raw data into LLMs causes decision accuracy to crater while burning money on boilerplate text.
jev-curate solves this by piping Parquet/JSONL through TypeSafe AI's Jev model (jev-latest, pin with JEV_MODEL=jev-1.13.0):
- Single-round-trip rubrics per row: Evaluates all rubric questions concurrently in one HTTP request per row via Jev's speculative parallel fan-out with zero per-question round-trips. Single-node throughput is bounded by TypeSafe's 1,200 req/min (20 rows/sec) limit; horizontal scaling across worker nodes targets 1,500+ rows/sec cluster throughput.
- ~$4.20 per 100M tokens: Jev bills $0.042/Mtok for input, zero for output. TypeSafe benchmarks System One workflows 444.6x cheaper and 193.6x faster than generative LLMs (source).
- Mathematical calibration: Receives calibrated probabilities (
Noul), ordinal rubrics (Scoreon a 0 to 4 scale, sent as an ordered list), and categorical choices (Choice), eliminating generative text slop. - Zero Rewriting: Emits clean records verbatim without rewriting or altering mathematical formulas.
Quickstart
Install (pick your OS)
| OS | Rust | Python |
|---|---|---|
| Linux | cargo install jev-curate or gh release download tar.gz |
pip install jev-curate (manylinux wheel) |
| macOS | cargo install or tar.gz (x86_64 + arm64) |
pip install (universal2 wheel) |
| Windows | cargo install or zip |
pip install (win wheel) |
# Rust (any OS)
cargo install jev-curate
# or download prebuilt from GitHub Releases
# Python
pip install jev-curate # no Rust toolchain needed (wheels on PyPI)
# from source: maturin develop # python feature auto-enabled
# Set your TypeSafe AI key
export TYPESAFE_API_KEY="your-api-key" # or set TYPESAFE_API_KEY in env
# Filter a Parquet dataset using the math reasoning preset:
jev-curate filter train.parquet \
--preset reasoning-math \
--model jev-latest \
--out ./output/ \
--concurrency 32
# YAML rubric: --preset rubric.yaml
# Parquet out: --format parquet (opt-in, keeps schema; else jsonl)
Python API
PyO3 bindings (build from source with the python cargo feature):
git clone https://github.com/AkashPriyadarshii/jev-curate
cd jev-curate
maturin develop # python feature auto-enabled via pyproject.toml
from jev_curate import PyJevCurator
curator = PyJevCurator(api_key="your-api-key", preset="reasoning-math")
# single row
verdict = curator.filter_text("Let x=5... therefore...") # -> {passed, rejection_reasons, scores, nouls}
# whole file -> ./curated/clean.jsonl + rejected.jsonl + errors.jsonl + manifest.json
stats = curator.filter_file("train.parquet", out="./curated") # -> {passed, rejected, errors, total}
CLI Reference
jev-curate filter [OPTIONS] <INPUT_PATH>
| Flag | Default | Description |
|---|---|---|
<INPUT_PATH> |
Required | Path to input .parquet or .jsonl file. |
-p, --preset |
reasoning-math |
Pre-built rubric (reasoning-math, anti-sycophancy, code-correctness). |
-o, --out |
./curated/ |
Destination folder for clean.jsonl and rejected.jsonl. |
-c, --concurrency |
32 |
Worker concurrency (adaptive token bucket prevents 429 rate limits). |
--dry-run |
false |
Host pre-filtering only, no API calls (no TYPESAFE_API_KEY needed). |
--model |
jev-latest |
Jev model (or JEV_MODEL env, pin jev-1.13.0 for repro). |
--format |
jsonl |
Output format: jsonl or parquet (opt-in, preserves schema). |
--endpoint |
None | Custom API endpoint URL for offline mock testing (or set TYPESAFE_ENDPOINT). |
Presets
| Preset | Primitives Evaluated | Target Problem Solved |
|---|---|---|
reasoning-math |
has_circular_reasoning (Noul)reasoning_depth (Score 0-4, keep 2.0 or higher) |
Drops ungrounded math derivations and repetitive circular proofs. |
anti-sycophancy |
is_sycophantic (Noul)has_ai_disclaimer (Noul) |
Eliminates "As an AI...", ungrounded flattery, and conversational filler. |
code-correctness |
has_stub_placeholders (Noul)code_quality (Score 0-4, keep 2.0 or higher) |
Drops incomplete code blocks and unrunnable pseudo-code mocks. |
Build & Test
# Rust core
cargo build --release
cargo test
# Python bindings (via maturin)
maturin develop
pytest
All tests run against an in-process mock server with zero live API credits in CI.
Architecture
jev-curate/
├── Cargo.toml # Rust core manifest (arrow, parquet, tokio, pyo3, clap, reqwest, serde)
├── pyproject.toml # Maturin Python package manifest
├── src/
│ ├── lib.rs # PyO3 module bindings & crate entry
│ ├── main.rs # Standalone CLI binary entrypoint
│ ├── client.rs # TypeSafe AI HTTP client (speculative fan-out)
│ ├── filter.rs # Host-side sanity pruning & Jev pipeline
│ ├── parquet_io.rs # Batch-decoded Parquet reader + buffered JSONL writer (clean/rejected/errors)
│ ├── rate_limiter.rs # Request rate limiter with auto 429 backoff
│ └── presets.rs # Pre-built post-training evaluation rubrics
└── tests/
└── mock_test.rs # In-process mock tests via typesafe-rs-mock (100% offline)
Non-Goals
- Not a Generative Re-writer:
jev-curatenever paraphrases or re-generates text. Data is kept 100% verbatim. - Not a Heavy Local Vector DB: No embeddings, no vector indices, zero PyTorch/CUDA runtime requirements.
- Not a Generic Web Scraper: Tailored strictly for structured datasets (Parquet, Arrow, JSONL).
Mandatory Ecosystem, Author & Social Directory
Ecosystem
Author
Social
- X / Twitter • Threads • Instagram • Reddit
Built with high-performance Rust for the TypeSafe AI System One (Jev) ecosystem.
Keywords: TypeSafe AI, Jev, api.typesafe.ai, System One, Choice, Score, Noul, dataset curation, synthetic data filtering, pretraining datasets, Parquet streaming, arrow, rust.
Metadata
Release files for jev-curate 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| jev_curate-0.2.0.tar.gz | 278.9 kB | Without provenance | Details for jev_curate-0.2.0.tar.gz |
Release files / jev_curate-0.2.0.tar.gz
| Download URL | jev_curate-0.2.0.tar.gz |
|---|---|
| Size | 278.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
557caaf1018d826be24af38002f6a2fe82cea5c631d0bac9fe2a750cef72c35f
|
|
BLAKE2b-256 checksum How to use checksums |
849db124aa4f6d631c1fb73dfcd1651758d832732eb23751237413f52d7a5ebf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.5
|
Security for jev-curate 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.