# laion-ai/open-assistant architecture

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

- Interactive diagram: https://gitdiagram.com/laion-ai/open-assistant
- Repository: https://github.com/laion-ai/open-assistant

## Overview

Open-Assistant combines a crowdsourced data-collection platform with an assistant chat and model-inference system. Contributors submit prompts and replies, rank completions, and label examples; the backend manages these tasks and conversation trees. Chat requests are served by a separate inference server and model workers, while data and shared schemas support the broader model-training workflow. The README documents the product capabilities; several subsystem links are dashed where the sampled sources do not show runtime wiring.

Main entry points: [`inference/server/main.py`](https://github.com/laion-ai/open-assistant/blob/main/inference/server/main.py) (Inference Server), [`backend/main.py`](https://github.com/laion-ai/open-assistant/blob/main/backend/main.py) (Backend API), [`backend/oasst_backend/api/v1/tasks.py`](https://github.com/laion-ai/open-assistant/blob/main/backend/oasst_backend/api/v1/tasks.py) (Task API), [`backend/oasst_backend/prompt_repository.py`](https://github.com/laion-ai/open-assistant/blob/main/backend/oasst_backend/prompt_repository.py) (Conversation Data)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["User Interfaces"]
  node_website["Web App"]
  node_webclient["API Clients"]
  node_inferclient["Inference Client"]
end

subgraph group_collection["Data Collection"]
  node_backendapp["Backend API<br/>[main.py]"]
  node_taskapi["Task API<br/>[tasks.py]"]
  node_treemanager["Task Orchestration<br/>[tree_manager.py]"]
  node_prompts["Conversation Data"]
  node_taskrepo["Task Records<br/>[task_repository.py]"]
  node_users["User Records<br/>[user_repository.py]"]
  node_backenddb[("Backend Database<br/>[database.py]")]
end

subgraph group_inference["Chat Inference"]
  node_inferapp["Inference Server<br/>[main.py]"]
  node_chatroutes["Chat Routes<br/>[chats.py]"]
  node_chatrepo["Chat Records"]
  node_inferdb[("Inference Database<br/>[database.py]")]
  node_plugins["Chat Plugins"]
  node_worker["Model Worker<br/>[work.py]"]
end

subgraph group_model["Data And Models"]
  node_datasets["Training Data"]
  node_training["Model Training"]
  node_eval["Model Evaluation"]
end

subgraph group_shared["Shared Contracts"]
  node_protocol["Data Protocol<br/>[protocol.py]"]
  node_inferencecontract["Inference Schemas<br/>[inference.py]"]
end

node_contributors(("Contributors"))

node_contributors -->|"uses"| node_website
node_website -.->|"uses"| node_webclient
node_webclient -.->|"calls API"| node_backendapp
node_backendapp -->|"mounts routes"| node_taskapi
node_taskapi -->|"requests tasks"| node_treemanager
node_taskapi -->|"uses"| node_prompts
node_taskapi -->|"uses"| node_taskrepo
node_treemanager -->|"uses"| node_prompts
node_prompts -->|"uses"| node_taskrepo
node_prompts -->|"uses"| node_users
node_backendapp -->|"configures"| node_backenddb
node_contributors -->|"chats"| node_inferclient
node_inferclient -.->|"requests inference"| node_inferapp
node_inferapp -->|"mounts routes"| node_chatroutes
node_inferapp -->|"registers plugins"| node_plugins
node_chatroutes -.->|"uses"| node_chatrepo
node_chatrepo -->|"uses"| node_inferdb
node_inferapp -->|"initializes"| node_inferdb
node_inferapp -.->|"dispatches work"| node_worker
node_datasets -.->|"supplies data"| node_training
node_training -.->|"evaluated by"| node_eval
node_backendapp -->|"uses schemas"| node_protocol
node_inferapp -->|"uses schemas"| node_inferencecontract

click node_website "https://github.com/laion-ai/open-assistant/tree/main/website/src/pages"
click node_webclient "https://github.com/laion-ai/open-assistant/blob/main/website/src/lib/oasst_api_client.ts"
click node_backendapp "https://github.com/laion-ai/open-assistant/blob/main/backend/main.py"
click node_taskapi "https://github.com/laion-ai/open-assistant/blob/main/backend/oasst_backend/api/v1/tasks.py"
click node_treemanager "https://github.com/laion-ai/open-assistant/blob/main/backend/oasst_backend/tree_manager.py"
click node_prompts "https://github.com/laion-ai/open-assistant/blob/main/backend/oasst_backend/prompt_repository.py"
click node_taskrepo "https://github.com/laion-ai/open-assistant/blob/main/backend/oasst_backend/task_repository.py"
click node_users "https://github.com/laion-ai/open-assistant/blob/main/backend/oasst_backend/user_repository.py"
click node_backenddb "https://github.com/laion-ai/open-assistant/blob/main/backend/oasst_backend/database.py"
click node_inferclient "https://github.com/laion-ai/open-assistant/blob/main/website/src/lib/oasst_inference_client.ts"
click node_inferapp "https://github.com/laion-ai/open-assistant/blob/main/inference/server/main.py"
click node_chatroutes "https://github.com/laion-ai/open-assistant/blob/main/inference/server/oasst_inference_server/routes/chats.py"
click node_chatrepo "https://github.com/laion-ai/open-assistant/blob/main/inference/server/oasst_inference_server/user_chat_repository.py"
click node_inferdb "https://github.com/laion-ai/open-assistant/blob/main/inference/server/oasst_inference_server/database.py"
click node_plugins "https://github.com/laion-ai/open-assistant/tree/main/inference/server/oasst_inference_server/plugins"
click node_worker "https://github.com/laion-ai/open-assistant/blob/main/inference/worker/work.py"
click node_datasets "https://github.com/laion-ai/open-assistant/tree/main/data/datasets"
click node_training "https://github.com/laion-ai/open-assistant/tree/main/model/model_training"
click node_eval "https://github.com/laion-ai/open-assistant/tree/main/model/model_eval"
click node_protocol "https://github.com/laion-ai/open-assistant/blob/main/oasst-shared/oasst_shared/schemas/protocol.py"
click node_inferencecontract "https://github.com/laion-ai/open-assistant/blob/main/oasst-shared/oasst_shared/schemas/inference.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_website,node_webclient,node_inferclient toneBlue
class node_backendapp,node_taskapi,node_treemanager,node_prompts,node_taskrepo,node_users,node_backenddb toneAmber
class node_inferapp,node_chatroutes,node_chatrepo,node_inferdb,node_plugins,node_worker toneMint
class node_datasets,node_training,node_eval toneRose
class node_protocol,node_inferencecontract,node_contributors toneIndigo
```

## Components

### User Interfaces

- [Web App](https://github.com/laion-ai/open-assistant/tree/main/website/src/pages): `website/src/pages`
- [API Clients](https://github.com/laion-ai/open-assistant/blob/main/website/src/lib/oasst_api_client.ts): `website/src/lib/oasst_api_client.ts`
- [Inference Client](https://github.com/laion-ai/open-assistant/blob/main/website/src/lib/oasst_inference_client.ts): `website/src/lib/oasst_inference_client.ts`

### Data Collection

- [Backend API](https://github.com/laion-ai/open-assistant/blob/main/backend/main.py): `backend/main.py`
- [Task API](https://github.com/laion-ai/open-assistant/blob/main/backend/oasst_backend/api/v1/tasks.py): `backend/oasst_backend/api/v1/tasks.py`
- [Task Orchestration](https://github.com/laion-ai/open-assistant/blob/main/backend/oasst_backend/tree_manager.py): `backend/oasst_backend/tree_manager.py`
- [Conversation Data](https://github.com/laion-ai/open-assistant/blob/main/backend/oasst_backend/prompt_repository.py): `backend/oasst_backend/prompt_repository.py`
- [Task Records](https://github.com/laion-ai/open-assistant/blob/main/backend/oasst_backend/task_repository.py): `backend/oasst_backend/task_repository.py`
- [User Records](https://github.com/laion-ai/open-assistant/blob/main/backend/oasst_backend/user_repository.py): `backend/oasst_backend/user_repository.py`
- [Backend Database](https://github.com/laion-ai/open-assistant/blob/main/backend/oasst_backend/database.py): `backend/oasst_backend/database.py`

### Chat Inference

- [Inference Server](https://github.com/laion-ai/open-assistant/blob/main/inference/server/main.py): `inference/server/main.py`
- [Chat Routes](https://github.com/laion-ai/open-assistant/blob/main/inference/server/oasst_inference_server/routes/chats.py): `inference/server/oasst_inference_server/routes/chats.py`
- [Chat Records](https://github.com/laion-ai/open-assistant/blob/main/inference/server/oasst_inference_server/user_chat_repository.py): `inference/server/oasst_inference_server/user_chat_repository.py`
- [Inference Database](https://github.com/laion-ai/open-assistant/blob/main/inference/server/oasst_inference_server/database.py): `inference/server/oasst_inference_server/database.py`
- [Chat Plugins](https://github.com/laion-ai/open-assistant/tree/main/inference/server/oasst_inference_server/plugins): `inference/server/oasst_inference_server/plugins`
- [Model Worker](https://github.com/laion-ai/open-assistant/blob/main/inference/worker/work.py): `inference/worker/work.py`

### Data And Models

- [Training Data](https://github.com/laion-ai/open-assistant/tree/main/data/datasets): `data/datasets`
- [Model Training](https://github.com/laion-ai/open-assistant/tree/main/model/model_training): `model/model_training`
- [Model Evaluation](https://github.com/laion-ai/open-assistant/tree/main/model/model_eval): `model/model_eval`

### Shared Contracts

- [Data Protocol](https://github.com/laion-ai/open-assistant/blob/main/oasst-shared/oasst_shared/schemas/protocol.py): `oasst-shared/oasst_shared/schemas/protocol.py`
- [Inference Schemas](https://github.com/laion-ai/open-assistant/blob/main/oasst-shared/oasst_shared/schemas/inference.py): `oasst-shared/oasst_shared/schemas/inference.py`

### Other components

- **Contributors**

## Connections

- Contributors → Web App: uses (evidence: `README.md`)
- Web App → API Clients: uses
- API Clients → Backend API: calls API
- Backend API → Task API: mounts routes (evidence: `backend/main.py`)
- Task API → Task Orchestration: requests tasks (evidence: `backend/oasst_backend/api/v1/tasks.py`)
- Task API → Conversation Data: uses (evidence: `backend/oasst_backend/api/v1/tasks.py`)
- Task API → Task Records: uses (evidence: `backend/oasst_backend/api/v1/tasks.py`)
- Task Orchestration → Conversation Data: uses (evidence: `backend/oasst_backend/tree_manager.py`)
- Conversation Data → Task Records: uses (evidence: `backend/oasst_backend/prompt_repository.py`)
- Conversation Data → User Records: uses (evidence: `backend/oasst_backend/prompt_repository.py`)
- Backend API → Backend Database: configures (evidence: `backend/main.py`)
- Contributors → Inference Client: chats (evidence: `README.md`)
- Inference Client → Inference Server: requests inference
- Inference Server → Chat Routes: mounts routes (evidence: `inference/server/main.py`)
- Inference Server → Chat Plugins: registers plugins (evidence: `inference/server/main.py`)
- Chat Routes → Chat Records: uses
- Chat Records → Inference Database: uses (evidence: `inference/server/oasst_inference_server/user_chat_repository.py`)
- Inference Server → Inference Database: initializes (evidence: `inference/server/main.py`)
- Inference Server → Model Worker: dispatches work
- Training Data → Model Training: supplies data
- Model Training → Model Evaluation: evaluated by
- Backend API → Data Protocol: uses schemas (evidence: `backend/main.py`)
- Inference Server → Inference Schemas: uses schemas (evidence: `inference/server/main.py`)
