# yaenovin/rikkahub-revised architecture

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

- Interactive diagram: https://gitdiagram.com/yaenovin/rikkahub-revised
- Repository: https://github.com/yaenovin/rikkahub-revised

## Overview

Rikkahub Revised is an Android AI chat client. Its principal workflow is a user composing a message, the chat service preparing and submitting a request to a configured model provider, and streamed results becoming conversation messages. The broader product also supports search and local tools, knowledge and memory retrieval, generated media, speech input, and durable conversation state. The graph reflects documented capabilities and the supplied source excerpts; several runtime connections are conceptual because the relevant call sites were not sampled.

Main entry points: [`app/src/main/java/me/rerere/rikkahub/service/ChatService.kt`](https://github.com/yaenovin/rikkahub-revised/blob/main/app/src/main/java/me/rerere/rikkahub/service/ChatService.kt) (Chat service), [`app/src/main/java/me/rerere/rikkahub/ui/components/ai/ChatInput.kt`](https://github.com/yaenovin/rikkahub-revised/blob/main/app/src/main/java/me/rerere/rikkahub/ui/components/ai/ChatInput.kt) (Chat interface), [`ai/src/main/java/me/rerere/ai/provider/providers`](https://github.com/yaenovin/rikkahub-revised/tree/main/ai/src/main/java/me/rerere/ai/provider/providers) (Provider adapters), [`app/src/main/java/me/rerere/rikkahub/data/ai/transformers/Transformer.kt`](https://github.com/yaenovin/rikkahub-revised/blob/main/app/src/main/java/me/rerere/rikkahub/data/ai/transformers/Transformer.kt) (Context transforms)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_chat["Chat experience"]
  node_chat_service["Chat service<br/>[ChatService.kt]"]
  node_chat_ui["Chat interface<br/>[ChatInput.kt]"]
  node_messages["Message models<br/>[Message.kt]"]
end

subgraph group_ai["AI runtime"]
  node_provider_manager["Provider manager<br/>[ProviderManager.kt]"]
  node_provider_api["Provider adapters"]
  node_streaming["Stream handling"]
end

subgraph group_knowledge["Tools and context"]
  node_context["Context transforms<br/>[Transformer.kt]"]
  node_memory["Memory services"]
  node_knowledge_base["Knowledge base"]
  node_search["Web search<br/>[SearchService.kt]"]
  node_tools["Assistant tools"]
end

subgraph group_data["Persistence"]
  node_database[("App database<br/>[AppDatabase.kt]")]
  node_conversation_repo["Conversation repository"]
  node_settings[("Provider settings")]
end

subgraph group_media["Media and integrations"]
  node_image_generation["Image generation"]
  node_video_generation["Video generation"]
  node_speech["Speech recognition"]
  node_file_store["Chat file store<br/>[FilesManager.kt]"]
end

node_user(("User"))
node_model_service{{"Model API"}}

node_user -->|"composes"| node_chat_ui
node_chat_ui -->|"submits message"| node_chat_service
node_chat_service -->|"prepares context"| node_context
node_chat_service -->|"requests inference"| node_provider_manager
node_provider_manager -->|"dispatches request"| node_provider_api
node_provider_api -->|"sends request"| node_model_service
node_model_service -->|"streams response"| node_provider_api
node_provider_api -->|"decodes events"| node_streaming
node_streaming -->|"delivers chunks"| node_chat_service
node_chat_service -->|"updates messages"| node_messages
node_chat_service -->|"persists conversation"| node_conversation_repo
node_conversation_repo -->|"reads and writes"| node_database
node_chat_service -->|"uses configuration"| node_settings
node_context -.->|"retrieves memories"| node_memory
node_context -.->|"retrieves documents"| node_knowledge_base
node_chat_service -.->|"dispatches tools"| node_tools
node_tools -.->|"performs search"| node_search
node_chat_service -.->|"generates images"| node_image_generation
node_image_generation -->|"requests generation"| node_provider_manager
node_image_generation -->|"saves images"| node_file_store
node_chat_service -.->|"coordinates generation"| node_video_generation
node_chat_ui -.->|"captures speech"| node_speech
node_speech -.->|"returns transcript"| node_chat_ui

click node_chat_service "https://github.com/yaenovin/rikkahub-revised/blob/main/app/src/main/java/me/rerere/rikkahub/service/ChatService.kt"
click node_chat_ui "https://github.com/yaenovin/rikkahub-revised/blob/main/app/src/main/java/me/rerere/rikkahub/ui/components/ai/ChatInput.kt"
click node_messages "https://github.com/yaenovin/rikkahub-revised/blob/main/ai/src/main/java/me/rerere/ai/ui/Message.kt"
click node_provider_manager "https://github.com/yaenovin/rikkahub-revised/blob/main/ai/src/main/java/me/rerere/ai/provider/ProviderManager.kt"
click node_provider_api "https://github.com/yaenovin/rikkahub-revised/tree/main/ai/src/main/java/me/rerere/ai/provider/providers"
click node_streaming "https://github.com/yaenovin/rikkahub-revised/blob/main/ai/src/main/java/me/rerere/ai/provider/stream/StreamChunkDecoder.kt"
click node_context "https://github.com/yaenovin/rikkahub-revised/blob/main/app/src/main/java/me/rerere/rikkahub/data/ai/transformers/Transformer.kt"
click node_memory "https://github.com/yaenovin/rikkahub-revised/blob/main/app/src/main/java/me/rerere/rikkahub/data/memory/MemoryEmbeddingService.kt"
click node_knowledge_base "https://github.com/yaenovin/rikkahub-revised/blob/main/app/src/main/java/me/rerere/rikkahub/data/repository/KnowledgeBaseRepository.kt"
click node_search "https://github.com/yaenovin/rikkahub-revised/blob/main/search/src/main/java/me/rerere/search/SearchService.kt"
click node_tools "https://github.com/yaenovin/rikkahub-revised/blob/main/app/src/main/java/me/rerere/rikkahub/data/ai/tools/ConversationTools.kt"
click node_database "https://github.com/yaenovin/rikkahub-revised/blob/main/app/src/main/java/me/rerere/rikkahub/data/db/AppDatabase.kt"
click node_conversation_repo "https://github.com/yaenovin/rikkahub-revised/blob/main/app/src/main/java/me/rerere/rikkahub/data/repository/ConversationRepository.kt"
click node_settings "https://github.com/yaenovin/rikkahub-revised/blob/main/app/src/main/java/me/rerere/rikkahub/data/datastore/PreferencesStore.kt"
click node_image_generation "https://github.com/yaenovin/rikkahub-revised/blob/main/app/src/main/java/me/rerere/rikkahub/data/ai/ChatImageGenerationService.kt"
click node_video_generation "https://github.com/yaenovin/rikkahub-revised/blob/main/app/src/main/java/me/rerere/rikkahub/data/video/VideoGenerationCoordinator.kt"
click node_speech "https://github.com/yaenovin/rikkahub-revised/blob/main/speech/src/main/java/me/rerere/asr/providers/VolcengineASRController.kt"
click node_file_store "https://github.com/yaenovin/rikkahub-revised/blob/main/app/src/main/java/me/rerere/rikkahub/data/files/FilesManager.kt"

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_chat_service,node_chat_ui,node_messages,node_user toneBlue
class node_provider_manager,node_provider_api,node_streaming toneAmber
class node_context,node_memory,node_knowledge_base,node_search,node_tools,node_model_service toneMint
class node_database,node_conversation_repo,node_settings toneRose
class node_image_generation,node_video_generation,node_speech,node_file_store toneIndigo
```

## Components

### Chat experience

- [Chat service](https://github.com/yaenovin/rikkahub-revised/blob/main/app/src/main/java/me/rerere/rikkahub/service/ChatService.kt): `app/src/main/java/me/rerere/rikkahub/service/ChatService.kt`
- [Chat interface](https://github.com/yaenovin/rikkahub-revised/blob/main/app/src/main/java/me/rerere/rikkahub/ui/components/ai/ChatInput.kt): `app/src/main/java/me/rerere/rikkahub/ui/components/ai/ChatInput.kt`
- [Message models](https://github.com/yaenovin/rikkahub-revised/blob/main/ai/src/main/java/me/rerere/ai/ui/Message.kt): `ai/src/main/java/me/rerere/ai/ui/Message.kt`

### AI runtime

- [Provider manager](https://github.com/yaenovin/rikkahub-revised/blob/main/ai/src/main/java/me/rerere/ai/provider/ProviderManager.kt): `ai/src/main/java/me/rerere/ai/provider/ProviderManager.kt`
- [Provider adapters](https://github.com/yaenovin/rikkahub-revised/tree/main/ai/src/main/java/me/rerere/ai/provider/providers): `ai/src/main/java/me/rerere/ai/provider/providers`
- [Stream handling](https://github.com/yaenovin/rikkahub-revised/blob/main/ai/src/main/java/me/rerere/ai/provider/stream/StreamChunkDecoder.kt): `ai/src/main/java/me/rerere/ai/provider/stream/StreamChunkDecoder.kt`

### Tools and context

- [Context transforms](https://github.com/yaenovin/rikkahub-revised/blob/main/app/src/main/java/me/rerere/rikkahub/data/ai/transformers/Transformer.kt): `app/src/main/java/me/rerere/rikkahub/data/ai/transformers/Transformer.kt`
- [Memory services](https://github.com/yaenovin/rikkahub-revised/blob/main/app/src/main/java/me/rerere/rikkahub/data/memory/MemoryEmbeddingService.kt): `app/src/main/java/me/rerere/rikkahub/data/memory/MemoryEmbeddingService.kt`
- [Knowledge base](https://github.com/yaenovin/rikkahub-revised/blob/main/app/src/main/java/me/rerere/rikkahub/data/repository/KnowledgeBaseRepository.kt): `app/src/main/java/me/rerere/rikkahub/data/repository/KnowledgeBaseRepository.kt`
- [Web search](https://github.com/yaenovin/rikkahub-revised/blob/main/search/src/main/java/me/rerere/search/SearchService.kt): `search/src/main/java/me/rerere/search/SearchService.kt`
- [Assistant tools](https://github.com/yaenovin/rikkahub-revised/blob/main/app/src/main/java/me/rerere/rikkahub/data/ai/tools/ConversationTools.kt): `app/src/main/java/me/rerere/rikkahub/data/ai/tools/ConversationTools.kt`

### Persistence

- [App database](https://github.com/yaenovin/rikkahub-revised/blob/main/app/src/main/java/me/rerere/rikkahub/data/db/AppDatabase.kt): `app/src/main/java/me/rerere/rikkahub/data/db/AppDatabase.kt`
- [Conversation repository](https://github.com/yaenovin/rikkahub-revised/blob/main/app/src/main/java/me/rerere/rikkahub/data/repository/ConversationRepository.kt): `app/src/main/java/me/rerere/rikkahub/data/repository/ConversationRepository.kt`
- [Provider settings](https://github.com/yaenovin/rikkahub-revised/blob/main/app/src/main/java/me/rerere/rikkahub/data/datastore/PreferencesStore.kt): `app/src/main/java/me/rerere/rikkahub/data/datastore/PreferencesStore.kt`

### Media and integrations

- [Image generation](https://github.com/yaenovin/rikkahub-revised/blob/main/app/src/main/java/me/rerere/rikkahub/data/ai/ChatImageGenerationService.kt): `app/src/main/java/me/rerere/rikkahub/data/ai/ChatImageGenerationService.kt`
- [Video generation](https://github.com/yaenovin/rikkahub-revised/blob/main/app/src/main/java/me/rerere/rikkahub/data/video/VideoGenerationCoordinator.kt): `app/src/main/java/me/rerere/rikkahub/data/video/VideoGenerationCoordinator.kt`
- [Speech recognition](https://github.com/yaenovin/rikkahub-revised/blob/main/speech/src/main/java/me/rerere/asr/providers/VolcengineASRController.kt): `speech/src/main/java/me/rerere/asr/providers/VolcengineASRController.kt`
- [Chat file store](https://github.com/yaenovin/rikkahub-revised/blob/main/app/src/main/java/me/rerere/rikkahub/data/files/FilesManager.kt): `app/src/main/java/me/rerere/rikkahub/data/files/FilesManager.kt`

### Other components

- **User**
- **Model API**

## Connections

- User → Chat interface: composes
- Chat interface → Chat service: submits message
- Chat service → Context transforms: prepares context
- Chat service → Provider manager: requests inference
- Provider manager → Provider adapters: dispatches request
- Provider adapters → Model API: sends request
- Model API → Provider adapters: streams response
- Provider adapters → Stream handling: decodes events
- Stream handling → Chat service: delivers chunks
- Chat service → Message models: updates messages
- Chat service → Conversation repository: persists conversation
- Conversation repository → App database: reads and writes
- Chat service → Provider settings: uses configuration
- Context transforms → Memory services: retrieves memories
- Context transforms → Knowledge base: retrieves documents
- Chat service → Assistant tools: dispatches tools
- Assistant tools → Web search: performs search
- Chat service → Image generation: generates images
- Image generation → Provider manager: requests generation
- Image generation → Chat file store: saves images
- Chat service → Video generation: coordinates generation
- Chat interface → Speech recognition: captures speech
- Speech recognition → Chat interface: returns transcript
