Skip to main content

Drop-in RAG SDK for website chatbots

Project description

ragchatbot

PyPI version Python 3.10+ License: MIT

Add a semantic search chatbot to any website in minutes. Drop in your docs, get a working API — no ML experience required.

pip install ragchatbot
ragchatbot setup

Your chatbot API is live at http://localhost:8000.


What It Does

ragchatbot reads your documents, understands their meaning, and answers questions grounded in your actual content — not hallucinated responses.

Ask:

"what is your refund policy?"

and it finds the answer from your docs.


Requirements

  • Python 3.10 or higher
  • One of:

Quick Start

Step 1 — Install

pip install ragchatbot

Step 2 — Run guided setup

mkdir my-chatbot
cd my-chatbot
ragchatbot setup

Setup will:

  • Ask which LLM you want (Gemini, OpenAI, or Ollama)
  • Ask which model
  • Ask for your API key
  • Optionally protect your /ask endpoint with an API key
  • Create all folders
  • Scan and index your docs automatically

Step 3 — Add your docs

Put your .md, .txt, .pdf, or .docx files in the docs/ folder:

docs/
├── faq.md
├── refund-policy.pdf
├── shipping-policy.docx
└── terms.txt

Then press y when setup prompts you — it will index everything.

Step 4 — Ask a question

ragchatbot ask "what is your refund policy?"

Step 5 — Start the API server

ragchatbot start

API live at http://localhost:8000

Interactive API docs at http://localhost:8000/docs


Using the API

Once the server is running, your frontend can call it:

// Standard request
const response = await fetch("http://localhost:8000/ask", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "X-API-Key": "your-api-key", // only if auth is enabled
  },
  body: JSON.stringify({
    question: "What is your refund policy?",
  }),
});

const data = await response.json();
console.log(data.answer); // answer from your docs
console.log(data.sources); // ["refund-policy.pdf"]

Streaming responses

// Streaming request — tokens arrive as they're generated
const response = await fetch("http://localhost:8000/ask", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "X-API-Key": "your-api-key", // only if auth is enabled
  },
  body: JSON.stringify({
    question: "What is your refund policy?",
    stream: true,
  }),
});

const reader = response.body.getReader();
const decoder = new TextDecoder();

while (true) {
  const { done, value } = await reader.read();
  if (done) break;
  const chunk = decoder.decode(value);
  if (chunk.startsWith("\n\n__sources__:")) {
    const sources = JSON.parse(chunk.replace("\n\n__sources__:", ""));
    console.log("Sources:", sources);
  } else {
    process.stdout.write(chunk); // print tokens as they arrive
  }
}

Works with React, Vue, vanilla JS, Next.js — any frontend.


CLI Commands

ragchatbot setup                        # guided setup — LLM, API key, index docs
ragchatbot ask "your question"          # ask a question from terminal (streams by default)
ragchatbot ask "question" --no-stream   # wait for full answer
ragchatbot ask "question" --llm ollama  # ask using a specific LLM
ragchatbot start                        # index docs + start API server
ragchatbot start --port 9000            # use a different port
ragchatbot start --llm ollama           # start with a specific LLM
ragchatbot stats                        # show what's indexed in ChromaDB
ragchatbot verify                       # re-check everything is working
ragchatbot init                         # scaffold folders + .env manually (advanced)
ragchatbot --help                       # show all commands

Auth on /ask

To protect your endpoint so only your frontend can use it:

ragchatbot setup  # choose "y" when asked about auth

Or add manually to .env:

RAGCHATBOT_API_KEY=your-secret-key

Then pass it in every request:

headers: { "X-API-Key": "your-secret-key" }

Without the key, the server returns 401 Unauthorized.


Using Ollama (Local, No API Key)

Ollama runs fully locally — no API key, no internet, no cost.

brew install ollama
ollama serve
ollama pull llama3.2

Then run setup and choose Ollama, or set in .env:

ragchatbot_LLM=ollama
ragchatbot_MODEL=llama3.2

Using OpenAI

pip install ragchatbot[openai]

Run setup and choose OpenAI, or set in .env:

OPENAI_API_KEY=your-openai-api-key
ragchatbot_LLM=openai
ragchatbot_MODEL=gpt-4o-mini

Supported File Types

Type Status
Markdown .md ✅ Supported
Plain text .txt ✅ Supported
PDF .pdf ✅ Supported
Word .docx ✅ Supported

Settings Reference

All settings live in .env (created automatically by ragchatbot setup):

Setting Default Description
GEMINI_API_KEY Your Gemini API key
OPENAI_API_KEY Your OpenAI API key
ragchatbot_DOCS ./docs Folder containing your docs
ragchatbot_DB ./chroma_db Where vectors are stored
ragchatbot_LLM gemini Which LLM: gemini, openai, or ollama
ragchatbot_MODEL per LLM default Model name — set automatically during setup
RAGCHATBOT_API_KEY Protect /ask with this key (optional)
HF_HUB_OFFLINE 1 Set to 0 only on first run

Links


License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ragchatbot-1.1.0.tar.gz (23.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ragchatbot-1.1.0-py3-none-any.whl (22.6 kB view details)

Uploaded Python 3

File details

Details for the file ragchatbot-1.1.0.tar.gz.

File metadata

  • Download URL: ragchatbot-1.1.0.tar.gz
  • Upload date:
  • Size: 23.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.1

File hashes

Hashes for ragchatbot-1.1.0.tar.gz
Algorithm Hash digest
SHA256 7a995a66b8b2827f352fc569a4566bb63fea82b2195fbdc8e67ab5c30e4f740b
MD5 966aaed921666ce5f04feb1cfb00f36e
BLAKE2b-256 b93221c22e38136cb0b54f51ab8ea7ad90016c39d108c3e3adeac5ece8782f0f

See more details on using hashes here.

File details

Details for the file ragchatbot-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: ragchatbot-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 22.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.1

File hashes

Hashes for ragchatbot-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bf18084d80effe2463e5789335e784c414cbd273a9ea3dbe7895b1af6b897000
MD5 5721e3525da97ca35f52845bc74f5988
BLAKE2b-256 5588f052e632d0299eb8b349f409de36903573aea980ffeb7b51f58b35ab4653

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page