rag / README.md
Kareman's picture
feat(ContextAI)
14faba3
|
raw
history blame
3.01 kB

ContextAI

A FastAPI-based RAG application that lets users upload documents (PDF/TXT) and ask questions.
Powered by LangChain, ChromaDB, and LLMs for context-aware answers.

πŸ“š FastAPI RAG App with LangChain, ChromaDB & Authentication

This project is a Retrieval-Augmented Generation (RAG) web application built with FastAPI. It allows users to:

πŸ”‘ Sign up / Sign in (JWT-based authentication)

πŸ“‚ Upload PDF or text documents

🧠 Store document embeddings in ChromaDB (vector database)

πŸ’¬ Ask questions about uploaded documents

⚑ Get context-aware answers powered by LangChain + LLMs (via OpenRouter )

πŸš€ Features

User authentication with access & refresh tokens

Secure file uploads (.pdf, .txt)

Automatic text chunking & embedding with HuggingFace models

Persistent vector store using ChromaDB

RAG pipeline with LangChain’s RetrievalQA

OpenRouter integration for running LLM queries

CORS configured for frontend integration

πŸ› οΈ Tech Stack

FastAPI

LangChain

ChromaDB

SQLModel for user database

HuggingFace Embeddings

OpenRouter (for LLM access)

πŸ“‚ Project Structure app/ β”œβ”€β”€ main.py # FastAPI routes & entrypoint β”œβ”€β”€ rag.py # RAG pipeline (embeddings, vector store, QA chain) β”œβ”€β”€ models.py # User models & schemas β”œβ”€β”€ auth.py # Auth logic (hashing, tokens, verification) β”œβ”€β”€ database.py # SQLModel setup └── config.py # Settings & constants uploads/ # User uploaded files (ignored in Git) chroma_db/ # Vector DB storage (ignored in Git)

βš™οΈ Setup & Installation 1️⃣ Clone the repo git clone https://github.com/your-username/fastapi-rag-app.git cd fastapi-rag-app

2️⃣ Create & activate virtual environment python -m venv venv source venv/bin/activate # Linux/Mac venv\Scripts\activate # Windows

3️⃣ Install dependencies pip install -r requirements.txt

4️⃣ Configure environment variables

Create a .env file in the project root (or copy from .env.example):

OpenRouter

OPENROUTER=your_openrouter_api_key_here

JWT secret

SECRET_KEY=your_super_secret_key

⚠️ Never commit your real .env file.

▢️ Run the App

Start the FastAPI server:

uvicorn app.main:app --reload

The API will be available at: πŸ‘‰ http://127.0.0.1:8000

Interactive API docs: πŸ‘‰ http://127.0.0.1:8000/docs

πŸ”‘ Authentication Flow

Signup β†’ POST /signup with username & password

Signin β†’ POST /signin to receive access_token & refresh_token

Use Authorization: Bearer for protected endpoints

πŸ“‚ Document Workflow

User logs in

Upload document β†’ POST /upload (PDF or TXT)

Ask a question β†’ GET /ask?q=your+question

The system searches your embeddings in ChromaDB and queries the LLM with context

πŸ“ Notes

uploads/ and chroma_db/ are auto-created at runtime if they don’t exist.

Both folders are ignored by Git (runtime data only).

Contributions & pull requests are welcome πŸš€