LNA AI System - High-Level Design Document
Executive Summary
The LNA (African Digital Library) AI System is a comprehensive full-stack application that provides an intelligent chat interface for African book content. The system combines a Python FastAPI backend with AI agent capabilities, a Next.js React frontend with internationalization support, and a PostgreSQL database with vector search functionality using Supabase.
System Architecture Overview
Architecture Pattern
- Pattern: Three-tier architecture with microservices principles
- Frontend: Next.js 15 with React 19 (Client-side rendering with SSR support)
- Backend: FastAPI with async/await patterns
- Database: PostgreSQL with pgvector extension via Supabase
- AI/ML: Ollama integration with Pydantic AI framework
- Authentication: Supabase Auth
- Deployment: Containerizable with Docker support
Component Architecture
1. Frontend Layer (Next.js + React)
Diagram

Technology Stack
- Framework: Next.js 15.5.0 with App Router
- UI Library: React 19.1.0 with TypeScript
- Styling: Tailwind CSS 4.0
- Component Library: Radix UI components
- Internationalization: next-intl for multi-language support (English/French)
- State Management: React Context API + useState/useEffect hooks
- Authentication: Supabase Auth helpers
Key Components
Core Components
- Chat Component (
/src/components/Chat.tsx) - Main chat interface with real-time streaming
- Message history management
- Book selection integration
-
Error handling and loading states
-
Header Component (
/src/components/Header.tsx) - Navigation and branding
- Language switcher
- User authentication menu
-
Welcome message display
-
BookSelector Component (
/src/components/BookSelector.tsx) - Dynamic book loading from backend API
- Dropdown selection interface
- Error handling for book loading failures
Authentication System
- AuthProvider (
/src/components/AuthProvider.tsx) - Context-based authentication state management
- Session persistence and refresh handling
- Sign-out functionality
Internationalization
- Supported Languages: English (en), French (fr)
- Configuration:
/src/i18n/config.ts - Message Files:
/messages/en.json,/messages/fr.json - Implementation: next-intl with locale-based routing
API Integration Layer
- Base API Client (
/src/lib/api.ts) - HTTP client for backend communication
- Streaming response handling for real-time chat
- Error handling and retry logic
- Environment-based URL configuration
2. Backend Layer (FastAPI + Python)
Technology Stack
- Framework: FastAPI with Uvicorn ASGI server
- AI Framework: Pydantic AI for agent orchestration
- LLM Integration: Ollama client for local LLM inference
- Database Client: Supabase Python SDK
- Async Support: Native async/await throughout
- Environment: Python-dotenv for configuration
Core Services
1. Main API Service (/backend/main.py)
Endpoints:
- GET /books - Retrieve available books from vector database
- POST /answer - Synchronous question answering
- POST /answer/stream - Server-sent events streaming for real-time responses
- POST /stream - Alternative streaming endpoint using run_stream
- GET /test - CORS and connectivity testing
Features: - CORS middleware for cross-origin requests - Request/response validation with Pydantic models - Comprehensive error handling and logging - Dynamic source configuration per request
2. AI Agent Service (/backend/lna_ai_agent.py)
Architecture: - Agent Pattern: Pydantic AI Agent with tool-based architecture - LLM Provider: OpenAI-compatible API via Ollama - Model: Configurable (default: qwen3:8b) - Context Management: Dependency injection pattern
AI Tools: 1. retrieve_relevant_documentation - Vector similarity search using embeddings - RAG (Retrieval Augmented Generation) implementation - Top-K document retrieval (default: 5) - Source filtering by book/document
- list_book_pages
- Dynamic page discovery
- Source-specific content listing
-
Sorted and deduplicated results
-
get_book_pages_content
- Full page content reconstruction
- Chunk ordering and assembly
- Source-specific content retrieval
Embedding System: - Model: nomic-embed-text:latest via Ollama - Dimensionality: 768-dimensional vectors - Fallback: Zero vector on embedding failures
Configuration Management
- Config Class: Mutable configuration for dynamic source switching
- Environment Variables: Ollama host, model selection, API keys
- Dependency Injection: PydanticAIDeps for service composition
3. Database Layer (PostgreSQL + pgvector)
Database Schema
Primary Table: book_vector_pages
CREATE TABLE public.book_vector_pages (
id BIGSERIAL PRIMARY KEY,
url CHARACTER VARYING NOT NULL,
chunk_number INTEGER NOT NULL,
title CHARACTER VARYING NOT NULL,
summary CHARACTER VARYING NOT NULL,
content TEXT NOT NULL,
metadata JSONB NOT NULL DEFAULT '{}'::jsonb,
embedding public.vector NULL,
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT timezone('utc'::text, now()),
CONSTRAINT book_vector_pages_url_chunk_number_key UNIQUE (url, chunk_number)
);
Indexing Strategy
- GIN Index on Metadata:
idx_book_vector_pages_metadata - Enables fast JSON queries for filtering
-
Supports source-based filtering
-
IVFFlat Vector Index:
book_vector_pages_embedding_idx - Optimized for cosine similarity searches
- Enables fast vector similarity queries
Vector Search Function
-- match_book_vector_pages function
RETURNS TABLE (
id BIGINT,
url CHARACTER VARYING,
chunk_number INTEGER,
title CHARACTER VARYING,
summary CHARACTER VARYING,
content TEXT,
metadata JSONB,
similarity FLOAT
)
Functionality:
- Cosine similarity calculation: 1 - (embedding <=> query_embedding)
- Metadata filtering with JSONB operators
- Configurable result limits
- Ordered by similarity score
Data Flow Architecture
1. User Query Flow
User Input โ Frontend Chat โ API Request โ Backend FastAPI โ AI Agent
โ
AI Agent โ Vector Search โ Database โ Relevant Chunks โ LLM Processing
โ
Generated Response โ Streaming API โ Frontend โ Real-time Display
2. Book Selection Flow
Frontend โ GET /books โ Backend โ Supabase Query โ book_vector_pages
โ
Unique Books Extraction โ Response โ Frontend BookSelector โ User Selection
3. Authentication Flow
AI/ML Architecture
Large Language Model Integration
- Provider: Ollama (local inference)
- Model: qwen3:8b (configurable)
- API Compatibility: OpenAI-compatible interface
- Reasoning: Configurable reasoning inclusion
Retrieval Augmented Generation (RAG)
- Query Processing: User query โ embedding generation
- Similarity Search: Vector database query with metadata filtering
- Context Assembly: Top-K relevant chunks formatting
- Generation: LLM response with retrieved context
- Streaming: Real-time response delivery
Vector Embeddings
- Model: nomic-embed-text:latest
- Dimensions: 768
- Similarity Metric: Cosine similarity
- Storage: PostgreSQL pgvector extension
Security Architecture
Authentication & Authorization
- Provider: Supabase Auth
- Method: JWT-based authentication
- Session Management: Client-side session persistence
- Protected Routes: Context-based route protection
API Security
- CORS: Configured for cross-origin requests
- Environment Variables: Sensitive configuration externalized
- Error Handling: Sanitized error responses
Database Security
- Row Level Security: Supabase RLS policies
- Connection Security: Environment-based credentials
- Query Parameterization: SQL injection prevention
Performance Architecture
Frontend Performance
- Next.js Optimizations: App Router with static generation
- Code Splitting: Automatic route-based splitting
- Image Optimization: Next.js Image component
- Caching: Browser and CDN caching strategies
Backend Performance
- Async Architecture: Non-blocking I/O throughout
- Connection Pooling: Supabase connection management
- Streaming Responses: Real-time data delivery
- Vector Indexing: Optimized similarity searches
Database Performance
- Vector Indexing: IVFFlat for fast similarity searches
- JSON Indexing: GIN indexes for metadata queries
- Query Optimization: Parameterized queries with proper indexing
Scalability Architecture
Horizontal Scaling
- Frontend: CDN distribution via Vercel/Netlify
- Backend: Multiple FastAPI instances behind load balancer
- Database: Supabase managed scaling
Vertical Scaling
- LLM Inference: GPU acceleration for Ollama
- Vector Operations: Optimized vector libraries
- Database: Supabase automatic scaling
Deployment Architecture
Development Environment
- Frontend: Next.js dev server (localhost:3000)
- Backend: Uvicorn dev server (localhost:8000)
- Database: Supabase cloud instance
- LLM: Local Ollama instance (localhost:11434)
Production Considerations
- Containerization: Docker support for all services
- Environment Configuration: .env file management
- Health Checks: API endpoint monitoring
- Logging: Structured logging throughout stack
Integration Points
External Services
- Supabase
- Authentication service
- PostgreSQL database with pgvector
-
Real-time subscriptions capability
-
Ollama
- Local LLM inference
- Embedding generation
- Model management
Internal APIs
- Frontend โ Backend: RESTful API with streaming support
- Backend โ Database: Supabase SDK integration
- Backend โ AI: Pydantic AI framework
Error Handling & Monitoring
Frontend Error Handling
- API Errors: User-friendly error messages
- Network Failures: Retry mechanisms
- Loading States: Comprehensive loading indicators
Backend Error Handling
- Exception Handling: Try-catch blocks with logging
- HTTP Status Codes: Proper status code usage
- Error Responses: Structured error information
Monitoring Considerations
- API Metrics: Response times, error rates
- Database Metrics: Query performance, connection health
- AI Metrics: Model response times, embedding quality
Future Architecture Considerations
Scalability Enhancements
- Microservices: Service decomposition for independent scaling
- Caching Layer: Redis for frequently accessed data
- CDN Integration: Static asset optimization
AI/ML Enhancements
- Model Optimization: Fine-tuned models for African content
- Multi-modal Support: Image and document processing
- Advanced RAG: Hybrid search with keyword + semantic
Feature Expansions
- Multi-tenant Architecture: Organization-based data isolation
- Advanced Analytics: User interaction tracking
- Real-time Collaboration: Multi-user chat sessions
Conclusion
The LNA AI System represents a modern, scalable architecture that combines cutting-edge AI capabilities with robust web technologies. The system is designed for high performance, maintainability, and extensibility, making it suitable for serving African digital library content to a global audience.
The architecture supports real-time interactions, multi-language content, and intelligent document retrieval, providing users with an intuitive interface for exploring African literary heritage through AI-powered conversations.