diff --git a/agentplatform/_genai/_evals_visualization.py b/agentplatform/_genai/_evals_visualization.py index c529b6f14e..80f6536e2d 100644 --- a/agentplatform/_genai/_evals_visualization.py +++ b/agentplatform/_genai/_evals_visualization.py @@ -1155,7 +1155,7 @@ def get_comparison_html(eval_result_json: str) -> str: winRateText = m.win_rates.map((rate, i) => `${{candidateNames ? candidateNames[i] : `Candidate #${{i+1}}`}} wins: ${{(rate * 100).toFixed(1)}}%`).join('
'); if (m.tie_rate !== undefined) {{ winRateText += `
Ties: ${{(m.tie_rate * 100).toFixed(1)}}%`; }} }} - table += `${{m.metric_name}}${{m.mean_score.toFixed(4)}}${{m.stdev_score.toFixed(4)}}${{winRateText}}`; + table += `${{m.metric_name}}${{m.mean_score != null ? m.mean_score.toFixed(4) : 'N/A'}}${{m.stdev_score != null ? m.stdev_score.toFixed(4) : 'N/A'}}${{winRateText}}`; }}); container.innerHTML = table + ''; }} diff --git a/tests/unit/agentplatform/genai/test_evals.py b/tests/unit/agentplatform/genai/test_evals.py index b10b594bed..6feb9aba93 100644 --- a/tests/unit/agentplatform/genai/test_evals.py +++ b/tests/unit/agentplatform/genai/test_evals.py @@ -822,6 +822,16 @@ def test_get_comparison_html(self): assert payload_b64 in html assert "DOMPurify" in html + def test_get_comparison_html_shows_na_for_missing_summary_scores(self): + from vertexai._genai import ( + _evals_visualization as vertexai_evals_visualization, + ) + + for viz in (_evals_visualization, vertexai_evals_visualization): + html = viz.get_comparison_html("{}") + assert "m.mean_score != null ? m.mean_score.toFixed(4) : 'N/A'" in html + assert "m.stdev_score != null ? m.stdev_score.toFixed(4) : 'N/A'" in html + def test_get_inference_html(self): """Tests that get_inference_html generates valid HTML with data.""" from agentplatform._genai import _evals_visualization diff --git a/vertexai/_genai/_evals_visualization.py b/vertexai/_genai/_evals_visualization.py index 45b50b6ebc..bedc57bb6c 100644 --- a/vertexai/_genai/_evals_visualization.py +++ b/vertexai/_genai/_evals_visualization.py @@ -1111,7 +1111,7 @@ def get_comparison_html(eval_result_json: str) -> str: winRateText = m.win_rates.map((rate, i) => `${{candidateNames ? candidateNames[i] : `Candidate #${{i+1}}`}} wins: ${{(rate * 100).toFixed(1)}}%`).join('
'); if (m.tie_rate !== undefined) {{ winRateText += `
Ties: ${{(m.tie_rate * 100).toFixed(1)}}%`; }} }} - table += `${{m.metric_name}}${{m.mean_score.toFixed(4)}}${{m.stdev_score.toFixed(4)}}${{winRateText}}`; + table += `${{m.metric_name}}${{m.mean_score != null ? m.mean_score.toFixed(4) : 'N/A'}}${{m.stdev_score != null ? m.stdev_score.toFixed(4) : 'N/A'}}${{winRateText}}`; }}); container.innerHTML = table + ''; }}