From Tool State to Scientific Action: Auditing Decision Provenance in Biomedical Research Agents
Organizations: INTOSYN AI Labs · Columbia University · Microsoft
Abstract
A scientific agent can give the same verdict while reading and citing different evidence. BioAgent-DF tests this separation using paired reference and candidate values saved at the same scientific computation site. It restores or transplants those values at their original coordinates, then runs the agent on healthy hardware. Across eight SciFact batches, Qwen3.5-4B shows repeatable citation changes in three capture-claim combinations, and Gemma 3 4B IT shows repeatable read and citation changes in four. These seven combinations cover two claims. Full restoration recovers the reference evidence sets while verdicts remain unchanged. Verdict changes observed under the baseline prompt did not recur under the explicit-example prompt. Complementary tool and optimizer experiments distinguish recovery of numerical state, recovery of ranked lists, and restoration of an agent's visible history. These results show that an audit should track both the evidence an agent uses and its final answer. In hERG cardiac-safety assay allocation, silent numerical faults changed testing decisions while the fixed-budget shortlist kept the same number of compounds labeled as blockers. After the agent had used faulty values, restoring its earlier execution state and supplying certified scores recovered all 39 changed decisions, whereas replacing the prediction file recovered none; no incorrect action was committed. A streaming implementation of the arithmetic checks reduced the total time for forward execution and verification by 42.4% relative to the original FP64 implementation, with identical flags and recovery outputs.
Figures & tables
| Prompt / model / query batch | Joint groups / scheduled | Read | Cite | Verdict |
|---|---|---|---|---|
| Baseline / Qwen / 8 | 30/30 | 0 / 0 | 0 / 0 | 1 / 0 |
| Baseline / Qwen / 300 | 51/51 | 12 / 0 | 2 / 0 | 2 / 0 |
| Baseline / Gemma / 8 | 3/30 | 0 / 0 | 0 / 0 | 0 / 0 |
| Baseline / Gemma / 300 | 33/51 | 2 / 0 | 8 / 0 | 6 / 0 |
| Explicit examples / Qwen / 8 | 30/30 | 0 / 0 | 0 / 0 | 0 / 0 |
| Explicit examples / Qwen / 300 | 48/51 | 0 / 0 | 9 / 0 | 0 / 0 |
| Endpoint | Candidate versus H1 | H2 versus H1 |
|---|---|---|
| Read membership | 3/382 | 4/382 |
| Cited sentences | 5/382 | 8/382 |
| Verdict | 2/382 | 2/382 |
| Tool and endpoint | After rounding | Healthy repeats / controls |
|---|---|---|
| PBMC: actions or marker selection | 9/30 | Repeat and zero: 0/30 each |
| NCI: final molecule membership | 11/61; 13/62 | Repeats: 0/61; 1/62 |
| ESOL: sampled membership | 12/24 each | Repeat and zero: no change |
Appendix figures & tables34 assets
Supplementary material from the paper’s appendix.
Appendix
| Task and data | Size / split | Computation and measured scope |
|---|---|---|
| RDKit FreeWilson CHEMBL2321810 activity example | 1,017; 719/140/158 | 2,048-bit Morgan fingerprints; 2048 512 256 1 MLP; full-candidate Top-10. Top-20 protocols: Appendices C–D. |
| Continuation of the compound checkpoint | 1,017; 719/140/158 | 64 AdamW updates; parameters, moments, predictions, and ranking. |
| RDKit NCI molecular neighbors | 4,999 raw; 4,991 valid; 1,536 queries | Tanimoto similarity, self-match exclusion, fixed Top-10. |
| WDBC morphology features | 569 30; 401/83/85 | 30 512 256 2 feature classifier. |
| scikit-learn optical digits | 1,797 64; 1271/247/279 | 256-dimensional cached features and a healthy classification head. |
| Processed PBMC | 2,638 1,838 | Normalized-dot-product Top-10; five-neighbor voting with computational annotations. |
| Priority | AUC, linear budget axis | First tested budget recovering both lists |
|---|---|---|
| Single-block decision sensitivity | 0.992 | 2 |
| Co-occurrence | 0.992 | 2 |
| Healthy boundary margin | 0.982 | 4 |
| Current output displacement | 0.858 | 32 |
| Hidden difference energy | 0.622 | 64 |
| Mean of 128 preset random orders | 0.498 | All orders recover at 127 |
| Capture | Different scores | Changed-membership queries | Changed-order queries | First successful budget | Remaining score differences |
|---|---|---|---|---|---|
| 00 | 591 | 2 | 2 | 8/38 blocks | 464 |
| 01 | 585 | 0 | 0 | No changed list to recover | — |
| 02 | 588 | 2 | 2 | 8/38 blocks | 462 |
| 03 | 588 | 2 | 3 | 8/38 blocks | 460 |
| 04 | 591 | 1 | 1 | 8/38 blocks | 463 |
| Treatment | L2 | Changed | Loss/63 | O | RMSE |
|---|---|---|---|---|---|
| Single GPU; divisor 2 | |||||
| SINGLE0 | 164,218 | 9 | 0 | ||
| SINGLE | 281,177 | 41 | 0 | ||
| PAIR | 280,581 | 41 | 0 | ||
| MATCH_C | 280,581 | 41 | 0 | ||
| Initial collective; N=2 | |||||
| Series / endpoint | Capture-balanced estimate | Capture-bootstrap interval | Crossed-bootstrap interval |
|---|---|---|---|
| Initial, unselected / actions | 1.626 | [ 3.871, 8.750] | [ 6.818, 12.121] |
| Initial, unselected / read membership | 0.667 | [ 2.000, 0.000] | [ 7.194, 4.511] |
| Initial, unselected / citations | 0.793 | [ 3.871, 6.250] | [ 7.194, 9.783] |
| Initial, unselected / verdict | 0.000 | [0, 0] | [0, 0] |
| Sustained / actions | 0.376 | [ 3.455, 2.609] | [ 5.159, 3.975] |
| Sustained / read membership | 0.189 | [ 0.566, 0.000] | [ 1.551, 1.181] |
| Task | Units | Executions | H/H action changes | Zero-treatment action changes | BF16 action changes | BF16 final-membership changes |
|---|---|---|---|---|---|---|
| NCI, four rounds of descriptor feedback | 64 | 256 | 0 | 0 | 10 | 3 |
| WDBC, five active-sampling batches | 24 | 96 | 0 | 0 | 0 | 0 |
| Capture | Globally different scores | Globally replaced different scores | Different scores in claim-831 row | Within-row replacement | Remaining row differences |
|---|---|---|---|---|---|
| 00 | 591 | 127 | 16 | 16/16 | 0 |
| 01 | 585 | 127 | 16 | 16/16 | 0 |
| 02 | 588 | 126 | 14 | 14/14 | 0 |
| 03 | 588 | 128 | 16 | 16/16 | 0 |
| 04 | 591 | 128 | 16 | 16/16 | 0 |
| GPU class | Query batch | Numerically changed captures | Different scores per capture | Captures with changed Top-10 membership |
|---|---|---|---|---|
| Case 1: size-dependent | 8 | 8/8 | 54–88 | 0/8 |
| Case 1: size-dependent | 300 | 7/8 | 0–24 | 0/8 |
| Case 2: expanded-trigger | 8 | 8/8 | 588–592 | 7/8 |
| Case 2: expanded-trigger | 300 | 8/8 | 328–471 | 8/8 |
| Model | Complete pairs | Different read sets | Different citations | Different verdicts | Different structured actions |
|---|---|---|---|---|---|
| Qwen | 39 | 0 | 1 | 1 | 2 |
| Gemma | 18 | 2 | 1 | 0 | 3 |
| Model / prompt | Mechanism | Masking | Unselected controls |
|---|---|---|---|
| Qwen / baseline | 567/567 | 243/243 | 576/576 |
| Qwen / explicit examples | 553/567 | 243/243 | 576/576 |
| Gemma / baseline | 269/567 | 243/243 | 288/576 |
| Gemma / explicit examples | 494/567 | 29/243 | 555/576 |
| Claim | Capture–claim combinations | H1 document / sentence | C document / sentence | Both verdicts |
|---|---|---|---|---|
| 343 | 1 | 7873737 / 0 | 19308127 / 4 | SUPPORT, label-correct |
| 431 | 3 | 19922508 / 3 | 22696649 / 1 | SUPPORT, label-correct |
| 729 | 1 | 9154703 / 2 | 52944377 / 7 | SUPPORT, label-correct |
| Model | Completed / attempted episodes | Budget exhausted | Joint core groups / scheduled | Read C–H1 | Cite C–H1 | Verdict C–H1 |
|---|---|---|---|---|---|---|
| Qwen | 1472/1512 | 40 | 208/216 | 1 | 25 | 0 |
| Gemma | 1154/1512 | 358 | 152/216 | 32 | 35 | 0 |
| Model / endpoint | Eligible combinations / claims | , combinations weighted equally | , claims weighted equally | |||
|---|---|---|---|---|---|---|
| Qwen / read membership | 26 / 10 | 0.481% | 0.000% | 0.962% | 0.000 | 0.000 |
| Qwen / cited sentences | 26 / 10 | 12.019% | 0.000% | 0.962% | 11.538 | 10.000 |
| Gemma / read membership | 20 / 10 | 20.000% | 0.000% | 0.000% | 20.000 | 20.000 |
| Gemma / cited sentences | 20 / 10 | 21.875% | 0.000% | 3.393% | 20.179 | 20.119 |
| Setting | Value |
|---|---|
| Ensemble | Three Chemprop D-MPNN members; hidden size 300; message-passing depth 3; mean aggregation; two-layer feed-forward classifier; batch normalization off |
| Batching | 128 compounds per batch, the last holding 89; seven linear calls per member per batch; 336 linear observations per pass |
| Calibration temperature | 1.0546289419746864 |
| Triage threshold | 0.30475174995423615; assign to patch-clamp testing if the calibrated probability is at least this value |
| Selection | 402 of 2,009 compounds; exact ties ordered by compound identifier |
| Margin threshold | 0.009354012791251587, twice the largest absolute calibrated R1 residual in the retrospective series (0.0046770063956257935) |
| BF16 condition | Sources | Changed ensemble means per source | Changed Top-402 sets | Changed triage vectors | Labeled blockers in Top-402 |
|---|---|---|---|---|---|
| Healthy reference | 8 | 0 | 0/8 | 0/8 | 351/402 |
| Case 1 | 8 | 18–61 | 0/8 | 1/8 | 351/402 |
| Case 2 | 8 | 287–313 | 6/8 | 6/8 | 351/402 |
| Case 2 block | Left the list | Entered the list |
|---|---|---|
| 1 | K5612 (397; 0.798067 0.786460) | K5629 (406; 0.792903 0.795484) |
| 2 | K5612 (397; 0.798067 0.791613) | K12096 (403; 0.794193, unchanged) |
| 3 | K8400 (402; 0.795484 0.790324) | K12096 (403; unchanged) |
| 4, 5 | none | none |
| 6 | K5612 ( 0.786460); K8400 ( 0.791613) | K12096 (403), K2422 (404); both unchanged |
| 7 | K5612 ( 0.782601); K8400 ( 0.792903); K8429 (211; 0.879586 0.584045) | K12096, K2422 (unchanged); K5629 ( 0.798067) |
| Source | Compound | Label | Healthy probability (signed margin) | Source probability | Change | Restored by |
|---|---|---|---|---|---|---|
| Case 2, block 1 | K4780 | 0 | 0.283293 ( ) | 0.321968 | assay added | R1 |
| Case 2, block 3 | K12252 | 1 | 0.313189 ( ) | 0.298736 | assay removed | R1 |
| Case 2, block 3 | K13388 | 0 | 0.305025 ( ) | 0.303768 | assay removed | R1 |
| Case 2, block 3 | K13418 | 0 | 0.304710 ( ) | 0.305339 | assay added | R1+M |
| Case 2, block 5 | K4780 | 0 | 0.283293 ( ) | 0.335736 | assay added | R1 |
| Case 2, block 6 | K13388 | 0 | 0.305025 ( ) | 0.304710 | assay removed | R1 |
| Case 2 block, task | Tables listing affected compounds | Reports naming affected compounds |
|---|---|---|
| 1, selection | 2/3 | 0/3 |
| 2, selection | 2/3 | 3/3 |
| 3, selection | 2/3 | 3/3 |
| 6, selection | 3/3 | 1/3 |
| 7, selection | 2/3 | 3/3 |
| 8, selection | 2/3 | 1/3 |
| Source | First R / T prefix | Number of strict bidirectional partial prefixes |
|---|---|---|
| K5612, block 1 | 64 / 27 | 227 |
| K5612, block 2 | 254 / 24 | 312 |
| K7714, triage task | 11 / 547 | 281 |
| Context | BF16 forward | BF16 forward with verification | Two BF16 passes and comparison |
|---|---|---|---|
| Confirmation on the same host (RTX) | 0.4883 s | 0.8956 s | 0.9761 s |
| Margin experiment (RTX) | 0.50383 s | 1.18486 s | 1.00587 s |
| Data-center GPU, original FP64 checks | 0.4673 s | 1.0204 s | 0.8816 s |
| Data-center GPU, streaming FP64 checks | 0.4673 s | 0.5877 s | 0.8816 s |
| Strategy | Compounds | Predictions | Selection | Triage | Residuals |
|---|---|---|---|---|---|
| R1 only | 0 | 0 | 16/16 | 15/16 | 0/1 |
| R1+M | 68 | 204 | 16/16 | 16/16 | 1/1 |
| Random, each of 20 fixed seeds | 68 | 204 | 16/16 | 15/16 for every seed | 0/1 for every seed |
| Ordered by ensemble disagreement | 68 | 204 | 16/16 | 15/16 | 0/1 |
| Input condition | Task | Trajectories | Agreement with own input rule | Agreement with reference decision |
|---|---|---|---|---|
| R1+M, 16 sources | Selection | 48 | 48/48 | 48/48 |
| R1+M, 16 sources | Triage | 48 | 48/48 | 48/48 |
| Case 1 block 4, original input | Selection | 3 | 3/3 | 3/3 |
| Case 1 block 4, original input | Triage | 3 | 3/3 | 0/3 |
| Case 1 block 4, R1 input | Selection | 3 | 3/3 | 3/3 |
| Case 1 block 4, R1 input | Triage | 3 | 3/3 | 3/3 |
| Outcome | Before reading | File replacement | State restoration |
|---|---|---|---|
| Case 1 | 48/48 | 45/48 | 48/48 |
| Case 2 | 48/48 | 12/48 | 48/48 |
| Healthy controls | 6/6 | 6/6 | 6/6 |
| Changed decisions recovered | 39/39 | 0/39 | 39/39 |
| Actions committed | 102 | 6 | 102 |
| Actions rejected, decision deviating | 0 | 39 | 0 |
| Item | Value |
|---|---|
| Saved state, original checks with trusted recomputation | 8.091 / 8.117 s |
| Saved state, streaming checks with trusted recomputation | 2.731 / 2.783 s |
| Saved state, direct trusted recomputation | 0.455 / 0.453 s |
| Saved state, double execution | 0.870 / 0.863 s |
| Verified forward plus full trusted recomputation (original / streaming checks) | 1.4339 / 1.0021 s |
| Tokens, 96 requests with faulty inputs: analysis after recovery before reading / initial analysis of the faulty predictions | 4,264,281 / 4,224,138 |
| Setting | Value |
|---|---|
| ESOL endpoint | Aqueous solubility; supported if logS is at least |
| CITE-seq endpoints | Normalized antibody-derived tag readouts; CD3 threshold 5.937278695830723; CD14 threshold 3.539439707328391 |
| Predictor | Saved input representations, cosine similarities to landmark samples and fitted ensembles of four ridge predictors, retained across numerical conditions |
| Shortlist | 24 candidates nearest the threshold; ties broken by identifier; displayed in identifier order with predicted mean, predictor dispersion and threshold comparison |
| Queries | Two objects measured in sequence; public measurements revealed only when queried |
| 27B agent | Qwen3.8-27B served locally; serial client requests; temperature zero; seed zero; thinking disabled; output limit 384 tokens |
| Domain | Changed | Wilson 95% | Bootstrap 95% | Order | Hit count |
|---|---|---|---|---|---|
| ESOL | 7/48 | 7.25–27.17 | 6.25–25.00 | 8 | 3 |
| CD3 | 18/48 | 25.22–51.64 | 25.00–52.08 | 18 | 3 |
| CD14 | 13/48 | 16.57–41.00 | 14.58–39.58 | 14 | 5 |
| List / values | Trajectories | Match reference | Match candidate | Report errors |
|---|---|---|---|---|
| Reference / reference | 160 | 160 | 8 | 0 |
| Reference / candidate | 160 | 84 | 28 | 0 |
| Candidate / reference | 160 | 32 | 84 | 0 |
| Candidate / candidate | 160 | 8 | 156 | 0 |
| Block | Cell | Reference prediction | Case 2 prediction | Measurement | Effect |
|---|---|---|---|---|---|
| 1 | E2L8_AGCGATTGTGGAAGTC | 5.905539 | 5.958529 | 5.294847 | new false positive |
| 1 | E2L8_AGGACTTGTGGAATGC | 6.067270 | 5.834704 | 5.769720 | false positive corrected |
| 2 | E2L8_CTCAACCGTCTCCTGT | 5.918845 | 6.041544 | 5.965956 | false negative corrected |
| 2 | E2L8_GACTATGTCGAGAGCA | 5.910636 | 6.008034 | 5.628356 | new false positive |
AI Agent Auditing
AI agent auditing examines agents’ actions, tool use, evidence, and outcomes to assess safety, compliance, reliability, and accountability.
See all 291 papers