fix: deterministic fusion tie-order + seeded random eval sampling

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-18 19:40:08 +02:00
parent 16fd91fa68
commit 752558629f
4 changed files with 68 additions and 4 deletions
+10 -2
View File
@@ -37,12 +37,20 @@ enum Cmd {
fn run_eval(p: &Pipeline, m: Mode, cases: usize, seed: u64) -> (f64, f64) {
use alpha_id::eval::{inject_errors, recall_at_k};
let billable: Vec<_> = p.entries.iter().enumerate()
use rand::SeedableRng;
use rand::seq::SliceRandom;
let all_billable: Vec<_> = p.entries.iter().enumerate()
.filter(|(_, e)| e.valid)
.filter(|(_, e)| alpha_id::corpus::primary_code(e)
.and_then(|c| p.meta.get(c))
.map(|mt| mt.para295 == "P").unwrap_or(false))
.take(cases).collect();
.collect();
let mut rng = rand::rngs::StdRng::seed_from_u64(seed);
let n = cases.min(all_billable.len());
let billable: Vec<_> = all_billable
.choose_multiple(&mut rng, n)
.cloned()
.collect();
let mut sum = 0.0;
for (k, (_, e)) in billable.iter().enumerate() {
let code = alpha_id::corpus::primary_code(e).unwrap().to_string();