Model or dataset
data-prep-kit/data-prep-kit avatar
data-prep-kit/data-prep-kit

Data-Prep-Kit: A Transform Library for LLM Data Curation, Not a Pipeline Runner

Open source project for data preparation for GenAI applications

962 stars255 forksHTMLApache-2.0

At a glance

What is it?
Data-Prep-Kit packages unstructured data preparation as reusable transforms that run on Python and Ray, deployable from a laptop to Kubernetes. The hard part is not the transforms themselves but the Tekton pipelines that chain them, and that is where the operational cost sits.
Who is it for?
Adopt Data-Prep-Kit if you already run Spark, Ray or Kubernetes and want vetted implementations of exact dedup, fuzzy dedup, doc_id annotation and format ingestion rather than writing them yourself. Do not adopt it if your data fits in memory and a single pandas script would do, because the Tekton pipeline layer is a real operational commitment.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 7 days ago.
What is it written in?
Mainly HTML, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The problem is not cleaning data, it is reimplementing cleaning data

Every team building a fine-tuning or RAG pipeline writes the same four things: a PDF or HTML extractor, a near-duplicate remover, a document ID annotator, and a filter that drops records by metadata. The implementations differ in details that matter (how fuzzy dedup hashes, how doc_id is scoped) and none of them are tested against a shared corpus. Data-Prep-Kit's answer is to publish those as named transforms under a common interface, so the dedup step in your pipeline is the same code as the dedup step in someone else's. The README frames the audience directly: developers who want to "cleanse, transform, and enrich use case-specific unstructured data to pre-train LLMs, fine-tune LLMs, instruct-tune LLMs, or build Retrieval Augmented Generation (RAG) applications." That is a narrow audience. If your data is tabular, or your pipeline is a single prompt template, this kit has nothing for you. The modalities listed as supported today are Natural Language, Code and Image, and the transform table is dominated by language and code ingestion plus universal dedup and filtering steps.

Transforms are the unit, and Parquet is the contract

The architecture is a flat set of transforms rather than a framework with a scheduler. Each module lives under transforms/, grouped by domain (transforms/code/, transforms/language/, transforms/universal/), and each has its own README. The README states the kit "provides a framework for developing custom transforms for processing Parquet files as well as ZIP, NDJSON, and JSONL file formats." The ingestion transforms convert into Parquet (code2parquet, docling2parquet, html2parquet, web2parquet), and the universal transforms operate on what comes out. That is the data flow: heterogeneous input, Parquet in the middle, Parquet out, with dedup, doc_id and filter applied in sequence. The important design consequence is that transforms are composable because they agree on a file format, not because they share an orchestration layer. You can run one transform and stop. The README's own onboarding path does exactly that, pointing at a Colab notebook that runs a single PDF content extraction transform with no setup.

Python and Ray are two runtimes for the same transform, with an uneven matrix

The module table lists two runtime columns, Python-only and Ray, and most rows carry check marks in both. Two things stand out. First, web2parquet has a check under Python-only and nothing under Ray, so the web ingestion path cannot be scaled the way the rest of the kit can. If your corpus is mostly fetched HTML, that asymmetry decides your architecture before you write any code. Second, the dedup transforms (ededup and fdedup) support both runtimes, which is the pair most likely to be the bottleneck on a large corpus, since exact and fuzzy dedup are the operations that grow superlinearly with record count. The README describes the modules as "built on common frameworks for Python and Ray runtimes for scaling up data processing," and states the kit "can readily scale from a commodity laptop all the way to data center scale." That claim is a design intent, not a measured result, and the repository gives no benchmark numbers I can point to. Treat the laptop-to-datacenter span as a statement about the deployment options available, not about throughput.

Installation is one command, but the transform set is the real decision

The README gives the install as two commands: pip install uv, then uv pip install 'data-prep-toolkit-transforms[all]'. The [all] extra pulls in every transform, which is convenient for evaluation and wasteful for production, since you will ship docling and web extraction dependencies you never call. The package is published on PyPI as data-prep-toolkit-transforms and the README states support for Python 3.10, 3.11, 3.12 and 3.13. There is a quick-start document at doc/quick-start/quick-start.md covering virtual environment creation, and the README points to doc/google-colab.md for Colab-specific notes. For anything beyond a single transform, the README routes you to ADVANCED.md, which covers adding your own transform, running transforms from the command line, and scaling and automation. A separate document, doc/quick-start/contribute-your-own-transform.md, is the developer tutorial for contributing a transform upstream. Note the gap: the README shows the install and the notebook, but the command-line invocation details and the configuration keys for each transform live in the per-transform READMEs under transforms/, not in the top-level file. Budget time to read those individually.

