From db96e7000dd155f49dface047784d5effadf92a7 Mon Sep 17 00:00:00 2001 From: aaltshuler Date: Sun, 5 Jul 2026 14:50:35 +0300 Subject: [PATCH] perf(engine): normalize with the already-computed norm in embedding validation Greptile follow-up: the zero-norm guard computed the norm and then normalize_vector recomputed it (a wasted pass at 1536+ dims), with the inner zero guard unreachable by construction. Normalize in place with the validated norm; normalize_vector stays for its other caller (the mock provider). --- crates/omnigraph/src/embedding.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/crates/omnigraph/src/embedding.rs b/crates/omnigraph/src/embedding.rs index c7f5c62b..79f9af6d 100644 --- a/crates/omnigraph/src/embedding.rs +++ b/crates/omnigraph/src/embedding.rs @@ -579,7 +579,14 @@ fn validate_and_normalize_embedding( if norm <= f32::EPSILON { return Err("embedding has zero norm (no direction)".to_string()); } - Ok(normalize_vector(values)) + // Normalize in place with the norm just computed — `normalize_vector` + // would recompute it (and its zero guard is unreachable here, since a + // zero norm already returned Err above). + let mut values = values; + for value in &mut values { + *value /= norm; + } + Ok(values) } fn normalize_vector(mut values: Vec) -> Vec {