diff --git a/agentplatform/_genai/_evals_metric_handlers.py b/agentplatform/_genai/_evals_metric_handlers.py index f8fafb4b53..77f5db46e4 100644 --- a/agentplatform/_genai/_evals_metric_handlers.py +++ b/agentplatform/_genai/_evals_metric_handlers.py @@ -686,6 +686,12 @@ def _build_evaluation_instance( other_data_map["context"] = types.evals.InstanceData(text=eval_case.context) elif isinstance(eval_case.context, genai_types.Content): other_data_map["context"] = _content_to_instance_data(eval_case.context) + else: + other_data_map["context"] = types.evals.InstanceData( + contents=types.evals.InstanceDataContents( + contents=_value_to_content_list(eval_case.context) + ) + ) # 3. Extract custom variables from LLMMetric templates if prompt_template: diff --git a/tests/unit/agentplatform/genai/test_evals.py b/tests/unit/agentplatform/genai/test_evals.py index 6feb9aba93..a6976942ba 100644 --- a/tests/unit/agentplatform/genai/test_evals.py +++ b/tests/unit/agentplatform/genai/test_evals.py @@ -6950,6 +6950,28 @@ def test_build_evaluation_instance_various_field_types(self): == "System instructions here." ) + @pytest.mark.parametrize( + "context", + [["Passage one.", "Passage two."], {"source": "doc-1", "text": "Passage."}], + ) + def test_build_evaluation_instance_list_and_dict_context(self, context): + eval_case = agentplatform_genai_types.EvalCase( + prompt=genai_types.Content(parts=[genai_types.Part(text="Hello")]), + responses=[ + agentplatform_genai_types.ResponseCandidate( + response=genai_types.Content(parts=[genai_types.Part(text="Hi")]) + ) + ], + context=context, + ) + + instance = _evals_metric_handlers._build_evaluation_instance( + eval_case, eval_case.responses[0].response + ) + + context_data = instance.other_data.map_instance["context"] + assert context_data.contents.contents[0].parts[0].text == json.dumps(context) + class TestMetric: """Unit tests for the Metric class.""" diff --git a/vertexai/_genai/_evals_metric_handlers.py b/vertexai/_genai/_evals_metric_handlers.py index d682460243..79b766d4d2 100644 --- a/vertexai/_genai/_evals_metric_handlers.py +++ b/vertexai/_genai/_evals_metric_handlers.py @@ -684,6 +684,12 @@ def _build_evaluation_instance( other_data_map["context"] = types.evals.InstanceData(text=eval_case.context) elif isinstance(eval_case.context, genai_types.Content): other_data_map["context"] = _content_to_instance_data(eval_case.context) + else: + other_data_map["context"] = types.evals.InstanceData( + contents=types.evals.InstanceDataContents( + contents=_value_to_content_list(eval_case.context) + ) + ) # 3. Extract custom variables from LLMMetric templates if prompt_template: