Skip to main content

ReadAnyBook 📚

PyPI Version Python 3.10+ License: MIT Tests

A RAG-based cheat sheet generator that transforms books and papers into structured, 12-page LaTeX cheat sheets.

🚀 Try It Now

Open In Kaggle Open In Colab

Features

  • Multi-format Document Support: PDF, EPUB, HTML, LaTeX, Markdown
  • Intelligent Chunking: Math-aware and code-aware text splitting
  • Hybrid Retrieval: Dense embeddings + BM25 with reciprocal rank fusion
  • Multi-pass Generation: Separate extraction for concepts, formulas, algorithms, and models
  • LaTeX Output: Professional cheat sheets compiled to PDF
  • Multiple LLM Backends: HuggingFace, Ollama, vLLM, OpenAI-compatible APIs
  • Vector Store Options: ChromaDB, Qdrant, Weaviate

Quick Start

Installation

# Basic installation
pip install readanybook

# With CLI support
pip install readanybook[cli]

# With all features
pip install readanybook[all]

From Source

git clone https://github.com/readanybook/readanybook.git
cd readanybook
pip install -e ".[dev]"

Usage

Command Line

# Generate a cheat sheet from a PDF
read-any-book build document.pdf -o cheatsheet.pdf

# Use a specific profile
read-any-book build document.pdf --profile math_paper

# Index a document
read-any-book index document.pdf --collection my_collection

# Search indexed documents
read-any-book search "gradient descent" --collection my_collection

Python API

from readanybook import CheatSheetPipeline, Settings

# Initialize pipeline
settings = Settings()
pipeline = CheatSheetPipeline(settings)

# Process document
pipeline.ingest("textbook.pdf")
pipeline.index(collection_name="textbook")

# Generate cheat sheet
content = pipeline.generate_content()
cheat_sheet = pipeline.build(content, "output/cheatsheet.pdf")

print(f"Generated: {cheat_sheet.pdf_path}")

Quick Start (One-Liner)

from readanybook import build_cheatsheet

# Generate a cheat sheet with a single function call
output = build_cheatsheet(
    "textbook.pdf",
    llm_backend="huggingface",      # or "ollama" for local
    llm_model="Qwen/Qwen2.5-1.5B-Instruct",
    output_format="markdown",        # "latex", "markdown", or "both"
    in_memory=True                   # Required for Kaggle/Colab
)

REST API

# Start the API server
uvicorn readanybook.api:app --host 0.0.0.0 --port 8000

# Upload a document
curl -X POST "http://localhost:8000/upload" \
  -F "file=@document.pdf" \
  -F "collection_name=my_docs"

# Generate cheat sheet
curl -X POST "http://localhost:8000/generate" \
  -H "Content-Type: application/json" \
  -d '{"collection_name": "my_docs", "title": "My Cheat Sheet"}'

Configuration

Create a config.yaml file or use environment variables:

# Embedding model
embedding:
  model_name: "BAAI/bge-base-en-v1.5"
  device: "cuda"

# Vector store
vectordb:
  store_type: "chroma"
  persist_directory: "./data/chroma"

# LLM settings
llm:
  backend: "ollama"
  model_name: "llama3:8b"

# Retrieval
retrieval:
  mode: "hybrid"
  top_k: 15
  
# LaTeX output
latex:
  columns: 2
  font_size: 10
  paper_size: "a4paper"

Configuration Profiles

Use built-in profiles for different document types:

# For technical books
read-any-book build book.pdf --profile technical_book

# For math papers
read-any-book build paper.pdf --profile math_paper

# For non-technical books
read-any-book build novel.pdf --profile nontechnical_book

Architecture

ReadAnyBook follows a modular pipeline architecture with clear separation between ingestion, retrieval, and generation layers.

System Design

┌─────────────┐    ┌─────────────┐    ┌─────────────┐    ┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│  Ingestion  │───▶│  Chunking   │───▶│  Indexing   │───▶│  Retrieval  │───▶│ Generation  │───▶│   LaTeX     │
│  (PDF/EPUB) │    │  (Math-     │    │ (Embeddings)│    │  (Hybrid    │    │  (LLM +     │    │  (Compile   │
│             │    │   aware)    │    │             │    │   Search)   │    │   RAG)      │    │   to PDF)   │
└─────────────┘    └─────────────┘    └──────┬──────┘    └──────┬──────┘    └──────┬──────┘    └─────────────┘
                                             │                  │                  │
                                             ▼                  ▼                  ▼
                                      ┌─────────────┐    ┌─────────────┐    ┌─────────────┐
                                      │ Vector DB   │    │ BM25 Index  │    │ LLM Backend │
                                      │ (ChromaDB)  │    │             │    │  (Ollama/   │
                                      │             │    │             │    │   HF/vLLM)  │
                                      └─────────────┘    └─────────────┘    └─────────────┘

Key Components

Component Description
Ingestion Multi-format document parsing (PDF, EPUB, HTML, LaTeX)
Chunking Hierarchical, semantic, or fixed-size with math/code awareness
Indexing BGE/E5 embeddings stored in ChromaDB/Qdrant/Weaviate
Retrieval Hybrid dense+sparse search with RRF fusion and cross-encoder reranking
Generation Multi-pass extraction: concepts, formulas, algorithms, models
Output Jinja2 LaTeX templates compiled to 12-page PDF

Package Structure

readanybook/
├── core/           # Domain logic
│   ├── ingestion.py    # Document parsing
│   ├── chunking.py     # Text splitting
│   ├── indexing.py     # Embedding & indexing
│   ├── retrieval.py    # Hybrid retrieval
│   ├── models.py       # LLM clients
│   ├── prompts.py      # Prompt templates
│   └── pipeline.py     # Main orchestrator
├── generation/     # Content generation
│   ├── concepts.py     # Concept extraction
│   ├── formulas.py     # Formula extraction
│   ├── algorithms.py   # Algorithm synthesis
│   ├── models_theory.py # Model summarization
│   └── latex_builder.py # LaTeX generation
├── evaluation/     # Quality metrics
│   ├── rag_eval.py     # RAG evaluation
│   └── metrics.py      # Content metrics
├── infra/          # Infrastructure
│   ├── settings.py     # Configuration
│   ├── vectordb.py     # Vector stores
│   ├── logging.py      # Logging
│   └── tracing.py      # Observability
├── api/            # REST API
├── cli/            # Command line interface
├── templates/      # LaTeX templates
└── config/         # Default configs

Design Principles

  • Hexagonal Architecture: Domain services isolated from external adapters
  • Configuration-Driven: All behavior controlled via Pydantic settings
  • Pluggable Backends: LLM, vector store, and embedding model abstractions
  • Observability: Structured logging and tracing throughout

📄 Full documentation: See docs/architecture.pdf for the complete software architecture document.

Requirements

  • Python 3.10+
  • PyTorch 2.0+
  • LaTeX distribution (for PDF compilation)
    • TeX Live, MiKTeX, or Tectonic

LaTeX Installation

# Ubuntu/Debian
sudo apt install texlive-full

# macOS
brew install --cask mactex

# Or use Tectonic (lightweight)
cargo install tectonic

Development

# Install dev dependencies
pip install -e ".[dev]"

# Run tests
pytest

# Format code
black readanybook tests
isort readanybook tests

# Type check
mypy readanybook

# Lint
ruff check readanybook

📓 Kaggle Experiment

We tested ReadAnyBook on Kaggle with Hull's "Options, Futures, and Other Derivatives" (902 pages) using a T4 GPU:

Model Backend Time Notes
microsoft/phi-2 HuggingFace ~15 min Fast, basic quality
Qwen/Qwen2.5-1.5B-Instruct HuggingFace ~20 min Better reasoning
meta-llama/Llama-3.2-3B-Instruct HuggingFace ~30 min Best quality (needs HF token)

Note: Use latex_only=True on Kaggle/Colab since pdflatex is not available.

Open In Kaggle

Examples

See the examples directory for:

  • 📓 readanybook_demo.ipynb - Interactive notebook tutorial
  • Processing academic papers
  • Creating ML textbook cheat sheets
  • Custom template usage
  • API integration examples

Testing

ReadAnyBook has comprehensive test coverage with 101 tests across three levels:

# Run all tests
pytest tests/

# Run specific test suites
pytest tests/unit/           # 81 unit tests
pytest tests/integration/    # 6 integration tests
pytest tests/e2e/           # 14 e2e tests (uses Project Gutenberg books)

Test Coverage:

  • Unit Tests: Core modules (chunking, ingestion, indexing, retrieval), summarization passes, experiment tracking, regression suite
  • Integration Tests: Pipeline flows, retrieval service, orchestrator integration
  • E2E Tests: Full pipeline with real books from Project Gutenberg (Art of War, Flatland, Metamorphosis)

License

MIT License - see LICENSE for details.

Contributing

Contributions welcome! Please read CONTRIBUTING.md first.

Acknowledgments

  • Built with 🤗 Transformers, ChromaDB, and FastAPI
  • Inspired by the need for better study materials

Metadata

Release files for readanybook 0.1.23

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

Source distribution (sdist)

Source distribution for readanybook 0.1.23
File Size Uploaded
readanybook-0.1.23.tar.gz 114.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for readanybook 0.1.23
File Interpreter ABI Platform
readanybook-0.1.23-py3-none-any.whl Python 3 none any Details

Total release size: 247.6 kB

Release files / readanybook-0.1.23.tar.gz

Download URL readanybook-0.1.23.tar.gz
Size 114.1 kB
Tags Source
SHA-256 checksum
How to use checksums
995e2339d005eac791d5e3185a60eab8671a9f040e5307c2b076268b1b10748e
BLAKE2b-256 checksum
How to use checksums
ab864104bd4222a6030225eed93cb2cc40457099ee46cc993284ed55767da5a9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.11

Release files / readanybook-0.1.23-py3-none-any.whl

Download URL readanybook-0.1.23-py3-none-any.whl
Size 133.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d1fbf8a2d32975b7a13f2a6233b2b4c07e7afcfa850ae715579fadcfa8837061
BLAKE2b-256 checksum
How to use checksums
eda85dd59c390fe727b7c90ddd5e5e0773746b2dc9905c61e84cba0b16ae5ed5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.11

Release history Release notifications | RSS feed

This release

0.1.23 This release

2 release files

0.1.22

2 release files

0.1.21

2 release files

0.1.20

2 release files

0.1.19

2 release files

0.1.18

2 release files

0.1.17

2 release files

0.1.16

2 release files

0.1.15

2 release files

0.1.14

2 release files

0.1.13

2 release files

0.1.12

2 release files

0.1.11

2 release files

0.1.10

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.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

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