How bunnycoder1999/springairagapp works
Purpose and Runtime
Spring Boot 3/Java 21 service implementing document ingestion, semantic retrieval, and grounded RAG chat. The application bootstrap is src/main/java/com/example/SpringAiRagApp/SpringAiRagAppApplication.java; runtime configuration is centralized in src/main/resources/application.yml.
It exposes an HTTP API on port 8080 for document upload and question answering, backed by PostgreSQL/pgvector and local Ollama models.
HTTP Entry Points
src/main/java/com/example/SpringAiRagApp/controllers/DocumentController.java accepts document uploads and initiates ingestion.
src/main/java/com/example/SpringAiRagApp/controllers/ChatController.java accepts chat questions and returns answer/citation payloads.
src/main/java/com/example/SpringAiRagApp/controllers/AdminController.java is the operational/admin boundary for managing the document corpus.
Document Persistence Model
Documents and their searchable units are separate persisted entities:
• src/main/java/com/example/SpringAiRagApp/model/Document.java
• src/main/java/com/example/SpringAiRagApp/model/DocumentChunk.java
• src/main/java/com/example/SpringAiRagApp/enums/DocumentStatus.java
The parent document tracks lifecycle/status; chunks carry extracted content, metadata, and vector-searchable representation. Repository boundaries are src/main/java/com/example/SpringAiRagApp/repositories/DocumentRepository.java and src/main/java/com/example/SpringAiRagApp/repositories/DocumentChunkRepository.java.
Ingestion Pipeline
src/main/java/com/example/SpringAiRagApp/service/ingestion/DocumentIngestionService.java orchestrates upload-to-index processing. Its stages are:
1. Parse PDF/Word content through DocumentParser.java (Apache Tika boundary).
2. Split extracted text via DocumentChunker.java.
3. Attach source metadata, including citation-relevant information, through MetaDataEnricher.java.
4. Persist the document/chunks and generate/store embeddings through configured Spring AI/pgvector integration.
This separates raw file interpretation from chunk construction and storage/indexing.
Retrieval and RAG Answering
src/main/java/com/example/SpringAiRagApp/service/search/SemanticSearchService.java converts a question into a vector-search request and retrieves relevant document chunks from pgvector. It is the retrieval boundary between application logic and the vector database.
src/main/java/com/example/SpringAiRagApp/service/rag/RagChatService.java composes retrieved context with the user question, invokes the chat model, and builds grounded responses. The system prompt is maintained at src/main/resources/prompts/rag-system-prompt.st; response contracts include src/main/java/com/example/SpringAiRagApp/dto/ChatResponse.java and src/main/java/com/example/SpringAiRagApp/dto/Citation.java.
Infrastructure and External Services
docker-compose.yml provisions PostgreSQL with pgvector and Ollama; database initialization is in docker/init-db.sql. src/main/java/com/example/SpringAiRagApp/config/PgvectorConfig.java configures vector-store access, while ChatConfig.java configures Spring AI chat behavior.
Primary flow: upload → parse → chunk/enrich → embed/index in PostgreSQL/pgvector; question → embed/retrieve chunks → prompt Ollama with context → return answer plus source citations.
Main entry points: RagChatService.java Grounded RAG chat · DocumentChunkRepository.java Document repositories · DocumentIngestionService.java Document ingestion · docker-compose.yml PostgreSQL / pgvector
Components 20
HTTP API
- Document upload API
src/main/java/com/example/SpringAiRagApp/controllers/DocumentController.java - Chat API
src/main/java/com/example/SpringAiRagApp/controllers/ChatController.java - Corpus admin API
src/main/java/com/example/SpringAiRagApp/controllers/AdminController.java
Ingestion
- Document ingestion · Runs upload-to-index processing.
src/main/java/com/example/SpringAiRagApp/service/ingestion/DocumentIngestionService.java - Document parser
src/main/java/com/example/SpringAiRagApp/service/ingestion/DocumentParser.java - Text chunker
src/main/java/com/example/SpringAiRagApp/service/ingestion/DocumentChunker.java - Metadata enricher · Adds citation-relevant source metadata.
src/main/java/com/example/SpringAiRagApp/service/ingestion/MetaDataEnricher.java
Retrieval & RAG
- Semantic search · Embeds questions and retrieves relevant chunks.
src/main/java/com/example/SpringAiRagApp/service/search/SemanticSearchService.java - Grounded RAG chat · Builds context-grounded answers and citations.
src/main/java/com/example/SpringAiRagApp/service/rag/RagChatService.java - RAG system prompt
src/main/resources/prompts/rag-system-prompt.st - Answer & citations
src/main/java/com/example/SpringAiRagApp/dto/ChatResponse.java
Persistence
- Documents · Tracks parent document lifecycle and status.
src/main/java/com/example/SpringAiRagApp/model/Document.java - Document chunks · Stores searchable content, metadata, and vectors.
src/main/java/com/example/SpringAiRagApp/model/DocumentChunk.java - Document repositories
src/main/java/com/example/SpringAiRagApp/repositories/DocumentChunkRepository.java
Infrastructure
- Vector store config
src/main/java/com/example/SpringAiRagApp/config/PgvectorConfig.java - Chat model config
- PostgreSQL / pgvector
docker-compose.yml - Ollama
docker-compose.yml
Other components
- Spring Boot app
src/main/java/com/example/SpringAiRagApp/SpringAiRagAppApplication.java - Runtime configuration
src/main/resources/application.yml
Connections 19
- Spring Boot app → Runtime configuration: loads
- Document upload API → Document ingestion: uploads
- Corpus admin API → Document repositories: manages corpus
- Document ingestion → Document parser: parses file
- Document parser → Text chunker: extracted text
- Text chunker → Metadata enricher: chunks
- Metadata enricher → Document repositories: persists
- Document repositories → Documents: stores
- Document repositories → Document chunks: stores
- Document chunks → PostgreSQL / pgvector: content and vectors
- Document ingestion → Vector store config: indexes embeddings
- Vector store config → PostgreSQL / pgvector: vector-store access
- Chat API → Grounded RAG chat: question
- Grounded RAG chat → Semantic search: retrieves context
- Semantic search → PostgreSQL / pgvector: vector search
- Grounded RAG chat → RAG system prompt: uses
- Grounded RAG chat → Chat model config: invokes model
- Chat model config → Ollama: chat requests
- Grounded RAG chat → Answer & citations: returns