From 5ea77da97da026c216928264f6a354ed3ff179b0 Mon Sep 17 00:00:00 2001 From: pyr0ball Date: Thu, 7 May 2026 08:59:24 -0700 Subject: [PATCH] fix: add _cosine dimension guard, fix return type annotation, add zero-vector test --- app/eval/embed_bench.py | 6 +++++- tests/test_embed_bench.py | 5 +++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/app/eval/embed_bench.py b/app/eval/embed_bench.py index 7ca4ccb..0e32b5f 100644 --- a/app/eval/embed_bench.py +++ b/app/eval/embed_bench.py @@ -45,7 +45,7 @@ def _config_file() -> Path: return _ROOT / "config" / "label_tool.yaml" -def _load_config() -> dict: +def _load_config() -> dict[str, Any]: f = _config_file() if not f.exists(): return {} @@ -73,6 +73,10 @@ def _ratings_path() -> Path: def _cosine(a: list[float], b: list[float]) -> float: + if len(a) != len(b): + raise ValueError( + f"Embedding dimension mismatch: {len(a)} vs {len(b)}" + ) dot = sum(x * y for x, y in zip(a, b)) mag_a = math.sqrt(sum(x * x for x in a)) mag_b = math.sqrt(sum(x * x for x in b)) diff --git a/tests/test_embed_bench.py b/tests/test_embed_bench.py index 38601e7..bd3b77e 100644 --- a/tests/test_embed_bench.py +++ b/tests/test_embed_bench.py @@ -48,3 +48,8 @@ def test_cosine_orthogonal(): def test_cosine_opposite(): from app.eval.embed_bench import _cosine assert _cosine([1.0, 0.0], [-1.0, 0.0]) == pytest.approx(-1.0) + + +def test_cosine_zero_vector_returns_zero(): + from app.eval.embed_bench import _cosine + assert _cosine([0.0, 0.0], [1.0, 0.0]) == pytest.approx(0.0)