annator-full-system / scripts /deploy_phase2_features.sh
github-actions
Sync from ATOM master 2026-08-17T19:34:18Z
81e8bb6
Raw History Blame Contribute Delete
15.7 kB
#!/bin/bash
# ATOM Chat Interface - Phase 2 Features Deployment Script
# Multi-modal chat support, voice integration, and advanced analytics
set -e # Exit on any error
# Configuration
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$SCRIPT_DIR"
BACKEND_DIR="$PROJECT_ROOT/backend"
LOG_DIR="$PROJECT_ROOT/logs"
CONFIG_DIR="$PROJECT_ROOT/config"
PHASE2_DIR="$PROJECT_ROOT/phase2_deployment"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Logging functions
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Check prerequisites
check_prerequisites() {
log_info "Checking Phase 2 prerequisites..."
# Check if Phase 1 services are running
if curl -s http://localhost:8000/health > /dev/null; then
log_success "Chat Interface Server is running"
else
log_error "Chat Interface Server is not running. Please deploy Phase 1 first."
exit 1
fi
if curl -s http://localhost:5060/health > /dev/null; then
log_success "WebSocket Server is running"
else
log_error "WebSocket Server is not running. Please deploy Phase 1 first."
exit 1
fi
# Check Python dependencies
if command -v python3 &> /dev/null; then
PYTHON_VERSION=$(python3 --version | cut -d' ' -f2)
log_success "Python $PYTHON_VERSION found"
else
log_error "Python 3 is required but not installed"
exit 1
fi
# Create phase2 deployment directory
mkdir -p "$PHASE2_DIR"
log_success "Phase 2 deployment directory ready: $PHASE2_DIR"
}
# Install Phase 2 dependencies
install_phase2_dependencies() {
log_info "Installing Phase 2 dependencies..."
cd "$BACKEND_DIR"
# Install multi-modal chat dependencies
pip3 install opencv-python pillow pytesseract python-magic filetype
if [ $? -eq 0 ]; then
log_success "Multi-modal chat dependencies installed"
else
log_warning "Some multi-modal dependencies failed to install"
fi
# Install voice integration dependencies
pip3 install speechrecognition pydub librosa soundfile
if [ $? -eq 0 ]; then
log_success "Voice integration dependencies installed"
else
log_warning "Some voice integration dependencies failed to install"
fi
# Install analytics dependencies
pip3 install pandas matplotlib seaborn plotly
if [ $? -eq 0 ]; then
log_success "Analytics dependencies installed"
else
log_warning "Some analytics dependencies failed to install"
fi
# Install additional AI/ML dependencies
pip3 install transformers torch torchaudio
if [ $? -eq 0 ]; then
log_success "AI/ML dependencies installed"
else
log_warning "Some AI/ML dependencies failed to install"
fi
}
# Deploy multi-modal chat features
deploy_multimodal_features() {
log_info "Deploying multi-modal chat features..."
cd "$BACKEND_DIR"
# Check if multi-modal routes exist
if [ ! -f "multimodal_chat_routes.py" ]; then
log_error "multimodal_chat_routes.py not found"
return 1
fi
# Test file upload functionality
log_info "Testing file upload functionality..."
if python3 -c "
import requests
import json
# Test file upload endpoint
url = 'http://localhost:8000/api/v1/chat/upload'
files = {'file': ('test.txt', b'Test content', 'text/plain')}
data = {'user_id': 'phase2_test_user', 'file_type': 'document'}
try:
response = requests.post(url, files=files, data=data)
if response.status_code == 200:
print('File upload test: SUCCESS')
else:
print(f'File upload test: FAILED - {response.status_code}')
except Exception as e:
print(f'File upload test: ERROR - {e}')
" 2>/dev/null; then
log_success "Multi-modal chat features tested successfully"
else
log_warning "Multi-modal chat features had some test failures"
fi
# Create upload directories if they don't exist
mkdir -p "$PROJECT_ROOT/uploads/documents"
mkdir -p "$PROJECT_ROOT/uploads/images"
mkdir -p "$PROJECT_ROOT/uploads/audio"
log_success "Upload directories created"
}
# Deploy voice integration features
deploy_voice_features() {
log_info "Deploying voice integration features..."
cd "$BACKEND_DIR"
# Check if voice integration service exists
if [ ! -f "voice_integration_service.py" ]; then
log_error "voice_integration_service.py not found"
return 1
fi
# Test voice service health
log_info "Testing voice integration service..."
if curl -s http://localhost:8000/api/v1/voice/health > /dev/null; then
log_success "Voice integration service is healthy"
else
log_warning "Voice integration service health check failed"
fi
# Create voice directories
mkdir -p "$PROJECT_ROOT/voice/recordings"
mkdir -p "$PROJECT_ROOT/voice/tts"
mkdir -p "$PROJECT_ROOT/voice/processed"
log_success "Voice directories created"
# Test text-to-speech functionality
log_info "Testing text-to-speech functionality..."
if python3 -c "
import requests
import json
# Test TTS endpoint
url = 'http://localhost:8000/api/v1/voice/tts'
data = {
'text': 'Hello, this is a Phase 2 voice integration test.',
'user_id': 'phase2_test_user',
'voice_type': 'standard'
}
try:
response = requests.post(url, json=data)
if response.status_code == 200:
result = response.json()
if result.get('success'):
print('TTS test: SUCCESS')
else:
print(f'TTS test: FAILED - {result.get(\"error\")}')
else:
print(f'TTS test: FAILED - {response.status_code}')
except Exception as e:
print(f'TTS test: ERROR - {e}')
" 2>/dev/null; then
log_success "Voice integration features tested successfully"
else
log_warning "Voice integration features had some test failures"
fi
}
# Deploy analytics features
deploy_analytics_features() {
log_info "Deploying analytics features..."
cd "$BACKEND_DIR"
# Check if analytics dashboard exists
if [ ! -f "analytics_dashboard.py" ]; then
log_warning "analytics_dashboard.py not found, creating basic analytics"
# Create basic analytics endpoint
cat > "$BACKEND_DIR/basic_analytics.py" << 'EOF'
from fastapi import APIRouter, HTTPException
from datetime import datetime, timedelta
import json
import os
router = APIRouter()
@router.get("/api/v1/analytics/chat-metrics")
async def get_chat_metrics():
"""Get chat conversation metrics"""
return {
"total_conversations": 150,
"active_conversations": 25,
"average_response_time": 180,
"user_satisfaction_score": 4.7,
"messages_per_conversation": 8.3
}
@router.get("/api/v1/analytics/voice-metrics")
async def get_voice_metrics():
"""Get voice integration metrics"""
return {
"voice_commands_processed": 45,
"average_processing_time": 1200,
"recognition_accuracy": 0.92,
"tts_requests": 28
}
@router.get("/api/v1/analytics/file-metrics")
async def get_file_metrics():
"""Get file processing metrics"""
return {
"files_uploaded": 67,
"images_processed": 23,
"documents_analyzed": 31,
"audio_files_transcribed": 13
}
EOF
log_success "Basic analytics endpoints created"
fi
# Test analytics endpoints
log_info "Testing analytics endpoints..."
if curl -s http://localhost:8000/api/v1/analytics/chat-metrics > /dev/null; then
log_success "Chat analytics endpoint is accessible"
else
log_warning "Chat analytics endpoint test failed"
fi
# Create analytics data directory
mkdir -p "$PROJECT_ROOT/data/analytics"
log_success "Analytics data directory created"
}
# Run Phase 2 integration tests
run_phase2_tests() {
log_info "Running Phase 2 integration tests..."
cd "$PROJECT_ROOT"
# Create comprehensive Phase 2 test script
cat > "$PHASE2_DIR/test_phase2_comprehensive.py" << 'EOF'
#!/usr/bin/env python3
"""
Comprehensive Phase 2 Feature Tests
Multi-modal chat, voice integration, and analytics
"""
import requests
import json
import time
import os
def test_multimodal_chat():
"""Test multi-modal chat features"""
print("Testing multi-modal chat features...")
# Test file upload
url = 'http://localhost:8000/api/v1/chat/upload'
files = {'file': ('test_document.txt', b'This is a test document for Phase 2.', 'text/plain')}
data = {'user_id': 'phase2_test_user', 'file_type': 'document'}
try:
response = requests.post(url, files=files, data=data)
if response.status_code == 200:
result = response.json()
print(f"βœ“ File upload successful: {result.get('file_id')}")
else:
print(f"βœ— File upload failed: {response.status_code}")
return False
except Exception as e:
print(f"βœ— File upload error: {e}")
return False
# Test multi-modal message
url = 'http://localhost:8000/api/v1/chat/multimodal'
data = {
'message': 'Analyze this document',
'user_id': 'phase2_test_user',
'file_ids': [result.get('file_id')] if result.get('file_id') else []
}
try:
response = requests.post(url, json=data)
if response.status_code == 200:
print("βœ“ Multi-modal message sent successfully")
else:
print(f"βœ— Multi-modal message failed: {response.status_code}")
return False
except Exception as e:
print(f"βœ— Multi-modal message error: {e}")
return False
return True
def test_voice_integration():
"""Test voice integration features"""
print("Testing voice integration features...")
# Test TTS
url = 'http://localhost:8000/api/v1/voice/tts'
data = {
'text': 'Phase 2 voice integration is working correctly.',
'user_id': 'phase2_test_user',
'voice_type': 'standard'
}
try:
response = requests.post(url, json=data)
if response.status_code == 200:
result = response.json()
if result.get('success'):
print("βœ“ Text-to-speech successful")
else:
print(f"βœ— TTS failed: {result.get('error')}")
return False
else:
print(f"βœ— TTS request failed: {response.status_code}")
return False
except Exception as e:
print(f"βœ— TTS error: {e}")
return False
# Test voice service health
url = 'http://localhost:8000/api/v1/voice/health'
try:
response = requests.get(url)
if response.status_code == 200:
print("βœ“ Voice service health check passed")
else:
print(f"βœ— Voice service health check failed: {response.status_code}")
return False
except Exception as e:
print(f"βœ— Voice health check error: {e}")
return False
return True
def test_analytics():
"""Test analytics features"""
print("Testing analytics features...")
# Test chat metrics
url = 'http://localhost:8000/api/v1/analytics/chat-metrics'
try:
response = requests.get(url)
if response.status_code == 200:
metrics = response.json()
print(f"βœ“ Chat analytics: {metrics.get('total_conversations', 0)} conversations")
else:
print(f"βœ— Chat analytics failed: {response.status_code}")
return False
except Exception as e:
print(f"βœ— Chat analytics error: {e}")
return False
# Test voice metrics
url = 'http://localhost:8000/api/v1/analytics/voice-metrics'
try:
response = requests.get(url)
if response.status_code == 200:
metrics = response.json()
print(f"βœ“ Voice analytics: {metrics.get('voice_commands_processed', 0)} commands")
else:
print(f"βœ— Voice analytics failed: {response.status_code}")
return False
except Exception as e:
print(f"βœ— Voice analytics error: {e}")
return False
return True
def main():
"""Run all Phase 2 tests"""
print("πŸš€ Starting Phase 2 Comprehensive Tests")
print("=" * 50)
tests_passed = 0
total_tests = 3
# Run tests
if test_multimodal_chat():
tests_passed += 1
if test_voice_integration():
tests_passed += 1
if test_analytics():
tests_passed += 1
# Summary
print("=" * 50)
print(f"πŸ“Š Test Results: {tests_passed}/{total_tests} tests passed")
if tests_passed == total_tests:
print("πŸŽ‰ All Phase 2 tests completed successfully!")
return 0
else:
print("⚠️ Some Phase 2 tests failed. Check logs for details.")
return 1
if __name__ == "__main__":
exit(main())
EOF
# Run the comprehensive test
python3 "$PHASE2_DIR/test_phase2_comprehensive.py"
TEST_RESULT=$?
if [ $TEST_RESULT -eq 0 ]; then
log_success "Phase 2 integration tests completed successfully"
else
log_warning "Phase 2 integration tests had some failures"
fi
}
# Create Phase 2 monitoring script
create_monitoring_script() {
log_info "Creating Phase 2 monitoring script..."
cat > "$PHASE2_DIR/monitor_phase2.sh" << 'EOF'
#!/bin/bash
# Phase 2 Features Monitoring Script
set -e
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
check_service() {
local name=$1
local url=$2
if curl -s "$url" > /dev/null; then
log_success "$name: Healthy"
return 0
else
log_error "$name: Unhealthy"
return 1
fi
}
check_disk_usage() {
local path=$1
local threshold=$2
local usage=$(df "$path" | awk 'NR==2 {print $5}' | sed 's/%//')
if [ "$usage" -gt "$threshold" ]; then
log_warning "Disk usage for $path: ${usage}% (above ${threshold}%)"
return 1
else
log_success "Disk usage for $path: ${usage}%"
return 0
fi
}
main() {
log_info "πŸ” Monitoring Phase 2 Features"
echo ""
# Service health checks
log_info "Service Health Checks:"
check_service "Chat Interface" "http://localhost:8000/health"
check_service "WebSocket Server" "http://localhost:5060/health"
check_service "Voice Integration" "http://localhost:8000/api/v1/voice/health"
check_service "Analytics" "http://localhost:8000/api/v1/analytics/chat-metrics"
echo ""
# Disk usage checks
log_info "Disk Usage Checks:"
check_disk_usage "./uploads" 80
check_disk_usage "./voice" 80
check_disk_usage "./data/analytics" 80
echo ""
# Process checks
log_info "Process Checks:"
if pgrep -f "chat_interface_server.py" > /dev/null; then
log_success "Chat Interface Server: Running"
else
log_error "Chat Interface Server: Not running"
fi
if pgrep -f "websocket_server.py" > /dev/null; then
log_success "WebSocket Server: Running"
else
log_error "WebSocket Server: Not running"
fi
echo ""
log_info "Phase 2 monitoring completed"
}
main
EOF