You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
cbmc/codedetect/scripts/test-llm-generation.sh

333 lines
7.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/bin/bash
# LLM生成测试脚本
# 提供简单的命令行界面来运行LLM生成测试
set -e # 遇到错误时退出
# 颜色定义
RED='\\033[0;31m'
GREEN='\\033[0;32m'
YELLOW='\\033[1;33m'
BLUE='\\033[0;34m'
NC='\\033[0m' # No Color
# 脚本目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
# 日志函数
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"
}
# 显示帮助信息
show_help() {
cat << EOF
LLM Generation Test Script
Usage: $0 [OPTIONS] [COMMAND]
Commands:
basic Run basic LLM generation tests
comprehensive Run comprehensive test suite
unit Run unit tests only
integration Run integration tests only
performance Run performance tests only
cli Run CLI tests only
validation Run validation tests only
all Run all tests (default)
help Show this help message
Options:
-h, --help Show this help message
-v, --verbose Enable verbose output
-c, --config Specify config file path
-k, --api-key Specify API key (overrides environment variable)
Environment Variables:
SILICONFLOW_API_KEY SiliconFlow API key (required for LLM tests)
Examples:
$0 # Run all tests
$0 basic # Run basic tests only
$0 -v --config custom.yaml # Run with custom config and verbose output
EOF
}
# 检查依赖
check_dependencies() {
log_info "Checking dependencies..."
# 检查Python
if ! command -v python3 &> /dev/null; then
log_error "Python3 is required but not installed"
exit 1
fi
# 检查pip
if ! command -v pip3 &> /dev/null; then
log_error "pip3 is required but not installed"
exit 1
fi
# 检查必要的Python包
local required_packages=("aiohttp" "pytest" "pyyaml" "click" "colorama")
for package in "${required_packages[@]}"; do
if ! python3 -c "import $package" 2>/dev/null; then
log_warning "Package '$package' not found. Installing..."
pip3 install "$package"
fi
done
log_success "Dependencies check passed"
}
# 检查API密钥
check_api_key() {
if [[ -z "$SILICONFLOW_API_KEY" && -z "$API_KEY" ]]; then
log_warning "SILICONFLOW_API_KEY environment variable not set"
log_warning "LLM tests will be skipped. Set the environment variable to run LLM tests."
return 1
fi
# 如果提供了API密钥参数设置环境变量
if [[ -n "$API_KEY" ]]; then
export SILICONFLOW_API_KEY="$API_KEY"
fi
return 0
}
# 设置环境
setup_environment() {
log_info "Setting up environment..."
# 切换到项目根目录
cd "$PROJECT_ROOT"
# 设置Python路径
export PYTHONPATH="$PROJECT_ROOT:$PYTHONPATH"
# 创建必要的目录
mkdir -p test_results/{reports,logs,specs,performance,validation}
log_success "Environment setup completed"
}
# 运行基本测试
run_basic_tests() {
log_info "Running basic LLM generation tests..."
if check_api_key; then
python3 tests/run_llm_tests.py --test-type llm --llm-type basic ${VERBOSE_ARG} ${CONFIG_ARG}
else
log_warning "Skipping LLM tests due to missing API key"
return 1
fi
}
# 运行全面测试
run_comprehensive_tests() {
log_info "Running comprehensive test suite..."
if check_api_key; then
python3 tests/run_llm_tests.py --test-type llm --llm-type comprehensive ${VERBOSE_ARG} ${CONFIG_ARG}
else
log_warning "Skipping LLM tests due to missing API key"
return 1
fi
}
# 运行单元测试
run_unit_tests() {
log_info "Running unit tests..."
python3 tests/run_llm_tests.py --test-type unit ${VERBOSE_ARG} ${CONFIG_ARG}
}
# 运行集成测试
run_integration_tests() {
log_info "Running integration tests..."
python3 tests/run_llm_tests.py --test-type integration ${VERBOSE_ARG} ${CONFIG_ARG}
}
# 运行性能测试
run_performance_tests() {
log_info "Running performance tests..."
if check_api_key; then
python3 tests/run_llm_tests.py --test-type performance ${VERBOSE_ARG} ${CONFIG_ARG}
else
log_warning "Skipping performance tests due to missing API key"
return 1
fi
}
# 运行CLI测试
run_cli_tests() {
log_info "Running CLI tests..."
if check_api_key; then
python3 tests/run_llm_tests.py --test-type cli ${VERBOSE_ARG} ${CONFIG_ARG}
else
log_warning "Skipping CLI tests due to missing API key"
return 1
fi
}
# 运行验证测试
run_validation_tests() {
log_info "Running validation tests..."
python3 tests/run_llm_tests.py --test-type validation ${VERBOSE_ARG} ${CONFIG_ARG}
}
# 运行所有测试
run_all_tests() {
log_info "Running all tests..."
python3 tests/run_llm_tests.py --test-type all ${VERBOSE_ARG} ${CONFIG_ARG}
}
# 显示结果
show_results() {
local exit_code=$1
local test_type=$2
if [[ $exit_code -eq 0 ]]; then
log_success "$test_type tests completed successfully"
else
log_error "$test_type tests failed with exit code $exit_code"
fi
# 显示结果目录
if [[ -d "test_results" ]]; then
log_info "Results saved in: test_results/"
ls -la test_results/ 2>/dev/null || true
fi
}
# 主函数
main() {
local command="all"
local verbose=false
local config=""
local api_key=""
# 解析命令行参数
while [[ $# -gt 0 ]]; do
case $1 in
-h|--help)
show_help
exit 0
;;
-v|--verbose)
verbose=true
VERBOSE_ARG="--verbose"
shift
;;
-c|--config)
config="$2"
CONFIG_ARG="--config $config"
shift 2
;;
-k|--api-key)
api_key="$2"
API_KEY="$2"
shift 2
;;
basic|comprehensive|unit|integration|performance|cli|validation|all)
command="$1"
shift
;;
*)
log_error "Unknown command: $1"
show_help
exit 1
;;
esac
done
# 显示欢迎信息
echo "=========================================================="
echo "LLM Generation Test Framework"
echo "=========================================================="
echo "Command: $command"
echo "Project: $PROJECT_ROOT"
if [[ -n "$config" ]]; then
echo "Config: $config"
fi
echo "=========================================================="
# 检查依赖
check_dependencies
# 设置环境
setup_environment
# 根据命令运行相应的测试
local exit_code=0
case $command in
basic)
run_basic_tests
exit_code=$?
;;
comprehensive)
run_comprehensive_tests
exit_code=$?
;;
unit)
run_unit_tests
exit_code=$?
;;
integration)
run_integration_tests
exit_code=$?
;;
performance)
run_performance_tests
exit_code=$?
;;
cli)
run_cli_tests
exit_code=$?
;;
validation)
run_validation_tests
exit_code=$?
;;
all)
run_all_tests
exit_code=$?
;;
*)
log_error "Unknown command: $command"
show_help
exit 1
;;
esac
# 显示结果
show_results $exit_code "$command"
# 退出
exit $exit_code
}
# 运行主函数
main "$@"