Install#

fastrag is a library, not a platform: pip install it, construct the pieces your pipeline needs, and call them from your own script. There is no console command and no daemon to run.

pip install "fastrag-ai[model2vec,milvus,openai]"

Requirements#

  • Python 3.13 or newer.

  • A reachable PostgreSQL server, for anything that persists state — PostgresCache (the step cache) and PostgresChatStore (conversations in the serving layer) need one. asyncpg and sqlalchemy are core dependencies, so nothing extra installs it — you provide the server.

  • A vector store. MilvusVectorStore supports dense vectors and optional BM25; OpenSearchVectorStore supports dense and lexical search through its HTTP API.

  • A chat endpoint for generation — any OpenAI-compatible one (OpenAI, Ollama, vLLM, llama.cpp), via OpenAIChatModel.

The cache and chat-store schemas are self-managed: PostgresCache and PostgresChatStore create their own tables on __aenter__, so there is no migration step for an installed package.

Extras#

The core install stays small; every provider is an extra.

Extra

Installs

Unlocks

normalization

tiktoken, markdown-it-py, docutils

Structural BPE counting and Markdown/RST normalization; explicit byte counting and text/HTML normalization work without these dependencies

html

beautifulsoup4, html-to-markdown

HtmlParser

trafilatura

trafilatura

TrafilaturaParser — heuristic main-content extraction for arbitrary web pages

docling

docling, docling-core[chunking]

DoclingParser — spreadsheets, Word documents, PDFs, via Docling

chunkers

langchain-text-splitters

RecursiveCharacterTextSplitter — see the note below

openai

langchain-openai

OpenAIEmbedder, OpenAIChatModel (any OpenAI-compatible endpoint, not only OpenAI’s)

milvus

pymilvus

MilvusVectorStore

chroma

chromadb

ChromaVectorStore

model2vec

model2vec

Model2VecEmbedder — local, no API key

serving

fastapi, uvicorn, typer

fastrag.serve (create_app, CLI)

datasets

datasets, pyarrow, pyyaml

Wider QADataset loading

Reranking needs no extra: CohereReranker posts JSON with httpx, already a core dependency, rather than importing a provider SDK — point base_url at any endpoint that speaks the Cohere rerank protocol.

Importing a class whose extra is not installed raises ConfigurationError naming the exact pip install command, never a bare ImportError.

Note

The numbered examples currently use RecursiveCharacterTextSplitter, which requires chunkers. Structural pipelines instead select normalization for the default tokenizer and rich textual adapters; see Structure-aware ingestion.

See also#

Quickstart to index something and ask it a question; Configuration for how every service takes its credentials.