#!/bin/bash # live_benchmark_bundle.sh — run a live-ish retrieval benchmark and collect # one correlated artifact bundle: benchmark stdout/stderr, manifest, stage-trace # JSONL, xctrace trace, and exported profile XML. set -euo pipefail CORPUS_SIZE=200 QUERIES=50 TOPK=10 DATASET=synthetic BUILD_DIR="${YAMS_BUILD_DIR:-build/debug}" TRACE_TIME_LIMIT=300 FORCE_MOCK_EMBEDDINGS="${YAMS_BENCH_FORCE_MOCK_EMBEDDINGS:-0}" EMBED_MODEL="${YAMS_BENCH_EMBED_MODEL:-simeon-default}" STAMP="$(date +%Y%m%d_%H%M%S)" BUNDLE_DIR="/tmp/yams_benchmark_bundle_${STAMP}" while [[ $# -gt 0 ]]; do case "$1" in --corpus-size) CORPUS_SIZE="$2" shift 2 ;; --queries) QUERIES="$2" shift 2 ;; --topk) TOPK="$2" shift 2 ;; --dataset) DATASET="$2" shift 2 ;; --build-dir) BUILD_DIR="$2" shift 2 ;; --time-limit) TRACE_TIME_LIMIT="$2" shift 2 ;; --embed-model) EMBED_MODEL="$2" shift 2 ;; --mock-embeddings) FORCE_MOCK_EMBEDDINGS=1 shift ;; --real-embeddings) FORCE_MOCK_EMBEDDINGS=0 shift ;; --steady-state) CORPUS_SIZE=500 QUERIES=200 TRACE_TIME_LIMIT=600 shift ;; *) echo "Unknown arg: $1" exit 1 ;; esac done mkdir -p "$BUNDLE_DIR" BENCH_BIN="$BUILD_DIR/tests/benchmarks/retrieval_quality_bench" LOG_FILE="$BUNDLE_DIR/benchmark.log" JSONL_FILE="$BUNDLE_DIR/stage_trace.jsonl" TRACE_OUT="$BUNDLE_DIR/profile.trace" PROFILE_XML="$BUNDLE_DIR/profile.xml" MANIFEST_FILE="$BUNDLE_DIR/manifest.json" HOT_ZONES_FILE="$BUNDLE_DIR/hot_zones.txt" AUDIT_FILE="$BUNDLE_DIR/audit_findings.jsonl" emit_audit_finding() { local severity="$1" local category="$2" local title="$3" local evidence="$4" local impact="$5" local recommendation="$6" AUDIT_FILE_ENV="$AUDIT_FILE" \ FINDING_SEVERITY="$severity" \ FINDING_CATEGORY="$category" \ FINDING_TITLE="$title" \ FINDING_EVIDENCE="$evidence" \ FINDING_IMPACT="$impact" \ FINDING_RECOMMENDATION="$recommendation" \ python3 - <<'PYEOF' import json import os from datetime import datetime, timezone finding = { "event": "audit_finding", "runner": "live_benchmark_bundle", "timestamp": datetime.now(timezone.utc).isoformat(), "severity": os.environ["FINDING_SEVERITY"], "category": os.environ["FINDING_CATEGORY"], "title": os.environ["FINDING_TITLE"], "evidence": os.environ["FINDING_EVIDENCE"], "impact": os.environ["FINDING_IMPACT"], "recommendation": os.environ["FINDING_RECOMMENDATION"], } with open(os.environ["AUDIT_FILE_ENV"], "a", encoding="utf-8") as f: f.write(json.dumps(finding, sort_keys=True) + "\n") PYEOF } if [[ ! -f "$BENCH_BIN" ]]; then meson compile -C "$BUILD_DIR" retrieval_quality_bench fi export YAMS_BENCH_CORPUS_SIZE="$CORPUS_SIZE" export YAMS_BENCH_NUM_QUERIES="$QUERIES" export YAMS_BENCH_TOPK="$TOPK" export YAMS_BENCH_DATASET="$DATASET" export YAMS_TEST_SAFE_SINGLE_INSTANCE=1 export YAMS_SEARCH_STAGE_TRACE=1 export YAMS_BENCH_DEBUG_FILE="$JSONL_FILE" export YAMS_BENCH_FORCE_MOCK_EMBEDDINGS="$FORCE_MOCK_EMBEDDINGS" export YAMS_BENCH_EMBED_MODEL="$EMBED_MODEL" if [[ "$FORCE_MOCK_EMBEDDINGS" != "1" && "$EMBED_MODEL" == "simeon-default" ]]; then export YAMS_EMBED_BACKEND=simeon fi RUNNER_NAME="live_benchmark_bundle" \ BENCH_BIN="$BENCH_BIN" \ BUILD_DIR="$BUILD_DIR" \ YAMS_BENCH_DATASET="$YAMS_BENCH_DATASET" \ YAMS_BENCH_CORPUS_SIZE="$YAMS_BENCH_CORPUS_SIZE" \ YAMS_BENCH_NUM_QUERIES="$YAMS_BENCH_NUM_QUERIES" \ YAMS_BENCH_TOPK="$YAMS_BENCH_TOPK" \ YAMS_BENCH_FORCE_MOCK_EMBEDDINGS="$YAMS_BENCH_FORCE_MOCK_EMBEDDINGS" \ YAMS_SEARCH_STAGE_TRACE="$YAMS_SEARCH_STAGE_TRACE" \ ./tests/benchmarks/scripts/benchmark_mode_manifest.sh "$MANIFEST_FILE" >/dev/null echo "=== YAMS Live Benchmark Bundle ===" echo " Bundle dir: $BUNDLE_DIR" echo " Benchmark: $BENCH_BIN" echo " Dataset: $DATASET" echo " Corpus: $CORPUS_SIZE" echo " Queries: $QUERIES" echo " Embeddings: $([[ "$FORCE_MOCK_EMBEDDINGS" == "1" ]] && echo mock || echo live)" echo " Embed model: $EMBED_MODEL" echo "Recording xctrace + benchmark log..." set +e xcrun xctrace record \ --template "Time Profiler" \ --time-limit "${TRACE_TIME_LIMIT}s" \ --output "$TRACE_OUT" \ --no-prompt \ --launch -- "$BENCH_BIN" --benchmark_filter=BM_RetrievalQuality \ 2>&1 | tee "$LOG_FILE" status=${PIPESTATUS[0]} set -e profile_capture_failed=0 if [[ $status -ne 0 ]] || grep -Eq "_lockKPerf|Failed to start the recording|Recording failed with errors" "$LOG_FILE"; then profile_capture_failed=1 emit_audit_finding \ "warning" \ "profile_capture" \ "xctrace profile capture failed or was incomplete" \ "xctrace_status=$status; see benchmark.log for _lockKPerf/recording errors" \ "Hot-zone rankings from this bundle may be empty or misleading; benchmark correctness should be judged from direct benchmark output and stage_trace.jsonl." \ "Rerun when no other xctrace/kperf session is active; the harness will run a no-profiler fallback to preserve correctness artifacts." fi bench_status=$status if [[ $profile_capture_failed -eq 1 ]]; then echo "xctrace failed; running benchmark directly to preserve correctness/stage artifacts..." | tee -a "$LOG_FILE" set +e "$BENCH_BIN" --benchmark_filter=BM_RetrievalQuality 2>&1 | tee -a "$LOG_FILE" bench_status=${PIPESTATUS[0]} set -e fi if [[ ! -s "$JSONL_FILE" ]]; then cat >"$JSONL_FILE" <