Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/google/adk/evaluation/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,6 @@ class EvalBaseModel(pydantic.BaseModel):
model_config = pydantic.ConfigDict(
alias_generator=alias_generators.to_camel,
populate_by_name=True,
extra="forbid",
extra="allow",
arbitrary_types_allowed=True,
)
24 changes: 24 additions & 0 deletions tests/unittests/evaluation/test_eval_case.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
from google.adk.evaluation.eval_case import IntermediateData
from google.adk.evaluation.eval_case import InvocationEvent
from google.adk.evaluation.eval_case import InvocationEvents
from google.adk.evaluation.eval_case import SessionInput
from google.genai import types as genai_types
import pytest

Expand Down Expand Up @@ -281,3 +282,26 @@ def test_conversation_and_conversation_scenario_mutual_exclusion():
# these two should not cause exceptions
EvalCase(eval_id='test_id', conversation=[])
EvalCase(eval_id='test_id', conversation_scenario=test_conversation_scenario)


def test_eval_models_preserve_extra_metadata():
session_input = SessionInput(
app_name='app',
user_id='user',
category='search',
tier='low',
)
eval_case = EvalCase(
eval_id='case',
conversation=[],
session_input=session_input,
benchmark='smoke',
)

assert session_input.model_extra == {'category': 'search', 'tier': 'low'}
assert eval_case.model_extra == {'benchmark': 'smoke'}

dumped = eval_case.model_dump(by_alias=True)
assert dumped['benchmark'] == 'smoke'
assert dumped['sessionInput']['category'] == 'search'
assert dumped['sessionInput']['tier'] == 'low'