How temurjonm/ai-search-rag works
This is a FastAPI RAG search service: users upload tenant-scoped PDFs or text files, then ask questions and receive source-cited answers. Upload processing extracts text (with OCR fallback), chunks and embeds it, and persists document/chunk records; search embeds the question, fuses vector and keyword candidates, and generates an answer from retrieved sources. The README also documents a browser UI with SSE progress and defensive upload handling. Relationships below are based on the supplied excerpts and README; unsampled UI behavior is documented, not source-inspected.
Main entry points: main.py HTTP routes · ingestion.py Upload processing · retrieval.py Hybrid retrieval · db.py Database sessions
Components 16
API and UI
- Web UI
src/ai_search/static/index.html - HTTP routes
src/ai_search/main.py - API schemas
src/ai_search/schemas.py
Document ingestion
- Upload processing
src/ai_search/ingestion.py - Text extraction OCR
src/ai_search/document_loader.py - Text chunking
src/ai_search/chunking.py - Uploaded files
storage
Retrieval and answers
- Embedding client
src/ai_search/openai_client.py - Hybrid retrieval
src/ai_search/retrieval.py - Answer generation
src/ai_search/openai_client.py
Data and configuration
- Database sessions
src/ai_search/db.py - Document and chunk models
src/ai_search/models.py - Runtime settings
src/ai_search/config.py
Other components
- User
- OpenAI API
- PostgreSQL pgvector
Connections 24
- User → Web UI: uses
README.md - Web UI → HTTP routes: uploads and searches
README.md - User → HTTP routes: calls API
README.md - HTTP routes → Upload processing: dispatches uploads
src/ai_search/main.py - HTTP routes → Embedding client: embeds query
src/ai_search/main.py - HTTP routes → Hybrid retrieval: runs search
src/ai_search/main.py - HTTP routes → Answer generation: generates answer
src/ai_search/main.py - HTTP routes → Database sessions: initializes database
src/ai_search/main.py - Upload processing → Text extraction OCR: extracts text
src/ai_search/ingestion.py - Upload processing → Text chunking: chunks text
src/ai_search/ingestion.py - Upload processing → Embedding client: embeds chunks
src/ai_search/ingestion.py - Upload processing → Uploaded files: writes uploads
src/ai_search/ingestion.py - Upload processing → Document and chunk models: creates records
src/ai_search/ingestion.py - Upload processing → Runtime settings: reads chunk settings
src/ai_search/ingestion.py - Embedding client → OpenAI API: requests embeddings
src/ai_search/openai_client.py - Answer generation → OpenAI API: requests completion
src/ai_search/openai_client.py - Hybrid retrieval → Document and chunk models: queries records
src/ai_search/retrieval.py - Hybrid retrieval → API schemas: builds sources
src/ai_search/retrieval.py - HTTP routes → API schemas: validates and returns
src/ai_search/main.py - Database sessions → Runtime settings: reads database URL
src/ai_search/db.py - Database sessions → Document and chunk models: creates schema
src/ai_search/db.py - Database sessions → PostgreSQL pgvector: opens sessions
src/ai_search/db.py - Document and chunk models → PostgreSQL pgvector: maps tables
README.md - Hybrid retrieval → PostgreSQL pgvector: runs ranked queries
src/ai_search/retrieval.py