Build latest book artifacts / build (push) Canceled after 0s
dependency resolution / resolve (3.11) (push) Canceled after 0s
dependency resolution / resolve (3.13) (push) Canceled after 0s
deploy-pages / build (push) Canceled after 0s
deploy-pages / deploy (push) Canceled after 0s
i18n consistency check / check (push) Canceled after 0s
provider adoption tests / test (chapter2/context-compression) (push) Canceled after 0s
provider adoption tests / test (chapter2/prompt-injection) (push) Canceled after 0s
provider adoption tests / test (chapter2/system-hint) (push) Canceled after 0s
provider adoption tests / test (chapter3/log-sanitization) (push) Canceled after 0s
web-search-agent tests / test (push) Canceled after 0s
web-search-agent tests / agentbook (push) Canceled after 0s
190 lines
5.6 KiB
Bash
Executable File
190 lines
5.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Full Ablation Study Script for Prompt Engineering
|
|
# This script runs all ablation experiments systematically
|
|
|
|
set -e # Exit on error
|
|
|
|
# Configuration
|
|
MODEL="${MODEL:-gpt-4o-mini}"
|
|
# Provider is auto-detected from the model id: a bare id (gpt-4o-mini) uses OpenAI
|
|
# direct (OPENAI_API_KEY); an id containing '/' (openai/gpt-5) uses OpenRouter (OPENROUTER_API_KEY).
|
|
ENV="${ENV:-airline}"
|
|
NUM_TASKS="${NUM_TASKS:-10}" # Number of tasks to run per experiment
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Function to print colored headers
|
|
print_header() {
|
|
echo -e "${BLUE}========================================${NC}"
|
|
echo -e "${GREEN}$1${NC}"
|
|
echo -e "${BLUE}========================================${NC}"
|
|
}
|
|
|
|
# Function to run an experiment
|
|
run_experiment() {
|
|
local name=$1
|
|
local args=$2
|
|
|
|
echo -e "${YELLOW}Running: $name${NC}"
|
|
echo "Arguments: $args"
|
|
|
|
python run_ablation.py \
|
|
--model $MODEL \
|
|
--env $ENV \
|
|
--start-index 0 \
|
|
--end-index $NUM_TASKS \
|
|
--ablation-name "$name" \
|
|
$args
|
|
|
|
echo -e "${GREEN}✓ Completed: $name${NC}\n"
|
|
}
|
|
|
|
# Main execution
|
|
main() {
|
|
print_header "PROMPT ENGINEERING ABLATION STUDY"
|
|
|
|
echo "Configuration:"
|
|
echo " Model: $MODEL"
|
|
echo " Provider: Auto-detected (OpenAI for bare ids, OpenRouter for ids with '/')"
|
|
echo " Environment: $ENV"
|
|
echo " Tasks per experiment: $NUM_TASKS"
|
|
echo ""
|
|
|
|
# Create results directory
|
|
mkdir -p results_ablation
|
|
|
|
# Track start time
|
|
START_TIME=$(date +%s)
|
|
|
|
print_header "1. BASELINE EXPERIMENT"
|
|
run_experiment "baseline" ""
|
|
|
|
print_header "2. TONE STYLE ABLATIONS"
|
|
run_experiment "tone_trump" "--tone-style trump"
|
|
run_experiment "tone_casual" "--tone-style casual"
|
|
|
|
print_header "3. WIKI ORGANIZATION ABLATION"
|
|
run_experiment "wiki_random" "--randomize-wiki"
|
|
|
|
print_header "4. TOOL DESCRIPTION ABLATION"
|
|
run_experiment "no_tool_desc" "--remove-tool-descriptions"
|
|
|
|
print_header "5. COMBINED ABLATIONS"
|
|
run_experiment "casual_wiki" "--tone-style casual --randomize-wiki"
|
|
run_experiment "casual_no_tools" "--tone-style casual --remove-tool-descriptions"
|
|
run_experiment "wiki_no_tools" "--randomize-wiki --remove-tool-descriptions"
|
|
run_experiment "all_ablations" "--tone-style casual --randomize-wiki --remove-tool-descriptions"
|
|
|
|
# Calculate elapsed time
|
|
END_TIME=$(date +%s)
|
|
ELAPSED=$((END_TIME - START_TIME))
|
|
MINUTES=$((ELAPSED / 60))
|
|
SECONDS=$((ELAPSED % 60))
|
|
|
|
print_header "EXPERIMENT COMPLETE"
|
|
echo -e "${GREEN}All experiments completed successfully!${NC}"
|
|
echo "Total time: ${MINUTES}m ${SECONDS}s"
|
|
echo ""
|
|
|
|
# Generate summary
|
|
print_header "GENERATING SUMMARY"
|
|
python analyze_results.py
|
|
}
|
|
|
|
# Check prerequisites
|
|
check_prerequisites() {
|
|
echo "Checking prerequisites..."
|
|
|
|
# Check Python
|
|
if ! command -v python &> /dev/null; then
|
|
echo -e "${RED}Error: Python not found${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# Check required files
|
|
for file in run_ablation.py ablation_utils.py ablation_agent.py; do
|
|
if [ ! -f "$file" ]; then
|
|
echo -e "${RED}Error: Required file $file not found${NC}"
|
|
echo "Please run this script from the prompt-engineering directory"
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
# Check API key based on model (ids with '/' route through OpenRouter)
|
|
if [[ "$MODEL" == */* ]]; then
|
|
if [ -z "$OPENROUTER_API_KEY" ]; then
|
|
echo -e "${YELLOW}Warning: OPENROUTER_API_KEY not set for model '$MODEL'${NC}"
|
|
echo "Please set: export OPENROUTER_API_KEY='your-key'"
|
|
read -p "Continue anyway? (y/n) " -n 1 -r
|
|
echo
|
|
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
|
exit 1
|
|
fi
|
|
fi
|
|
elif [ -z "$OPENAI_API_KEY" ]; then
|
|
echo -e "${YELLOW}Warning: OPENAI_API_KEY not set${NC}"
|
|
echo "Please set: export OPENAI_API_KEY='your-key'"
|
|
read -p "Continue anyway? (y/n) " -n 1 -r
|
|
echo
|
|
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
echo -e "${GREEN}✓ Prerequisites check passed${NC}\n"
|
|
}
|
|
|
|
# Parse command line arguments
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
--model)
|
|
MODEL="$2"
|
|
shift 2
|
|
;;
|
|
--provider)
|
|
echo "Note: Provider is now auto-detected based on model"
|
|
echo " (OpenRouter for ids with '/', OpenAI for bare ids)"
|
|
shift 2
|
|
;;
|
|
--env)
|
|
ENV="$2"
|
|
shift 2
|
|
;;
|
|
--num-tasks)
|
|
NUM_TASKS="$2"
|
|
shift 2
|
|
;;
|
|
--quick)
|
|
NUM_TASKS=3
|
|
echo "Quick mode: Running only 3 tasks per experiment"
|
|
shift
|
|
;;
|
|
--help)
|
|
echo "Usage: $0 [options]"
|
|
echo "Options:"
|
|
echo " --model MODEL Model to use (default: gpt-4o-mini)"
|
|
echo " --provider (Deprecated - auto-detected based on model)"
|
|
echo " --env ENV Environment to use (default: airline)"
|
|
echo " --num-tasks N Number of tasks per experiment (default: 10)"
|
|
echo " --quick Quick mode with 3 tasks per experiment"
|
|
echo " --help Show this help message"
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "Unknown option: $1"
|
|
echo "Use --help for usage information"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Run the main process
|
|
check_prerequisites
|
|
main
|