Skip to content

Repository files navigation

Mavent MultiRAG

Advanced RAG pipeline untuk analisis dokumen kompleks.

License Stars Forks Issues Pull Requests

Python Streamlit LangChain NVIDIA NIM Chroma RAG




Arsitektur Sistem

graph TB
    subgraph Input
        A[PDF / TXT / DOCX]
    end

    subgraph "Document Pipeline"
        B[Parser]
        C[Structure Detector]
        D[Metadata Extractor]
        E[Semantic Chunker]
        F[Embeddings<br/>nemotron-3-embed-1b]
        G[Chroma Vector Store]
    end

    subgraph "Query Pipeline"
        H[User Query]
        I[Query Rewriter]
        J{Hybrid Retrieval}
        K[Semantic Search<br/>Vector / Chroma]
        L[Keyword Search<br/>BM25]
        M[Reciprocal Rank<br/>Fusion]
        N[Cross-Encoder<br/>Reranker]
        O[Context Selection]
        P[LLM<br/>NVIDIA NIM]
    end

    A --> B --> C --> D --> E --> F --> G
    H --> I --> J
    J --> K
    J --> L
    K --> M
    L --> M
    M --> N --> O --> P

    style A fill:#1a1a2e,color:#fff,stroke:#e94560
    style P fill:#76b900,color:#000,stroke:#fff
    style J fill:#16213e,color:#fff,stroke:#e94560
    style G fill:#0f3460,color:#fff,stroke:#533483
Loading

RAG Pipeline Detail

flowchart LR
    subgraph "Stage 1: Ingest"
        A1[Load] --> A2[Parse]
        A2 --> A3[Structure]
        A3 --> A4[Metadata]
        A4 --> A5[Chunk]
        A5 --> A6[Embed]
    end

    subgraph "Stage 2: Retrieve"
        B1[Rewrite] --> B2{Hybrid}
        B2 --> B3[Vector]
        B2 --> B4[BM25]
        B3 --> B5[Fusion]
        B4 --> B5
        B5 --> B6[Rerank]
    end

    subgraph "Stage 3: Generate"
        C1[Context] --> C2[Prompt]
        C2 --> C3[LLM]
        C3 --> C4[Answer]
    end

    A6 -.-> B1
    B6 -.-> C1

    style A6 fill:#533483,color:#fff
    style B6 fill:#e94560,color:#fff
    style C3 fill:#76b900,color:#000
Loading

Tech Stack

graph LR
    A[Streamlit] --> B[LangChain Classic]
    B --> C[NVIDIA NIM API]
    B --> D[ChromaDB]
    B --> E[rank_bm25]
    B --> F[sentence-transformers]
    C --> G[Nemotron 3 Ultra 550B]
    C --> H[nemotron-3-embed-1b]

    style A fill:#FF4B4B,color:#fff
    style C fill:#76b900,color:#000
    style G fill:#0f3460,color:#fff
    style H fill:#0f3460,color:#fff
Loading

Fitur

Fitur Deskripsi
Hybrid Retrieval Semantic (vector) + Keyword (BM25) dengan Reciprocal Rank Fusion
Cross-Encoder Reranking Precisi ranking pakai ms-marco-MiniLM
Query Rewriting Pronoun resolution + query expansion otomatis
Document Parsing Structure-aware: detect headings, tables, sections
Semantic Chunking Respect sentence/paragraph boundaries
Multi-Format PDF, TXT, DOCX
7 Model NIM Nemotron 3 Ultra, Lightning 3.5, Muse Glimmer, dll
Export Chat, ringkasan, dan insights ke Markdown

Update Terbaru — Hierarchical Async RAG (P95 <5 Menit)

Target: 4–15 PDF × 20 hal → target 2–3 menit, maksimal 5 menit, RPM NIM 40.

