Skip to content

Commit bfb691b

Browse files
jsondaicopybara-github
authored andcommitted
feat: GenAI Client(evals) - add delete/update EvaluationExperiment
PiperOrigin-RevId: 951571461
1 parent e46d239 commit bfb691b

8 files changed

Lines changed: 1304 additions & 0 deletions

File tree

agentplatform/_genai/evals.py

Lines changed: 394 additions & 0 deletions
Large diffs are not rendered by default.

agentplatform/_genai/types/__init__.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
from .common import _DeleteAgentEngineSessionRequestParameters
5757
from .common import _DeleteAgentEngineTaskRequestParameters
5858
from .common import _DeleteDatasetRequestParameters
59+
from .common import _DeleteEvaluationExperimentParameters
5960
from .common import _DeleteEvaluationMetricParameters
6061
from .common import _DeleteMultimodalDatasetRequestParameters
6162
from .common import _DeletePromptVersionRequestParameters
@@ -159,6 +160,7 @@
159160
from .common import _UpdateAgentEngineRequestParameters
160161
from .common import _UpdateAgentEngineSessionRequestParameters
161162
from .common import _UpdateDatasetParameters
163+
from .common import _UpdateEvaluationExperimentParameters
162164
from .common import _UpdateMultimodalDatasetParameters
163165
from .common import _UpdateRagConfigRequestParameters
164166
from .common import _UpdateRagCorpusRequestParameters
@@ -440,6 +442,12 @@
440442
from .common import DeleteAgentEngineTaskConfig
441443
from .common import DeleteAgentEngineTaskConfigDict
442444
from .common import DeleteAgentEngineTaskConfigOrDict
445+
from .common import DeleteEvaluationExperimentConfig
446+
from .common import DeleteEvaluationExperimentConfigDict
447+
from .common import DeleteEvaluationExperimentConfigOrDict
448+
from .common import DeleteEvaluationExperimentOperation
449+
from .common import DeleteEvaluationExperimentOperationDict
450+
from .common import DeleteEvaluationExperimentOperationOrDict
443451
from .common import DeleteEvaluationMetricConfig
444452
from .common import DeleteEvaluationMetricConfigDict
445453
from .common import DeleteEvaluationMetricConfigOrDict
@@ -1903,6 +1911,9 @@
19031911
from .common import UpdateAgentEngineSessionConfig
19041912
from .common import UpdateAgentEngineSessionConfigDict
19051913
from .common import UpdateAgentEngineSessionConfigOrDict
1914+
from .common import UpdateEvaluationExperimentConfig
1915+
from .common import UpdateEvaluationExperimentConfigDict
1916+
from .common import UpdateEvaluationExperimentConfigOrDict
19061917
from .common import UpdatePromptConfig
19071918
from .common import UpdatePromptConfigDict
19081919
from .common import UpdatePromptConfigOrDict
@@ -2173,6 +2184,12 @@
21732184
"EvaluationSet",
21742185
"EvaluationSetDict",
21752186
"EvaluationSetOrDict",
2187+
"DeleteEvaluationExperimentConfig",
2188+
"DeleteEvaluationExperimentConfigDict",
2189+
"DeleteEvaluationExperimentConfigOrDict",
2190+
"DeleteEvaluationExperimentOperation",
2191+
"DeleteEvaluationExperimentOperationDict",
2192+
"DeleteEvaluationExperimentOperationOrDict",
21762193
"DeleteEvaluationMetricConfig",
21772194
"DeleteEvaluationMetricConfigDict",
21782195
"DeleteEvaluationMetricConfigOrDict",
@@ -2371,6 +2388,9 @@
23712388
"ListEvaluationMetricsResponse",
23722389
"ListEvaluationMetricsResponseDict",
23732390
"ListEvaluationMetricsResponseOrDict",
2391+
"UpdateEvaluationExperimentConfig",
2392+
"UpdateEvaluationExperimentConfigDict",
2393+
"UpdateEvaluationExperimentConfigOrDict",
23742394
"OptimizeConfig",
23752395
"OptimizeConfigDict",
23762396
"OptimizeConfigOrDict",
@@ -3720,6 +3740,7 @@
37203740
"_CreateEvaluationMetricParameters",
37213741
"_CreateEvaluationRunParameters",
37223742
"_CreateEvaluationSetParameters",
3743+
"_DeleteEvaluationExperimentParameters",
37233744
"_DeleteEvaluationMetricParameters",
37243745
"_EvaluateInstancesRequestParameters",
37253746
"_GenerateUserScenariosParameters",
@@ -3732,6 +3753,7 @@
37323753
"_GetEvaluationItemParameters",
37333754
"_ListEvaluationExperimentsParameters",
37343755
"_ListEvaluationMetricsParameters",
3756+
"_UpdateEvaluationExperimentParameters",
37353757
"_OptimizeRequestParameters",
37363758
"_CustomJobParameters",
37373759
"_GetCustomJobParameters",

