You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Connect 90+ data sources, chat with AI agents, build interactive dashboards, and automate report delivery β powered by MindsDB, FastAPI, and React.
Demo Video
Full walkthrough: connecting a data source, building an AI dashboard, chatting with agents, exporting to PDF/PPTX, and scheduling a Telegram report.
Screenshots
Landing Page
Projects
Data Sources β Add Source
Data Sources β Connected Sources
Data Sources β Table Preview
Knowledge Bases
Knowledge Base β Chunk Viewer
AI Agents
AI Agents β Create Agent
Chat β Table Result
Chat β Auto-Generated Chart
Chat β SQL Query View
Chat β Add to Dashboard
Dashboards
Dashboard View
PDF Export
PPTX Export (Presenton AI)
Scheduled Reports
Schedule Run History
Chat Analytics
Langfuse Query Log
Settings β LLM Configuration
Settings β User Management
Settings β Telegram Integration
Telegram Bot (Mobile)
Help & Commands
Connect & Setup
Projects & Agents
Dashboards
Reports
β¨ Features
π€ AI Agents & Smart Chat
Plain-English querying β type any question; MindsDB translates it to SQL and executes it against your live database
@-mention routing β type @SalesAgent to target a specific agent directly
Multi-agent queries β mention multiple agents (@Sales @Marketing show Q1 revenue) to fire parallel queries and get a consolidated LLM-synthesized report
Auto-routing β when no @ is used, an LLM picks the best-fit agent automatically; if ambiguous, a picker modal appears
Greeting detection β conversational messages ("hi", "hello") are handled instantly without agent routing overhead
Streaming SSE answers β answers appear token-by-token with intermediate status ("Executing SQLβ¦", "Processing resultsβ¦")
Extracted SQL display β every answer shows the exact SQL query that was run (copyable)
Auto-generated charts β data results automatically trigger chart generation via AntV G2
AI data summary β each result gets a brief natural-language insight ("Revenue grew 12% YoY, driven by the APAC region")
Conversation memory β last 20 messages are included as context for every follow-up question
Multi-LLM support β Gemini, OpenAI, and Anthropic are pluggable; configured per-org in the UI (encrypted at rest)
Session history β all conversations are saved; resume any previous chat from the sidebar
π AI-Powered Dashboards
Drag-and-drop grid (Gridstack.js) β freely resize and reposition any widget
Every export is version-numbered and stored in MongoDB GridFS
PDF History modal β browse, preview info, and re-download any previous version
Delivered via Telegram bot (/report pdf) or email attachment
π PPTX Export (AI-Assisted via Presenton)
Click Export β PPTX on any dashboard
Dashboard context is summarised and sent to Presenton (self-hosted AI presentation generator)
Slides generated asynchronously; editable in an in-browser iframe before download
Delivered via Telegram bot (/report pptx) as a .pptx document
π Scheduled Reports
Cron expressions β powered by APScheduler (AsyncIOScheduler, in-process β no Celery or extra Redis queue needed)
Three delivery channels per schedule:
Email β HTML report + PDF attachment via SMTP (STARTTLS port 587)
Telegram β PDF document sent to any chat ID
Webhook β HTTP POST with dashboard snapshot JSON payload
Run history and last-delivery status visible on the Schedules page
π± Telegram Bot
Full-featured mobile interface. All commands work in private chat only.
Command
Description
/connect <api_key>
Link your OpenBI account
/disconnect
Clear session
/status
Show connected user, project, and active agent
/projects
List projects with tap-to-select keyboard
/use <name>
Switch active project
/agents
List agents with tap-to-select keyboard
/dashboards
Browse dashboards; tap to receive chart image album
/report pdf|pptx
Pick a dashboard and receive as a file
/kbs
List knowledge bases
/newchat
Start a fresh conversation (clears context)
/help
Show all commands
π Observability (Langfuse)
Optional Langfuse integration for LLM request tracing
Track token usage, latency, cost estimation, and agent reasoning per call
Enable via LANGFUSE_* env vars β zero overhead when disabled
ποΈ System Architecture & Data Flow
High-Level System Architecture
Low-Level Data Flows
For a detailed walkthrough of each architectural layer, database collections, credentials encryption, and background job runner subsystems, refer to the full OpenBI Architectural Reference.
Step-by-Step Data Flows
1. Authentication Flow
User submits credentials
β POST /api/auth/login (FastAPI)
β bcrypt password verify against MongoDB
β JWT (HS256) issued with user_id + org_id
β stored in localStorage as openbi_token
β all subsequent API calls send Bearer <token>
2. Connecting a Data Source
User fills connection form (UI)
β POST /api/projects/{pid}/connections
β FastAPI encrypts credentials with Fernet key
β Stores encrypted creds in MongoDB (connections collection)
β Calls MindsDB: CREATE DATABASE handler_name WITH ENGINE='postgres', PARAMETERS={...}
β MindsDB validates connectivity (raises error on failure)
β Connection record marked active in MongoDB
3. Creating an Agent
User defines agent (name, LLM, data sources, KB, prompt template)
β POST /api/projects/{pid}/agents
β FastAPI calls MindsDB REST: POST /api/projects/{project}/agents
β MindsDB creates agent with skills: [{type:'text2sql', tables:[...]}, {type:'knowledge_base', ...}]
β Agent record stored in MongoDB with mindsdb_agent_name reference
4. Chat Query Flow (most critical path)
User types question in Chat UI
β
Frontend routing logic:
ββ Multiple @agents mentioned? β POST /chat/multi (parallel agents + LLM consolidation)
ββ Single @agent? β route directly
ββ Greeting ("hi", "hello")? β route to first agent (backend handles locally, no MindsDB call)
ββ Active session agent? β reuse (continuation)
ββ Single agent exists? β auto-route
ββ Multiple agents? β POST /api/llm/route-agent (LLM picks best fit)
ββ Confident? β auto-route silently
ββ Ambiguous? β Agent Picker modal
β
POST /api/projects/{pid}/chat (body: agent_id, message, session_id, stream=true)
β
FastAPI backend:
1. Load session from MongoDB (last 20 messages as history)
2. Check for greeting pattern β stream local response, skip MindsDB
3. Ensure MindsDB project exists (survive container restarts)
4. Open SSE stream β yield "thinking" events
β
MindsDB agent completions/stream:
β Agent receives question + history
β LLM selects relevant data source skill
β Generates SQL query β executes against live DB
β Streams back: context events (SQL shown) + data event (answer text)
β
FastAPI parses stream:
β Extracts SQL from context events (regex: "Executing final SQL query:")
β Re-executes SQL via MindsDB SQL API for clean structured data
β Yields SSE events: thinking β sql β data β answer β done
β
Frontend (useChat hook):
β Renders streaming answer live
β Displays extracted SQL in collapsible block
β On "done": triggers auto chart generation (AntV G2 spec via LLM)
β Triggers AI summary generation for data results
β Persists message to session (MongoDB update)
β Records analytics (tokens, latency, cost, routing_source)
5. Dashboard Widget Flow
User adds widget β SQL query entered or AI-generated
β POST /api/projects/{pid}/dashboards/{did}/widgets
β Widget stored in MongoDB with sql_query + display_type + config
β
Widget loads:
β Runs SQL via MindsDB β columns + rows returned
β cached_data stored on widget document
β AntV G2 chart spec generated via LLM (chart_config JSONB)
β AntV S2 table config stored (sort, pivot, formatting)
β
Dashboard Chat ("@ChartAgent make it a line chart"):
β Modifies chart_config via LLM β stored back to widget
β WebSocket broadcast β all viewers see update in real-time
6. Knowledge Base RAG Flow
User uploads file (PDF, CSV, XLSX, JSON, Parquet, MD, TXTβ¦)
β FastAPI extracts text (pypdf / pandas / plain decode)
β Writes text to temp file β uploads to MindsDB via multipart
β MindsDB chunks text server-side β embeds β stores in vector store
β
Agent query that involves KB:
β MindsDB agent retrieves relevant chunks (semantic search)
β Combines with SQL results from data source skill
β LLM synthesizes final answer from both sources
7. Scheduled Report Flow
User creates schedule (cron expression + dashboard_id + delivery channels)
β Stored in MongoDB (schedules collection)
β APScheduler (AsyncIOScheduler) registers job at startup
β
At scheduled time:
β report_runner.py fires
β Refreshes all widgets (re-executes SQL queries)
β Captures PDF (html2canvas β jsPDF) OR triggers PPTX (Presenton)
β For each delivery channel:
Email β aiosmtplib STARTTLS β HTML body + PDF attachment
Telegram β python-telegram-bot β send_document (PDF) or text summary
Webhook β httpx POST β JSON payload with widget cached_data
β Run history recorded in MongoDB
π Data Sources (90+)
Powered by MindsDB handlers. Credentials entered in the UI β no config files required.
ποΈ Databases (35 sources)
Logo
Source
Handler ID
π
PostgreSQL
postgres
π¬
MySQL
mysql
π¦
MariaDB
mariadb
πͺ
Microsoft SQL Server
mssql
πΆ
Oracle
oracle
π
SQLite
sqlite
π¦
DuckDB
duckdb
π
MongoDB
mongodb
β‘
ClickHouse
clickhouse
πͺ³
CockroachDB
cockroachdb
π·
TiDB
tidb
π’
Vitess
vitess
βοΈ
SingleStore
singlestore
ποΈ
Cassandra
cassandra
π¦
ScyllaDB
scylladb
π
Amazon DynamoDB
dynamodb
ποΈ
Couchbase
couchbase
β‘
Supabase
supabase
π₯
Google Firestore
firestore
π
Amazon Aurora
aurora
βοΈ
Google Cloud SQL
google_cloud_sql
π
Google Cloud Spanner
spanner
π
Apache Druid
druid
π¦
Apache Impala
impala
π·
Vertica
vertica
π΅
Teradata
teradata
π΅
IBM Db2
db2
πΈ
SAP HANA
sap_hana
π
SurrealDB
surrealdb
πͺ
PlanetScale
planet_scale
β‘
YugabyteDB
yugabyte
π§²
Materialize
materialize
π¦
CrateDB
crate
π
Dremio
dremio
π¦
FaunaDB
fauna
βοΈ Cloud Data Warehouses (7 sources)
Logo
Source
Handler ID
βοΈ
Snowflake
snowflake
π
Google BigQuery
bigquery
π΄
Amazon Redshift
redshift
π§±
Databricks
databricks
πΊ
Trino
trino
β
StarRocks
starrocks
π
Apache Hive
hive
π SaaS & APIs (40+ sources)
Logo
Source
Handler ID
π
Google Sheets
sheets
π³
Stripe
stripe
π§‘
HubSpot
hubspot
π
Shopify
shopify
βοΈ
Salesforce
salesforce
π¬
Slack
slack
π
GitHub
github
π¦
GitLab
gitlab
π§
Gmail
gmail
π¦
Twitter / X
twitter
π
Notion
notion
π
Airtable
airtable
π«
Zendesk
zendesk
π
Intercom
intercom
π΅
Jira
jira
π
Confluence
confluence
π°
PayPal
paypal
πͺ
Binance
binance
π΅
Coinbase
coinbase
π¦
Plaid
plaid
π±
Twilio
twilio
π΄
Strava
strava
π¬
WhatsApp
whatsapp
πΎ
Discord
discord
πΊ
YouTube
youtube
π¦
QuickBooks
quickbooks
π
Google Calendar
google_calendar
π
Google Analytics
google_analytics
π
Google Search
google_search
π€
Reddit
reddit
πΌ
Microsoft Teams
teams
π°
NewsAPI
newsapi
ποΈ
Eventbrite
eventbrite
π¨
Sendinblue / Brevo
sendinblue
π³
Docker Hub
dockerhub
π
OpenBB
openbb
π
Wikipedia
mediawiki
π
Rocket.Chat
rocket_chat
ποΈ
Strapi
strapi
πΆ
HackerNews
hackernews
ποΈ File Storage (9 sources)
Logo
Source
Handler ID
πͺ£
Amazon S3
s3
ποΈ
Google Cloud Storage
gcs
π·
Azure Blob Storage
azure_blob
π
HDFS
hdfs
π‘
MinIO
minio
π
FTP
ftp
π¦
Dropbox
dropbox
βοΈ
OneDrive
one_drive
π’
SharePoint
sharepoint
β±οΈ Time-Series (4 sources)
Logo
Source
Handler ID
π
InfluxDB
influxdb
β±οΈ
TimescaleDB
timescaledb
ποΈ
QuestDB
questdb
π
TDengine
tdengine
π Search (2 sources)
Logo
Source
Handler ID
π
Elasticsearch
elasticsearch
βοΈ
Apache Solr
solr
π API (1 source)
Logo
Source
Handler ID
π
REST API / Web Crawler
web
π οΈ Tech Stack
Layer
Technology
Backend
Python 3.11, FastAPI 0.115, Motor (async MongoDB driver), Pydantic v2
API key encryption key β set explicitly to survive container restarts
SUPER_ADMIN_EMAIL
admin@openbi.dev
First superuser email
SUPER_ADMIN_PASSWORD
changeme123
First superuser password β change this
KB_EMBED_BATCH_SIZE
100
Embedding batch size (tune for Vertex AI / Gemini limits)
TELEGRAM_BOT_TOKEN
β
Optional. Telegram bot token from @BotFather
SMTP_HOST
β
SMTP server hostname
SMTP_PORT
587
SMTP port (587 = STARTTLS)
SMTP_USER
β
SMTP username
SMTP_PASSWORD
β
SMTP password
SMTP_FROM
β
Sender address for report emails
APP_URL
http://localhost:3000
Used in email links
PRESENTON_LLM_PROVIDER
google
LLM for PPTX generation (google / openai / anthropic)
OPENAI_API_KEY
β
Passed to Presenton container
GOOGLE_API_KEY
β
Passed to Presenton container
ANTHROPIC_API_KEY
β
Passed to Presenton container
LANGFUSE_SECRET_KEY
β
Optional. Langfuse observability
LANGFUSE_PUBLIC_KEY
β
Optional. Langfuse observability
LANGFUSE_HOST
β
Optional. Langfuse server URL
LLM provider, model, and API key for the main OpenBI app are configured in the UI under Settings β LLM and stored encrypted in MongoDB β not in .env.
π³ Docker Services
Service
Dockerfile
Port
Description
backend
Dockerfile
8000
FastAPI application server
frontend
Dockerfile.frontend
3000
React / Vite SPA (Vite dev server)
mindsdb
Dockerfile.mindsdb
47334 (internal)
MindsDB β SQL engine + agents + knowledge bases
redis
redis:7-alpine
6379 (internal)
WebSocket pub/sub broadcast
presenton
Dockerfile.presenton
127.0.0.1:7771
Self-hosted AI presentation (PPTX) generator
telegram_bot
telegram_bot/Dockerfile.telegram
β
Telegram bot process
Useful commands
# Start full stack
docker compose up -d
# Rebuild a single service after code changes
docker compose up -d --build backend
docker compose up -d --build frontend
# Follow logs
docker compose logs -f backend
docker compose logs -f mindsdb
# Full rebuild (wipes volumes β resets MindsDB)
docker compose down -v && docker compose up -d --build
# Lightweight mode (low RAM / testing β skips Presenton + Telegram)
docker compose up -d backend frontend mindsdb redis
The full stack requires ~12β16 GB RAM. On constrained machines:
# Start only core services (no Presenton / Telegram)
docker compose up -d backend frontend mindsdb redis
# Spin up a test PostgreSQL with finance seed data
docker compose -f docs/test-scenario/finance/docker-compose.yml up -d
# Run the finance demo setup script (creates connection + agent + 16-widget dashboard)
python scripts/setup_finance_demo.py
# Tear down the test DB when done
docker compose -f docs/test-scenario/finance/docker-compose.yml down