Overview
The PageIndex RAG module implements a RAG pipeline using the PageIndex retrieval API. Unlike the other RAG modules that use local vector stores, this module leverages PageIndex’s cloud-based document retrieval service. Module:src.rag.pageindex
Source: src/rag/pageindex.py
Configuration
Environment Variables
Required environment variables in.env:
Default Models
Prompt Template
Uses the standard medical expert prompt (same as Simple RAG).Core Functions
_wait_for_retrieval_completion
The retrieval ID returned from PageIndex submit_query
Maximum wait time for retrieval completion
Poll interval for checking retrieval status
Complete retrieval result from PageIndex API
RuntimeError: If retrieval status is “failed” or “error”TimeoutError: If timeout is reached before completion
_extract_contexts_from_retrieval
The retrieval result from PageIndex API
List of formatted context strings, each containing:
- Title of the retrieved node
- Top 2 relevant content snippets
_format_contexts
List of context strings to format
Formatted string with numbered documents
process_pageindex_query
User question
Optional custom answer model. Defaults to gpt-4o with temperature=0
Optional PageIndex document id. If None, uses PAGEINDEX_DOC_ID from .env
Whether to enable PageIndex deeper retrieval mode
Max wait time for retrieval completion
Poll interval for retrieval status
Dictionary containing:
answer(str): Generated answercontexts(List[str]): Extracted context stringsretrieved_nodes(List[dict]): Full PageIndex retrieval nodesretrieval_result(dict): Complete PageIndex API responsemetrics(dict):input_tokens(int): Input tokens for answer generationoutput_tokens(int): Output tokens generatedtotal_tokens(int): Total tokensusage_source(str): Source of usage datacost(float): Cost in USDcost_source(str): Source of cost calculationretrieval_id(str): PageIndex retrieval IDdoc_id(str): PageIndex document ID used
query_for_evaluation
The question to process
Optional model name for answer generation. Defaults to “gpt-4o”
Optional PageIndex document id to override PAGEINDEX_DOC_ID
Optional custom LLM instance (takes precedence over llm_model)
Optional PageIndex retrieval mode for deeper analysis
Dictionary containing:
question(str): Original questionanswer(str): Generated answercontexts(List[str]): Retrieved context stringssource_documents(List[dict]): PageIndex retrieved nodesmetadata(dict): Comprehensive metadata including:num_contexts(int): Number of contextsretrieval_method(str): “pageindex”llm_model(str): Model name usedprovider(str): Provider namemodel_id(str): Full model IDexecution_time(float): Total execution timeinput_tokens(int): Input tokens usedoutput_tokens(int): Output tokens generatedtotal_cost(float): Total cost in USDtokens_used(int): Total tokensusage_source(str): Usage data sourcecost_source(str): Cost calculation sourcedoc_id(str): PageIndex document IDretrieval_id(str): PageIndex retrieval IDpageindex_thinking(bool): Whether thinking mode was enabled
Usage Example
Pipeline Flow
- Submit Query: Submits query to PageIndex API with document ID
- Wait for Completion: Polls retrieval status every 2 seconds (default) until complete
- Extract Contexts: Extracts relevant content snippets from PageIndex nodes
- Format: Formats contexts into numbered documents
- Generate Answer: Uses OpenAI LLM to generate answer based on contexts
- Track: Captures token usage, cost, and retrieval metadata
PageIndex Retrieval Modes
Standard Mode (thinking=False)
Thinking Mode (thinking=True)
Error Handling
The module handles several error conditions:Key Features
- Cloud-based retrieval: Uses PageIndex API instead of local vector store
- Asynchronous polling: Waits for retrieval completion with configurable timeout
- Thinking mode: Optional deeper analysis for complex queries
- Flexible document selection: Can override document ID per query
- Automatic context extraction: Extracts top 2 snippets per node
- Full metadata tracking: Includes retrieval ID and document ID in results
- Compatible interface: Matches the contract of other RAG modules
When to Use PageIndex
PageIndex RAG is ideal when:- You want to avoid managing local vector stores
- Documents are already indexed in PageIndex
- You need cloud-based, managed retrieval
- You want to leverage PageIndex’s advanced retrieval features
- You need to query multiple document collections dynamically