Area Sebelum Sesudah
Chunking Fixed 1000/200 RecursiveCharacterTextSplitter Structure-aware: table → section → para → heading (chunker.py:28), merge <250 chr, is_table/section_title metadata
Summary Serial 9 batch BATCH_SIZE=15, create_stuff_documents_chain bug Prompt must accept context Hierarchical map-reduce: chunk (fast, 5/batch, max_tokens 300) → doc → cross-doc synthesis (hierarchical_summarizer.py:30), BATCH_SIZE=40 adaptif, llm.invoke langsung, ETA elapsed/done*remaining
Model Routing 1 model untuk semua Fast lightning-30b (default, bisa ganti diffusiongemma-26b-a4b-it di Ringkasan) untuk chunk/doc; Reasoning inkling/ultra-550b hanya di sintesis akhir
Pipeline parse → chunk → embed serial Parallel: ThreadPool 4 parse, `embed
RAG invoke blocking Streaming ChatOpenAI(streaming=True) + pipeline.query_stream + st.write_stream (rag.py:11, chat.py:173)
Chat Single messages=[], + New Chat hapus histori Multi-chat conversations={id:[]} + active_conversation_id, PERCAKAPAN jadi tombol klik (sidebar.py:20, chat.py:94)
Charts 2 chart 7 chart: bar kata/halaman/karakter, area proporsi, bar/line chunk, scatter korelasi, bar chunk/doc, histogram (stats.py, insights.py:9)
UI Collapsed border-right tiang muncul saat hover, + tidak center, menu tidak klik HAPUS di source app.py:44 border hanya expanded, + centered absolute inset:0 flex, label pointer-events:auto
Cache vectorstore saja doc_hash + chunk_hash untuk summary/embed (summary.py: cache, hierarchical_summarizer.py:11)
Benchmark benchmark/fast_model_benchmark.py & stress_15docs_bench.py — Lightning vs DiffusionGemma, concurrency 2,4,8

Cara pakai model cepat: Buka RingkasanModel ringkas (cepat) → pilih Lightning 30B (Default) atau DiffusionGemma 26B (Eksperimen)Generate Ringkasan → progress ETA 2m 30s.


Model yang Tersedia

Model Type ID
Nemotron 3 Ultra 550B Terkuat nvidia/nemotron-3-ultra-550b-a55b
Nemotron 3.5 Lightning 30B Seimbang nvidia/nemotron-3.5-lightning-30b-a3b
Google DiffusionGemma 26B A4B IT Eksperimen Cepat google/diffusiongemma-26b-a4b-it
Meta Muse Glimmer 30B Kreatif meta/muse-glimmer-30b
StepFun Step 3.7 Flash Cepat stepfun-ai/step-3.7-flash
Poolside Laguna XS 2.1 Ringan poolside/laguna-xs-2.1
Thinking Machines Inkling thinkingmachines/inkling
Embedding: Nemotron 3 Embed 1B RAG nvidia/nemotron-3-embed-1b
Fast Summary Default Cepat nvidia/nemotron-3.5-lightning-30b-a3b (bisa ganti DiffusionGemma)

Struktur Proyek

mavent-multirag/
├── app.py                         # Entry point (Streamlit)
├── src/smart_doc/
│   ├── config.py                  # Konfigurasi + FAST_SUMMARY_MODELS
│   ├── core/
│   │   ├── document.py            # Document loading
│   │   ├── document_parser.py     # Enhanced parsing + metadata
│   │   ├── chunker.py             # Structure-aware chunking (heading/table/section)
│   │   ├── embeddings.py          # NVIDIA NIM embeddings + async hash cache
│   │   ├── hierarchical_summarizer.py # Chunk→Doc→Cross-doc (fast vs reasoning)
│   │   ├── rag.py                 # RAG chain + LLM (streaming)
│   │   ├── retriever.py           # Hybrid: vector + BM25
│   │   ├── reranker.py            # Cross-encoder reranking
│   │   ├── query_rewriter.py      # Query expansion
│   │   ├── pipeline.py            # Full pipeline orchestrator (parallel parse)
│   │   └── prompts.py             # System prompts
│   ├── ui/
│   │   ├── sidebar.py             # Sidebar + multi-chat
│   │   ├── chat.py                # Chat tab (streaming)
│   │   ├── summary.py             # Summary tab (hierarchical, ETA)
│   │   ├── insights.py            # Key insights tab (7 charts)
│   │   └── stats.py               # Document stats (5+ charts)
│   └── utils/
│       ├── file.py                # File helpers
│       └── export.py              # Export to Markdown
├── benchmark/                     # Benchmark fast models (Lightning vs DiffusionGemma)
│   ├── fast_model_benchmark.py
│   └── stress_15docs_bench.py
├── tests/                         # 20 unit tests + manual
│   ├── test_real_hier_manual.py
│   └── test_real_rag_manual.py
├── plan.md                        # Rencana hierarki P95 <5m
├── .streamlit/config.toml
├── Dockerfile
├── pyproject.toml
└── requirements.txt

Instalasi

git clone https://github.com/Maventlabs/mavent-multirag.git
cd mavent-multirag
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt

Menjalankan

streamlit run app.py

Buka http://localhost:8501 lalu:

  1. Masukkan NVIDIA NIM API Key (gratis di build.nvidia.com)
  2. Upload dokumen (PDF/TXT/DOCX)
  3. Pilih model → mulai tanya

Deploy

Streamlit Community Cloud (gratis)

  1. Buka share.streamlit.io
  2. Login GitHub → New app → Pilih repo → Deploy

Docker

docker build -t smart-doc-insights .
docker run -p 8501:8501 smart-doc-insights

Testing

python -m unittest discover tests -v

Catatan Keamanan

  • API key tidak disimpan permanen
  • Dokumen diproses di memori (in-memory)
  • Semua model NIM gratis tanpa kartu kredit
  • Rate limit: 40 requests/menit


Dibangun dengan NVIDIA NIM + LangChain + Streamlit

About

Hybrid RAG multi-doc: Semantic (Chroma+nemotron-3-embed-1b) + BM25 → RRF → rerank, hierarchical async & streaming — 7 NVIDIA NIM models · Streamlit · LangChain

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages