cureta
Unified Data Curation Framework — enrich text datasets at scale with a composable pipeline of feature-extraction Taggers. Since 0.6.0 it also runs pipelines over remote media, where one recording can become many rows and the output includes files.
Install
pip install cureta # core: heuristic taggers, in-process tagging
pip install "cureta[ray]" # + distributed pipelines (the `cureta run` CLI)
pip install "cureta[ray,llm]" # + LLM / GPU taggers
Requires: Python ≥ 3.10
Developing on cureta itself? See the contributor setup guide for an editable install from source.
Quick example
Cureta runs a pipeline — a list of taggers that you define. Create one as
pipelines/my_pipeline/pipeline_config.yaml:
pipeline_name: "my_pipeline"
tagger_stages:
- tagger_name: "cureta_id" # stable per-document content hash
- tagger_name: "num_words" # word count
- tagger_name: "line_stats" # per-line statistics
Tag a single string in-process with quick_tag:
from cureta import quick_tag
tags = quick_tag(
"The quick brown fox jumps over the lazy dog.",
pipeline_config="pipelines/my_pipeline/pipeline_config.yaml",
)
# {'cureta_id': {'cureta_id': 'ef537f2...'}, 'num_words': {'num_words': 10}, ...}
Or run the same pipeline over a whole dataset from the command line:
# Create a small sample dataset (JSONL with a "text" field per line)
python -c "
import json, pathlib
rows = [{'text': f'This is sample document number {i}.'} for i in range(200)]
pathlib.Path('sample.jsonl').write_text('\n'.join(json.dumps(r) for r in rows))
print('Created sample.jsonl with 200 rows')
"
# Resolves pipelines/my_pipeline/pipeline_config.yaml in the current directory
cureta run --pipeline my_pipeline --dataset ./sample.jsonl --limit 100
For HuggingFace datasets see docs/how_to/load_huggingface_data.md
Documentation
| Tutorial: Your first pipeline | Get a working result in 5 minutes |
| Tutorial: Writing a custom tagger | Build and run your own tagger |
| Tutorial: Deploying on cloud | Run on GPU cluster with SkyPilot |
| Reference: CLI | cureta command reference |
| Reference: Python API | run_pipeline, quick_tag, Pipeline, ... |
| Reference: Taggers | All 45 built-in taggers with output schemas |
| Concepts: Execution model | SIMD vs SDMI, two-phase model, Ray Data |
| Writing taggers | Tier-1 and Tier-2 tagger authoring guide |
| How to: Run media pipelines | Rows that point at media, routine per-row failure, produced files, fan-out (new in 0.6.0) |
Examples
| 01_quickstart | Local data, four heuristic taggers, Parquet output |
| 02_custom_tagger | Write and run a custom tagger |
| 03_huggingface | Load from HuggingFace, use text_column |
| 04_programmatic_api | All four Python API surfaces |
| 05_streaming | stream_tagged_batches → in-memory / Kafka |
Key concepts
- Document — canonical data envelope with
raw_content,document_id,metadata, andtags - Tagger — atomic feature-extraction unit; subclass
CPUTaggerorGPUTagger, implementprocess_document(Tier 1) orrun(Tier 2) - Pipeline — orchestrator that loads config, resolves dependencies, and dispatches taggers
45 built-in taggers ship with the library across three categories:
Heuristic taggers (CPU, no model weights) — word count, line/paragraph/word-length statistics, Gopher/C4/FineWeb quality filters, compression ratio, vocabulary diversity, MinHash/SimHash/exact dedup signals, PII regex, HTML density, Markdown structure, content type, URL parsing, domain blocklist, date extraction, and readability metrics.
Lightweight ML taggers — GlotLID language ID (1665 languages), paragraph-level language ID, FastText quality scoring, programming language detection, and Microsoft Presidio PII detection.
GPU taggers — FineWeb educational quality (0–5 score), domain classification (26 domains), multi-label toxicity, dense sentence embeddings, LLM-as-judge scoring, and perplexity.
See Reference: Taggers for the full list with output schemas.
Contributing
See CONTRIBUTING.md and docs/contributing/setup.md.
License
MIT
Metadata
Release files for cureta 0.6.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 |
|---|---|---|---|---|
| cureta-0.6.0.tar.gz | 497.7 kB | Without provenance | Details for cureta-0.6.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| cureta-0.6.0-py3-none-any.whl | Python 3 | none | any | Details for cureta-0.6.0-py3-none-any.whl |
Total release size: 706.1 kB
Release files / cureta-0.6.0.tar.gz
| Download URL | cureta-0.6.0.tar.gz |
|---|---|
| Size | 497.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
cd4363e6c7335960cc334ed31ebbfe0a1b94273818000b4a7d471decce1adcdf
|
|
BLAKE2b-256 checksum How to use checksums |
b399dc64e654ef47870673837eb76f31503d02bdee97eac799d50221d88e05d1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.12
|
Release files / cureta-0.6.0-py3-none-any.whl
| Download URL | cureta-0.6.0-py3-none-any.whl |
|---|---|
| Size | 208.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b52de1b983b5b7cb1e834001755bb7a739d4547cfd3c9e44a80b346e50668bc0
|
|
BLAKE2b-256 checksum How to use checksums |
e70abafc5a283c6de330e9e2c6e2efcdbdac65a0542e795b8c399a53fa24db3b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.12
|
Security for cureta 0.6.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.