DMN/Software

ProjectsNotebookLM

NotebookLM clone

Upload your own sources, ask questions about them in a chat and trace every statement in the answer back to the passage it came from.

A notebook with two sources: on the left the list of sources with buttons for file, website and text, in the middle the empty chat with suggested questions, on the right the studio with Briefing, FAQ, Study guide, Mind map, audio overview and notes
A notebook with two sources. Sources on the left, chat in the middle, studio on the right.

Every statement has a source

Answers rely only on the sources in the notebook. Every statement gets a numbered citation, and clicking it leads to the passage it came from.

That way an answer can be checked instead of simply having to be believed.

From source to answer

  1. Source added as PDF, DOCX, website or text
  2. Index makes the source searchable
  3. Question asked in the chat
  4. Answer comes with numbered citations
  5. Click on a number opens the passage
Chat answer about a framework agreement, organized by topics such as payment, warranty and maintenance, with small numbered citations after every statement
Answer with numbered citations after every statement.

One click to the passage

The number after a statement opens the source next to the chat, at the passage the citation refers to. The answer stays in place, so both can be compared directly.

The same chat answer, with the text of the source Framework Agreement Zephyr 7 opened on the right
After clicking a citation: the source on the right, the answer still on the left.

Search in Postgres

On upload, the text of a source is split into chunks of at most 3000 characters that overlap by up to 450 characters. Each chunk is stored with its vector of 768 dimensions and a full text index in the same table.

A question searches both ways: for the words in the full text, in German and English, and for similar meaning through the vector. Both rankings are merged with Reciprocal Rank Fusion. Only the position in each list counts, with no manual weighting, and whatever shows up in both lists moves up.

The model receives the eight best chunks, numbered, and backs every statement with a number. Numbers without a matching chunk are dropped, the rest are renumbered and lead to the passage in the chat.

Excerpts from the real code, shortened.

Studio

From the same sources the studio generates further formats. The tools are visible on the right of the first image.

Technology

Frontend
Next.js
Backend
NestJS
Data
Supabase with PostgreSQL and pgvector
Search
Vector and full text, merged with Reciprocal Rank Fusion
Access
Row Level Security, queries run with the user's token
Operations
own server, Supabase self hosted, Caddy in front

Try it

The account is read only. Chat and studio are limited to a few requests per hour.