From 8d4b0648ca85d578615469fd025ef5cde0499b86 Mon Sep 17 00:00:00 2001 From: Alex Ward Date: Wed, 15 Apr 2026 20:30:54 +0100 Subject: [PATCH] show score output in pytest report Co-Authored-By: Claude --- src/pyeval/plugin.py | 20 ++++++++++++++------ tests/evals/eval_example.py | 1 + 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/pyeval/plugin.py b/src/pyeval/plugin.py index a0cca95..34c10c1 100644 --- a/src/pyeval/plugin.py +++ b/src/pyeval/plugin.py @@ -1,5 +1,6 @@ from __future__ import annotations +import itertools import time import traceback from collections.abc import Callable @@ -223,13 +224,20 @@ def runtest(self): evaluator_failures=evaluator_failures, ) - bool_results = list(assertions.values()) - score = ( - sum(1 for r in bool_results if r.value is True) / len(bool_results) - if bool_results - else 1.0 + all_values = [ + min(1.0, max(0.0, float(r.value))) + for r in itertools.chain(assertions.values(), scores.values()) + ] + score = sum(all_values) / len(all_values) if all_values else 1.0 + + bool_icons = "".join( + "✔" if r.value is True else "✗" for r in assertions.values() + ) + score_icons = "".join( + _score_symbol(min(1.0, max(0.0, float(result.value))))[0] + for result in scores.values() ) - icons = "".join("✔" if r.value is True else "✗" for r in bool_results) + icons = bool_icons + score_icons self.user_properties.append(("eval_status", (*_score_symbol(score), icons))) def reportinfo(self): diff --git a/tests/evals/eval_example.py b/tests/evals/eval_example.py index d744e93..1dac0ba 100644 --- a/tests/evals/eval_example.py +++ b/tests/evals/eval_example.py @@ -71,6 +71,7 @@ def to_title_case(text: str) -> str: result.evaluate(EqualsExpected()) result.evaluate(Contains(value="H", evaluation_name="has_capitals")) result.evaluate(MaxDuration(seconds=0.001)) + result.evaluate(CustomEvaluator()) @dataset(