tipitaka / README.md
dhammawatthumpra's picture
docs: align README.md with Turbovec architecture and link new documents
894a4c0
|
Raw
History Blame Contribute Delete
10.1 kB
metadata
title: Tipitaka
emoji: 📖
colorFrom: indigo
colorTo: blue
sdk: docker
pinned: false

📖 พระไตรปิฎก ฉบับมหาจุฬาลงกรณราชวิทยาลัย

Tipitaka Web App — เว็บอ่านพระไตรปิฎก ฉบับ มจร. แบบจิตวิเวก พร้อม AI ผู้ช่วยอัจฉริยะ

Stack: React + Vite | FastAPI + Python | SQLite FTS5 | Turbovec In-Process (Primary) / Qdrant (Secondary) | ONNX Reranker | DeepSeek API


✨ Features

Feature Description
📖 Reader 45+ เล่มพระไตรปิฎก — หน้า-ต่อ-หน้า, ปรับขนาดตัวอักษร, 3 themes (dark/light/classic)
🔍 Hybrid Search FTS5 + Vector (Turbovec / Qdrant) + ONNX Reranker — ถูกต้องทั้ง keyword และความหมาย
🤖 AI Assistant Floating chat พร้อม RAG context, รองรับ DeepSeek-chat / DeepSeek-reasoner
🔗 Cross-Volume RAG ค้นข้ามเล่มจาก Turbovec index / Qdrant + jina-embeddings-v5, rerank ด้วย jina-reranker-v2
📱 Responsive Desktop + Mobile, swipe gesture, keyboard nav
🎨 Markdown Rendering AI ตอบเป็น markdown พร้อม prose-invert สำหรับ dark mode
↔️ Resizable Panel ลากขอบขวาเพื่อปรับขนาด AI chat — persist ขนาดไว้
🏷️ Pali Autocorrect แก้คำบาลีผิดเอง ก่อนส่งค้นหา — PyThaiNLP + custom dict

🏗️ Architecture (Turbovec Edition)

┌──────────────────────────────────────────────────────────────────┐
│                      Frontend (Vite + React)                     │
│  AppShell → NavDrawer | ReaderPanel | RightToolbar | AIPopup    │
│  Zustand (5 stores) · Framer Motion · Tailwind CSS v4           │
│  react-markdown + remark-gfm · Lucide React                     │
└────────────────────────────────┬─────────────────────────────────┘
                                 │ HTTP / SSE
┌────────────────────────────────┴─────────────────────────────────┐
│                   Backend (FastAPI Python 3.13)                   │
│                                                                   │
│  ┌────────────┐  ┌────────────┐  ┌────────────┐  ┌───────────┐ │
│  │ Page       │  │ Search     │  │ RAG        │  │ LLM       │ │
│  │ Service    │  │ Service    │  │ Service    │  │ Service   │ │
│  └─────┬──────┘  └─────┬──────┘  └─────┬──────┘  └─────┬─────┘ │
│        │               │               │               │        │
│   ┌────▼────┐    ┌─────▼─────┐    ┌────▼────┐    ┌────▼─────┐ │
│   │ SQLite  │    │ SQLite    │    │ Turbovec│    │ DeepSeek │ │
│   │ FTS5    │    │ LIKE      │    │ Index / │    │ API      │ │
│   │ (memory)│    │ fallback  │    │ Qdrant  │    │ Streaming│ │
│   └─────────┘    └───────────┘    └─────────┘    └──────────┘ │
│                                                                 │
│  Services: page_service · search_service · pali_utils           │
│            rag_service · onnx_reranker · llm_service            │
└─────────────────────────────────────────────────────────────────┘

🔄 Hybrid Search Pipeline

คำถาม → Pali Autocorrect → FTS5 (SQLite, 30 results)
                        ─→ Turbovec Index (jina-embeddings-v5, 30 results)
                        → SQLite Content Enrichment
                        → Merge & Deduplicate
                        → ONNX Rerank (jina-reranker-v2)
                        → Top N → AI context

🗂️ Project Structure

