From 2d34165751b12c3f91fc8e2e644f18a9bef92b3b Mon Sep 17 00:00:00 2001 From: A Vertex SDK engineer Date: Mon, 10 Feb 2025 13:03:59 -0800 Subject: [PATCH] feat: Use default file name if one isn't provided when uploading evaluation results to GCS. PiperOrigin-RevId: 725319500 --- tests/unit/vertexai/test_evaluation.py | 17 +++++++++++++++++ vertexai/evaluation/utils.py | 6 ++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/tests/unit/vertexai/test_evaluation.py b/tests/unit/vertexai/test_evaluation.py index 376c4e7944..81db2aa443 100644 --- a/tests/unit/vertexai/test_evaluation.py +++ b/tests/unit/vertexai/test_evaluation.py @@ -15,9 +15,11 @@ # limitations under the License. # +import datetime import re import threading import time +import uuid from unittest import mock from google import auth @@ -2176,3 +2178,18 @@ def test_upload_results(self, mock_storage_blob_from_string): }, mock.ANY, ) + + def test_upload_results_with_default_file_name(self, mock_storage_blob_from_string): + with mock.patch( + "google.cloud.aiplatform.aiplatform.utils.timestamped_unique_name" + ) as mock_timestamped_unique_name: + mock_timestamped_unique_name.return_value = "2025-02-10-12-00-00-12345" + evaluation.utils.upload_evaluation_results( + MOCK_EVAL_RESULT, + _TEST_BUCKET, + ) + + mock_storage_blob_from_string.assert_any_call( + uri="gs://test-bucket/eval_results_2025-02-10-12-00-00-12345/eval_results_2025-02-10-12-00-00-12345.csv", + client=mock.ANY, + ) diff --git a/vertexai/evaluation/utils.py b/vertexai/evaluation/utils.py index ff5df99b3b..08a00c99db 100644 --- a/vertexai/evaluation/utils.py +++ b/vertexai/evaluation/utils.py @@ -336,7 +336,7 @@ def _upload_file_to_gcs(upload_gcs_path: str, filename: str) -> None: def upload_evaluation_results( eval_result: eval_base.EvalResult, destination_uri_prefix: str, - file_name: str, + file_name: Optional[str] = None, candidate_model_name: Optional[str] = None, baseline_model_name: Optional[str] = None, dataset_uri: Optional[str] = None, @@ -347,7 +347,7 @@ def upload_evaluation_results( Args: eval_result: Eval results to upload. destination_uri_prefix: GCS folder to store the data. - file_name: File name to store the metrics table. + file_name: Optional. File name to store the metrics table. candidate_model_name: Optional. Candidate model name. baseline_model_name: Optional. Baseline model name. dataset_uri: Optional. URI pointing to the dataset. @@ -359,6 +359,8 @@ def upload_evaluation_results( if eval_result.metrics_table is None: return if destination_uri_prefix.startswith(_GCS_PREFIX): + if file_name is None: + file_name = f"eval_results_{utils.timestamped_unique_name()}.csv" base_name, extension = os.path.splitext(file_name) file_type = extension.lower()[1:] output_folder = destination_uri_prefix + "/" + base_name