A knowledge browser and audit layer for Qdrant vector databases
Project description
qdrant-lens
A knowledge browser for Qdrant vector databases.
Qdrant's own dashboard is a point browser — it shows raw vectors and payloads. qdrant-lens is the layer above that: it shows developers what the team has actually ingested, organised the way a human thinks about it.
- Knowledge tree — browse ingested content by source → document type → document → chunk, not by vector ID
- Accountability layer — every upsert and delete is intercepted, signed with the actor identity and timestamp, and written to an append-only audit log; raw Qdrant has no concept of who wrote a point or why — qdrant-lens ensures nothing in the cluster changes without a trace
_lensschema enforcement — every point carries a validated metadata namespace; violations are surfaced before bad data reaches the index- Sync-aware pipeline — chunk-hash dedup means re-ingesting a folder only embeds what actually changed; a scroll-diff pattern keeps Qdrant in sync with your filesystem the same way git tracks your working tree
- Structural graph layer — document relationships (same source, shared tags, same author) derived purely from payload fields, no Neo4j required
- Parser-agnostic ingest — LiteParse (default) handles PDFs, Office docs, images, and Jupyter notebooks natively; falls back to a pdfplumber/pytesseract stack automatically if needed
- Chat agent — ask questions about a collection in plain English, get answers backed by live tree/history/search tools; destructive operations require explicit typed confirmation before executing
Visual guides
|
How a file moves from disk to Qdrant — the 7-step pipeline with the OKF branch shown at step 3. |
What the browser dashboard looks like — tree, history feed, chunk inspector, and how OKF files are labelled. |
Documentation
| Guide | Description |
|---|---|
| Quickstart | Install, first run, Day 1/Day 2, env setup |
| Ingest Pipeline | File ingestion, parsers, chunking, dedup, hybrid search |
| Client Reference | QdrantLensClient API, audit log, schema, core concepts |
| Dashboard | lens serve, UI views, FastAPI routes |
| Parsers | liteparse vs auto, system deps, troubleshooting |
| Testing | Test suite overview, per-module test descriptions |
| Contributing | Project structure, module map, adding parsers/routes/fields |
Prerequisites
| Requirement | Version | Notes |
|---|---|---|
| Python | >= 3.12 | |
| Qdrant | >= 1.18.0 | Self-hosted, Docker, or Qdrant Cloud |
| Docker | any | For docker compose up (optional — can run components separately) |
| Tesseract | any | OCR only — sudo apt install tesseract-ocr / brew install tesseract |
| LibreOffice | any | Office → PDF conversion (bundled in [ingest]) |
| Neo4j | >= 5.0 | Graph RAG only — docker compose --profile graph up |
Install
# Core: client wrapper + dashboard API only
pip install qdrant-lens
# + full ingestion pipeline (PDF parsing, OCR, chunking) — includes LiteParse by default
pip install "qdrant-lens[ingest]"
# + FastEmbed for CLI embeddings and sparse vectors (bm25_enable=True)
pip install "qdrant-lens[embed]"
# Everything
pip install "qdrant-lens[all]"
See docs/quickstart.md for uv, Docker, and .env setup.
Quickstart
Day 1 — 5 minutes, zero code changes
pip install qdrant-lens
lens serve --url http://localhost:6333
# Dashboard opens at http://localhost:7367
# Tree renders from your existing collection immediately
Day 2 — two line changes, audit log starts
from qdrant_lens import QdrantLensClient
# Drop-in replacement for QdrantClient — all existing calls unchanged
client = QdrantLensClient(url="http://localhost:6333", api_key="...")
# All upsert/delete calls now validate _lens metadata and write audit events
client.upsert(collection_name="docs", points=[...])
# New lens-only methods
doc_id = client.make_doc_id("github", "repo/auth/login.py")
tree = client.tree("docs")
events = client.history("docs", last_n=20)
violations = client.validate("docs")
Async
from qdrant_lens import AsyncQdrantLensClient
client = AsyncQdrantLensClient(url="...", api_key="...")
tree = await client.tree("docs")
See docs/client.md for the full API reference and docs/ingest.md for the ingest pipeline.
Compatibility
- qdrant-client >= 1.18.0 required. Earlier versions are not supported.
- Python >= 3.12 (3.10 and 3.11 may work but are untested).
See COMPATIBILITY.md for the full version matrix and system dependency notes.
Built with
qdrant-lens stands on the shoulders of several excellent open-source projects:
| Project | Role |
|---|---|
| Chonkie | Chunking backbone — token-aware RecursiveChunker, SemanticChunker, and CodeChunker strategies |
| PdfItDown | Office and image → PDF conversion in the auto parser stack (.docx, .pptx, .xlsx, .png, .jpg) |
| LiteParse | Default parser — single-library extraction for PDFs, Office docs, images, and more without a LibreOffice dependency |
Project details
Release history Release notifications | RSS feed
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 qdrant_lens-0.1.1.tar.gz.
File metadata
- Download URL: qdrant_lens-0.1.1.tar.gz
- Upload date:
- Size: 33.4 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.22 {"installer":{"name":"uv","version":"0.9.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"20.04","id":"focal","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cbb0422c4194a98ca7addeb10dc4cf349a82ad36044dc21e38bb60c190a447b1
|
|
| MD5 |
7a48769d3c85f30e685638a7afbaff85
|
|
| BLAKE2b-256 |
68afe222a72d9d06477f908a376629a1fe4aaec4c6844b0dde25e43e37d32b07
|
File details
Details for the file qdrant_lens-0.1.1-py3-none-any.whl.
File metadata
- Download URL: qdrant_lens-0.1.1-py3-none-any.whl
- Upload date:
- Size: 34.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.22 {"installer":{"name":"uv","version":"0.9.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"20.04","id":"focal","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6e30e42e5a0d5c389f3bcfcbf2c0aa995bfe0dd858e1bb6d38ea3681753a7064
|
|
| MD5 |
bc27ac6d9978de3e42dca9618b6a47de
|
|
| BLAKE2b-256 |
648661e816bc87268ae7180cbd90a45e0d491cc71a0048fa79843744ce5f8734
|