|
# Local Deployment Guide for GAIA |
|
|
|
This guide provides detailed instructions for deploying and running the GAIA agent on a local machine for development, testing, or personal use. |
|
|
|
## Prerequisites |
|
|
|
Before deploying GAIA locally, ensure you have the following: |
|
|
|
1. **Python Environment**: |
|
- Python 3.9 or higher installed |
|
- pip (Python package manager) |
|
- (Optional) virtualenv or conda for environment isolation |
|
|
|
2. **API Keys**: |
|
- OpenAI API key for language models |
|
- Additional API keys based on your configuration (Serper, Perplexity, etc.) |
|
|
|
3. **System Requirements**: |
|
- At least 4GB of RAM |
|
- At least 2GB of free disk space |
|
- Internet connection for API calls |
|
|
|
## Installation |
|
|
|
### Step 1: Clone the Repository |
|
|
|
```bash |
|
# Clone the GAIA repository |
|
git clone https://github.com/your-organization/gaia.git |
|
cd gaia |
|
``` |
|
|
|
### Step 2: Set Up Python Environment |
|
|
|
```bash |
|
# Option 1: Create a virtual environment with venv |
|
python -m venv venv |
|
|
|
# Activate the virtual environment |
|
# On Windows |
|
venv\Scripts\activate |
|
# On macOS/Linux |
|
source venv/bin/activate |
|
|
|
# Option 2: Create a conda environment |
|
conda create -n gaia python=3.9 |
|
conda activate gaia |
|
``` |
|
|
|
### Step 3: Install Dependencies |
|
|
|
```bash |
|
# Install required packages |
|
pip install -r requirements.txt |
|
|
|
# For development, install development dependencies as well |
|
pip install -r requirements-dev.txt |
|
``` |
|
|
|
### Step 4: Configure Environment Variables |
|
|
|
Create a `.env` file in the root directory of the project: |
|
|
|
```bash |
|
# Create .env file from template |
|
cp .env.example .env |
|
``` |
|
|
|
Edit the `.env` file with your API keys and configuration: |
|
|
|
``` |
|
# API Keys |
|
OPENAI_API_KEY=your-openai-api-key |
|
SERPER_API_KEY=your-serper-api-key |
|
PERPLEXITY_API_KEY=your-perplexity-api-key |
|
|
|
# Optional: Supabase configuration for memory |
|
SUPABASE_URL=your-supabase-url |
|
SUPABASE_KEY=your-supabase-key |
|
|
|
# Agent Configuration |
|
MODEL_NAME=gpt-4o |
|
VERBOSE=true |
|
|
|
# UI Configuration |
|
DEMO_MODE=true |
|
SIMPLE_UI=false |
|
``` |
|
|
|
## Basic Deployment |
|
|
|
### Running the Web Interface |
|
|
|
The simplest way to deploy GAIA locally is to run the web interface: |
|
|
|
```bash |
|
# Start the web interface |
|
python app.py |
|
``` |
|
|
|
This will start a Gradio web server that you can access at `http://localhost:7860` in your browser. |
|
|
|
### Running in Demo Mode |
|
|
|
For quick testing without setting up authentication: |
|
|
|
```bash |
|
# Enable demo mode |
|
export DEMO_MODE=true # On Windows: set DEMO_MODE=true |
|
python app.py |
|
``` |
|
|
|
### Running with a Simplified UI |
|
|
|
For a more streamlined interface: |
|
|
|
```bash |
|
# Enable simplified UI |
|
export SIMPLE_UI=true # On Windows: set SIMPLE_UI=true |
|
python app.py |
|
``` |
|
|
|
## Command-Line Usage |
|
|
|
GAIA can also be used directly from the command line: |
|
|
|
```bash |
|
# Run a single query |
|
python -m src.gaia.cli "What is quantum computing?" |
|
|
|
# Run in interactive mode |
|
python -m src.gaia.cli --interactive |
|
|
|
# Run with specific configuration |
|
python -m src.gaia.cli --model "gpt-3.5-turbo" --verbose "What is climate change?" |
|
``` |
|
|
|
## Advanced Configuration |
|
|
|
### Custom Configuration File |
|
|
|
For more advanced configuration, create a custom configuration file: |
|
|
|
```bash |
|
# Create a config.json file |
|
cat > config.json << EOF |
|
{ |
|
"api": { |
|
"openai": { |
|
"api_key": "your-openai-key" |
|
}, |
|
"serper": { |
|
"api_key": "your-serper-key" |
|
} |
|
}, |
|
"models": { |
|
"default": "gpt-4o", |
|
"fallback": "gpt-3.5-turbo" |
|
}, |
|
"tools": { |
|
"web_search": { |
|
"enabled": true, |
|
"default_provider": "serper" |
|
}, |
|
"academic_search": { |
|
"enabled": true |
|
} |
|
}, |
|
"memory": { |
|
"supabase": { |
|
"enabled": false |
|
} |
|
} |
|
} |
|
EOF |
|
|
|
# Run with custom configuration |
|
python app.py --config config.json |
|
``` |
|
|
|
### Enabling Memory with Supabase |
|
|
|
To use Supabase for persistent memory: |
|
|
|
1. Create a Supabase project at [https://supabase.com](https://supabase.com) |
|
2. Create the required tables using the provided SQL script: |
|
|
|
```bash |
|
# Copy the SQL script |
|
cp docs/deployment/schema/supabase_tables.sql ./supabase_setup.sql |
|
|
|
# Manually execute this in your Supabase SQL editor |
|
# or use the Supabase CLI |
|
``` |
|
|
|
3. Update your `.env` file with Supabase credentials: |
|
|
|
``` |
|
SUPABASE_URL=your-supabase-url |
|
SUPABASE_KEY=your-supabase-key |
|
SUPABASE_MEMORY_ENABLED=true |
|
``` |
|
|
|
## Running as a Service |
|
|
|
### Using Systemd (Linux) |
|
|
|
To run GAIA as a background service on Linux using systemd: |
|
|
|
1. Create a systemd service file: |
|
|
|
```bash |
|
sudo nano /etc/systemd/system/gaia.service |
|
``` |
|
|
|
2. Add the following content: |
|
|
|
``` |
|
[Unit] |
|
Description=GAIA Assessment Agent |
|
After=network.target |
|
|
|
[Service] |
|
User=your-username |
|
WorkingDirectory=/path/to/gaia |
|
Environment="PATH=/path/to/gaia/venv/bin" |
|
ExecStart=/path/to/gaia/venv/bin/python app.py |
|
Restart=on-failure |
|
RestartSec=5 |
|
StandardOutput=journal |
|
StandardError=journal |
|
|
|
[Install] |
|
WantedBy=multi-user.target |
|
``` |
|
|
|
3. Enable and start the service: |
|
|
|
```bash |
|
sudo systemctl enable gaia |
|
sudo systemctl start gaia |
|
``` |
|
|
|
4. Check service status: |
|
|
|
```bash |
|
sudo systemctl status gaia |
|
``` |
|
|
|
### Using PM2 (Cross-platform) |
|
|
|
For a more flexible service manager that works across platforms: |
|
|
|
1. Install PM2: |
|
|
|
```bash |
|
npm install -g pm2 |
|
``` |
|
|
|
2. Create an ecosystem file: |
|
|
|
```bash |
|
cat > ecosystem.config.js << EOF |
|
module.exports = { |
|
apps: [{ |
|
name: "gaia", |
|
script: "app.py", |
|
interpreter: "./venv/bin/python", |
|
env: { |
|
OPENAI_API_KEY: "your-openai-key", |
|
SERPER_API_KEY: "your-serper-key", |
|
MODEL_NAME: "gpt-4o", |
|
VERBOSE: "true" |
|
} |
|
}] |
|
} |
|
EOF |
|
``` |
|
|
|
3. Start with PM2: |
|
|
|
```bash |
|
pm2 start ecosystem.config.js |
|
``` |
|
|
|
4. Monitor and manage: |
|
|
|
```bash |
|
pm2 status |
|
pm2 logs gaia |
|
pm2 restart gaia |
|
``` |
|
|
|
## Docker Deployment |
|
|
|
GAIA can also be deployed using Docker for better isolation and portability: |
|
|
|
### Step 1: Create a Dockerfile |
|
|
|
```bash |
|
cat > Dockerfile << EOF |
|
FROM python:3.9-slim |
|
|
|
WORKDIR /app |
|
|
|
COPY requirements.txt . |
|
RUN pip install --no-cache-dir -r requirements.txt |
|
|
|
COPY . . |
|
|
|
EXPOSE 7860 |
|
|
|
CMD ["python", "app.py"] |
|
EOF |
|
``` |
|
|
|
### Step 2: Create a Docker Compose File |
|
|
|
```bash |
|
cat > docker-compose.yml << EOF |
|
version: '3' |
|
|
|
services: |
|
gaia: |
|
build: . |
|
ports: |
|
- "7860:7860" |
|
environment: |
|
- OPENAI_API_KEY=your-openai-key |
|
- SERPER_API_KEY=your-serper-key |
|
- PERPLEXITY_API_KEY=your-perplexity-key |
|
- MODEL_NAME=gpt-4o |
|
- VERBOSE=true |
|
- DEMO_MODE=true |
|
volumes: |
|
- ./logs:/app/logs |
|
EOF |
|
``` |
|
|
|
### Step 3: Build and Run with Docker Compose |
|
|
|
```bash |
|
# Build the Docker image |
|
docker-compose build |
|
|
|
# Run the container |
|
docker-compose up -d |
|
|
|
# Check logs |
|
docker-compose logs -f |
|
``` |
|
|
|
## Performance Optimization |
|
|
|
### Memory Usage |
|
|
|
To optimize memory usage: |
|
|
|
```bash |
|
# Limit result cache size |
|
export MEMORY_RESULT_CACHE_SIZE=100 |
|
|
|
# Set a shorter TTL for cached results (in seconds) |
|
export MEMORY_TTL=1800 # 30 minutes |
|
``` |
|
|
|
### CPU Usage |
|
|
|
For lower CPU usage: |
|
|
|
```bash |
|
# Disable verbose logging |
|
export VERBOSE=false |
|
|
|
# Use a lighter model |
|
export MODEL_NAME=gpt-3.5-turbo |
|
|
|
# Limit the number of tools enabled |
|
export WEB_SEARCH_ENABLED=true |
|
export ACADEMIC_SEARCH_ENABLED=false |
|
``` |
|
|
|
## Troubleshooting |
|
|
|
### Common Issues |
|
|
|
1. **API Key Issues**: |
|
``` |
|
Error: Authentication error with OpenAI API |
|
``` |
|
Solution: Check that your API key is correct and has sufficient credits. |
|
|
|
2. **Port Conflicts**: |
|
``` |
|
Error: Address already in use |
|
``` |
|
Solution: Change the port using an environment variable: |
|
```bash |
|
export PORT=7861 |
|
python app.py |
|
``` |
|
|
|
3. **Missing Dependencies**: |
|
``` |
|
ImportError: No module named 'some_package' |
|
``` |
|
Solution: Ensure all dependencies are installed: |
|
```bash |
|
pip install -r requirements.txt |
|
``` |
|
|
|
4. **Memory Issues**: |
|
``` |
|
MemoryError or Process killed |
|
``` |
|
Solution: Limit memory usage as described in the Performance Optimization section. |
|
|
|
### Logging |
|
|
|
Enable detailed logging for troubleshooting: |
|
|
|
```bash |
|
# Enable debug logging |
|
export LOG_LEVEL=DEBUG |
|
python app.py |
|
``` |
|
|
|
Log files are stored in the `logs/` directory by default. |
|
|
|
### Diagnostic Commands |
|
|
|
Use these commands to diagnose issues: |
|
|
|
```bash |
|
# Check environment variables |
|
python -c "import os; print(os.environ.get('OPENAI_API_KEY', 'Not set'))" |
|
|
|
# Test API connections |
|
python -m src.gaia.utils.cli.verify_connections |
|
|
|
# Test memory connections |
|
python -m src.gaia.utils.cli.verify_memory |
|
``` |
|
|
|
## Security Considerations |
|
|
|
When deploying GAIA locally, consider these security practices: |
|
|
|
1. **API Key Management**: |
|
- Store API keys in environment variables or a secure `.env` file |
|
- Never commit API keys to version control |
|
- Consider using a secret management solution for production |
|
|
|
2. **Network Security**: |
|
- By default, the web interface only listens on localhost |
|
- To expose to other machines, use `--host 0.0.0.0` with caution |
|
- Consider using a reverse proxy with authentication for wider access |
|
|
|
3. **Data Privacy**: |
|
- Be aware of what data is being sent to external APIs |
|
- Consider privacy implications when using memory features |
|
- Regularly clear cached data for sensitive applications |
|
|
|
## Upgrading |
|
|
|
To upgrade your GAIA installation: |
|
|
|
```bash |
|
# Pull the latest changes |
|
git pull |
|
|
|
# Update dependencies |
|
pip install -r requirements.txt |
|
|
|
# Run migration scripts if available |
|
python -m src.gaia.utils.cli.run_migrations |
|
|
|
# Restart the service |
|
# If using systemd: |
|
sudo systemctl restart gaia |
|
# If using PM2: |
|
pm2 restart gaia |
|
``` |
|
|
|
## Conclusion |
|
|
|
You now have GAIA running locally on your machine. For more advanced deployment options, check out the [Hugging Face Deployment Guide](huggingface.md) or explore the [API documentation](../api/agent.md) to integrate GAIA into your own applications. |
|
|
|
For any issues or questions, please refer to the [troubleshooting section](#troubleshooting) or create an issue on the project's GitHub repository. |