Files
2026-07-13 12:59:42 +08:00

86 lines
2.5 KiB
Bash
Executable File

#!/usr/bin/env bash
# Benchmark script for opendataloader-pdf
#
# Clones opendataloader-bench and runs benchmark against locally built JAR.
#
# Usage:
# ./scripts/bench.sh # Run full benchmark
# ./scripts/bench.sh --doc-id 01030... # Run for specific document
# ./scripts/bench.sh --check-regression # Run with regression check (CI)
# ./scripts/bench.sh --skip-build # Skip Java build step
#
# Environment:
# BENCH_DIR Override bench repo clone location (default: /tmp/opendataloader-bench)
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
BENCH_REPO="https://github.com/opendataloader-project/opendataloader-bench.git"
BENCH_DIR="${BENCH_DIR:-/tmp/opendataloader-bench}"
# Parse --skip-build flag (pass everything else through)
SKIP_BUILD=false
ARGS=()
for arg in "$@"; do
if [[ "$arg" == "--skip-build" ]]; then
SKIP_BUILD=true
else
ARGS+=("$arg")
fi
done
# Find CLI JAR (shaded first, then regular, excluding sources/javadoc/original)
find_jar() {
local target_dir="$PROJECT_ROOT/java/opendataloader-pdf-cli/target"
local jar
jar=$(find "$target_dir" -name "opendataloader-pdf-cli-*-shaded.jar" 2>/dev/null | head -1)
if [[ -z "$jar" ]]; then
jar=$(find "$target_dir" -name "opendataloader-pdf-cli-*.jar" \
! -name "*-sources.jar" ! -name "*-javadoc.jar" ! -name "original-*" \
2>/dev/null | head -1)
fi
echo "$jar"
}
# Step 1: Build Java if needed
if [[ "$SKIP_BUILD" == "false" ]]; then
JAR_PATH=$(find_jar)
if [[ -z "$JAR_PATH" ]]; then
echo "Building Java..."
"$SCRIPT_DIR/build-java.sh"
else
echo "Using existing JAR: $JAR_PATH"
fi
fi
# Step 2: Clone or update bench repo
if [[ -d "$BENCH_DIR/.git" ]]; then
echo "Updating bench repo..."
git -C "$BENCH_DIR" pull --ff-only --quiet 2>/dev/null || true
else
echo "Cloning bench repo..."
git clone --depth 1 "$BENCH_REPO" "$BENCH_DIR"
fi
# Step 3: Find JAR path
JAR_PATH=$(find_jar)
if [[ -z "$JAR_PATH" ]]; then
echo "Error: No JAR found. Run ./scripts/build-java.sh first."
exit 1
fi
# Step 4: Run benchmark with JAR
echo "Running benchmark with JAR: $JAR_PATH"
cd "$BENCH_DIR"
if ! command -v uv &> /dev/null; then
echo "Error: uv is not installed."
exit 1
fi
uv sync --quiet
OPENDATALOADER_JAR="$JAR_PATH" uv run python src/run.py \
--engine opendataloader \
"${ARGS[@]}"