A newer version of the Gradio SDK is available:
6.1.0
metadata
title: RAG Agent
emoji: π΅π»ββοΈ
colorFrom: indigo
colorTo: indigo
sdk: gradio
sdk_version: 6.0.1
app_file: main.py
pinned: false
hf_oauth: true
hf_oauth_expiration_minutes: 480
π Project Structure
mai-rag-agent/
β
βββ π agent/ # Core agent logic
β βββ graph.py # LangGraph workflow definition
β βββ nodes.py # Agent nodes (router, vectordb, web_search, generate)
β βββ prompts.py # System prompts and templates
β βββ state.py # Agent state management (AgentState, RAG_method)
β βββ tools.py # Tool definitions (Tavily, Wikipedia, ArXiv, ChromaDB)
β
βββ π core/ # Business logic layer
β βββ llm.py # LLM initialization (Anthropic Claude)
β βββ rag_agent.py # Main RAGAgent class with graph orchestration
β
βββ π ui/ # User interface
β βββ gradio_components.py # Gradio web interface components
β
βββ π knowledge_base/ # scripts for setting up Chroma
β
βββ π chroma_data/ # Artifacts for Chroma
β
βββ π docs/ # Source documents (PDFs, text files)
β
βββ π main.py # Application entry point
βββ π config.py # Configuration settings
βββ π test_scripts.py # Agent testing script
β
βββ π .env # Environment variables (API keys)
βββ π .gitignore # Git ignore rules
β
βββ π requirements.txt # Python dependencies
βββ π pyproject.toml # Project metadata (if using uv)
β
βββ π README.md # Project documentation (this file)
π Key Components
π€ Agent Module (agent/)
graph.py: Defines the LangGraph workflow with conditional routingnodes.py: Implements agent nodes:router_node: Classifies queries (RAG/WEBSEARCH/GENERAL)vectordb_node: Retrieves from local ChromaDBweb_search_agent_node: Executes web searchesgenerate_node: Generates final responses
state.py: DefinesAgentStatewith message history, routing method, and contexttools.py: Tool implementations for Tavily, Wikipedia, ArXiv, and ChromaDBprompts.py: System prompts for routing and generation
π― Core Module (core/)
llm.py: Initializes the LLM (Anthropic Claude Sonnet 4.5)rag_agent.py: MainRAGAgentclass that orchestrates the graph
π₯οΈ UI Module (ui/)
gradio_components.py: Gradio web interface with chat functionality
π Data Module (data/)
documents/: Raw source documents for ingestionchroma_db/: Persisted vector embeddings
βοΈ Configuration
config.py: Centralized configuration (model names, paths, API settings).env: API keys (ANTHROPIC_API_KEY, TAVILY_API_KEY)
π Entry Points
main.py: Launches the Gradio UItest_scripts.py: Runs agent tests
π Data Flow
User Query
β
[Router Node] β Classifies intent (RAG/WEBSEARCH/GENERAL)
β
βββ [VectorDB Node] β Retrieves from ChromaDB β [Generate Node]
βββ [Web Search Agent] β Calls Tavily/Wikipedia β [Generate Node]
βββ [Generate Node] β Uses LLM knowledge only
β
Response to User
π οΈ Technology Stack
- LangChain: Framework for LLM applications
- LangGraph: Workflow orchestration
- Anthropic Claude: LLM (Sonnet 4.5)
- ChromaDB: Vector database
- Gradio: Web UI framework
- HuggingFace: Embeddings model
- Tavily: Web search API
- UV: Python package manager
π Quick Start with UV
Prerequisites
- Python 3.10+
- UV package manager (Install UV)
- API Keys: Anthropic, Tavily
1οΈβ£ Clone the Repository
git clone https://github.com/yourusername/mai-rag-agent.git
cd mai-rag-agent
2οΈβ£ Create Virtual Environment with UV
# Create a new virtual environment
uv venv
# Activate the environment
source .venv/bin/activate # Linux/macOS
# or
.venv\Scripts\activate # Windows
3οΈβ£ Install Dependencies
# Install all dependencies from requirements.txt
uv pip install -r requirements.txt
# Or install directly from pyproject.toml (if available)
uv pip install -e .
4οΈβ£ Set Up Environment Variables
# Copy example environment file
cp .env.example .env
# Edit .env and add your API keys
nano .env # or use your preferred editor
Required environment variables:
GOOGLE_API_KEY=xxxxxxxxxxxxx # Gemini API key
TAVILY_API_KEY=tvly-xxxxxxxxxxxxx # Enable web search
5οΈβ£ Prepare Data
# Create necessary directories
mkdir -p data/documents data/chroma_db
# Add your documents to data/documents/
# Then run ingestion (if you have an ingestion script)
# python ingest_data.py
6οΈβ£ Run the Application
# Launch the Gradio UI
python main.py
7οΈβ£ Run Tests (Optional)
# Test the agent functionality
python test_scripts.py
π³ Quick Start with Dev Container (Alternative)
If you're using VS Code with Dev Containers:
# 1. Open in VS Code
code .
# 2. Reopen in Container
# Command Palette (Ctrl+Shift+P) β "Dev Containers: Reopen in Container"
# 3. Inside container, install dependencies
uv pip install -r requirements.txt
# 4. Set up .env file
cp .env.example .env
# Edit .env with your API keys
# 5. Run the app
python main.py
π¦ UV-Specific Commands
# Update all dependencies
uv pip install --upgrade -r requirements.txt
# List installed packages
uv pip list
# Freeze current environment
uv pip freeze > requirements.txt
# Install a new package
uv pip install package-name
# Uninstall a package
uv pip uninstall package-name
# Sync environment (removes unused packages)
uv pip sync requirements.txt
π§ Troubleshooting
Issue: uv command not found
# Install UV
curl -LsSf https://astral.sh/uv/install.sh | sh
# Add to PATH (if needed)
export PATH="$HOME/.cargo/bin:$PATH"
Issue: API key not loading
# Check if .env exists
cat .env | grep -i api
# Ensure no typos in variable names
# Should be: ANTHROPIC_API_KEY and TAVILY_API_KEY
Issue: ChromaDB not found
# Ensure data directories exist
mkdir -p data/chroma_db
# Check permissions
chmod -R 755 data/
Issue: Port 7860 already in use
# Find and kill the process
lsof -ti:7860 | xargs kill -9
# Or use a different port in main.py
# demo.launch(server_port=7861)
π― Next Steps
- β
Add your documents to
data/documents/ - β
Configure embeddings model in
config.py - β
Customize prompts in
agent/prompts.py - β Test with sample queries in the Gradio UI
- β Deploy to production (see deployment docs)
π Additional Resources
π Reference (Used for demo as document in vector store)
- Wei, H., Sun, Y., & Li, Y. (2025). Deepseek-ocr: Contexts optical compression. arXiv preprint arXiv:2510.18234.
- Chen, X., Chu, F. J., Gleize, P., Liang, K. J., Sax, A., Tang, H., ... & SAM 3D Team. (2025). SAM 3D: 3Dfy Anything in Images. arXiv preprint arXiv:2511.16624.
- Carion, N., Gustafson, L., Hu, Y. T., Debnath, S., Hu, R., Suris, D., ... & Feichtenhofer, C. (2025). SAM 3: Segment Anything with Concepts. arXiv preprint arXiv:2511.16719.
- Yan, B. Y., Li, C., Qian, H., Lu, S., & Liu, Z. (2025). General Agentic Memory Via Deep Research. arXiv preprint arXiv:2511.18423.
- Zhang, S., Fan, J., Fan, M., Li, G., & Du, X. (2025). Deepanalyze: Agentic large language models for autonomous data science. arXiv preprint arXiv:2510.16872.