botserver/docs/DEPLOYMENT_CHECKLIST.md

12 KiB

KB and Tools System - Deployment Checklist

🎯 Pre-Deployment Checklist

Infrastructure Requirements

  • PostgreSQL 12+ running and accessible
  • Qdrant vector database running (port 6333)
  • MinIO object storage running (ports 9000, 9001)
  • LLM Server for embeddings (port 8081)
  • Redis (optional, for caching)

System Resources

  • Minimum 4GB RAM (8GB recommended)
  • 10GB disk space for documents and embeddings
  • 2+ CPU cores for parallel processing
  • Network access to external APIs (if using ADD_WEBSITE)

📋 Configuration Steps

1. Environment Variables

Create/update .env file:

# Core Settings
DATABASE_URL=postgresql://user:pass@localhost:5432/botserver
QDRANT_URL=http://localhost:6333
LLM_URL=http://localhost:8081
CACHE_URL=redis://127.0.0.1/

# MinIO Configuration
MINIO_ENDPOINT=localhost:9000
MINIO_ACCESS_KEY=minioadmin
MINIO_SECRET_KEY=minioadmin
MINIO_USE_SSL=false
MINIO_ORG_PREFIX=org1_

# Server Configuration
SERVER_HOST=0.0.0.0
SERVER_PORT=8080
RUST_LOG=info

Verify:

  • All URLs are correct and accessible
  • Credentials are set properly
  • Org prefix matches your organization

2. Database Setup

# Connect to PostgreSQL
psql -U postgres -d botserver

# Run migration
\i migrations/create_kb_and_tools_tables.sql

# Verify tables created
\dt kb_*
\dt basic_tools

# Check triggers
\df update_updated_at_column

Verify:

  • Tables kb_documents, kb_collections, basic_tools exist
  • Indexes are created
  • Triggers are active
  • No migration errors

3. MinIO Bucket Setup

# Using MinIO CLI (mc)
mc alias set local http://localhost:9000 minioadmin minioadmin
mc mb local/org1_default.gbai
mc policy set public local/org1_default.gbai

# Or via MinIO Console at http://localhost:9001

Create folder structure:

org1_default.gbai/
├── .gbkb/          # Knowledge Base documents
└── .gbdialog/      # BASIC scripts

Verify:

  • Bucket created with correct name
  • Folders .gbkb/ and .gbdialog/ exist
  • Upload permissions work
  • Download/read permissions work

4. Qdrant Setup

# Check Qdrant is running
curl http://localhost:6333/

# Expected response: {"title":"qdrant - vector search engine","version":"..."}

Verify:


5. LLM Server for Embeddings

# Check LLM server is running
curl http://localhost:8081/v1/models

# Test embeddings endpoint
curl -X POST http://localhost:8081/v1/embeddings \
  -H "Content-Type: application/json" \
  -d '{"input": ["test"], "model": "text-embedding-ada-002"}'

Verify:

  • LLM server responds
  • Embeddings endpoint works
  • Vector dimension is 1536 (or update in code)
  • Response time < 5 seconds

🚀 Deployment

1. Build Application

# Clean build
cargo clean
cargo build --release

# Verify binary
./target/release/botserver --version

Verify:

  • Compilation succeeds with no errors
  • Binary created in target/release/
  • All features enabled correctly

2. Upload Initial Files

Upload to MinIO .gbkb/ folder:

# Example: Upload enrollment documents
mc cp enrollment_guide.pdf local/org1_default.gbai/.gbkb/enrollpdfs/
mc cp requirements.pdf local/org1_default.gbai/.gbkb/enrollpdfs/
mc cp faq.pdf local/org1_default.gbai/.gbkb/enrollpdfs/

Upload to MinIO .gbdialog/ folder:

# Upload BASIC tools
mc cp start.bas local/org1_default.gbai/.gbdialog/
mc cp enrollment.bas local/org1_default.gbai/.gbdialog/
mc cp pricing.bas local/org1_default.gbai/.gbdialog/

Verify:

  • Documents uploaded successfully
  • BASIC scripts uploaded
  • Files are readable via MinIO
  • Correct folder structure maintained

3. Start Services