Tekton is where the kit stops being a library

The README is explicit that the kit "provides examples of how a single transform can be deployed on Kubernetes clusters as a Python or a Ray job," and that "when multiple transforms are deployed in a sequence, the kit uses Tekton pipelines." This is the most consequential sentence in the document. A single transform on Kubernetes is a job spec. A sequence of transforms is a pipeline with its own CRDs, its own controller, and its own failure semantics. If your organization already runs Tekton, the examples folder gives you a starting point and the marginal cost is low. If it does not, adopting Data-Prep-Kit at multi-transform scale means adopting Tekton as a side effect, and that is a platform decision disguised as a data preparation decision. The alternative the README implies but does not spell out is to run the transforms as plain Python or Ray jobs and handle sequencing yourself, which keeps the library value and drops the pipeline machinery. Nothing in the README suggests Tekton is required for correctness, only for the multi-transform deployment examples.

Where the repository is thin, and what to check before trusting it

The README is a front door with a large table and a notebook, and it is honest about its own limits in one place: the supported modalities are listed as those supported "today," which signals the set is expected to change. Beyond that, the top-level document does not describe per-transform configuration, error handling, or what happens when a transform fails mid-pipeline. Those details are pushed into the per-transform READMEs and ADVANCED.md. There is also no discussion in the material I have of idempotency or restart behavior for a partially completed pipeline, which is the question that matters most when a dedup pass over a large corpus dies at hour six. The arXiv paper referenced in the badge (2409.18164) is presumably where the design rationale lives, and reading it before committing to the pipeline layer is a reasonable step. The project is under LF AI & Data and carries an OpenSSF Best Practices badge, which speaks to process rather than to fitness for your corpus.

The honest alternative: write the four transforms yourself, or use a dataframe tool

The realistic alternative for a small corpus is not another LLM data preparation framework. It is a pandas or Polars script plus a library like datasketch for MinHash-based near-duplicate detection. The difference in approach is total: Data-Prep-Kit gives you a fixed, named, tested transform with a defined Parquet contract and a documented path to Ray and Kubernetes. A hand-written script gives you whatever you need for your specific schema, at the cost of owning the dedup logic, the ID annotation, and the filtering forever. There is a middle position the README itself supports: install the package, call a single transform from Python, and skip the deployment examples entirely. That gets you the tested implementation without the Tekton surface. The choice is between a fixed contract you can scale and a bespoke script you can change freely; Data-Prep-Kit is the right pick only if you expect the corpus to grow past what one machine handles.

Licence, maintenance and the upgrade path

The project is Apache-2.0, which permits commercial use, modification and redistribution with the usual notice and patent grant terms. I am not giving legal advice; if you redistribute the transforms inside a product, have counsel read the licence. On maintenance, the release cadence visible in the material is roughly quarterly: v1.1.6 in November 2025, v1.1.7 in February 2026, v1.1.8 in June 2026, with the last push to the dev branch in September 2026. That is an active but not fast-moving project, and the default branch is dev rather than main, which means the branch you read on GitHub is the development line, not necessarily what is on PyPI. Pin the PyPI version in your environment rather than tracking dev. The upgrade cost is concentrated in the transform interfaces: because transforms communicate through Parquet, a change to the schema a transform writes is the kind of change that breaks a downstream step silently. The README does not describe a schema versioning scheme, so verify the output schema of each transform in your chain against the per-transform README before bumping versions.

Editorial conclusion

Adopt Data-Prep-Kit if you already run Spark, Ray or Kubernetes and want vetted implementations of exact dedup, fuzzy dedup, doc_id annotation and format ingestion rather than writing them yourself. Do not adopt it if your data fits in memory and a single pandas script would do, because the Tekton pipeline layer is a real operational commitment. Before committing, verify two things: that the specific transform you need appears in the module table with the runtime you intend to use (web2parquet is Python-only), and that the container image and Tekton pipeline definitions in the examples folder match your cluster's existing CI.

Official sources

  1. data-prep-kit/data-prep-kit on GitHub
  2. License: Apache-2.0
  3. Project website
  4. README
  5. Releases
Community notes

Community notes