Imagine being able to talk to your data like a teammate. OmniAgent is an AI-powered, multi-agent assistant that lets you ask questions in plain English and instantly get meaningful insights, visualizations, and predictions. No coding, no wrestling with dashboards, just clear answers when you need them.
Most people spend too much time cleaning data, figuring out tools, and trying to extract insights manually. OmniAgent removes that friction by understanding your intent and automatically using the right specialized agents to do the work for you, turning complex data analysis into a simple, conversational experience.
- Features
- System Architecture
- Installation
- Docker Deployment
- Quick Start
- Agents
- Dynamic Agent
- Voice Assistant
- Project Structure
- Testing
- Security
- Configuration
- Troubleshooting
- License
| Feature | Description |
|---|---|
| ๐ฃ๏ธ Natural Language | Ask questions in plain English |
| ๐ค Voice Input | Speak your questions using browser microphone |
| ๐ค 7 Specialized Agents | Stats, Viz, Aggregate, Predict, SQL, Dynamic, Voice |
| ๐ฎ AI Code Generation | Dynamic Agent creates custom analysis on-the-fly |
| ๐ Interactive Charts | Beautiful Plotly visualizations |
| ๐ง Smart Routing | Automatically finds the right agent for your query |
| ๐ Secure Execution | Sandboxed code execution with 40+ security checks |
| ๐ฏ ML Models | Build predictive models with one command |
| ๐ณ Docker Ready | One-command deployment with Docker |
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ USER INTERFACE โ
โ (Streamlit Web App) โ
โ โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โ
โ โ Text Input โ โ Voice Input โ โ Suggestions โ โ
โ โ (Chat) โ โ (Microphone) โ โ (Buttons) โ โ
โ โโโโโโโโฌโโโโโโโโ โโโโโโโโฌโโโโโโโโ โโโโโโโโฌโโโโโโโโ โ
โ โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโ โ
โ โผ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ ๐ง MASTER AGENT โ โ
โ โ โ โ
โ โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ Intent โโโโถโ Router โโโโถโ MCP Message Bus โ โ โ
โ โ โ Detection โ โ Logic โ โ (Agent Communication) โ โ โ
โ โ โ (200+ rules)โ โ โ โ โ โ โ
โ โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโฌโโโโโโโโโโโโโโ โ โ
โ โ โ โ โ
โ โ Check: Is Dynamic Agent pending? โโโโโโโโค โ โ
โ โ โ โ โ โ
โ โ YES โ NO โ โ โ
โ โ โผ โผ โ โ
โ โ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ Route to Dynamicโ โ Route by Intent โ โ โ
โ โ โ (Confirmation) โ โ (stats/viz/etc) โ โ โ
โ โ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โผ โ โ
โ โ โโโโโโโโโโ โโโโโโโโโโ โโโโโโโโโโ โโโโโโโโโโ โโโโโโโโโโ โโโโโโโโโโ โ โ
โ โ โ ๐ โ โ ๐ โ โ ๐ฆ โ โ ๐ค โ โ ๐ โ โ ๐ฎ โ โ โ
โ โ โ Stats โ โ Viz โ โ Agg โ โ Predictโ โ SQL โ โDynamic โ โ โ
โ โ โ Agent โ โ Agent โ โ Agent โ โ Agent โ โ Agent โ โ Agent โ โ โ
โ โ โโโโโโโโโโ โโโโโโโโโโ โโโโโโโโโโ โโโโโโโโโโ โโโโโโโโโโ โโโโโโโโโโ โ โ
โ โ โ โ
โ โ SPECIALIZED AGENTS โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ โผ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ RESPONSE BUILDER โ โ
โ โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโ โ โ
โ โ โ Content โ โ Insights โ โ Suggestions โ โ Figures โ โ โ
โ โ โ (Markdown) โ โ (Tips) โ โ (Buttons) โ โ (Plotly) โ โ โ
โ โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Agents communicate using standardized MCP messages:
MCPMessage(
id: str, # Unique message identifier
type: MessageType, # QUERY, RESPONSE, ERROR, EVENT
source: str, # Sending agent name
target: str, # Receiving agent name
content: str, # Message content
data: dict, # Additional payload
metadata: dict # Timestamps, context
)User Query โ Master Agent โ Intent Detection โ Route to Agent โ Process โ Response
โ โ
โ โผ
โ โโโโโโโโโโโโโโโโโโโ
โ โ If Dynamic: โ
โ โ 1. Offer โ
โ โ 2. Plan (LLM) โ
โ โ 3. Execute โ
โ โโโโโโโโโโโโโโโโโโโ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
- Python 3.8 or higher
- pip (Python package manager)
- Modern web browser (Chrome/Edge recommended for voice features)
# Clone the repository
git clone https://github.com/hoomanesteki/omniagent.git
cd omniagent
# Create virtual environment (recommended)
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Run the application
streamlit run app.py# Clone the repository
git clone https://github.com/hoomanesteki/omniagent.git
cd omniagent
# Create conda environment
conda env create -f environment.yml
# Activate environment
conda activate omniagent
# Run the application
streamlit run app.pymake install # Install dependencies
make run # Run the application
make test # Run all tests# Build the image
docker build -t omniagent .
# Run the container
docker run -p 8501:8501 omniagent
# With API key for AI features
docker run -p 8501:8501 -e GROQ_API_KEY=your_key omniagent# Create .env file with your API key (optional)
echo "GROQ_API_KEY=your_key_here" > .env
# Start the service
docker-compose up -d
# View logs
docker-compose logs -f
# Stop the service
docker-compose down| Command | Description |
|---|---|
docker-compose up -d |
Start in background |
docker-compose up -d --build |
Rebuild and start |
docker-compose down |
Stop and remove containers |
docker-compose logs -f |
Follow logs |
docker-compose restart |
Restart the service |
Mount a volume to persist uploaded data:
docker run -p 8501:8501 -v $(pwd)/data:/app/data omniagent- Load Data: Upload a CSV file or select a sample dataset from the sidebar
- Ask Questions: Type naturally like "What's the average age?" or "Show histogram of price"
- Get Insights: View visualizations, statistics, and AI-powered analysis
| Query | Agent | Result |
|---|---|---|
| "Show statistics" | ๐ Stats | Descriptive statistics |
| "Histogram of age" | ๐ Viz | Interactive histogram |
| "Count by gender" | ๐ฆ Aggregate | Grouped counts |
| "Predict salary" | ๐ค Predict | ML model |
| "Show first 10 rows" | ๐ SQL | Data preview |
| "Calculate rolling average" | ๐ฎ Dynamic | Custom analysis |
| "Calculate z-scores" | ๐ฎ Dynamic | Z-score normalization |
| Agent | Emoji | Purpose | Example Commands |
|---|---|---|---|
| Master | ๐ง | Query routing & orchestration | (Internal) |
| Stats | ๐ | Statistical analysis | "mean of price", "check missing" |
| Viz | ๐ | Visualizations | "histogram", "scatter plot", "heatmap" |
| Aggregate | ๐ฆ | GroupBy operations | "count by", "sum by", "average by" |
| Predict | ๐ค | Machine learning | "predict", "build model" |
| SQL | ๐ | Data exploration | "show rows", "columns", "sample" |
| Dynamic | ๐ฎ | AI code generation | "rolling average", "find outliers", "z-scores" |
| Voice | ๐ค | Speech recognition | (Microphone input) |
The Dynamic Agent handles requests beyond built-in capabilities by generating and executing custom Python code.
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ DYNAMIC AGENT FLOW โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ STEP 1: OFFER (No LLM call - saves resources) โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ User: "Calculate rolling average of sales" โ โ
โ โ โ โ
โ โ Agent: "I can create a Rolling/Moving Average analysis. โ โ
โ โ This requires AI. Type 'yes' to proceed or 'no'." โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ User types "yes" โ
โ โผ โ
โ STEP 2: PLAN (LLM generates code) โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Agent: "Here's my plan: โ โ
โ โ โ โ
โ โ ```python โ โ
โ โ result = df['sales'].rolling(window=7).mean() โ โ
โ โ ``` โ โ
โ โ โ โ
โ โ Type 'yes' to execute or 'no' to cancel." โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ User types "yes" โ
โ โผ โ
โ STEP 3: EXECUTE (Sandboxed execution) โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Agent: "โ
Analysis Complete! โ โ
โ โ [Shows results and visualization]" โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
| Type | Keywords | Example |
|---|---|---|
| Rolling/Moving Average | "rolling", "moving average", "window" | "7-day rolling average" |
| Outlier Detection | "outlier", "anomaly", "IQR" | "Find outliers using IQR" |
| Z-Score/Standardization | "z-score", "normalize", "standardize" | "Calculate z-scores" |
| Regression Analysis | "regression", "trendline" | "Scatter with regression line" |
| Data Binning | "bin", "categorize", "bucket" | "Bin age into groups" |
| Ranking | "top", "bottom", "rank" | "Top 10 by sales" |
| Custom | Any other request | "Cumulative sum by date" |
- Enable AI Mode in the sidebar
- Enter your Groq API Key (free at console.groq.com)
- Click Validate & Save
- Ask any complex question!
OmniAgent supports voice input through your browser's built-in speech recognition.
โ ๏ธ Note: Voice is speech-to-text only (you speak, agent responds with text).
| Requirement | Details |
|---|---|
| Browser | Chrome, Edge, or Safari (Firefox limited) |
| Microphone | Built-in or external |
| Permission | Must allow browser microphone access |
| HTTPS | Required (localhost works for development) |
- Toggle Enable Voice in the sidebar
- Click "๐ค Start Speaking" button
- Allow microphone access when browser prompts
- Speak your question clearly
- Query is automatically submitted
Chrome:
- Click ๐ lock icon in address bar
- Find "Microphone" โ Select "Allow"
Edge:
- Click ๐ lock icon in address bar
- Click "Permissions for this site"
- Set Microphone to "Allow"
Safari:
- Safari โ Preferences โ Websites โ Microphone
- Allow for the OmniAgent site
| Issue | Solution |
|---|---|
| Microphone not working | Check browser permissions |
| No transcription | Speak clearly, reduce background noise |
| "Permission denied" | Reset site permissions and allow again |
omniagent/
โ
โโโ ๐ app.py # Main Streamlit entry point
โโโ ๐ requirements.txt # Python dependencies
โโโ ๐ requirements-dev.txt # Development dependencies
โโโ ๐ environment.yml # Conda environment
โโโ ๐ Makefile # Build automation (40+ commands)
โโโ ๐ Dockerfile # Docker image
โโโ ๐ docker-compose.yml # Docker Compose config
โโโ ๐ pytest.ini # Test configuration
โโโ ๐ README.md # This file
โ
โโโ ๐ core/ # Core utilities
โ โโโ __init__.py
โ โโโ config.py # Configuration & settings
โ โโโ analyzer.py # DataAnalyzer class
โ โโโ llm.py # LLM client (Groq API)
โ
โโโ ๐ agents/ # Specialized agents
โ โโโ __init__.py
โ โโโ base.py # BaseAgent abstract class
โ โโโ master_agent.py # ๐ง Orchestrator
โ โโโ stats_agent.py # ๐ Statistics
โ โโโ viz_agent.py # ๐ Visualization
โ โโโ aggregate_agent.py # ๐ฆ GroupBy
โ โโโ predict_agent.py # ๐ค ML prediction
โ โโโ sql_agent.py # ๐ Data exploration
โ โโโ dynamic_agent.py # ๐ฎ AI code generation
โ โโโ voice_agent.py # ๐ค Voice input
โ
โโโ ๐ mcp/ # Message Communication Protocol
โ โโโ __init__.py
โ โโโ protocol.py # MCPMessage, MCPBus
โ
โโโ ๐ ui/ # User interface
โ โโโ __init__.py
โ โโโ components.py # Session, messages
โ โโโ sidebar.py # Sidebar UI
โ โโโ chat.py # Chat interface
โ
โโโ ๐ tests/ # Test suite (195 tests)
โ โโโ conftest.py # Shared fixtures
โ โโโ unit/ # Unit tests
โ โโโ integration/ # Integration tests
โ
โโโ ๐ data/ # Data files
โ โโโ samples/ # Sample datasets
โ โโโ uploads/ # User uploads
โ
โโโ ๐ docs/ # Documentation
โโโ A_API_REFERENCE.md
โโโ B_MCP_PROTOCOL.md
โโโ C_TESTING.md
โโโ D_SECURITY.md
โโโ E_DEPLOYMENT.md
# Run all tests
make test
# Run specific test suites
make test-unit # Unit tests only
make test-integration # Integration tests
make test-security # Security tests
# Run with coverage
make coverage
# Run specific test file
pytest tests/unit/test_agents.py -v| Module | Tests | Coverage |
|---|---|---|
| Core | 20+ | Config, DataAnalyzer, LLMClient |
| Agents | 50+ | All 7 agents, routing |
| MCP Protocol | 25+ | Messages, bus |
| Security | 40+ | Code safety, patterns |
| UI | 30+ | Help, about, messages |
| Integration | 20+ | End-to-end flows |
The Dynamic Agent executes AI-generated code in a sandboxed environment with 40+ blocked patterns:
| Category | Blocked Patterns |
|---|---|
| System Access | import os, import sys, subprocess |
| Code Injection | eval(), exec(), compile() |
| File Operations | open(), .read(), .write() |
| Network | requests., urllib, socket |
| Reflection | globals(), locals(), getattr() |
| Dangerous Dunders | __builtins__, __class__ |
Generated Code โ Length Check โ Pattern Check โ Sandboxed Execution
โ โ
Too long? Dangerous?
โ โ
REJECT REJECT
Create a .env file:
# Groq API (for Dynamic Agent)
GROQ_API_KEY=your_api_key_here
# LLM Settings (optional)
LLM_MODEL=llama-3.3-70b-versatile| Setting | Default | Description |
|---|---|---|
PAGE_TITLE |
"๐ค OmniAgent" | Browser tab title |
LLM_MODEL |
"llama-3.3-70b-versatile" | Groq model |
LLM_MAX_TOKENS |
2000 | Max response tokens |
MAX_SUGGESTIONS |
12 | Suggestion buttons |
| Issue | Solution |
|---|---|
| "No module named 'streamlit'" | Run pip install -r requirements.txt |
| Port 8501 in use | Use streamlit run app.py --server.port=8502 |
| Voice not working | Use Chrome/Edge, allow microphone |
| Dynamic Agent fails | Check Groq API key is valid |
| Docker build fails | Ensure Docker daemon is running |
- Check the docs/ folder for detailed documentation
- Open an issue on GitHub
- Type "help" in OmniAgent chat
This project is licensed under the MIT License - see the LICENSE file for details.
Hooman Esteki
- ๐ Website: esteki.ca
- ๐ง GitHub: @hoomanesteki
- Streamlit - Web framework
- Plotly - Interactive charts
- Groq - Fast LLM inference
- Scikit-learn - Machine learning
Made with โค๏ธ by Hooman Esteki