feat(tests): enhance Ollama server integration in agent test suite
- Added functionality to start and manage the Ollama server within the agent test suite. - Implemented checks for the availability of the Ollama model and provided user feedback for setup. - Updated usage instructions to include environment variables for configuring the Ollama model. Benefits: - Improves the testing framework by allowing dynamic management of the Ollama server and model, enhancing test coverage and flexibility.
This commit is contained in:
@@ -12,6 +12,8 @@ NC='\033[0m' # No Color
|
|||||||
Z3ED="./build_test/bin/z3ed"
|
Z3ED="./build_test/bin/z3ed"
|
||||||
RESULTS_FILE="/tmp/z3ed_ai_test_results.txt"
|
RESULTS_FILE="/tmp/z3ed_ai_test_results.txt"
|
||||||
USE_MOCK_ROM=true # Set to false if you want to test with a real ROM
|
USE_MOCK_ROM=true # Set to false if you want to test with a real ROM
|
||||||
|
OLLAMA_MODEL="${OLLAMA_MODEL:-qwen2.5-coder:latest}"
|
||||||
|
OLLAMA_PID=""
|
||||||
|
|
||||||
echo "=========================================="
|
echo "=========================================="
|
||||||
echo " Z3ED AI Provider Test Suite"
|
echo " Z3ED AI Provider Test Suite"
|
||||||
@@ -21,11 +23,92 @@ echo ""
|
|||||||
# Clear results file
|
# Clear results file
|
||||||
> "$RESULTS_FILE"
|
> "$RESULTS_FILE"
|
||||||
|
|
||||||
|
# Cleanup function
|
||||||
|
cleanup() {
|
||||||
|
if [ -n "$OLLAMA_PID" ]; then
|
||||||
|
echo ""
|
||||||
|
echo "Stopping Ollama server (PID: $OLLAMA_PID)..."
|
||||||
|
kill "$OLLAMA_PID" 2>/dev/null || true
|
||||||
|
wait "$OLLAMA_PID" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Register cleanup on exit
|
||||||
|
trap cleanup EXIT INT TERM
|
||||||
|
|
||||||
|
# --- Helper Functions ---
|
||||||
|
|
||||||
|
# Start Ollama server if not already running
|
||||||
|
start_ollama_server() {
|
||||||
|
echo "Checking Ollama server status..."
|
||||||
|
|
||||||
|
# Check if Ollama is already running
|
||||||
|
if curl -s http://localhost:11434/api/tags > /dev/null 2>&1; then
|
||||||
|
echo -e "${GREEN}✓ Ollama server already running${NC}"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if ollama command exists
|
||||||
|
if ! command -v ollama &> /dev/null; then
|
||||||
|
echo -e "${YELLOW}⚠ Ollama command not found. Skipping Ollama tests.${NC}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Starting Ollama server..."
|
||||||
|
ollama serve > /tmp/ollama_server.log 2>&1 &
|
||||||
|
OLLAMA_PID=$!
|
||||||
|
|
||||||
|
# Wait for server to be ready (max 30 seconds)
|
||||||
|
local max_wait=30
|
||||||
|
local waited=0
|
||||||
|
while [ $waited -lt $max_wait ]; do
|
||||||
|
if curl -s http://localhost:11434/api/tags > /dev/null 2>&1; then
|
||||||
|
echo -e "${GREEN}✓ Ollama server started (PID: $OLLAMA_PID)${NC}"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
sleep 1
|
||||||
|
waited=$((waited + 1))
|
||||||
|
done
|
||||||
|
|
||||||
|
echo -e "${RED}✗ Ollama server failed to start within ${max_wait}s${NC}"
|
||||||
|
echo "Check logs at: /tmp/ollama_server.log"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Ensure Ollama model is available
|
||||||
|
setup_ollama_model() {
|
||||||
|
local model="$1"
|
||||||
|
echo "Checking for Ollama model: $model"
|
||||||
|
|
||||||
|
if ollama list | grep -q "${model%:*}"; then
|
||||||
|
echo -e "${GREEN}✓ Model $model already available${NC}"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Pulling Ollama model: $model (this may take a while)..."
|
||||||
|
if ollama pull "$model"; then
|
||||||
|
echo -e "${GREEN}✓ Model $model pulled successfully${NC}"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
echo -e "${RED}✗ Failed to pull model $model${NC}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# --- Pre-flight Checks ---
|
# --- Pre-flight Checks ---
|
||||||
|
|
||||||
if [ -z "$1" ]; then
|
if [ -z "$1" ]; then
|
||||||
echo "❌ Error: No AI provider specified."
|
echo "❌ Error: No AI provider specified."
|
||||||
echo "Usage: $0 <ollama|gemini|mock>"
|
echo "Usage: $0 <ollama|gemini|mock>"
|
||||||
|
echo ""
|
||||||
|
echo "Environment Variables:"
|
||||||
|
echo " OLLAMA_MODEL - Ollama model to use (default: qwen2.5-coder:latest)"
|
||||||
|
echo " GEMINI_API_KEY - Required for Gemini provider"
|
||||||
|
echo ""
|
||||||
|
echo "Examples:"
|
||||||
|
echo " $0 ollama # Use Ollama with default model"
|
||||||
|
echo " OLLAMA_MODEL=llama3:8b $0 ollama # Use Ollama with llama3"
|
||||||
|
echo " GEMINI_API_KEY=xyz $0 gemini # Use Gemini"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
PROVIDER=$1
|
PROVIDER=$1
|
||||||
@@ -62,17 +145,19 @@ else
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Test Ollama availability
|
# Setup Ollama if needed
|
||||||
OLLAMA_AVAILABLE=false
|
OLLAMA_AVAILABLE=false
|
||||||
if command -v ollama &> /dev/null && curl -s http://localhost:11434/api/tags > /dev/null 2>&1; then
|
if [ "$PROVIDER" == "ollama" ] || [ -z "$PROVIDER" ]; then
|
||||||
if ollama list | grep -q "qwen2.5-coder"; then
|
if start_ollama_server; then
|
||||||
OLLAMA_AVAILABLE=true
|
if setup_ollama_model "$OLLAMA_MODEL"; then
|
||||||
echo -e "${GREEN}✓ Ollama available (qwen2.5-coder)${NC}"
|
OLLAMA_AVAILABLE=true
|
||||||
|
echo -e "${GREEN}✓ Ollama ready with model: $OLLAMA_MODEL${NC}"
|
||||||
|
else
|
||||||
|
echo -e "${YELLOW}⚠ Ollama server running but model setup failed${NC}"
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
echo -e "${YELLOW}⚠ Ollama available but qwen2.5-coder not found${NC}"
|
echo -e "${YELLOW}⚠ Ollama server not available${NC}"
|
||||||
fi
|
fi
|
||||||
else
|
|
||||||
echo -e "${YELLOW}⚠ Ollama not available${NC}"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Test Gemini availability
|
# Test Gemini availability
|
||||||
@@ -158,7 +243,7 @@ if [ "$OLLAMA_AVAILABLE" = true ]; then
|
|||||||
echo " OLLAMA TESTS"
|
echo " OLLAMA TESTS"
|
||||||
echo "=========================================="
|
echo "=========================================="
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
run_test "Ollama: Simple Question" "ollama" \
|
run_test "Ollama: Simple Question" "ollama" \
|
||||||
"What dungeons are in this ROM?" \
|
"What dungeons are in this ROM?" \
|
||||||
"dungeon\|palace\|castle"
|
"dungeon\|palace\|castle"
|
||||||
@@ -256,12 +341,18 @@ echo " 4. Check AI provider connectivity and quotas"
|
|||||||
echo " 5. Examine tool execution logs for errors"
|
echo " 5. Examine tool execution logs for errors"
|
||||||
echo ""
|
echo ""
|
||||||
echo "For Ollama:"
|
echo "For Ollama:"
|
||||||
echo " - Try different models: ollama pull llama3:8b"
|
echo " - Try different models: OLLAMA_MODEL=llama3:8b $0 ollama"
|
||||||
|
echo " - Default model: $OLLAMA_MODEL"
|
||||||
echo " - Adjust temperature in ollama_ai_service.cc"
|
echo " - Adjust temperature in ollama_ai_service.cc"
|
||||||
|
echo " - Server logs: /tmp/ollama_server.log"
|
||||||
echo ""
|
echo ""
|
||||||
echo "For Gemini:"
|
echo "For Gemini:"
|
||||||
echo " - Verify API key is valid"
|
echo " - Verify API key is valid"
|
||||||
echo " - Check quota at: https://aistudio.google.com"
|
echo " - Check quota at: https://aistudio.google.com"
|
||||||
echo ""
|
echo ""
|
||||||
|
echo "Environment Variables:"
|
||||||
|
echo " - OLLAMA_MODEL: Set the Ollama model (default: qwen2.5-coder:latest)"
|
||||||
|
echo " - GEMINI_API_KEY: Required for Gemini tests"
|
||||||
|
echo ""
|
||||||
echo "Results saved to: $RESULTS_FILE"
|
echo "Results saved to: $RESULTS_FILE"
|
||||||
echo ""
|
echo ""
|
||||||
|
|||||||
Reference in New Issue
Block a user