Skip to content

Commit a762bb5

Browse files
cleop-googlecopybara-github
authored andcommitted
feat: GenAI SDK client(multimodal) - Accept an explicit bigquery_uri parameter in create_from_bigquery
PiperOrigin-RevId: 900174983
1 parent b2323ef commit a762bb5

2 files changed

Lines changed: 100 additions & 6 deletions

File tree

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

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,40 @@ def test_create_dataset_from_bigquery(client):
115115
)
116116

117117

118+
@pytest.mark.usefixtures("mock_generate_multimodal_dataset_display_name")
119+
def test_create_dataset_from_bigquery_with_uri(client):
120+
dataset = client.datasets.create_from_bigquery(
121+
bigquery_uri=f"bq://{BIGQUERY_TABLE_NAME}",
122+
)
123+
assert isinstance(dataset, types.MultimodalDataset)
124+
assert dataset.metadata.input_config.bigquery_source.uri == (
125+
f"bq://{BIGQUERY_TABLE_NAME}"
126+
)
127+
128+
129+
def test_create_dataset_from_bigquery_preserves_other_metadata(client):
130+
dataset = client.datasets.create_from_bigquery(
131+
bigquery_uri=f"bq://{BIGQUERY_TABLE_NAME}",
132+
multimodal_dataset={
133+
"display_name": "test-from-bigquery-uri",
134+
"metadata": {
135+
"gemini_request_read_config": {
136+
"assembled_request_column_name": "test_column"
137+
}
138+
},
139+
},
140+
)
141+
assert isinstance(dataset, types.MultimodalDataset)
142+
assert dataset.display_name == "test-from-bigquery-uri"
143+
assert (
144+
dataset.metadata.gemini_request_read_config.assembled_request_column_name
145+
== "test_column"
146+
)
147+
assert dataset.metadata.input_config.bigquery_source.uri == (
148+
f"bq://{BIGQUERY_TABLE_NAME}"
149+
)
150+
151+
118152
@pytest.mark.usefixtures("mock_generate_multimodal_dataset_display_name")
119153
def test_create_dataset_from_bigquery_no_display_name(client):
120154
dataset = client.datasets.create_from_bigquery(
@@ -254,6 +288,44 @@ async def test_create_dataset_from_bigquery_async(client):
254288
)
255289

256290

291+
@pytest.mark.asyncio
292+
@pytest.mark.usefixtures("mock_generate_multimodal_dataset_display_name")
293+
async def test_create_dataset_from_bigquery_with_uri_async(client):
294+
dataset = await client.aio.datasets.create_from_bigquery(
295+
bigquery_uri=f"bq://{BIGQUERY_TABLE_NAME}",
296+
)
297+
assert isinstance(dataset, types.MultimodalDataset)
298+
assert dataset.metadata.input_config.bigquery_source.uri == (
299+
f"bq://{BIGQUERY_TABLE_NAME}"
300+
)
301+
302+
303+
@pytest.mark.asyncio
304+
async def test_create_dataset_from_bigquery_preserves_other_metadata_async(
305+
client,
306+
):
307+
dataset = await client.aio.datasets.create_from_bigquery(
308+
bigquery_uri=f"bq://{BIGQUERY_TABLE_NAME}",
309+
multimodal_dataset={
310+
"display_name": "test-from-bigquery-uri",
311+
"metadata": {
312+
"gemini_request_read_config": {
313+
"assembled_request_column_name": "test_column"
314+
}
315+
},
316+
},
317+
)
318+
assert isinstance(dataset, types.MultimodalDataset)
319+
assert dataset.display_name == "test-from-bigquery-uri"
320+
assert (
321+
dataset.metadata.gemini_request_read_config.assembled_request_column_name
322+
== "test_column"
323+
)
324+
assert dataset.metadata.input_config.bigquery_source.uri == (
325+
f"bq://{BIGQUERY_TABLE_NAME}"
326+
)
327+
328+
257329
@pytest.mark.asyncio
258330
@pytest.mark.usefixtures("mock_generate_multimodal_dataset_display_name")
259331
async def test_create_dataset_from_bigquery_no_display_name_async(client):

vertexai/_genai/datasets.py

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -924,23 +924,34 @@ def _wait_for_operation(
924924
def create_from_bigquery(
925925
self,
926926
*,
927-
multimodal_dataset: types.MultimodalDatasetOrDict,
927+
bigquery_uri: Optional[str] = None,
928+
multimodal_dataset: Optional[types.MultimodalDatasetOrDict] = None,
928929
config: Optional[types.CreateMultimodalDatasetConfigOrDict] = None,
929930
) -> types.MultimodalDataset:
930931
"""Creates a multimodal dataset from a BigQuery table.
931932
932933
Args:
934+
bigquery_uri:
935+
Optional. The BigQuery URI of the table to create the dataset from.
936+
e.g. "bq://project.dataset.table".
933937
multimodal_dataset:
934-
Required. A representation of a multimodal dataset.
938+
Optional. A representation of a multimodal dataset.
935939
config:
936940
Optional. A configuration for creating the multimodal dataset. If not
937941
provided, the default configuration will be used.
938942
939943
Returns:
940944
A types.MultimodalDataset object representing a multimodal dataset.
941945
"""
942-
if isinstance(multimodal_dataset, dict):
946+
if multimodal_dataset is None:
947+
multimodal_dataset = types.MultimodalDataset()
948+
elif isinstance(multimodal_dataset, dict):
943949
multimodal_dataset = types.MultimodalDataset(**multimodal_dataset)
950+
951+
if bigquery_uri:
952+
multimodal_dataset = multimodal_dataset.model_copy(deep=True)
953+
multimodal_dataset.set_bigquery_uri(bigquery_uri)
954+
944955
_datasets_utils.validate_multimodal_dataset_bigquery_uri(multimodal_dataset)
945956

946957
if isinstance(config, dict):
@@ -2196,23 +2207,34 @@ async def _wait_for_operation(
21962207
async def create_from_bigquery(
21972208
self,
21982209
*,
2199-
multimodal_dataset: types.MultimodalDatasetOrDict,
2210+
bigquery_uri: Optional[str] = None,
2211+
multimodal_dataset: Optional[types.MultimodalDatasetOrDict] = None,
22002212
config: Optional[types.CreateMultimodalDatasetConfigOrDict] = None,
22012213
) -> types.MultimodalDataset:
22022214
"""Creates a multimodal dataset from a BigQuery table.
22032215
22042216
Args:
2217+
bigquery_uri:
2218+
Optional. The BigQuery URI of the table to create the dataset from.
2219+
e.g. "bq://project.dataset.table".
22052220
multimodal_dataset:
2206-
Required. A representation of a multimodal dataset.
2221+
Optional. A representation of a multimodal dataset.
22072222
config:
22082223
Optional. A configuration for creating the multimodal dataset. If not
22092224
provided, the default configuration will be used.
22102225
22112226
Returns:
22122227
A types.MultimodalDataset object representing a multimodal dataset.
22132228
"""
2214-
if isinstance(multimodal_dataset, dict):
2229+
if multimodal_dataset is None:
2230+
multimodal_dataset = types.MultimodalDataset()
2231+
elif isinstance(multimodal_dataset, dict):
22152232
multimodal_dataset = types.MultimodalDataset(**multimodal_dataset)
2233+
2234+
if bigquery_uri:
2235+
multimodal_dataset = multimodal_dataset.model_copy(deep=True)
2236+
multimodal_dataset.set_bigquery_uri(bigquery_uri)
2237+
22162238
_datasets_utils.validate_multimodal_dataset_bigquery_uri(multimodal_dataset)
22172239

22182240
if isinstance(config, dict):

0 commit comments

Comments
 (0)