A linter for your RAG knowledge base
Project description
corpuslint
A linter for your RAG knowledge base. RAGAS & co. evaluate the answer.
corpuslint evaluates the data that feeds it — before it reaches your users.
Why
Most bad RAG answers are a corpus problem, not a model problem: duplicates,
near-duplicates, low-information chunks, size anomalies, embedding outliers,
and contradictions. corpuslint scores your corpus and shows you exactly what
to fix.
Install
pip install corpuslint # core, runs offline and free
pip install "corpuslint[local]" # + local embeddings (near-dupes, outliers)
pip install "corpuslint[llm]" # + LLM contradiction check (OpenAI / Azure OpenAI)
Use
corpuslint ./docs # terminal report
corpuslint ./docs --html report.html # shareable HTML
corpuslint ./docs --fail-under 70 # CI gate (exit 1 if score < 70)
corpuslint ./chunks.jsonl # pre-chunked input
# LLM contradiction check (needs the [llm] extra + an API key):
export OPENAI_API_KEY=sk-...
corpuslint ./docs --llm # OpenAI, default gpt-4o-mini
corpuslint ./docs --llm --llm-model gpt-4o # pick a model
corpuslint ./docs --llm --llm-max-pairs 50 # cap paid calls (default 200)
# Azure OpenAI — reads AZURE_OPENAI_API_KEY, AZURE_OPENAI_ENDPOINT and
# AZURE_OPENAI_API_VERSION (default 2024-10-21) from the environment.
# --llm-model is the Azure *deployment* name.
export AZURE_OPENAI_API_KEY=... AZURE_OPENAI_ENDPOINT=https://<res>.openai.azure.com
corpuslint ./docs --llm --llm-provider azure --llm-model my-deployment
The contradiction check is O(n²): it prefilters candidate pairs by embedding
similarity, then asks the LLM about each. --llm-max-pairs bounds how many pairs
reach the LLM (highest-similarity first) so cost stays predictable; skipped pairs
are reported (--llm-max-pairs 0 skips the LLM entirely).
Checks
exact duplicates · near duplicates · low-information chunks · chunk-size anomalies · embedding outliers · contradictions (opt-in).
Config
Optional .corpuslint.yml overrides thresholds and check selection.
Architecture
Library-first: corpuslint.analyze(paths, config) -> Report. The CLI is a thin
wrapper; an MCP server, Azure AI Search connector, eval-set generation, and
drift monitoring are on the roadmap.
MIT licensed.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file corpuslint-0.1.0.tar.gz.
File metadata
- Download URL: corpuslint-0.1.0.tar.gz
- Upload date:
- Size: 19.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d4d92105d5b5ab162395a76c93dbc953dc346ea71a387bcea43065f1dfaba0e7
|
|
| MD5 |
c9a8ee35f6454a90a487a093b771ac16
|
|
| BLAKE2b-256 |
dcd39e510871b2eb41045494b872aa940351547d97093b35885cfc620604b2d4
|
File details
Details for the file corpuslint-0.1.0-py3-none-any.whl.
File metadata
- Download URL: corpuslint-0.1.0-py3-none-any.whl
- Upload date:
- Size: 17.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ef692e5e5aeed87d0b2e8c77971b62de9a587fabfb75dbde3cc6046b732bef30
|
|
| MD5 |
830b05e6b2d296750c11064bb1a48f2a
|
|
| BLAKE2b-256 |
06cea294c329e6265cc58a63f9916338adc6e1e597c20b9cd943a298ebacd5c3
|