Skip to content

Commit a7acc97

Browse files
vertex-sdk-botcopybara-github
authored andcommitted
feat: Add filter and order_by support to list_evaluation_metrics
PiperOrigin-RevId: 904723882
1 parent 6b63480 commit a7acc97

3 files changed

Lines changed: 130 additions & 3 deletions

File tree

tests/unit/vertexai/genai/replays/test_evaluation_metric.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,18 @@ def test_list_evaluation_metrics(client):
5757
assert len(response.evaluation_metrics) >= 0
5858

5959

60+
def test_list_evaluation_metrics_with_filter(client):
61+
client._api_client._http_options.api_version = "v1beta1"
62+
response = client.evals.list_evaluation_metrics(
63+
filter='display_name="tone-check-v1"',
64+
order_by="create_time desc",
65+
)
66+
assert isinstance(response, types.ListEvaluationMetricsResponse)
67+
assert len(response.evaluation_metrics) >= 1
68+
for metric in response.evaluation_metrics:
69+
assert metric.display_name == "tone-check-v1"
70+
71+
6072
# The setup function registers the module and method for the recorder
6173
pytestmark = pytest_helper.setup(
6274
file=__file__,

vertexai/_genai/evals.py

Lines changed: 86 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -746,13 +746,40 @@ def _GetEvaluationSetParameters_to_vertex(
746746
return to_object
747747

748748

749+
def _ListEvaluationMetricsConfig_to_vertex(
750+
from_object: Union[dict[str, Any], object],
751+
parent_object: Optional[dict[str, Any]] = None,
752+
) -> dict[str, Any]:
753+
to_object: dict[str, Any] = {}
754+
755+
if getv(from_object, ["page_size"]) is not None:
756+
setv(parent_object, ["_query", "pageSize"], getv(from_object, ["page_size"]))
757+
758+
if getv(from_object, ["page_token"]) is not None:
759+
setv(parent_object, ["_query", "pageToken"], getv(from_object, ["page_token"]))
760+
761+
if getv(from_object, ["filter"]) is not None:
762+
setv(parent_object, ["_query", "filter"], getv(from_object, ["filter"]))
763+
764+
if getv(from_object, ["order_by"]) is not None:
765+
setv(parent_object, ["_query", "orderBy"], getv(from_object, ["order_by"]))
766+
767+
return to_object
768+
769+
749770
def _ListEvaluationMetricsParameters_to_vertex(
750771
from_object: Union[dict[str, Any], object],
751772
parent_object: Optional[dict[str, Any]] = None,
752773
) -> dict[str, Any]:
753774
to_object: dict[str, Any] = {}
754775
if getv(from_object, ["config"]) is not None:
755-
setv(to_object, ["config"], getv(from_object, ["config"]))
776+
setv(
777+
to_object,
778+
["config"],
779+
_ListEvaluationMetricsConfig_to_vertex(
780+
getv(from_object, ["config"]), to_object
781+
),
782+
)
756783

757784
return to_object
758785

@@ -2990,9 +3017,37 @@ def get_evaluation_metric(
29903017
def list_evaluation_metrics(
29913018
self,
29923019
*,
3020+
filter: Optional[str] = None,
3021+
order_by: Optional[str] = None,
29933022
config: Optional[types.ListEvaluationMetricsConfigOrDict] = None,
29943023
) -> types.ListEvaluationMetricsResponse:
2995-
"""Lists EvaluationMetrics."""
3024+
"""Lists EvaluationMetrics.
3025+
3026+
Args:
3027+
filter: An expression for filtering the results of the request. For
3028+
field names both snake_case and camelCase are supported. For more
3029+
information about filter syntax, see
3030+
`AIP-160 <https://google.aip.dev/160>`_.
3031+
Example: ``'display_name="my_metric"'``.
3032+
order_by: A comma-separated list of fields to order by, sorted in
3033+
ascending order by default. Use ``desc`` after a field name for
3034+
descending. Example: ``"create_time desc"``.
3035+
config: Optional configuration for the list operation, including
3036+
pagination (``page_size``, ``page_token``), ``filter``, and
3037+
``order_by``. Top-level ``filter`` and ``order_by`` arguments
3038+
take precedence over values set in ``config``.
3039+
3040+
Returns:
3041+
The list evaluation metrics response.
3042+
"""
3043+
if config is None:
3044+
config = types.ListEvaluationMetricsConfig()
3045+
if isinstance(config, dict):
3046+
config = types.ListEvaluationMetricsConfig.model_validate(config)
3047+
if filter is not None:
3048+
config.filter = filter
3049+
if order_by is not None:
3050+
config.order_by = order_by
29963051
return self._list_evaluation_metrics(
29973052
config=config,
29983053
)
@@ -4729,9 +4784,37 @@ async def get_evaluation_metric(
47294784
async def list_evaluation_metrics(
47304785
self,
47314786
*,
4787+
filter: Optional[str] = None,
4788+
order_by: Optional[str] = None,
47324789
config: Optional[types.ListEvaluationMetricsConfigOrDict] = None,
47334790
) -> types.ListEvaluationMetricsResponse:
4734-
"""Lists EvaluationMetrics."""
4791+
"""Lists EvaluationMetrics.
4792+
4793+
Args:
4794+
filter: An expression for filtering the results of the request. For
4795+
field names both snake_case and camelCase are supported. For more
4796+
information about filter syntax, see
4797+
`AIP-160 <https://google.aip.dev/160>`_.
4798+
Example: ``'display_name="my_metric"'``.
4799+
order_by: A comma-separated list of fields to order by, sorted in
4800+
ascending order by default. Use ``desc`` after a field name for
4801+
descending. Example: ``"create_time desc"``.
4802+
config: Optional configuration for the list operation, including
4803+
pagination (``page_size``, ``page_token``), ``filter``, and
4804+
``order_by``. Top-level ``filter`` and ``order_by`` arguments
4805+
take precedence over values set in ``config``.
4806+
4807+
Returns:
4808+
The list evaluation metrics response.
4809+
"""
4810+
if config is None:
4811+
config = types.ListEvaluationMetricsConfig()
4812+
if isinstance(config, dict):
4813+
config = types.ListEvaluationMetricsConfig.model_validate(config)
4814+
if filter is not None:
4815+
config.filter = filter
4816+
if order_by is not None:
4817+
config.order_by = order_by
47354818
return await self._list_evaluation_metrics(
47364819
config=config,
47374820
)

vertexai/_genai/types/common.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5476,6 +5476,21 @@ class ListEvaluationMetricsConfig(_common.BaseModel):
54765476
http_options: Optional[genai_types.HttpOptions] = Field(
54775477
default=None, description="""Used to override HTTP request options."""
54785478
)
5479+
page_size: Optional[int] = Field(default=None, description="""""")
5480+
page_token: Optional[str] = Field(default=None, description="""""")
5481+
filter: Optional[str] = Field(
5482+
default=None,
5483+
description="""An expression for filtering the results of the request.
5484+
For field names both snake_case and camelCase are supported.
5485+
For more information about filter syntax, see
5486+
`AIP-160 <https://google.aip.dev/160>`_.""",
5487+
)
5488+
order_by: Optional[str] = Field(
5489+
default=None,
5490+
description="""A comma-separated list of fields to order by, sorted in ascending
5491+
order by default. Use ``desc`` after a field name for descending.
5492+
Example: ``"create_time desc"``.""",
5493+
)
54795494

54805495

54815496
class ListEvaluationMetricsConfigDict(TypedDict, total=False):
@@ -5484,6 +5499,23 @@ class ListEvaluationMetricsConfigDict(TypedDict, total=False):
54845499
http_options: Optional[genai_types.HttpOptionsDict]
54855500
"""Used to override HTTP request options."""
54865501

5502+
page_size: Optional[int]
5503+
""""""
5504+
5505+
page_token: Optional[str]
5506+
""""""
5507+
5508+
filter: Optional[str]
5509+
"""An expression for filtering the results of the request.
5510+
For field names both snake_case and camelCase are supported.
5511+
For more information about filter syntax, see
5512+
`AIP-160 <https://google.aip.dev/160>`_."""
5513+
5514+
order_by: Optional[str]
5515+
"""A comma-separated list of fields to order by, sorted in ascending
5516+
order by default. Use ``desc`` after a field name for descending.
5517+
Example: ``"create_time desc"``."""
5518+
54875519

54885520
ListEvaluationMetricsConfigOrDict = Union[
54895521
ListEvaluationMetricsConfig, ListEvaluationMetricsConfigDict

0 commit comments

Comments
 (0)