agentplatform/_genai/types/common.py

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4137,6 +4137,92 @@ class EvaluationSetDict(TypedDict, total=False):
41374137
EvaluationSetOrDict = Union[EvaluationSet, EvaluationSetDict]
41384138

41394139

4140+
class DeleteEvaluationExperimentConfig(_common.BaseModel):
4141+
"""Config for deleting an evaluation experiment."""
4142+
4143+
http_options: Optional[genai_types.HttpOptions] = Field(
4144+
default=None, description="""Used to override HTTP request options."""
4145+
)
4146+
4147+
4148+
class DeleteEvaluationExperimentConfigDict(TypedDict, total=False):
4149+
"""Config for deleting an evaluation experiment."""
4150+
4151+
http_options: Optional[genai_types.HttpOptions]
4152+
"""Used to override HTTP request options."""
4153+
4154+
4155+
DeleteEvaluationExperimentConfigOrDict = Union[
4156+
DeleteEvaluationExperimentConfig, DeleteEvaluationExperimentConfigDict
4157+
]
4158+
4159+
4160+
class _DeleteEvaluationExperimentParameters(_common.BaseModel):
4161+
"""Parameters for deleting an evaluation experiment."""
4162+
4163+
name: Optional[str] = Field(default=None, description="""""")
4164+
config: Optional[DeleteEvaluationExperimentConfig] = Field(
4165+
default=None, description=""""""
4166+
)
4167+
4168+
4169+
class _DeleteEvaluationExperimentParametersDict(TypedDict, total=False):
4170+
"""Parameters for deleting an evaluation experiment."""
4171+
4172+
name: Optional[str]
4173+
""""""
4174+
4175+
config: Optional[DeleteEvaluationExperimentConfigDict]
4176+
""""""
4177+
4178+
4179+
_DeleteEvaluationExperimentParametersOrDict = Union[
4180+
_DeleteEvaluationExperimentParameters, _DeleteEvaluationExperimentParametersDict
4181+
]
4182+
4183+
4184+
class DeleteEvaluationExperimentOperation(_common.BaseModel):
4185+
"""Operation for deleting an evaluation experiment."""
4186+
4187+
name: Optional[str] = Field(
4188+
default=None,
4189+
description="""The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.""",
4190+
)
4191+
metadata: Optional[dict[str, Any]] = Field(
4192+
default=None,
4193+
description="""Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.""",
4194+
)
4195+
done: Optional[bool] = Field(
4196+
default=None,
4197+
description="""If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.""",
4198+
)
4199+
error: Optional[dict[str, Any]] = Field(
4200+
default=None,
4201+
description="""The error result of the operation in case of failure or cancellation.""",
4202+
)
4203+
4204+
4205+
class DeleteEvaluationExperimentOperationDict(TypedDict, total=False):
4206+
"""Operation for deleting an evaluation experiment."""
4207+
4208+
name: Optional[str]
4209+
"""The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`."""
4210+
4211+
metadata: Optional[dict[str, Any]]
4212+
"""Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any."""
4213+
4214+
done: Optional[bool]
4215+
"""If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available."""
4216+
4217+
error: Optional[dict[str, Any]]
4218+
"""The error result of the operation in case of failure or cancellation."""
4219+
4220+
4221+
DeleteEvaluationExperimentOperationOrDict = Union[
4222+
DeleteEvaluationExperimentOperation, DeleteEvaluationExperimentOperationDict
4223+
]
4224+
4225+
41404226
class DeleteEvaluationMetricConfig(_common.BaseModel):
41414227
"""Config for deleting an evaluation metric."""
41424228

@@ -6350,6 +6436,85 @@ class ListEvaluationMetricsResponseDict(TypedDict, total=False):
63506436
]
63516437

63526438

