All demos

Ask your documents

Upload a PDF and ask it anything. Every answer names the page it came from — and when the document does not contain the answer, it says so instead of inventing one.

Answers only from your fileEvery claim cites its pageRefusal floor measured, not guessed

How it is built

Page-aware chunking

The PDF is split per page with overlap trimmed to sentence boundaries, so a citation points at a page a reader can actually check.

A floor from measurement

Relevant passages scored 0.64–0.85 and unrelated ones 0.42–0.45 on real documents. The floor sits at 0.55, between the two — not at a value copied from a tutorial.

Refusal is cheap

When nothing clears the floor the request ends there. One embedding, no completion — so refusing costs less than answering.

Next.js, Gemini embeddings and pgvector. Keys stay on the server — the page calls a route, the route calls the provider.