ChatPDF
RAG that's actually tested, not just prompted.
Most "chat with your PDF" tools are a thin wrapper around an LLM and a naive similarity search: fast to build, easy to fool, impossible to fully trust. ChatPDF is a full RAG pipeline built to be checked: every answer is grounded in retrieved source chunks, every claim points back to an exact page, and every change to retrieval logic has to pass a live model-quality gate before it ships. Live in the Brazilian market for students, researchers, legal, and professional readers.
Visit ChatPDF
138
automated test files
RRF
hybrid dense + full-text retrieval fusion
CI
gated on live RAG quality evals
1→0
downtime rewrite from the legacy stack
Stack
App
AI pipeline
Platform
Under the hood
The engineering worth talking about.
Retrieval that actually finds the right chunk
Instead of naive top-k cosine similarity, retrieval runs dense pgvector search and Postgres full-text search in parallel and fuses the two rankings with Reciprocal Rank Fusion. When it matters, it also reranks the fused results with Cohere or an LLM-based fallback. The vector store isn't a separate service either: it's pgvector inside the same Postgres database everything else already runs on, so there's one less system to keep in sync.
Chunks that respect sentences, not character counts
Documents aren't split by raw character count: chunking hunts for paragraph and sentence boundaries within a target window before ever falling back to a hard cut, so a citation never lands mid-sentence. Every chunk carries locator metadata (page number, section title, structural path) so every answer can point to an exact, human-checkable source location, not just "somewhere in this document."
A RAG pipeline with a real test suite
Retrieval and generation quality are scored against hand-authored gold cases (faithfulness, answer relevancy, context precision, citation accuracy, retrieval recall) with numeric thresholds enforced as a CI gate on every pull request that touches retrieval or prompt code. If a change makes answers less grounded, the PR fails before it ships, not after a user notices.
Answers in your language, even if the document isn't
A Portuguese user asking a question about an English-language PDF should get a Portuguese answer: that's a real, deliberately-solved problem, not an accident of the model's default behavior. The answer-language policy is an explicit, versioned prompt contract, tested against dedicated gold cases in both directions (Portuguese question over an English document, and the reverse) rather than left to chance.
Flashcards and quizzes that can't make things up
Generating a quiz from a document is a different problem from answering a question about it. Four parallel retrieval queries (concepts, definitions, processes, comparisons) build a source pool, then schema-constrained generation forces every question to cite chunks that actually exist and every answer key to match a real option. Malformed or unresolvable questions are rejected after generation, and the system is explicitly instructed to return fewer, higher-confidence questions rather than pad the count with weak ones.
A ground-up rewrite of a live product, migrated off its previous stack onto this architecture with a documented cutover plan and zero data loss for existing users, backed by 138 automated test files including a dedicated CI workflow that runs real model evals on every retrieval-affecting change.