Skip to content

Commit 1835f49

Browse files
vertex-sdk-botcopybara-github
authored andcommitted
chore: Handle interactions_data_source as a valid data source
PiperOrigin-RevId: 949778684
1 parent f141415 commit 1835f49

2 files changed

Lines changed: 120 additions & 0 deletions

File tree

agentplatform/_genai/_evals_data_converters.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -796,6 +796,10 @@ def merge_evaluation_datasets(
796796
candidate_responses.append(base_eval_case.responses[0])
797797
elif base_eval_case.agent_data:
798798
candidate_responses.append(_create_placeholder_response_candidate(""))
799+
elif getattr(base_eval_case, "interactions_data_source", None):
800+
# Interaction data will be resolved server-side for metric
801+
# computation; add a placeholder without warning.
802+
candidate_responses.append(_create_placeholder_response_candidate(""))
799803
else:
800804
logger.warning(
801805
"No response or agent data found for base dataset (index 0) in case %s. "
@@ -853,6 +857,10 @@ def merge_evaluation_datasets(
853857
candidate_responses.append(current_ds_eval_case.responses[0])
854858
elif current_ds_eval_case.agent_data:
855859
candidate_responses.append(_create_placeholder_response_candidate(""))
860+
elif getattr(current_ds_eval_case, "interactions_data_source", None):
861+
# Interaction data will be resolved server-side for metric
862+
# computation; add a placeholder without warning.
863+
candidate_responses.append(_create_placeholder_response_candidate(""))
856864
else:
857865
logger.warning(
858866
"No response or agent data found for dataset %s in case %s. Adding"

tests/unit/agentplatform/genai/test_evals.py

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7730,6 +7730,118 @@ def test_merge_with_invalid_eval_case_type(self):
77307730
schemas=[_evals_data_converters.EvalDatasetSchema.FLATTEN],
77317731
)
77327732

7733+
def test_merge_single_dataset_with_interactions_data_source(self):
7734+
"""Base dataset with interactions_data_source adds placeholder without warning."""
7735+
dataset = agentplatform_genai_types.EvaluationDataset(
7736+
eval_cases=[
7737+
agentplatform_genai_types.EvalCase(
7738+
interactions_data_source=agentplatform_genai_types.InteractionsDataSource(
7739+
interaction="projects/p/locations/l/interactions/i1",
7740+
),
7741+
),
7742+
]
7743+
)
7744+
7745+
with mock.patch.object(
7746+
_evals_data_converters, "logger"
7747+
) as mock_logger:
7748+
merged = _evals_data_converters.merge_evaluation_datasets([dataset])
7749+
7750+
assert len(merged.eval_cases) == 1
7751+
assert len(merged.eval_cases[0].responses) == 1
7752+
assert merged.eval_cases[0].responses[0].response == genai_types.Content(
7753+
parts=[genai_types.Part(text="")]
7754+
)
7755+
mock_logger.warning.assert_not_called()
7756+
7757+
def test_merge_two_datasets_with_interactions_data_source(self):
7758+
"""Merging two interaction-id datasets adds placeholders without warning."""
7759+
dataset_1 = agentplatform_genai_types.EvaluationDataset(
7760+
eval_cases=[
7761+
agentplatform_genai_types.EvalCase(
7762+
interactions_data_source=agentplatform_genai_types.InteractionsDataSource(
7763+
interaction="projects/p/locations/l/interactions/i1",
7764+
),
7765+
),
7766+
]
7767+
)
7768+
dataset_2 = agentplatform_genai_types.EvaluationDataset(
7769+
eval_cases=[
7770+
agentplatform_genai_types.EvalCase(
7771+
interactions_data_source=agentplatform_genai_types.InteractionsDataSource(
7772+
interaction="projects/p/locations/l/interactions/i2",
7773+
),
7774+
),
7775+
]
7776+
)
7777+
7778+
with mock.patch.object(
7779+
_evals_data_converters, "logger"
7780+
) as mock_logger:
7781+
merged = _evals_data_converters.merge_evaluation_datasets(
7782+
[dataset_1, dataset_2]
7783+
)
7784+
7785+
assert len(merged.eval_cases) == 1
7786+
assert len(merged.eval_cases[0].responses) == 2
7787+
assert merged.eval_cases[0].responses[0].response == genai_types.Content(
7788+
parts=[genai_types.Part(text="")]
7789+
)
7790+
assert merged.eval_cases[0].responses[1].response == genai_types.Content(
7791+
parts=[genai_types.Part(text="")]
7792+
)
7793+
mock_logger.warning.assert_not_called()
7794+
7795+
def test_merge_interactions_data_source_with_response_dataset(self):
7796+
"""Merging an interaction-id dataset with a response dataset works correctly."""
7797+
dataset_interactions = agentplatform_genai_types.EvaluationDataset(
7798+
eval_cases=[
7799+
agentplatform_genai_types.EvalCase(
7800+
prompt=genai_types.Content(
7801+
parts=[genai_types.Part(text="Prompt 1")]
7802+
),
7803+
interactions_data_source=agentplatform_genai_types.InteractionsDataSource(
7804+
interaction="projects/p/locations/l/interactions/i1",
7805+
),
7806+
),
7807+
]
7808+
)
7809+
dataset_response = agentplatform_genai_types.EvaluationDataset(
7810+
eval_cases=[
7811+
agentplatform_genai_types.EvalCase(
7812+
prompt=genai_types.Content(
7813+
parts=[genai_types.Part(text="Prompt 1")]
7814+
),
7815+
responses=[
7816+
agentplatform_genai_types.ResponseCandidate(
7817+
response=genai_types.Content(
7818+
parts=[genai_types.Part(text="Response 1")]
7819+
)
7820+
)
7821+
],
7822+
),
7823+
]
7824+
)
7825+
7826+
with mock.patch.object(
7827+
_evals_data_converters, "logger"
7828+
) as mock_logger:
7829+
merged = _evals_data_converters.merge_evaluation_datasets(
7830+
[dataset_interactions, dataset_response]
7831+
)
7832+
7833+
assert len(merged.eval_cases) == 1
7834+
assert len(merged.eval_cases[0].responses) == 2
7835+
# First response is a placeholder from the interactions_data_source case
7836+
assert merged.eval_cases[0].responses[0].response == genai_types.Content(
7837+
parts=[genai_types.Part(text="")]
7838+
)
7839+
# Second response is the actual response
7840+
assert merged.eval_cases[0].responses[1].response == genai_types.Content(
7841+
parts=[genai_types.Part(text="Response 1")]
7842+
)
7843+
mock_logger.warning.assert_not_called()
7844+
77337845

77347846
@pytest.mark.usefixtures("google_auth_mock")
77357847
class TestPredefinedMetricHandler:

0 commit comments

Comments
 (0)