mini-rag-openrouter
RAG (Retrieval-Augmented Generation) pipeline sederhana menggunakan OpenRouter sebagai gateway model embedding & chat, dan ChromaDB sebagai vector database lokal.
Fitur
- Ingest dokumen
.txt,.pdf,.docxdari satu folder sekaligus - Deteksi dokumen yang sudah pernah di-ingest (skip otomatis, hemat API call)
- Vector search lokal via ChromaDB, tidak perlu server tambahan
- Model embedding & chat bisa dikustomisasi lewat parameter
- Tersedia contoh integrasi REST API (FastAPI)
Instalasi
pip install mini-rag-openrouter
Untuk contoh REST API (FastAPI), install dengan extra api:
pip install "mini-rag-openrouter[api]"
Alur Kerja
Ada dua alur utama: ingest dokumen (dilakukan sekali per dokumen) dan tanya-jawab (dilakukan tiap ada pertanyaan). Keduanya berbagi vector database ChromaDB yang sama.
flowchart TD
subgraph ingest ["📥 Ingest Dokumen (sekali per dokumen)"]
A["Dokumen<br/>.txt / .pdf / .docx"] --> B["Chunking<br/>(potong jadi bagian kecil, lokal)"]
B --> C["Embedding<br/>(OpenRouter API)"]
C --> D[("ChromaDB<br/>(simpan vector)")]
end
subgraph query ["💬 Tanya-Jawab (tiap ada pertanyaan)"]
E["Pertanyaan User"] --> F["Embedding<br/>(OpenRouter API)"]
F --> G["Cari vector mirip<br/>(ChromaDB, lokal)"]
G --> H["Generation<br/>(Model Chat via OpenRouter)"]
H --> I["Jawaban + Sumber"]
end
D -.-> G
Penjelasan tiap tahap:
| Tahap | Dikerjakan oleh | Butuh API? |
|---|---|---|
| Chunking | Kode Python lokal | Tidak |
| Embedding | Model embedding via OpenRouter | Ya |
| Simpan & cari vector | ChromaDB (lokal, di disk) | Tidak |
| Generation | Model chat via OpenRouter | Ya |
Pemakaian Cepat
from mini_rag import RAGPipeline
rag = RAGPipeline(
api_key="sk-or-xxxxxxxx", # API key dari openrouter.ai
chroma_path="./chroma_db", # lokasi penyimpanan vector database
)
# Ingest dokumen dari folder (mendukung .txt, .pdf, .docx)
rag.ingest_folder("./dokumen")
# Tanya
result = rag.query("Apa itu ChromaDB?")
print(result["answer"])
print(result["sources"])
Kustomisasi Model
rag = RAGPipeline(
api_key="sk-or-xxxxxxxx",
embed_model="openai/text-embedding-3-small",
chat_model="minimax/minimax-m3:free",
)
Catatan: semua dokumen dalam satu
chroma_pathharus pakaiembed_modelyang sama sejak awal. Mengganti model embedding di tengah jalan akan membuat vector lama tidak bisa dibandingkan dengan vector baru.
Struktur Project
src/mini_rag/
├── __init__.py # entry point (RAGPipeline)
├── pipeline.py # class RAGPipeline — orkestrasi semua langkah
├── chunking.py # potong dokumen jadi chunk kecil
├── embeddings.py # panggil endpoint /embeddings OpenRouter
├── vector_store.py # wrapper ChromaDB (simpan & cari vector)
├── generation.py # panggil endpoint /chat/completions OpenRouter
└── document_loader.py # baca .txt / .pdf / .docx
Contoh REST API
Lihat examples/app.py untuk contoh integrasi ke FastAPI (endpoint /ingest dan /query).
cd examples
cp .env.example .env # isi OPENROUTER_API_KEY
uvicorn app:app --reload
Endpoint yang tersedia:
| Method | Path | Fungsi |
|---|---|---|
GET |
/health |
Cek server hidup |
POST |
/ingest |
Upload dokumen |
POST |
/query |
Tanya, dapat jawaban + sumber |
Lisensi
MIT
Metadata
Release files for mini-rag-openrouter 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mini_rag_openrouter-0.1.1.tar.gz | 5.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mini_rag_openrouter-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 12.3 kB
Release files / mini_rag_openrouter-0.1.1.tar.gz
| Download URL | mini_rag_openrouter-0.1.1.tar.gz |
|---|---|
| Size | 5.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
aa25d65122ace8903b30093504088354af3efe13fd8055bcd6accde1df88e2ee
|
|
BLAKE2b-256 checksum How to use checksums |
f811a37fe05c6e50d4ded17fac21145ebc43555c84f164004f3db6b4faf87d9e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency logRelease files / mini_rag_openrouter-0.1.1-py3-none-any.whl
| Download URL | mini_rag_openrouter-0.1.1-py3-none-any.whl |
|---|---|
| Size | 6.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5b4f9b0cca45e5ab030330623ac3516dbfa9a78aa87dda10a42c6c343020aa5d
|
|
BLAKE2b-256 checksum How to use checksums |
f66c75abee04fa5ed4684f956a77921f27a083ac2a1b5ca35c381303e35ee09d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency log