Skip to content

Commit 9a9e158

Browse files
cleop-googlecopybara-github
authored andcommitted
feat: GenAI SDK client(multimodal) - Auto-generate display name for multimodal datasets if not provided.
PiperOrigin-RevId: 897780705
1 parent de15ea9 commit 9a9e158

3 files changed

Lines changed: 58 additions & 2 deletions

File tree

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

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,15 @@ def mock_import_bigframes(is_replay_mode):
7272
yield None
7373

7474

75+
@pytest.fixture
76+
def mock_generate_multimodal_dataset_display_name():
77+
with mock.patch.object(
78+
_datasets_utils, "generate_multimodal_dataset_display_name"
79+
) as mock_generate:
80+
mock_generate.return_value = "test-generated-name"
81+
yield mock_generate
82+
83+
7584
def test_create_dataset(client):
7685
create_dataset_operation = client.datasets._create_multimodal_dataset(
7786
name="projects/vertex-sdk-dev/locations/us-central1",
@@ -106,6 +115,21 @@ def test_create_dataset_from_bigquery(client):
106115
)
107116

108117

118+
@pytest.mark.usefixtures("mock_generate_multimodal_dataset_display_name")
119+
def test_create_dataset_from_bigquery_no_display_name(client):
120+
dataset = client.datasets.create_from_bigquery(
121+
multimodal_dataset={
122+
"metadata": {
123+
"inputConfig": {
124+
"bigquerySource": {"uri": f"bq://{BIGQUERY_TABLE_NAME}"},
125+
},
126+
},
127+
}
128+
)
129+
assert isinstance(dataset, types.MultimodalDataset)
130+
assert dataset.display_name == "test-generated-name"
131+
132+
109133
@pytest.mark.usefixtures("mock_bigquery_client", "mock_import_bigframes")
110134
def test_create_dataset_from_pandas(client, is_replay_mode):
111135
dataframe = pd.DataFrame(
@@ -230,6 +254,22 @@ async def test_create_dataset_from_bigquery_async(client):
230254
)
231255

232256

257+
@pytest.mark.asyncio
258+
@pytest.mark.usefixtures("mock_generate_multimodal_dataset_display_name")
259+
async def test_create_dataset_from_bigquery_no_display_name_async(client):
260+
dataset = await client.aio.datasets.create_from_bigquery(
261+
multimodal_dataset={
262+
"metadata": {
263+
"inputConfig": {
264+
"bigquerySource": {"uri": f"bq://{BIGQUERY_TABLE_NAME}"},
265+
},
266+
},
267+
}
268+
)
269+
assert isinstance(dataset, types.MultimodalDataset)
270+
assert dataset.display_name == "test-generated-name"
271+
272+
233273
@pytest.mark.asyncio
234274
async def test_create_dataset_from_bigquery_async_with_timeout(client):
235275
dataset = await client.aio.datasets.create_from_bigquery(

vertexai/_genai/_datasets_utils.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
"""Utility functions for multimodal dataset."""
1616

1717
import asyncio
18+
import datetime
1819
from typing import Any, Type, TypeVar
1920
import uuid
2021

@@ -227,6 +228,11 @@ def _generate_target_table_id(dataset_id: str) -> str:
227228
return f"{dataset_id}.{_DEFAULT_BQ_TABLE_PREFIX}_{str(uuid.uuid4())}"
228229

229230

231+
def generate_multimodal_dataset_display_name() -> str:
232+
"""Generates a display name with a timestamp."""
233+
return f"MultimodalDataset {datetime.datetime.now().isoformat(sep=' ')}"
234+
235+
230236
def save_dataframe_to_bigquery(
231237
dataframe: "bigframes.pandas.DataFrame", # type: ignore # noqa: F821
232238
target_table_id: str,

vertexai/_genai/datasets.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -933,9 +933,14 @@ def create_from_bigquery(
933933
elif not config:
934934
config = types.CreateMultimodalDatasetConfig()
935935

936+
display_name = (
937+
multimodal_dataset.display_name
938+
if multimodal_dataset.display_name is not None
939+
else _datasets_utils.generate_multimodal_dataset_display_name()
940+
)
936941
multimodal_dataset_operation = self._create_multimodal_dataset(
937942
config=config,
938-
display_name=multimodal_dataset.display_name,
943+
display_name=display_name,
939944
metadata_schema_uri=_datasets_utils.METADATA_SCHEMA_URI,
940945
metadata=multimodal_dataset.metadata,
941946
)
@@ -2150,9 +2155,14 @@ async def create_from_bigquery(
21502155
elif not config:
21512156
config = types.CreateMultimodalDatasetConfig()
21522157

2158+
display_name = (
2159+
multimodal_dataset.display_name
2160+
if multimodal_dataset.display_name is not None
2161+
else _datasets_utils.generate_multimodal_dataset_display_name()
2162+
)
21532163
multimodal_dataset_operation = await self._create_multimodal_dataset(
21542164
config=config,
2155-
display_name=multimodal_dataset.display_name,
2165+
display_name=display_name,
21562166
metadata_schema_uri=_datasets_utils.METADATA_SCHEMA_URI,
21572167
metadata=multimodal_dataset.metadata,
21582168
)

0 commit comments

Comments
 (0)