Skip to content

Commit c32718d

Browse files
vertex-sdk-botcopybara-github
authored andcommitted
feat: GenAI Client(evals): Add starting_prompt, conversation_plan, agent_data to evaluation datset
PiperOrigin-RevId: 882266139
1 parent e1b6541 commit c32718d

File tree

2 files changed

+88
-0
lines changed

2 files changed

+88
-0
lines changed

tests/unit/vertexai/genai/test_evals.py

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5988,6 +5988,79 @@ async def test_async_generate_user_scenarios(self):
59885988
self.mock_api_client.async_request.assert_called_once()
59895989

59905990

5991+
class TestConvertRequestToDatasetRow:
5992+
"""Unit tests for the _convert_request_to_dataset_row function."""
5993+
5994+
def test_convert_request_to_dataset_row_with_prompt_and_golden(self):
5995+
request = vertexai_genai_types.EvaluationItemRequest(
5996+
prompt=vertexai_genai_types.EvaluationPrompt(text="test prompt"),
5997+
golden_response=vertexai_genai_types.CandidateResponse(
5998+
text="golden response"
5999+
),
6000+
)
6001+
result = _evals_common._convert_request_to_dataset_row(request)
6002+
assert result["prompt"] == "test prompt"
6003+
assert result["reference"] == vertexai_genai_types.CandidateResponse(
6004+
text="golden response"
6005+
)
6006+
assert result["intermediate_events"] == []
6007+
assert result["agent_data"] is None
6008+
6009+
def test_convert_request_to_dataset_row_with_user_scenario(self):
6010+
request = vertexai_genai_types.EvaluationItemRequest(
6011+
prompt=vertexai_genai_types.EvaluationPrompt(
6012+
user_scenario=vertexai_genai_types.evals.UserScenario(
6013+
starting_prompt="start prompt", conversation_plan="convo plan"
6014+
)
6015+
)
6016+
)
6017+
result = _evals_common._convert_request_to_dataset_row(request)
6018+
assert result["starting_prompt"] == "start prompt"
6019+
assert result["conversation_plan"] == "convo plan"
6020+
assert result["prompt"] is None
6021+
6022+
def test_convert_request_to_dataset_row_with_candidate_events(self):
6023+
request = vertexai_genai_types.EvaluationItemRequest(
6024+
candidate_responses=[
6025+
vertexai_genai_types.CandidateResponse(
6026+
candidate="test-candidate",
6027+
text="candidate text",
6028+
events=[
6029+
genai_types.Content(
6030+
parts=[genai_types.Part(text="event part")], role="model"
6031+
)
6032+
],
6033+
)
6034+
]
6035+
)
6036+
result = _evals_common._convert_request_to_dataset_row(request)
6037+
assert result["test-candidate"] == "candidate text"
6038+
assert result["intermediate_events"] == [
6039+
{
6040+
"event_id": "test-candidate",
6041+
"content": {
6042+
"parts": [genai_types.Part(text="event part")],
6043+
"role": "model",
6044+
},
6045+
}
6046+
]
6047+
assert result["agent_data"] is None
6048+
6049+
def test_convert_request_to_dataset_row_with_agent_data(self):
6050+
mock_agent_data = {"turns": []}
6051+
request = vertexai_genai_types.EvaluationItemRequest(
6052+
candidate_responses=[
6053+
vertexai_genai_types.CandidateResponse(
6054+
candidate="test-candidate", agent_data=mock_agent_data
6055+
)
6056+
]
6057+
)
6058+
result = _evals_common._convert_request_to_dataset_row(request)
6059+
assert result["test-candidate"] is None
6060+
assert result["agent_data"] == mock_agent_data
6061+
assert result["intermediate_events"] == []
6062+
6063+
59916064
class TestCreateEvaluationSetFromDataFrame:
59926065
"""Unit tests for the _create_evaluation_set_from_dataframe function."""
59936066

vertexai/_genai/_evals_common.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2026,7 +2026,17 @@ def _convert_request_to_dataset_row(
20262026
request.prompt.text if request.prompt and request.prompt.text else None
20272027
)
20282028
dict_row[_evals_constant.REFERENCE] = request.golden_response
2029+
2030+
if request.prompt and request.prompt.user_scenario:
2031+
dict_row[_evals_constant.STARTING_PROMPT] = (
2032+
request.prompt.user_scenario.starting_prompt
2033+
)
2034+
dict_row[_evals_constant.CONVERSATION_PLAN] = (
2035+
request.prompt.user_scenario.conversation_plan
2036+
)
2037+
20292038
intermediate_events = []
2039+
agent_data = None
20302040
if request.candidate_responses:
20312041
for candidate in request.candidate_responses:
20322042
if candidate.candidate is not None:
@@ -2041,7 +2051,12 @@ def _convert_request_to_dataset_row(
20412051
"content": content_dict,
20422052
}
20432053
intermediate_events.append(int_events_dict)
2054+
agent_data = request.candidate_responses[0].agent_data
2055+
20442056
dict_row[_evals_constant.INTERMEDIATE_EVENTS] = intermediate_events
2057+
dict_row[_evals_constant.AGENT_DATA] = (
2058+
agent_data.model_dump(exclude_none=True) if agent_data else None
2059+
)
20452060
return dict_row
20462061

20472062

0 commit comments

Comments
 (0)