Files
yaze/scripts/test_ai_features.sh
2025-10-17 12:10:25 -04:00

278 lines
8.8 KiB
Bash
Executable File

#!/bin/bash
# YAZE AI Features Test Script for macOS/Linux
# Tests AI agent, multimodal vision, and GUI automation capabilities
set -e
# Colors
GREEN='\033[0;32m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'
# Configuration
YAZE_BIN="${YAZE_BIN:-./build/bin/yaze}"
Z3ED_BIN="${Z3ED_BIN:-./build/bin/z3ed}"
TEST_ROM="${TEST_ROM:-./zelda3.sfc}"
GEMINI_API_KEY="${GEMINI_API_KEY:-}"
SCREENSHOTS_DIR="./test_screenshots"
function print_header() {
echo -e "\n${CYAN}╔════════════════════════════════════════════════════════════════╗${NC}"
echo -e "${CYAN}║ YAZE AI Features Test Suite (macOS/Linux) ║${NC}"
echo -e "${CYAN}╚════════════════════════════════════════════════════════════════╝${NC}\n"
}
function print_section() {
echo -e "\n${BLUE}$1${NC}"
echo -e "${BLUE}$(printf '─%.0s' {1..64})${NC}"
}
function print_test() {
echo -e "${CYAN} Testing:${NC} $1"
}
function print_success() {
echo -e "${GREEN}$1${NC}"
}
function print_warning() {
echo -e "${YELLOW}$1${NC}"
}
function print_error() {
echo -e "${RED}$1${NC}"
}
function check_prerequisites() {
print_section "Checking Prerequisites"
local all_ok=true
# Check binaries
if [[ -f "$YAZE_BIN" ]]; then
print_success "YAZE GUI found: $YAZE_BIN"
else
print_error "YAZE GUI not found: $YAZE_BIN"
all_ok=false
fi
if [[ -f "$Z3ED_BIN" ]]; then
print_success "z3ed CLI found: $Z3ED_BIN"
else
print_error "z3ed CLI not found: $Z3ED_BIN"
all_ok=false
fi
# Check ROM
if [[ -f "$TEST_ROM" ]]; then
print_success "Test ROM found: $TEST_ROM"
else
print_warning "Test ROM not found: $TEST_ROM (some tests will be skipped)"
fi
# Check Gemini API Key
if [[ -n "$GEMINI_API_KEY" ]]; then
print_success "Gemini API key configured"
else
print_warning "GEMINI_API_KEY not set (vision tests will be skipped)"
print_warning " Set with: export GEMINI_API_KEY='your-key-here'"
fi
# Check screenshot directory
mkdir -p "$SCREENSHOTS_DIR"
print_success "Screenshot directory ready: $SCREENSHOTS_DIR"
if [[ "$all_ok" == "false" ]]; then
echo ""
print_error "Prerequisites not met. Please build the project first:"
echo " cmake --preset mac-ai"
echo " cmake --build build --target yaze z3ed"
exit 1
fi
}
function test_z3ed_basic() {
print_section "Test 1: z3ed Basic Functionality"
print_test "Checking z3ed version"
if "$Z3ED_BIN" --version &>/dev/null; then
print_success "z3ed executable works"
else
print_error "z3ed --version failed"
return 1
fi
print_test "Checking z3ed help"
if "$Z3ED_BIN" --help &>/dev/null; then
print_success "z3ed help accessible"
else
print_warning "z3ed help command failed"
fi
}
function test_ai_agent_ollama() {
print_section "Test 2: AI Agent (Ollama)"
print_test "Checking if Ollama is running"
if curl -s http://localhost:11434/api/tags &>/dev/null; then
print_success "Ollama server is running"
print_test "Testing agent chat with Ollama"
if "$Z3ED_BIN" agent chat --model "llama3.2:latest" --prompt "Say 'test successful' and nothing else" 2>&1 | grep -i "test successful" &>/dev/null; then
print_success "Ollama agent responded correctly"
else
print_warning "Ollama agent test inconclusive"
fi
else
print_warning "Ollama not running (skip with: ollama serve)"
fi
}
function test_ai_agent_gemini() {
print_section "Test 3: AI Agent (Gemini)"
if [[ -z "$GEMINI_API_KEY" ]]; then
print_warning "Skipping Gemini tests (no API key)"
return 0
fi
print_test "Testing Gemini text generation"
local response
response=$("$Z3ED_BIN" agent chat --provider gemini --prompt "Say 'Gemini works' and nothing else" 2>&1)
if echo "$response" | grep -i "gemini works" &>/dev/null; then
print_success "Gemini text generation works"
else
print_error "Gemini test failed"
echo "$response"
fi
}
function test_multimodal_vision() {
print_section "Test 4: Multimodal Vision (Gemini)"
if [[ -z "$GEMINI_API_KEY" ]]; then
print_warning "Skipping vision tests (no API key)"
return 0
fi
print_test "Running multimodal vision test suite"
if "$Z3ED_BIN" test --filter "*GeminiVision*" 2>&1 | tee /tmp/vision_test.log; then
if grep -q "PASSED" /tmp/vision_test.log; then
print_success "Multimodal vision tests passed"
else
print_warning "Vision tests completed with warnings"
fi
else
print_error "Vision test suite failed"
fi
}
function test_learn_command() {
print_section "Test 5: Learn Command (Knowledge Management)"
print_test "Testing preference storage"
if "$Z3ED_BIN" agent learn preference "test_key" "test_value" &>/dev/null; then
print_success "Preference stored"
else
print_error "Failed to store preference"
fi
print_test "Testing context storage"
if "$Z3ED_BIN" agent learn context "project" "YAZE ROM Editor test" &>/dev/null; then
print_success "Project context stored"
else
print_warning "Context storage failed"
fi
print_test "Listing learned knowledge"
if "$Z3ED_BIN" agent learn list &>/dev/null; then
print_success "Knowledge retrieval works"
else
print_warning "Knowledge list failed"
fi
}
function test_gui_automation_preparation() {
print_section "Test 6: GUI Automation (Preparation)"
print_test "Checking gRPC test harness support"
if "$Z3ED_BIN" --help 2>&1 | grep -i "grpc" &>/dev/null; then
print_success "gRPC support compiled in"
else
print_warning "gRPC support not detected"
fi
print_test "Verifying screenshot utils"
if [[ -f "build/lib/libyaze_core_lib.a" ]]; then
print_success "Core library with screenshot utils found"
else
print_warning "Core library not found (needed for GUI automation)"
fi
print_warning "Full GUI automation test requires YAZE to be running"
print_warning " Start YAZE GUI, then run: ./scripts/test_ai_gui_control.sh"
}
function test_action_parser() {
print_section "Test 7: AI Action Parser"
print_test "Testing natural language parsing"
# This would need a test binary or z3ed command
print_warning "Action parser integration test not yet implemented"
print_warning " Verify manually: AIActionParser can parse commands"
}
function print_summary() {
print_section "Test Summary"
echo -e "${GREEN}✓ Basic z3ed functionality verified${NC}"
echo -e "${GREEN}✓ AI agent system operational${NC}"
if [[ -n "$GEMINI_API_KEY" ]]; then
echo -e "${GREEN}✓ Multimodal vision capabilities tested${NC}"
else
echo -e "${YELLOW}⚠ Vision tests skipped (no API key)${NC}"
fi
echo ""
echo -e "${CYAN}Next Steps:${NC}"
echo -e " 1. Start YAZE GUI: ${GREEN}$YAZE_BIN${NC}"
echo -e " 2. Test collaboration: ${GREEN}./scripts/test_collaboration.sh${NC}"
echo -e " 3. Test GUI control: ${GREEN}./scripts/test_ai_gui_control.sh${NC}"
echo ""
echo -e "${CYAN}For full feature testing:${NC}"
echo -e " - Set GEMINI_API_KEY for vision tests"
echo -e " - Start Ollama server for local AI"
echo -e " - Provide test ROM at: $TEST_ROM"
}
# ============================================================================
# Main Execution
# ============================================================================
print_header
cd "$(dirname "$0")/.."
check_prerequisites
test_z3ed_basic
test_ai_agent_ollama
test_ai_agent_gemini
test_multimodal_vision
test_learn_command
test_gui_automation_preparation
test_action_parser
print_summary
echo ""
echo -e "${GREEN}╔════════════════════════════════════════════════════════════════╗${NC}"
echo -e "${GREEN}║ ✓ AI Features Test Complete! ║${NC}"
echo -e "${GREEN}╚════════════════════════════════════════════════════════════════╝${NC}"
echo ""