Skip to content

Commit 06a9089

Browse files
vertex-sdk-botcopybara-github
authored andcommitted
chore: Handle interactions_data_source as a valid data source
PiperOrigin-RevId: 951147537
1 parent ab757c7 commit 06a9089

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
@@ -7752,6 +7752,118 @@ def test_merge_with_invalid_eval_case_type(self):
77527752
schemas=[_evals_data_converters.EvalDatasetSchema.FLATTEN],
77537753
)
77547754

7755+
def test_merge_single_dataset_with_interactions_data_source(self):
7756+
"""Base dataset with interactions_data_source adds placeholder without warning."""
7757+
dataset = agentplatform_genai_types.EvaluationDataset(
7758+
eval_cases=[
7759+
agentplatform_genai_types.EvalCase(
7760+
interactions_data_source=agentplatform_genai_types.InteractionsDataSource(
7761+
interaction="projects/p/locations/l/interactions/i1",
7762+
),
7763+
),
7764+
]
7765+
)
7766+
7767+
with mock.patch.object(
7768+
_evals_data_converters, "logger"
7769+
) as mock_logger:
7770+
merged = _evals_data_converters.merge_evaluation_datasets([dataset])
7771+
7772+
assert len(merged.eval_cases) == 1
7773+
assert len(merged.eval_cases[0].responses) == 1
7774+
assert merged.eval_cases[0].responses[0].response == genai_types.Content(
7775+
parts=[genai_types.Part(text="")]
7776+
)
7777+
mock_logger.warning.assert_not_called()
7778+
7779+
def test_merge_two_datasets_with_interactions_data_source(self):
7780+
"""Merging two interaction-id datasets adds placeholders without warning."""
7781+
dataset_1 = agentplatform_genai_types.EvaluationDataset(
7782+
eval_cases=[
7783+
agentplatform_genai_types.EvalCase(
7784+
interactions_data_source=agentplatform_genai_types.InteractionsDataSource(
7785+
interaction="projects/p/locations/l/interactions/i1",
7786+
),
7787+
),
7788+
]
7789+
)
7790+
dataset_2 = agentplatform_genai_types.EvaluationDataset(
7791+
eval_cases=[
7792+
agentplatform_genai_types.EvalCase(
7793+
interactions_data_source=agentplatform_genai_types.InteractionsDataSource(
7794+
interaction="projects/p/locations/l/interactions/i2",
7795+
),
7796+
),
7797+
]
7798+
)
7799+
7800+
with mock.patch.object(
7801+
_evals_data_converters, "logger"
7802+
) as mock_logger:
7803+
merged = _evals_data_converters.merge_evaluation_datasets(
7804+
[dataset_1, dataset_2]
7805+
)
7806+
7807+
assert len(merged.eval_cases) == 1
7808+
assert len(merged.eval_cases[0].responses) == 2
7809+
assert merged.eval_cases[0].responses[0].response == genai_types.Content(
7810+
parts=[genai_types.Part(text="")]
7811+
)
7812+
assert merged.eval_cases[0].responses[1].response == genai_types.Content(
7813+
parts=[genai_types.Part(text="")]
7814+
)
7815+
mock_logger.warning.assert_not_called()
7816+
7817+
def test_merge_interactions_data_source_with_response_dataset(self):
7818+
"""Merging an interaction-id dataset with a response dataset works correctly."""
7819+
dataset_interactions = agentplatform_genai_types.EvaluationDataset(
7820+
eval_cases=[
7821+
agentplatform_genai_types.EvalCase(
7822+
prompt=genai_types.Content(
7823+
parts=[genai_types.Part(text="Prompt 1")]
7824+
),
7825+
interactions_data_source=agentplatform_genai_types.InteractionsDataSource(
7826+
interaction="projects/p/locations/l/interactions/i1",
7827+
),
7828+
),
7829+
]
7830+
)
7831+
dataset_response = agentplatform_genai_types.EvaluationDataset(
7832+
eval_cases=[
7833+
agentplatform_genai_types.EvalCase(
7834+
prompt=genai_types.Content(
7835+
parts=[genai_types.Part(text="Prompt 1")]
7836+
),
7837+
responses=[
7838+
agentplatform_genai_types.ResponseCandidate(
7839+
response=genai_types.Content(
7840+
parts=[genai_types.Part(text="Response 1")]
7841+
)
7842+
)
7843+
],
7844+
),
7845+
]
7846+
)
7847+
7848+
with mock.patch.object(
7849+
_evals_data_converters, "logger"
7850+
) as mock_logger:
7851+
merged = _evals_data_converters.merge_evaluation_datasets(
7852+
[dataset_interactions, dataset_response]
7853+
)
7854+
7855+
assert len(merged.eval_cases) == 1
7856+
assert len(merged.eval_cases[0].responses) == 2
7857+
# First response is a placeholder from the interactions_data_source case
7858+
assert merged.eval_cases[0].responses[0].response == genai_types.Content(
7859+
parts=[genai_types.Part(text="")]
7860+
)
7861+
# Second response is the actual response
7862+
assert merged.eval_cases[0].responses[1].response == genai_types.Content(
7863+
parts=[genai_types.Part(text="Response 1")]
7864+
)
7865+
mock_logger.warning.assert_not_called()
7866+
77557867

77567868
@pytest.mark.usefixtures("google_auth_mock")
77577869
class TestPredefinedMetricHandler:

0 commit comments

Comments
 (0)