PlantGeneBench
PlantGeneBench is an offline benchmark harness for bbav5 gene-family agent planning. It evaluates whether an agent can map plant gene-family analysis requests to valid stages, dependencies, parameters, and safety boundaries.
The frontend should be used for review and spot checks. The primary benchmark path is batch execution:
python benchmarks/plantgenebench/scripts/run_benchmark.py \
--provider rule \
--tasks benchmarks/plantgenebench/tasks/plantgenebench_core_seed.jsonl \
--gold benchmarks/plantgenebench/gold/plantgenebench_core_seed.gold.jsonl \
--out benchmarks/plantgenebench/results/raw/rule_seed.jsonl
python benchmarks/plantgenebench/scripts/score.py \
--predictions benchmarks/plantgenebench/results/raw/rule_seed.jsonl \
--gold benchmarks/plantgenebench/gold/plantgenebench_core_seed.gold.jsonl \
--out benchmarks/plantgenebench/results/scored/rule_seed.scored.jsonl
python benchmarks/plantgenebench/scripts/summarize.py \
--scored benchmarks/plantgenebench/results/scored/rule_seed.scored.jsonl \
--out-prefix benchmarks/plantgenebench/results/summary/rule_seed
To evaluate the live bbav5 planning endpoint:
python benchmarks/plantgenebench/scripts/run_benchmark.py \
--provider api \
--api-base http://127.0.0.1:7880 \
--tasks benchmarks/plantgenebench/tasks/plantgenebench_core_seed.jsonl \
--gold benchmarks/plantgenebench/gold/plantgenebench_core_seed.gold.jsonl \
--out benchmarks/plantgenebench/results/raw/live_seed.jsonl
The API provider sends intent.benchmarkMode=true. Current bbav5 code uses
that explicit flag to skip file-level PreFlight validation and evaluate
planning only. Restart the web service after updating the code; an old process
will still reject empty benchmark jobs for missing input files.
File Layout
tasks/*.jsonl: benchmark inputs, one task per line.gold/*.gold.jsonl: structured gold answers keyed bytask_id.scripts/run_benchmark.py: batch inference runner.scripts/score.py: deterministic scorer.scripts/summarize.py: CSV and Markdown summary generator.prompts/llm_judge.md: optional rubric for free-text fields only.
Scoring Policy
Use deterministic scoring wherever possible:
- stage set F1
- forbidden-stage violations
- dependency checks
- required parameter matching
- analysis type matching
Use LLM-as-judge only for fields that cannot be reduced to exact structure, such as biological rationale or literature evidence extraction. Those fields should be reported separately from deterministic scores.
Full 100-Task Evaluation
The full PlantGeneBench-100 workflow evaluates five layers:
- task understanding
- execution planning
- evidence constraint
- biological interpretation
- boundary control
Convert the curated Markdown question set into executable task and gold JSONL:
/home/xia-lab/miniconda3/envs/test4py311/bin/python \
benchmarks/plantgenebench/scripts/convert_pgb100_full.py \
--md 项目记录/2026-06-08_PlantGeneBench_100题正文题库_v1.md \
--tasks-out benchmarks/plantgenebench/tasks/plantgenebench_100_v1.full.jsonl \
--gold-out benchmarks/plantgenebench/gold/plantgenebench_100_v1.full.gold.jsonl
Run the publication-oriented providers. deepseek_text and deepseek_json reuse the DeepSeek API configuration from ~/gene-family-mas-v2/.env.v15_deepseek without copying the key into this repository.
mkdir -p benchmarks/plantgenebench/results/full
for provider in rule full_system no_evidence deepseek_text deepseek_json; do
/home/xia-lab/miniconda3/envs/test4py311/bin/python \
benchmarks/plantgenebench/scripts/run_full_benchmark.py \
--tasks benchmarks/plantgenebench/tasks/plantgenebench_100_v1.full.jsonl \
--provider "$provider" \
--api-base http://127.0.0.1:7880 \
--deepseek-env /home/xia-lab/gene-family-mas-v2/.env.v15_deepseek \
--out "benchmarks/plantgenebench/results/full/plantgenebench_100_v1.${provider}.predictions.jsonl" \
--timeout 120
done
deepseek_text is a free-text LLM baseline and must be manually adjudicated. deepseek_json is the structured LLM baseline scored against the same planning fields as the system. The legacy llm_only provider remains available only as an offline surrogate for engineering smoke tests; do not use it for publication comparisons.
Score each provider and create a manual-review queue:
for provider in rule full_system no_evidence deepseek_text deepseek_json; do
/home/xia-lab/miniconda3/envs/test4py311/bin/python \
benchmarks/plantgenebench/scripts/score_full.py \
--predictions "benchmarks/plantgenebench/results/full/plantgenebench_100_v1.${provider}.predictions.jsonl" \
--gold benchmarks/plantgenebench/gold/plantgenebench_100_v1.full.gold.jsonl \
--out "benchmarks/plantgenebench/results/full/plantgenebench_100_v1.${provider}.scored.jsonl" \
--manual-review-out "benchmarks/plantgenebench/results/full/plantgenebench_100_v1.${provider}.manual_review.tsv"
done
Summarize the benchmark:
/home/xia-lab/miniconda3/envs/test4py311/bin/python \
benchmarks/plantgenebench/scripts/summarize_full.py \
--scored \
benchmarks/plantgenebench/results/full/plantgenebench_100_v1.rule.scored.jsonl \
benchmarks/plantgenebench/results/full/plantgenebench_100_v1.full_system.scored.jsonl \
benchmarks/plantgenebench/results/full/plantgenebench_100_v1.no_evidence.scored.jsonl \
benchmarks/plantgenebench/results/full/plantgenebench_100_v1.deepseek_text.scored.jsonl \
benchmarks/plantgenebench/results/full/plantgenebench_100_v1.deepseek_json.scored.jsonl \
--out-prefix benchmarks/plantgenebench/results/full/plantgenebench_100_v1
Main outputs:
results/full/*.predictions.jsonl: raw provider responses normalized by task.results/full/*.scored.jsonl: machine-scored rows with component scores.results/full/*.manual_review.tsv: rows that need expert review before publication.results/full/plantgenebench_100_v1.final_report.md: aggregate provider, layer, backend-status, and error summaries.
Publication caveats:
deepseek_textanddeepseek_jsonare the publication-oriented real DeepSeek baselines. The legacyllm_onlyprovider is only an offline surrogate and should not be included in publication tables.- Machine scores are suitable for engineering triage. Evidence faithfulness, biological reasoning, DeepSeek free-text answers, and boundary-control cases must be manually adjudicated from
*.manual_review.tsvbefore reporting publication-grade final numbers. - The Markdown-to-JSONL conversion is deterministic but heuristic. If the question text changes, re-check the generated gold fields before using the benchmark in a manuscript.