# kenbiz25/comemrsupport architecture

> Architecture diagram of the GitHub repository kenbiz25/comemrsupport, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/kenbiz25/comemrsupport
- Repository: https://github.com/kenbiz25/comemrsupport

## Overview

ComEMR WhatsApp Support Bot receives WhatsApp messages, processes them through conversation and RAG logic, then sends support answers or guided actions back to users. Its domain stages include webhook handling, optional audio transcription and language normalization, knowledge retrieval and answer composition, and menu, memory, or ticket handling. A separate indexing path builds the searchable knowledge base. The graph reflects README capabilities and shown references; some internal wiring is based only on the SOURCE INDEX, so unsampled relationships are omitted where evidence is insufficient.

Main entry points: [`rag/flow.py`](https://github.com/kenbiz25/comemrsupport/blob/main/rag/flow.py) (Conversation Flow), [`app.py`](https://github.com/kenbiz25/comemrsupport/blob/main/app.py) (FastAPI App), [`rag/composer.py`](https://github.com/kenbiz25/comemrsupport/blob/main/rag/composer.py) (RAG Composer), [`apps/whatsapp_gateway/routes.py`](https://github.com/kenbiz25/comemrsupport/blob/main/apps/whatsapp_gateway/routes.py) (Gateway Routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_gateway["WhatsApp Gateway"]
  node_app["FastAPI App<br/>[app.py]"]
  node_gateway_routes["Gateway Routes<br/>[routes.py]"]
  node_send["Message Sender<br/>[send.py]"]
  node_whatsapp_service["WhatsApp Service"]
end

subgraph group_answering["Answering and RAG"]
  node_composer["RAG Composer<br/>[composer.py]"]
  node_retriever["Knowledge Retriever<br/>[retriever.py]"]
  node_flow["Conversation Flow<br/>[flow.py]"]
  node_llm_service["LLM Service<br/>[llm_service.py]"]
  node_openai["OpenAI Adapter<br/>[openai_client.py]"]
  node_policies["RAG Policies<br/>[policies.py]"]
end

subgraph group_knowledge["Knowledge and Indexing"]
  node_faiss[("FAISS Knowledge Store<br/>[store_faiss.py]")]
  node_indexing["KB Indexing Pipeline<br/>[pipeline.py]"]
  node_kb_files["Knowledge Documents"]
end

subgraph group_support["Conversation Support"]
  node_memory["Conversation Memory<br/>[memory_service.py]"]
  node_vector_memory["Vector Memory<br/>[vector_memory.py]"]
  node_sqlite_store[("SQLite Vector Store")]
  node_menu["Menu Routing<br/>[menu_routing.py]"]
  node_tickets[("Ticket Manager<br/>[ticket_manager.py]")]
  node_whisper["Audio Transcription<br/>[openai_client.py]"]
end

node_user(("WhatsApp User"))
node_meta{{"WhatsApp Cloud API"}}
node_settings["Runtime Settings<br/>[settings.py]"]

node_user -->|"sends message"| node_app
node_app -->|"dispatches to"| node_flow
node_app -->|"transcribes audio"| node_whisper
node_app -->|"downloads media"| node_meta
node_flow -->|"composes answer"| node_composer
node_composer -->|"retrieves context"| node_retriever
node_retriever -->|"searches"| node_faiss
node_composer -->|"generates answer"| node_openai
node_llm_service -->|"requests completion"| node_openai
node_flow -->|"sends replies"| node_whatsapp_service
node_whatsapp_service -->|"sends messages"| node_meta
node_send -->|"sends text and media"| node_meta
node_user -->|"webhook request"| node_gateway_routes
node_gateway_routes -->|"calls composer"| node_composer
node_gateway_routes -->|"uses sender"| node_send
node_kb_files -.->|"provides documents"| node_indexing
node_indexing -->|"writes vectors"| node_faiss
node_memory -->|"adds entries"| node_vector_memory
node_vector_memory -->|"stores vectors"| node_sqlite_store
node_memory -->|"summarizes sessions"| node_openai
node_flow -->|"reads and saves turns"| node_memory
node_flow -->|"shows menu"| node_menu
node_flow -->|"creates tickets"| node_tickets
node_composer -.->|"applies guardrails"| node_policies
node_settings -->|"configures runtime"| node_app

click node_app "https://github.com/kenbiz25/comemrsupport/blob/main/app.py"
click node_gateway_routes "https://github.com/kenbiz25/comemrsupport/blob/main/apps/whatsapp_gateway/routes.py"
click node_send "https://github.com/kenbiz25/comemrsupport/blob/main/apps/whatsapp_gateway/send.py"
click node_whatsapp_service "https://github.com/kenbiz25/comemrsupport/blob/main/core/whatsapp/whatsapp_service.py"
click node_composer "https://github.com/kenbiz25/comemrsupport/blob/main/rag/composer.py"
click node_retriever "https://github.com/kenbiz25/comemrsupport/blob/main/rag/retriever.py"
click node_flow "https://github.com/kenbiz25/comemrsupport/blob/main/rag/flow.py"
click node_llm_service "https://github.com/kenbiz25/comemrsupport/blob/main/core/llm/llm_service.py"
click node_openai "https://github.com/kenbiz25/comemrsupport/blob/main/adapters/llm/openai_client.py"
click node_policies "https://github.com/kenbiz25/comemrsupport/blob/main/rag/policies.py"
click node_faiss "https://github.com/kenbiz25/comemrsupport/blob/main/core/knowledge/store_faiss.py"
click node_indexing "https://github.com/kenbiz25/comemrsupport/blob/main/core/indexing/pipeline.py"
click node_kb_files "https://github.com/kenbiz25/comemrsupport/tree/main/kb"
click node_memory "https://github.com/kenbiz25/comemrsupport/blob/main/core/memory/memory_service.py"
click node_vector_memory "https://github.com/kenbiz25/comemrsupport/blob/main/core/memory/vector_memory.py"
click node_sqlite_store "https://github.com/kenbiz25/comemrsupport/blob/main/core/memory/sqlite_vector_store.py"
click node_menu "https://github.com/kenbiz25/comemrsupport/blob/main/core/menu/menu_routing.py"
click node_tickets "https://github.com/kenbiz25/comemrsupport/blob/main/core/tickets/ticket_manager.py"
click node_whisper "https://github.com/kenbiz25/comemrsupport/blob/main/adapters/llm/openai_client.py"
click node_settings "https://github.com/kenbiz25/comemrsupport/blob/main/config/settings.py"

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_app,node_gateway_routes,node_send,node_whatsapp_service,node_user toneBlue
class node_composer,node_retriever,node_flow,node_llm_service,node_openai,node_policies toneAmber
class node_faiss,node_indexing,node_kb_files,node_meta toneMint
class node_memory,node_vector_memory,node_sqlite_store,node_menu,node_tickets,node_whisper toneRose
class node_settings toneTeal
```

## Components

### WhatsApp Gateway

- [FastAPI App](https://github.com/kenbiz25/comemrsupport/blob/main/app.py): `app.py`
- [Gateway Routes](https://github.com/kenbiz25/comemrsupport/blob/main/apps/whatsapp_gateway/routes.py): `apps/whatsapp_gateway/routes.py`
- [Message Sender](https://github.com/kenbiz25/comemrsupport/blob/main/apps/whatsapp_gateway/send.py): `apps/whatsapp_gateway/send.py`
- [WhatsApp Service](https://github.com/kenbiz25/comemrsupport/blob/main/core/whatsapp/whatsapp_service.py): `core/whatsapp/whatsapp_service.py`

### Answering and RAG

- [RAG Composer](https://github.com/kenbiz25/comemrsupport/blob/main/rag/composer.py): `rag/composer.py`
- [Knowledge Retriever](https://github.com/kenbiz25/comemrsupport/blob/main/rag/retriever.py): `rag/retriever.py`
- [Conversation Flow](https://github.com/kenbiz25/comemrsupport/blob/main/rag/flow.py): `rag/flow.py`
- [LLM Service](https://github.com/kenbiz25/comemrsupport/blob/main/core/llm/llm_service.py): `core/llm/llm_service.py`
- [OpenAI Adapter](https://github.com/kenbiz25/comemrsupport/blob/main/adapters/llm/openai_client.py): `adapters/llm/openai_client.py`
- [RAG Policies](https://github.com/kenbiz25/comemrsupport/blob/main/rag/policies.py): `rag/policies.py`

### Knowledge and Indexing

- [FAISS Knowledge Store](https://github.com/kenbiz25/comemrsupport/blob/main/core/knowledge/store_faiss.py): `core/knowledge/store_faiss.py`
- [KB Indexing Pipeline](https://github.com/kenbiz25/comemrsupport/blob/main/core/indexing/pipeline.py): `core/indexing/pipeline.py`
- [Knowledge Documents](https://github.com/kenbiz25/comemrsupport/tree/main/kb): `kb`

### Conversation Support

- [Conversation Memory](https://github.com/kenbiz25/comemrsupport/blob/main/core/memory/memory_service.py): `core/memory/memory_service.py`
- [Vector Memory](https://github.com/kenbiz25/comemrsupport/blob/main/core/memory/vector_memory.py): `core/memory/vector_memory.py`
- [SQLite Vector Store](https://github.com/kenbiz25/comemrsupport/blob/main/core/memory/sqlite_vector_store.py): `core/memory/sqlite_vector_store.py`
- [Menu Routing](https://github.com/kenbiz25/comemrsupport/blob/main/core/menu/menu_routing.py): `core/menu/menu_routing.py`
- [Ticket Manager](https://github.com/kenbiz25/comemrsupport/blob/main/core/tickets/ticket_manager.py): `core/tickets/ticket_manager.py`
- [Audio Transcription](https://github.com/kenbiz25/comemrsupport/blob/main/adapters/llm/openai_client.py): `adapters/llm/openai_client.py`

### Other components

- **WhatsApp User**
- **WhatsApp Cloud API**
- [Runtime Settings](https://github.com/kenbiz25/comemrsupport/blob/main/config/settings.py): `config/settings.py`

## Connections

- WhatsApp User → FastAPI App: sends message (evidence: `README.md`)
- FastAPI App → Conversation Flow: dispatches to (evidence: `app.py`)
- FastAPI App → Audio Transcription: transcribes audio (evidence: `app.py`)
- FastAPI App → WhatsApp Cloud API: downloads media (evidence: `app.py`)
- Conversation Flow → RAG Composer: composes answer (evidence: `rag/flow.py`)
- RAG Composer → Knowledge Retriever: retrieves context (evidence: `rag/composer.py`)
- Knowledge Retriever → FAISS Knowledge Store: searches (evidence: `rag/retriever.py`)
- RAG Composer → OpenAI Adapter: generates answer (evidence: `rag/composer.py`)
- LLM Service → OpenAI Adapter: requests completion (evidence: `core/llm/llm_service.py`)
- Conversation Flow → WhatsApp Service: sends replies (evidence: `rag/flow.py`)
- WhatsApp Service → WhatsApp Cloud API: sends messages (evidence: `README.md`)
- Message Sender → WhatsApp Cloud API: sends text and media (evidence: `README.md`)
- WhatsApp User → Gateway Routes: webhook request (evidence: `README.md`)
- Gateway Routes → RAG Composer: calls composer (evidence: `apps/whatsapp_gateway/routes.py`)
- Gateway Routes → Message Sender: uses sender (evidence: `apps/whatsapp_gateway/routes.py`)
- Knowledge Documents → KB Indexing Pipeline: provides documents
- KB Indexing Pipeline → FAISS Knowledge Store: writes vectors (evidence: `core/indexing/pipeline.py`)
- Conversation Memory → Vector Memory: adds entries (evidence: `core/memory/memory_service.py`)
- Vector Memory → SQLite Vector Store: stores vectors (evidence: `core/memory/vector_memory.py`)
- Conversation Memory → OpenAI Adapter: summarizes sessions (evidence: `core/memory/memory_service.py`)
- Conversation Flow → Conversation Memory: reads and saves turns (evidence: `rag/flow.py`)
- Conversation Flow → Menu Routing: shows menu (evidence: `rag/flow.py`)
- Conversation Flow → Ticket Manager: creates tickets (evidence: `rag/flow.py`)
- RAG Composer → RAG Policies: applies guardrails
- Runtime Settings → FastAPI App: configures runtime (evidence: `app.py`)
