A sleek, modern Flask-based chat UI for AI assistants featuring:
- ⚡ Async model replies
- 🎭 Persona + emotional-state engine
- 💾 Conversation saving/loading
- 🗺️ Right-hand minimap of saved chats
- 🌓 Dark/Light mode toggle
- 🔄 Retryable error bubbles on failed replies
- 🧩 Clean template separation (
chat.html)
oChat/
│
├── chat_async.py
├── api.py
├── characters.py
│
├── templates/
│ └── chat.html
│
├── saved_conversations.json
└── assistant_personalities/
pip install flask
pip install asyncio
python chat_async.py
http://localhost:4000
- dark/light mode
- Saved conversation snapshots
- Auto-scroll + typing indicators
- Retry bubble for failed model responses
- Right sidebar with clickable conversation history
- Clean message bubble animation
- Async model inference routing
- Persona system with emotional state engine
- Context summarization
- Pluggable LLM backends (local or remote)
- Conversation reconstruction and history management
Personas live in:
assistant_personalities/*.json
Each persona includes:
core_motivesdelivery_stylesignal_strategyaudience_affinities
Emotional states live in:
assistant_personalities/emotion_states.json
Select the persona via:
export EMOTIONS=Node
- Click 💾 Save to snapshot the current chat.
- Right sidebar shows:
- name
- timestamp
- message count
Stored in:
saved_conversations.json
Create custom personalities for your chatbot by creating a new JSON configuration in assistant_personalities
If the backend times out or fails:
- A red bubble appears: "Failed to get a reply. Click to retry."
- Clicking it resends the same message.