# project-baize/baize-chatbot architecture

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

- Interactive diagram: https://gitdiagram.com/project-baize/baize-chatbot
- Repository: https://github.com/project-baize/baize-chatbot

## Overview

Baize’s repository supports a model-building workflow: collect self-chat dialogs from question datasets, preprocess them into training JSON, fine-tune a LoRA adapter, and optionally merge that adapter into a standalone model. A separate Gradio demo serves chat using a base model and optional adapter. The graph preserves both collection versions and the released dialog datasets. Demo internals are represented at the app entry point because its source was not sampled; links based on documented behavior cite the README.

Main entry points: [`merge_lora.py`](https://github.com/project-baize/baize-chatbot/blob/main/merge_lora.py) (Adapter merger), [`demo/app.py`](https://github.com/project-baize/baize-chatbot/blob/main/demo/app.py) (Gradio chat demo), [`collect.py`](https://github.com/project-baize/baize-chatbot/blob/main/collect.py) (Self-chat v1), [`collect_v2.py`](https://github.com/project-baize/baize-chatbot/blob/main/collect_v2.py) (Self-chat v2)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_data["Dialog data"]
  node_question_sets[("Question datasets")]
  node_collector_v1["Self-chat v1<br/>[collect.py]"]
  node_collector_v2["Self-chat v2<br/>[collect_v2.py]"]
  node_raw_dialogs[("Collected dialogs")]
  node_preprocess["Dialog formatter<br/>[preprocess.py]"]
  node_released_data[("Released dialogs")]
end

subgraph group_training["Model training"]
  node_training_data[("Training inputs")]
  node_finetune["LoRA fine-tuning<br/>[finetune.py]"]
  node_base_model[("LLaMA base model")]
end

subgraph group_release["Model release"]
  node_adapter[("LoRA adapter")]
  node_merge["Adapter merger<br/>[merge_lora.py]"]
  node_merged_model[("Merged model")]
end

subgraph group_serving["Chat demo"]
  node_model_hub[("Hugging Face hub")]
  node_demo_app["Gradio chat demo<br/>[app.py]"]
  node_chat_model["Loaded chat model<br/>[app.py]"]
end

node_researcher(("Project operator"))
node_demo_user(("Chat user"))

node_researcher -->|"starts collection"| node_collector_v1
node_researcher -->|"starts collection"| node_collector_v2
node_collector_v1 -->|"loads questions"| node_question_sets
node_collector_v2 -->|"loads questions"| node_question_sets
node_collector_v1 -->|"writes dialogs"| node_raw_dialogs
node_collector_v2 -->|"writes dialogs"| node_raw_dialogs
node_raw_dialogs -->|"reads dialogs"| node_preprocess
node_preprocess -->|"writes JSON"| node_released_data
node_released_data -->|"provides examples"| node_training_data
node_researcher -->|"starts training"| node_finetune
node_finetune -->|"loads weights"| node_base_model
node_finetune -->|"saves adapter"| node_adapter
node_researcher -->|"runs merge"| node_merge
node_merge -->|"loads weights"| node_base_model
node_merge -->|"loads adapter"| node_adapter
node_merge -->|"saves model"| node_merged_model
node_demo_user -->|"submits chat"| node_demo_app
node_model_hub -->|"provides weights"| node_demo_app
node_demo_app -->|"runs inference"| node_chat_model
node_chat_model -->|"returns response"| node_demo_app

click node_collector_v1 "https://github.com/project-baize/baize-chatbot/blob/main/collect.py"
click node_collector_v2 "https://github.com/project-baize/baize-chatbot/blob/main/collect_v2.py"
click node_preprocess "https://github.com/project-baize/baize-chatbot/blob/main/preprocess.py"
click node_released_data "https://github.com/project-baize/baize-chatbot/tree/main/data"
click node_training_data "https://github.com/project-baize/baize-chatbot/tree/main/data"
click node_finetune "https://github.com/project-baize/baize-chatbot/blob/main/finetune.py"
click node_merge "https://github.com/project-baize/baize-chatbot/blob/main/merge_lora.py"
click node_demo_app "https://github.com/project-baize/baize-chatbot/blob/main/demo/app.py"
click node_chat_model "https://github.com/project-baize/baize-chatbot/blob/main/demo/app.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_question_sets,node_collector_v1,node_collector_v2,node_raw_dialogs,node_preprocess,node_released_data,node_demo_user toneBlue
class node_training_data,node_finetune,node_base_model toneAmber
class node_adapter,node_merge,node_merged_model toneMint
class node_model_hub,node_demo_app,node_chat_model toneRose
class node_researcher toneIndigo
```

## Components

### Dialog data

- **Question datasets**
- [Self-chat v1](https://github.com/project-baize/baize-chatbot/blob/main/collect.py): `collect.py`
- [Self-chat v2](https://github.com/project-baize/baize-chatbot/blob/main/collect_v2.py): `collect_v2.py`
- **Collected dialogs**
- [Dialog formatter](https://github.com/project-baize/baize-chatbot/blob/main/preprocess.py): `preprocess.py`
- [Released dialogs](https://github.com/project-baize/baize-chatbot/tree/main/data): `data`

### Model training

- [Training inputs](https://github.com/project-baize/baize-chatbot/tree/main/data): `data`
- [LoRA fine-tuning](https://github.com/project-baize/baize-chatbot/blob/main/finetune.py): `finetune.py`
- **LLaMA base model**

### Model release

- **LoRA adapter**
- [Adapter merger](https://github.com/project-baize/baize-chatbot/blob/main/merge_lora.py): `merge_lora.py`
- **Merged model**

### Chat demo

- **Hugging Face hub**
- [Gradio chat demo](https://github.com/project-baize/baize-chatbot/blob/main/demo/app.py): `demo/app.py`
- [Loaded chat model](https://github.com/project-baize/baize-chatbot/blob/main/demo/app.py): `demo/app.py`

### Other components

- **Project operator**
- **Chat user**

## Connections

- Project operator → Self-chat v1: starts collection (evidence: `README.md`)
- Project operator → Self-chat v2: starts collection (evidence: `README.md`)
- Self-chat v1 → Question datasets: loads questions (evidence: `collect.py`)
- Self-chat v2 → Question datasets: loads questions (evidence: `collect_v2.py`)
- Self-chat v1 → Collected dialogs: writes dialogs (evidence: `collect.py`)
- Self-chat v2 → Collected dialogs: writes dialogs (evidence: `collect_v2.py`)
- Collected dialogs → Dialog formatter: reads dialogs (evidence: `preprocess.py`)
- Dialog formatter → Released dialogs: writes JSON (evidence: `preprocess.py`)
- Released dialogs → Training inputs: provides examples
- Project operator → LoRA fine-tuning: starts training (evidence: `README.md`)
- LoRA fine-tuning → LLaMA base model: loads weights (evidence: `finetune.py`)
- LoRA fine-tuning → LoRA adapter: saves adapter (evidence: `finetune.py`)
- Project operator → Adapter merger: runs merge (evidence: `README.md`)
- Adapter merger → LLaMA base model: loads weights (evidence: `merge_lora.py`)
- Adapter merger → LoRA adapter: loads adapter (evidence: `merge_lora.py`)
- Adapter merger → Merged model: saves model (evidence: `merge_lora.py`)
- Chat user → Gradio chat demo: submits chat (evidence: `README.md`)
- Hugging Face hub → Gradio chat demo: provides weights (evidence: `README.md`)
- Gradio chat demo → Loaded chat model: runs inference (evidence: `README.md`)
- Loaded chat model → Gradio chat demo: returns response (evidence: `README.md`)