# Start botserver
./target/release/botserver

# Or with systemd
sudo systemctl start botserver
sudo systemctl enable botserver

# Or with Docker
docker-compose up -d botserver

Monitor startup logs:

# Check logs
tail -f /var/log/botserver.log

# Or Docker logs
docker logs -f botserver

Look for:

  • KB Manager service started
  • MinIO Handler service started
  • Startup complete!
  • No errors about missing services

4. Verify KB Indexing

Wait 30-60 seconds for initial indexing

# Check Qdrant collections
curl http://localhost:6333/collections

# Should see collections like:
# - kb_<bot_id>_enrollpdfs
# - kb_<bot_id>_productdocs

Check logs for indexing:

grep "Indexing document" /var/log/botserver.log
grep "Document indexed successfully" /var/log/botserver.log

Verify:

  • Collections created in Qdrant
  • Documents indexed (check chunk count)
  • No indexing errors in logs
  • File hashes stored in database

5. Test Tool Compilation

Check compiled tools:

# List work directory
ls -la ./work/*/default.gbdialog/

# Should see:
# - *.ast files (compiled AST)
# - *.mcp.json files (MCP definitions)
# - *.tool.json files (OpenAI definitions)

Verify:

  • AST files created for each .bas file
  • MCP JSON files generated (if PARAM exists)
  • Tool JSON files generated (if PARAM exists)
  • No compilation errors in logs

🧪 Testing

# Create test session with answer_mode=2 (documents only)
curl -X POST http://localhost:8080/sessions \
  -H "Content-Type: application/json" \
  -d '{
    "user_id": "test-user",
    "bot_id": "default",
    "answer_mode": 2
  }'

# Send query
curl -X POST http://localhost:8080/chat \
  -H "Content-Type: application/json" \
  -d '{
    "session_id": "<session_id>",
    "message": "What documents do I need for enrollment?"
  }'

Expected:

  • Response contains information from indexed PDFs
  • References to source documents
  • Relevant chunks retrieved

Test 2: Tool Calling

# Call enrollment tool endpoint
curl -X POST http://localhost:8080/default/enrollment \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Test User",
    "email": "test@example.com"
  }'

Expected:

  • Tool executes successfully
  • Data saved to CSV
  • Response includes enrollment ID
  • KB activated (if SET_KB in script)

Test 3: Mixed Mode (KB + Tools)

# Create session with answer_mode=4 (mixed)
curl -X POST http://localhost:8080/sessions \
  -H "Content-Type: application/json" \
  -d '{
    "user_id": "test-user",
    "bot_id": "default",
    "answer_mode": 4
  }'

# Send query that should use both KB and tools
curl -X POST http://localhost:8080/chat \
  -H "Content-Type: application/json" \
  -d '{
    "session_id": "<session_id>",
    "message": "I want to enroll. What information do you need?"
  }'

Expected:

  • Bot references both KB documents and available tools
  • Intelligently decides when to use KB vs tools
  • Context includes both document excerpts and tool info

Test 4: Website Indexing

# In BASIC or via API, test ADD_WEBSITE
# (Requires script with ADD_WEBSITE keyword)

# Check temporary collection created
curl http://localhost:6333/collections | grep temp_website

Expected:

  • Website crawled successfully
  • Temporary collection created
  • Content indexed
  • Available for current session only

🔍 Monitoring

Health Checks

# Botserver health
curl http://localhost:8080/health

# Qdrant health
curl http://localhost:6333/

# MinIO health
curl http://localhost:9000/minio/health/live

# Database connection
psql -U postgres -d botserver -c "SELECT 1"

Set up alerts for:

  • Service downtime
  • High memory usage (>80%)
  • Disk space low (<10%)
  • Indexing failures
  • Tool compilation errors

Log Monitoring

Important log patterns to watch:

# Successful indexing
grep "Document indexed successfully" botserver.log

# Indexing errors
grep "ERROR.*Indexing" botserver.log

# Tool compilation
grep "Tool compiled successfully" botserver.log

# KB Manager activity
grep "KB Manager" botserver.log

# MinIO handler activity
grep "MinIO Handler" botserver.log

Database Monitoring

-- Check document count per collection
SELECT collection_name, COUNT(*) as doc_count 
FROM kb_documents 
GROUP BY collection_name;

-- Check indexing status
SELECT 
  collection_name,
  COUNT(*) as total,
  COUNT(indexed_at) as indexed,
  COUNT(*) - COUNT(indexed_at) as pending
FROM kb_documents 
GROUP BY collection_name;

-- Check compiled tools
SELECT tool_name, compiled_at, is_active 
FROM basic_tools 
ORDER BY compiled_at DESC;

-- Recent KB activity
SELECT * FROM kb_documents 
ORDER BY updated_at DESC 
LIMIT 10;

🔒 Security Checklist

  • Change default MinIO credentials
  • Enable SSL/TLS for MinIO
  • Set up firewall rules
  • Enable Qdrant authentication
  • Use secure PostgreSQL connections
  • Validate file uploads (size, type)
  • Implement rate limiting
  • Set up proper CORS policies
  • Use environment variables for secrets
  • Enable request logging
  • Set up backup strategy

📊 Performance Tuning

MinIO Handler

// In src/kb/minio_handler.rs
interval(Duration::from_secs(15))  // Adjust polling interval

KB Manager

// In src/kb/mod.rs
interval(Duration::from_secs(30))  // Adjust check interval

Embeddings

// In src/kb/embeddings.rs
const CHUNK_SIZE: usize = 512;     // Adjust chunk size
const CHUNK_OVERLAP: usize = 50;   // Adjust overlap

Qdrant

// In src/kb/qdrant_client.rs
let vector_size = 1536;            // Match your embedding model

Tune based on:

  • Document update frequency
  • System resource usage
  • Query performance requirements
  • Embedding model characteristics

🔄 Backup & Recovery

Database Backup

# Daily backup
pg_dump -U postgres botserver > botserver_$(date +%Y%m%d).sql

# Restore
psql -U postgres botserver < botserver_20240101.sql

MinIO Backup

# Backup bucket
mc mirror local/org1_default.gbai/ ./backups/minio/

# Restore
mc mirror ./backups/minio/ local/org1_default.gbai/

Qdrant Backup

# Snapshot all collections
curl -X POST http://localhost:6333/collections/{collection_name}/snapshots

# Download snapshot
curl http://localhost:6333/collections/{collection_name}/snapshots/{snapshot_name}

Schedule:

  • Database: Daily at 2 AM
  • MinIO: Daily at 3 AM
  • Qdrant: Weekly
  • Test restore monthly

📚 Documentation

  • Update API documentation
  • Document custom BASIC keywords
  • Create user guides for tools
  • Document KB collection structure
  • Create troubleshooting guide
  • Document deployment process
  • Create runbooks for common issues

Post-Deployment Verification

Final Checklist:

  • All services running and healthy
  • Documents indexing automatically
  • Tools compiling on upload
  • KB search working correctly
  • Tool endpoints responding
  • Mixed mode working as expected
  • Logs are being written
  • Monitoring is active
  • Backups scheduled
  • Security measures in place
  • Documentation updated
  • Team trained on system

🆘 Rollback Plan

If deployment fails:

  1. Stop services

    sudo systemctl stop botserver
    
  2. Restore database

    psql -U postgres botserver < botserver_backup.sql
    
  3. Restore MinIO

    mc mirror ./backups/minio/ local/org1_default.gbai/
    
  4. Revert code

    git checkout <previous-version>
    cargo build --release
    
  5. Restart services

    sudo systemctl start botserver
    
  6. Verify rollback

    • Test basic functionality
    • Check logs for errors
    • Verify data integrity

📞 Support Contacts

  • Infrastructure Issues: DevOps Team
  • Database Issues: DBA Team
  • Application Issues: Development Team
  • Security Issues: Security Team

📅 Maintenance Schedule

  • Daily: Check logs, monitor services
  • Weekly: Review KB indexing stats, check disk space
  • Monthly: Test backups, review performance metrics
  • Quarterly: Security audit, update dependencies

Deployment Status: Not Started | 🟡 In Progress | Complete

Deployed By: ________________
Date: ________________
Version: ________________
Sign-off: ________________