6439+
class UpdateEvaluationExperimentConfig(_common.BaseModel):
6440+
"""Config for updating an evaluation experiment."""
6441+
6442+
http_options: Optional[genai_types.HttpOptions] = Field(
6443+
default=None, description="""Used to override HTTP request options."""
6444+
)
6445+
update_mask: Optional[str] = Field(
6446+
default=None,
6447+
description="""The update mask to apply. For the `FieldMask` definition, see
6448+
https://protobuf.dev/reference/protobuf/google.protobuf/#field-mask.""",
6449+
)
6450+
display_name: Optional[str] = Field(
6451+
default=None, description="""The display name of the evaluation experiment."""
6452+
)
6453+
labels: Optional[dict[str, str]] = Field(
6454+
default=None, description="""Labels for the evaluation experiment."""
6455+
)
6456+
merge_strategy: Optional[EvaluationExperimentMergeStrategy] = Field(
6457+
default=None, description="""Merge strategy for the evaluation experiment."""
6458+
)
6459+
metadata: Optional[dict[str, Any]] = Field(
6460+
default=None, description="""Metadata about the evaluation experiment."""
6461+
)
6462+
6463+
6464+
class UpdateEvaluationExperimentConfigDict(TypedDict, total=False):
6465+
"""Config for updating an evaluation experiment."""
6466+
6467+
http_options: Optional[genai_types.HttpOptions]
6468+
"""Used to override HTTP request options."""
6469+
6470+
update_mask: Optional[str]
6471+
"""The update mask to apply. For the `FieldMask` definition, see
6472+
https://protobuf.dev/reference/protobuf/google.protobuf/#field-mask."""
6473+
6474+
display_name: Optional[str]
6475+
"""The display name of the evaluation experiment."""
6476+
6477+
labels: Optional[dict[str, str]]
6478+
"""Labels for the evaluation experiment."""
6479+
6480+
merge_strategy: Optional[EvaluationExperimentMergeStrategy]
6481+
"""Merge strategy for the evaluation experiment."""
6482+
6483+
metadata: Optional[dict[str, Any]]
6484+
"""Metadata about the evaluation experiment."""
6485+
6486+
6487+
UpdateEvaluationExperimentConfigOrDict = Union[
6488+
UpdateEvaluationExperimentConfig, UpdateEvaluationExperimentConfigDict
6489+
]
6490+
6491+
6492+
class _UpdateEvaluationExperimentParameters(_common.BaseModel):
6493+
"""Parameters for updating an evaluation experiment."""
6494+
6495+
name: Optional[str] = Field(
6496+
default=None, description="""The resource name of the EvaluationExperiment."""
6497+
)
6498+
config: Optional[UpdateEvaluationExperimentConfig] = Field(
6499+
default=None, description=""""""
6500+
)
6501+
6502+
6503+
class _UpdateEvaluationExperimentParametersDict(TypedDict, total=False):
6504+
"""Parameters for updating an evaluation experiment."""
6505+
6506+
name: Optional[str]
6507+
"""The resource name of the EvaluationExperiment."""
6508+
6509+
config: Optional[UpdateEvaluationExperimentConfigDict]
6510+
""""""
6511+
6512+
6513+
_UpdateEvaluationExperimentParametersOrDict = Union[
6514+
_UpdateEvaluationExperimentParameters, _UpdateEvaluationExperimentParametersDict
6515+
]
6516+
6517+
63536518
class OptimizeConfig(_common.BaseModel):
63546519
"""Config for Prompt Optimizer."""
63556520

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
# Copyright 2026 Google LLC
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
#
15+
# pylint: disable=protected-access,bad-continuation,missing-function-docstring
16+
17+
from agentplatform._genai import types
18+
from tests.unit.agentplatform.genai.replays import pytest_helper
19+
from google.genai._api_client import HttpOptions
20+
import pytest
21+
22+
pytestmark = pytest_helper.setup(
23+
file=__file__,
24+
globals_for_file=globals(),
25+
test_method="evals.update_evaluation_experiment",
26+
http_options=HttpOptions(
27+
api_version="v1beta1",
28+
),
29+
)
30+
31+
pytest_plugins = ("pytest_asyncio",)
32+
33+
34+
def test_update_and_delete(client):
35+
experiment = client.evals.create_evaluation_experiment(
36+
display_name="sdk-update-delete-test"
37+
)
38+
assert isinstance(experiment, types.EvaluationExperiment)
39+
40+
updated = client.evals.update_evaluation_experiment(
41+
name=experiment.name,
42+
config={
43+
"display_name": "sdk-update-delete-test-renamed",
44+
"update_mask": "display_name",
45+
},
46+
)
47+
assert isinstance(updated, types.EvaluationExperiment)
48+
assert updated.display_name == "sdk-update-delete-test-renamed"
49+
50+
delete_operation = client.evals.delete_evaluation_experiment(
51+
name=experiment.name
52+
)
53+
assert isinstance(
54+
delete_operation, types.DeleteEvaluationExperimentOperation
55+
)
56+
57+
58+
@pytest.mark.asyncio
59+
async def test_update_and_delete_async(client):
60+
experiment = await client.aio.evals.create_evaluation_experiment(
61+
display_name="sdk-update-delete-test-async"
62+
)
63+
assert isinstance(experiment, types.EvaluationExperiment)
64+
65+
updated = await client.aio.evals.update_evaluation_experiment(
66+
name=experiment.name,
67+
config={
68+
"display_name": "sdk-update-delete-test-async-renamed",
69+
"update_mask": "display_name",
70+
},
71+
)
72+
assert isinstance(updated, types.EvaluationExperiment)
73+
assert updated.display_name == "sdk-update-delete-test-async-renamed"
74+
75+
delete_operation = await client.aio.evals.delete_evaluation_experiment(
76+
name=experiment.name
77+
)
78+
assert isinstance(
79+
delete_operation, types.DeleteEvaluationExperimentOperation
80+
)

0 commit comments

Comments
 (0)