# ooo1208/ai-rag-knowledge architecture

> Architecture diagram of the GitHub repository ooo1208/ai-rag-knowledge, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ooo1208/ai-rag-knowledge
- Repository: https://github.com/ooo1208/ai-rag-knowledge

## Overview

This is a Spring-based chat and retrieval-augmented generation service. Users can generate chat responses through Ollama or OpenAI, or upload files/import a Git repository into tagged knowledge collections and ask questions against them. The RAG controller owns ingestion and retrieval; chat controllers own model calls. Source excerpts show the Ollama and OpenAI RAG paths, Redis tag tracking, and PostgreSQL vector storage. The tree also contains configuration for an in-memory vector store, but the sampled ingestion and RAG query methods use PgVectorStore. No README was provided, so capability coverage is based on the sampled controllers and tree.

Main entry points: [`ooo1208-trigger/src/main/java/io/github/ooo1208/http/RAGController.java`](https://github.com/ooo1208/ai-rag-knowledge/blob/master/ooo1208-trigger/src/main/java/io/github/ooo1208/http/RAGController.java) (RAG controller), [`ooo1208-app/src/main/java/io/github/ooo1208/config/OllamaConfig.java`](https://github.com/ooo1208/ai-rag-knowledge/blob/master/ooo1208-app/src/main/java/io/github/ooo1208/config/OllamaConfig.java) (PgVector store), [`ooo1208-trigger/src/main/java/io/github/ooo1208/http/OllamaController.java`](https://github.com/ooo1208/ai-rag-knowledge/blob/master/ooo1208-trigger/src/main/java/io/github/ooo1208/http/OllamaController.java) (Ollama controller), [`ooo1208-trigger/src/main/java/io/github/ooo1208/http/OpenAiController.java`](https://github.com/ooo1208/ai-rag-knowledge/blob/master/ooo1208-trigger/src/main/java/io/github/ooo1208/http/OpenAiController.java) (OpenAI controller)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_http["HTTP interfaces"]
  node_ragctl["RAG controller<br/>[RAGController.java]"]
  node_ollamactl["Ollama controller"]
  node_openaictl["OpenAI controller"]
end

subgraph group_rag["Knowledge ingestion and retrieval"]
  node_parse["Document parsing<br/>[RAGController.java]"]
  node_split["Text splitting<br/>[RAGController.java]"]
  node_retrieve["Context retrieval"]
  node_openai_retrieve["Context retrieval"]
end

subgraph group_models["Chat and embeddings"]
  node_ollamamodel["Ollama chat model<br/>[OllamaConfig.java]"]
  node_openai_model["OpenAI chat model"]
  node_embedding["Embedding models<br/>[OllamaConfig.java]"]
end

subgraph group_state["Persistence and runtime"]
  node_pgvector[("PgVector store<br/>[OllamaConfig.java]")]
  node_redisclient["Redis client config"]
  node_redis[("Redis tag list")]
  node_postgres[("PostgreSQL pgvector")]
end

node_user(("API client"))
node_ollamaservice{{"Ollama service"}}
node_openaiservice{{"OpenAI service"}}
node_gitremote[("Git repository")]

node_user -->|"uploads / queries"| node_ragctl
node_user -->|"chat requests"| node_ollamactl
node_user -->|"chat requests"| node_openaictl
node_ragctl -->|"parses content"| node_parse
node_ragctl -->|"splits documents"| node_split
node_ragctl -->|"writes chunks"| node_pgvector
node_ragctl -->|"reads / writes tags"| node_redis
node_ragctl -->|"clones repository"| node_gitremote
node_ragctl -->|"uses client"| node_redisclient
node_redisclient -->|"connects"| node_redis
node_pgvector -->|"embeds stored text"| node_embedding
node_pgvector -->|"persists vectors"| node_postgres
node_ollamactl -->|"retrieves context"| node_retrieve
node_retrieve -->|"similarity search"| node_pgvector
node_ollamactl -->|"streams response"| node_ollamamodel
node_ollamamodel -->|"calls model"| node_ollamaservice
node_openaictl -->|"retrieves context"| node_openai_retrieve
node_openai_retrieve -->|"similarity search"| node_pgvector
node_openaictl -->|"calls model"| node_openai_model
node_openai_model -->|"calls model"| node_openaiservice
node_ollamactl -->|"returns response"| node_user
node_openaictl -->|"returns response"| node_user
node_ragctl -->|"returns result"| node_user

click node_ragctl "https://github.com/ooo1208/ai-rag-knowledge/blob/master/ooo1208-trigger/src/main/java/io/github/ooo1208/http/RAGController.java"
click node_ollamactl "https://github.com/ooo1208/ai-rag-knowledge/blob/master/ooo1208-trigger/src/main/java/io/github/ooo1208/http/OllamaController.java"
click node_openaictl "https://github.com/ooo1208/ai-rag-knowledge/blob/master/ooo1208-trigger/src/main/java/io/github/ooo1208/http/OpenAiController.java"
click node_parse "https://github.com/ooo1208/ai-rag-knowledge/blob/master/ooo1208-trigger/src/main/java/io/github/ooo1208/http/RAGController.java"
click node_split "https://github.com/ooo1208/ai-rag-knowledge/blob/master/ooo1208-trigger/src/main/java/io/github/ooo1208/http/RAGController.java"
click node_retrieve "https://github.com/ooo1208/ai-rag-knowledge/blob/master/ooo1208-trigger/src/main/java/io/github/ooo1208/http/OllamaController.java"
click node_openai_retrieve "https://github.com/ooo1208/ai-rag-knowledge/blob/master/ooo1208-trigger/src/main/java/io/github/ooo1208/http/OpenAiController.java"
click node_ollamamodel "https://github.com/ooo1208/ai-rag-knowledge/blob/master/ooo1208-app/src/main/java/io/github/ooo1208/config/OllamaConfig.java"
click node_openai_model "https://github.com/ooo1208/ai-rag-knowledge/blob/master/ooo1208-trigger/src/main/java/io/github/ooo1208/http/OpenAiController.java"
click node_embedding "https://github.com/ooo1208/ai-rag-knowledge/blob/master/ooo1208-app/src/main/java/io/github/ooo1208/config/OllamaConfig.java"
click node_pgvector "https://github.com/ooo1208/ai-rag-knowledge/blob/master/ooo1208-app/src/main/java/io/github/ooo1208/config/OllamaConfig.java"
click node_redisclient "https://github.com/ooo1208/ai-rag-knowledge/blob/master/ooo1208-app/src/main/java/io/github/ooo1208/config/RedisClientConfig.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_ragctl,node_ollamactl,node_openaictl,node_user toneBlue
class node_parse,node_split,node_retrieve,node_openai_retrieve,node_gitremote toneAmber
class node_ollamamodel,node_openai_model,node_embedding toneMint
class node_pgvector,node_redisclient,node_redis,node_postgres toneRose
class node_ollamaservice,node_openaiservice toneIndigo
```

## Components

### HTTP interfaces

- [RAG controller](https://github.com/ooo1208/ai-rag-knowledge/blob/master/ooo1208-trigger/src/main/java/io/github/ooo1208/http/RAGController.java): `ooo1208-trigger/src/main/java/io/github/ooo1208/http/RAGController.java`
- [Ollama controller](https://github.com/ooo1208/ai-rag-knowledge/blob/master/ooo1208-trigger/src/main/java/io/github/ooo1208/http/OllamaController.java): `ooo1208-trigger/src/main/java/io/github/ooo1208/http/OllamaController.java`
- [OpenAI controller](https://github.com/ooo1208/ai-rag-knowledge/blob/master/ooo1208-trigger/src/main/java/io/github/ooo1208/http/OpenAiController.java): `ooo1208-trigger/src/main/java/io/github/ooo1208/http/OpenAiController.java`

### Knowledge ingestion and retrieval

- [Document parsing](https://github.com/ooo1208/ai-rag-knowledge/blob/master/ooo1208-trigger/src/main/java/io/github/ooo1208/http/RAGController.java): `ooo1208-trigger/src/main/java/io/github/ooo1208/http/RAGController.java`
- [Text splitting](https://github.com/ooo1208/ai-rag-knowledge/blob/master/ooo1208-trigger/src/main/java/io/github/ooo1208/http/RAGController.java): `ooo1208-trigger/src/main/java/io/github/ooo1208/http/RAGController.java`
- [Context retrieval](https://github.com/ooo1208/ai-rag-knowledge/blob/master/ooo1208-trigger/src/main/java/io/github/ooo1208/http/OllamaController.java): `ooo1208-trigger/src/main/java/io/github/ooo1208/http/OllamaController.java`
- [Context retrieval](https://github.com/ooo1208/ai-rag-knowledge/blob/master/ooo1208-trigger/src/main/java/io/github/ooo1208/http/OpenAiController.java): `ooo1208-trigger/src/main/java/io/github/ooo1208/http/OpenAiController.java`

### Chat and embeddings

- [Ollama chat model](https://github.com/ooo1208/ai-rag-knowledge/blob/master/ooo1208-app/src/main/java/io/github/ooo1208/config/OllamaConfig.java): `ooo1208-app/src/main/java/io/github/ooo1208/config/OllamaConfig.java`
- [OpenAI chat model](https://github.com/ooo1208/ai-rag-knowledge/blob/master/ooo1208-trigger/src/main/java/io/github/ooo1208/http/OpenAiController.java): `ooo1208-trigger/src/main/java/io/github/ooo1208/http/OpenAiController.java`
- [Embedding models](https://github.com/ooo1208/ai-rag-knowledge/blob/master/ooo1208-app/src/main/java/io/github/ooo1208/config/OllamaConfig.java): `ooo1208-app/src/main/java/io/github/ooo1208/config/OllamaConfig.java`

### Persistence and runtime

- [PgVector store](https://github.com/ooo1208/ai-rag-knowledge/blob/master/ooo1208-app/src/main/java/io/github/ooo1208/config/OllamaConfig.java): `ooo1208-app/src/main/java/io/github/ooo1208/config/OllamaConfig.java`
- [Redis client config](https://github.com/ooo1208/ai-rag-knowledge/blob/master/ooo1208-app/src/main/java/io/github/ooo1208/config/RedisClientConfig.java): `ooo1208-app/src/main/java/io/github/ooo1208/config/RedisClientConfig.java`
- **Redis tag list**
- **PostgreSQL pgvector**

### Other components

- **API client**
- **Ollama service**
- **OpenAI service**
- **Git repository**

## Connections

- API client → RAG controller: uploads / queries
- API client → Ollama controller: chat requests
- API client → OpenAI controller: chat requests
- RAG controller → Document parsing: parses content
- RAG controller → Text splitting: splits documents
- RAG controller → PgVector store: writes chunks
- RAG controller → Redis tag list: reads / writes tags
- RAG controller → Git repository: clones repository
- RAG controller → Redis client config: uses client
- Redis client config → Redis tag list: connects
- PgVector store → Embedding models: embeds stored text
- PgVector store → PostgreSQL pgvector: persists vectors
- Ollama controller → Context retrieval: retrieves context
- Context retrieval → PgVector store: similarity search
- Ollama controller → Ollama chat model: streams response
- Ollama chat model → Ollama service: calls model
- OpenAI controller → Context retrieval: retrieves context
- Context retrieval → PgVector store: similarity search
- OpenAI controller → OpenAI chat model: calls model
- OpenAI chat model → OpenAI service: calls model
- Ollama controller → API client: returns response
- OpenAI controller → API client: returns response
- RAG controller → API client: returns result