RAG/
├── webapp/
│   ├── tipitaka-api/          # FastAPI backend
│   │   ├── app/
│   │   │   ├── main.py        # FastAPI entry + lifespan
│   │   │   ├── config.py      # pydantic-settings
│   │   │   ├── schemas.py     # Pydantic models
│   │   │   ├── routers/       # pages, search, ai, health
│   │   │   ├── services/      # 6 service modules
│   │   │   └── database/      # sqlite_db.py
│   │   ├── tests/             # 35 tests
│   │   ├── models/            # ONNX reranker
│   │   └── startup.sh         # HF Spaces entry
│   │
│   └── tipitaka-web/          # React frontend
│       └── src/
│           ├── components/    # layout, reader, toolbar, ai
│           ├── stores/        # Zustand (5 stores)
│           ├── hooks/         # swipe, keyboard
│           └── lib/           # api.ts
│
├── qdrant_storage/            # Local Qdrant data (optional fallback)
├── snapshots/                 # Qdrant snapshot files (optional fallback)
├── Dockerfile                 # Multi-stage build
├── TIPITAKA_WEB_ARCHITECTURE_TURBOVEC.md   # Main architecture doc (Turbovec)
└── SEARCH_ARCHITECTURE_TURBOVEC.md         # Search specification (Turbovec)

🚀 Quick Start

Prerequisites

  • Python 3.13+
  • Node.js 20+
  • Ollama (for embedding — jina-embeddings-v5-small-retrieval)
  • DeepSeek API key

1. Setup Backend

cd webapp/tipitaka-api
python -m venv .venv
.venv\Scripts\activate   # Windows
pip install -r requirements.txt

# Copy .env.example → .env and fill DEEPSEEK_API_KEY
python -m app.main        # starts on :8000

2. Setup Frontend

cd webapp/tipitaka-web
npm install
npm run dev               # starts on :5173

3. Setup Embedding

# Download jina-embeddings-v5 GGUF
ollama pull hf.co/second-state/jina-embeddings-v5-text-small-retrieval-GGUF:v5-small-retrieval-Q6_K.gguf

4. Run Tests

cd webapp/tipitaka-api
python -m pytest tests/ -v    # 35 tests, all passing

📡 API Endpoints

Method Path Description
GET /api/pages/volumes รายการเล่มพระไตรปิฎก
GET /api/pages/volumes/{id}/toc สารบัญ (dedup + noise filter)
GET /api/pages/{vol}/{page} เนื้อหาหน้า
GET /api/search?q=&limit=&offset= ค้นหา FTS5 + LIKE + highlight
GET /api/search/suggestions?q= Autocomplete
POST /api/ask/stream AI ถาม-ตอบ (SSE streaming)
POST /api/ask AI ถาม-ตอบ (non-stream — Discord)
GET /api/ask/rag-status สถานะ Turbovec/Qdrant
GET /health Health check

🧪 Test Suite

tests/
├── test_pali_utils.py     # 90 assertions — autocorrect, digits, similarity
├── test_search_service.py # FTS5 + LIKE merge, suggestions
└── test_rag_service.py    # Embedding LRU cache

Total: 35 tests ✅

🧰 Tech Stack Detail

Layer Technology
Frontend React 18, TypeScript 5, Vite 6, Tailwind CSS v4
State Zustand (5 stores)
Animation Framer Motion
Icons Lucide React
Markdown react-markdown + remark-gfm
Backend FastAPI, Python 3.11
Database SQLite (FTS5, loaded to :memory: at startup)
Vector Store Turbovec (Primary in-process index), Qdrant (Secondary fallback)
Embedding jina-embeddings-v5-small-retrieval (GGUF via Ollama / sentence-transformers)
Reranker jina-reranker-v2-base-multilingual (ONNX, CPU)
AI DeepSeek API (OpenAI-compatible, SSE streaming)
CI/CD HF Spaces (Docker multi-stage, auto-build)

📚 Documents

File Description
DESIGN.md Design system — colors, typography, components, themes
PRODUCT.md Product vision, users, principles
TIPITAKA_WEB_ARCHITECTURE_TURBOVEC.md Main architecture document (Turbovec Edition)
SEARCH_ARCHITECTURE_TURBOVEC.md Search Architecture Specification (Turbovec Edition)
Tipitaka-Web-Application-Tech-Stack-TURBOVEC-HF.md Tech Stack & HF Spaces Deployment (Turbovec Edition)
TIPITAKA_WEB_ARCHITECTURE_V2.md Full architecture V2 document (Legacy Qdrant version)

🙏 Acknowledgements

  • มหาจุฬาลงกรณราชวิทยาลัย (MCU) — เนื้อหาพระไตรปิฎก
  • Turbovec — In-process vector database
  • Qdrant — Vector database (Legacy/Alternative)
  • jina.ai — Embedding + Reranker models
  • Ollama — Local model serving
  • Hugging Face Spaces — Deployment platform

"อุปมาเหมือนแสงเทียนในห้องมืด คือปัญญาทำลายอวิชชา"