MCPcopy Index your code
hub / github.com/Nutlope/pdftochat

github.com/Nutlope/pdftochat @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
61 symbols 156 edges 38 files 1 documented · 2%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

PDFToChat – Chat with your PDFs in seconds.

PDFToChat

Chat with your PDFs in seconds. Powered by Together AI and Chroma.

Tech Stack · Deploy Your Own · Common Errors · Credits · Future Tasks

Tech Stack

Deploy Your Own

You can deploy this template to Vercel or any other host. Note that you'll need to:

See .env.example for a list of all the required environment variables.

You will also need to prepare your database schema by running npx prisma db push.

Chroma Cloud

This project uses Chroma Cloud for hybrid vector search. Embeddings are generated automatically by Chroma Cloud using Qwen (dense) and SPLADE (sparse), combined via Reciprocal Rank Fusion (RRF) at query time. No local embedding model is needed.

  1. Sign up at trychroma.com and create a database.
  2. Copy your credentials and set the following environment variables:
NEXT_PUBLIC_VECTORSTORE=chroma

CHROMA_API_KEY=       # Your Chroma Cloud API key
CHROMA_TENANT=        # Your tenant ID
CHROMA_DATABASE=      # Your database name

Collections are created automatically per document — no manual index setup is required.

Common errors

  • Check that you've created an .env file that contains your valid (and working) API keys.
  • Check that NEXT_PUBLIC_VECTORSTORE is set to chroma and your Chroma credentials are correct.
  • Check that you've run npx prisma db push to create the Document table in Postgres.
  • Check that you've added a credit card on Together AI if you're hitting rate limiting issues due to the free tier.

Credits

  • Youssef for the design of the app
  • Mayo for the original RAG repo and inspiration
  • Jacob for the LangChain help
  • Together AI, Bytescale, Chroma, and Clerk for sponsoring

Future tasks

These are some future tasks that I have planned. Contributions are welcome!

  • [ ] Add a trash icon for folks to delete PDFs from the dashboard and implement delete functionality
  • [ ] Try different embedding models like UAE-large-v1 to see if it improves accuracy
  • [ ] Explore best practices for auto scrolling based on other chat apps like chatGPT
  • [ ] Do some prompt engineering for Mixtral to make replies as good as possible
  • [ ] Protect API routes by making sure users are signed in before executing chats
  • [ ] Run an initial benchmark on how accurate chunking / retrieval are
  • [ ] Research best practices for chunking and retrieval and play around with them – ideally run benchmarks
  • [ ] Try out Langsmith for more observability into how the RAG app runs
  • [ ] Add demo video to the homepage to demonstrate functionality more easily
  • [ ] Upgrade to Next.js 14 and fix any issues with that
  • [ ] Implement sources like perplexity to be clickable with more info
  • [ ] Add analytics to track the number of chats & errors
  • [ ] Make some changes to the default tailwind prose to decrease padding
  • [ ] Add an initial message with sample questions or just add them as bubbles on the page
  • [ ] Add an option to get answers as markdown or in regular paragraphs
  • [ ] Implement something like SWR to automatically revalidate data
  • [ ] Save chats for each user to get back to later in the postgres DB
  • [ ] Bring up a message to direct folks to compress PDFs if they're beyond 10MB
  • [ ] Use a self-designed custom uploader
  • [ ] Use a session tracking tool to better understand how folks are using the site
  • [ ] Add better error handling overall with appropriate toasts when actions fail
  • [ ] Add support for images in PDFs with something like Nougat

Extension points exported contracts — how you extend this code

LogoProps (Interface)
(no doc)
components/ui/Logo.tsx
TextareaProps (Interface)
(no doc)
components/ui/TextArea.tsx

Core symbols most depended-on inside this repo

extractSourcePageNumber
called by 4
app/document/[id]/document-client.tsx
classNames
called by 2
components/ui/Toggle.tsx
loadVectorStore
called by 2
app/api/utils/vector_store/index.ts
collectionName
called by 2
app/api/utils/vector_store/chroma.ts
createChromaClient
called by 2
app/api/utils/vector_store/chroma.ts
getOrCreateDocCollection
called by 2
app/api/utils/vector_store/chroma.ts
cn
called by 1
utils/cn.ts
createRAGChain
called by 1
utils/ragChain.ts

Shape

Function 50
Method 5
Class 4
Interface 2

Languages

TypeScript100%

Modules by API surface

app/api/utils/vector_store/chroma.ts17 symbols
app/document/[id]/document-client.tsx6 symbols
app/dashboard/dashboard-client.tsx4 symbols
app/api/chat/route.ts3 symbols
components/ui/Toggle.tsx2 symbols
components/ui/Logo.tsx2 symbols
components/ui/Header.tsx2 symbols
app/api/utils/vector_store/index.ts2 symbols
utils/ragChain.ts1 symbols
utils/cn.ts1 symbols
components/ui/TextArea.tsx1 symbols
components/ui/LoadingDots.tsx1 symbols

For agents

$ claude mcp add pdftochat \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact