Skip to main content

rag-kit

rag-kit is a simple, modular Python library for building PDF-based RAG applications with conversational memory and flexible LLM provider support.

It is designed to hide most of the LangChain complexity behind a clean API:

from ragkit import PDFRAG

rag = PDFRAG("data/sample.pdf")
print(rag.ask("What is LangChain?"))

Features

  • PDF-based RAG
  • Conversational chat with session memory
  • Follow-up handling for queries like:
    • hindi m batao
    • tell me in english
    • what did I ask earlier?
  • Query rewriting for better retrieval
  • Source return support
  • Configurable chunking and retrieval
  • Multiple LLM provider support:
    • Sarvam (default)
    • OpenAI
    • Anthropic / Claude
    • Custom LangChain-compatible chat models

Installation

Basic install

pip install rag-kit

Optional provider extras

pip install "rag-kit[openai]"
pip install "rag-kit[anthropic]"
pip install "rag-kit[all]"

Local development install

pip install -e .

Environment Variables

Create a .env file in your project root:

SARVAM_API_KEY=
OPENAI_API_KEY=
ANTHROPIC_API_KEY=

An example template is provided in .env.example.


Quick Start

Stateless Q&A

from ragkit import PDFRAG

rag = PDFRAG("data/sample.pdf")
answer = rag.ask("What is memory?")
print(answer)

Chat with memory

from ragkit import PDFRAG

rag = PDFRAG("data/sample.pdf")

session_id = "user1"

print(rag.chat("What is memory?", session_id=session_id))
print(rag.chat("hindi m batao", session_id=session_id))
print(rag.chat("tell me in english", session_id=session_id))

Return sources

from ragkit import PDFRAG

rag = PDFRAG("data/sample.pdf")
result = rag.ask("What is memory?", return_sources=True)

print(result["answer"])
print(result["sources"])

Example shape:

{
    "answer": "Memory in LangChain stores previous conversation turns...",
    "sources": [
        {
            "content": "Memory in chat applications is created by storing earlier conversation turns...",
            "page": 2,
            "source": "data/sample.pdf",
            "metadata": {
                "page": 2,
                "source": "data/sample.pdf"
            }
        }
    ]
}

ask() vs chat()

Method Purpose
ask() Stateless document Q&A
chat() History-aware conversational interaction

Use ask() when you want a direct answer from the document.

Use chat() when you want:

  • follow-up questions
  • translation of the previous answer
  • history-based conversation

LLM Providers

Default: Sarvam

from ragkit import PDFRAG

rag = PDFRAG("file.pdf")

OpenAI

from ragkit import PDFRAG

rag = PDFRAG(
    "file.pdf",
    llm_provider="openai",
    llm_config={
        "model": "gpt-4o-mini",
        "temperature": 0.1,
    },
)

Claude

from ragkit import PDFRAG

rag = PDFRAG(
    "file.pdf",
    llm_provider="claude",
    llm_config={
        "model": "claude-3-5-haiku-latest",
        "temperature": 0.2,
    },
)

Custom LLM

from langchain_openai import ChatOpenAI
from ragkit import PDFRAG

llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
rag = PDFRAG("file.pdf", llm=llm)

Configuration

from ragkit import PDFRAG, RAGConfig

config = RAGConfig(
    chunk_size=800,
    chunk_overlap=150,
    top_k=5,
    use_multi_query=True,
    enable_query_rewrite=True,
)

rag = PDFRAG("file.pdf", config=config)

Configurable options currently include:

  • persist_directory
  • chunk_size
  • chunk_overlap
  • top_k
  • use_multi_query
  • enable_query_rewrite
  • collection_name
  • verbose
  • llm_provider
  • llm_model
  • llm_temperature
  • llm_kwargs

Add More Documents

rag.add_documents("data/another.pdf")

Reset Chat

rag.reset_chat("user1")

Project Structure

rag-kit/
├── .env.example
├── .gitignore
├── README.md
├── pyproject.toml
├── examples/
├── data/
├── src/
│   └── ragkit/
└── third_party/

Do You Need requirements.txt?

Not necessarily.

For modern Python packaging, pyproject.toml is enough and should be the main source of dependencies.

Use requirements.txt only if you want one of these:

  • easier local setup for teammates
  • pinned development environment
  • quick install for people who do not use packaging workflows

Recommendation

Keep:

  • pyproject.toml as the main dependency file

Optional:

  • requirements-dev.txt for local development and testing

Example requirements-dev.txt:

pytest
black
ruff
build
twine

If you want, you can also generate a plain requirements.txt, but it should not replace pyproject.toml.


Current Limitations

  • Primarily optimized for PDF-based RAG
  • Sarvam support may depend on vendored or local integration setup
  • No streaming support yet
  • No FastAPI server or UI layer yet
  • Agent support is planned, but not included in the current public API

Roadmap

  • Better source citations
  • Improved multi-file indexing isolation
  • Streaming responses
  • FastAPI server mode
  • Playground / UI
  • Agent support via ragkit.agent

Examples

Check the examples/ folder for runnable examples such as:

  • basic_ask.py
  • chat_example.py
  • provider_openai.py

License

MIT License


Version

Current version: 0.1.0-beta

APIs may evolve in future releases.

Metadata

Release files for nishant-ragkit 0.1.10

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nishant-ragkit 0.1.10
File Size Uploaded
nishant_ragkit-0.1.10.tar.gz 10.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for nishant-ragkit 0.1.10
File Interpreter ABI Platform
nishant_ragkit-0.1.10-py3-none-any.whl Python 3 none any Details

Total release size: 24.5 kB

Release files / nishant_ragkit-0.1.10.tar.gz

Download URL nishant_ragkit-0.1.10.tar.gz
Size 10.3 kB
Tags Source
SHA-256 checksum
How to use checksums
a1b0aa06fa7567420073c06f11f22f19a62c850c65cfbad90c1211a87397d524
BLAKE2b-256 checksum
How to use checksums
1ce5ea10acba10aade1081289ed2d4adf1ed33ff4069879714d9a17ac62dff8b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.15

Release files / nishant_ragkit-0.1.10-py3-none-any.whl

Download URL nishant_ragkit-0.1.10-py3-none-any.whl
Size 14.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7b572ba5e6ecd96355384bac5d885aafc755d054e4c32de594f0df2ef20f4b38
BLAKE2b-256 checksum
How to use checksums
e4701ad402ff20deed1c5b4e2d1bb6387d1e00f6746c66256877c9c132329320
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.15

Release history Release notifications | RSS feed

This release

0.1.10 This release

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.3

2 release files

0.1.2

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page