PraisonAIUI supports 6 distinct UI styles that control how your application looks and behaves. Styles are auto-detected from your code — you usually don't need to set them manually.
| Style | Layout | Description |
|-------|--------|-------------|
| chat | ChatLayout | Conversational AI interface with sessions, streaming, profiles |
chat
ChatLayout
| agents | AgentUILayout | Multi-agent playground with tabbed agent/session sidebar |
agents
AgentUILayout
| playground | PlaygroundLayout | Side-by-side input/output panels for prompt testing |
playground
PlaygroundLayout
| dashboard | DashboardLayout | Admin panel with custom pages |
dashboard
DashboardLayout
| docs | ThreeColumnLayout | Documentation site with sidebar + TOC |
docs
ThreeColumnLayout
| custom | User-defined | Full control over layout |
custom
PraisonAIUI automatically detects the best style from your Python code — no flags needed:
After loading your app.py, the CLI inspects which callbacks and agents you registered:
app.py
| Your Code Uses | Detected Style |
|---------------|----------------|
| @profiles + register_agent() | agents |
@profiles
register_agent()
| @page decorators | dashboard |
@page
| @reply only | chat |
@reply
Override auto-detection with --style:
--style
Use aiui.set_style() for styles that can't be auto-detected (e.g., playground):
aiui.set_style()
When multiple sources specify a style, this priority chain applies:
1. CLI --style flag (highest — always wins)
2. aiui.set_style() in Python code
3. Auto-detection from registered callbacks/agents
4. Default: chat
The chat style supports additional layout modes for embedding:
| Mode | Description |
|------|-------------|
| fullscreen | Full-page chat (default) |
fullscreen
| sidebar | Fixed right-side panel |
sidebar
| bottom-right | Floating widget (bottom-right corner) |
bottom-right
| bottom-left | Floating widget (bottom-left) |
bottom-left
| top-right | Floating widget (top-right) |
top-right
| top-left | Floating widget (top-left) |
top-left
For YAML-based apps, set the style in your config: