Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions google/genai/_base_transformers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Copyright 2025 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

"""Base transformers for Google GenAI SDK."""
import base64

# Some fields don't accept url safe base64 encoding.
# We shouldn't use this transformer if the backend adhere to Cloud Type
# format https://cloud.google.com/docs/discovery/type-format.
# TODO(b/389133914,b/390320301): Remove the hack after backend fix the issue.
def t_bytes(data: bytes) -> str:
if not isinstance(data, bytes):
return data
return base64.b64encode(data).decode('ascii')
307 changes: 307 additions & 0 deletions google/genai/_operations_converters.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,307 @@
# Copyright 2025 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

# Code generated by the Google Gen AI SDK generator DO NOT EDIT.

from typing import Any, Optional, Union
from . import _base_transformers as base_t
from ._common import get_value_by_path as getv
from ._common import set_value_by_path as setv


def _FetchPredictOperationParameters_to_mldev(
from_object: Union[dict[str, Any], object],
parent_object: Optional[dict[str, Any]] = None,
) -> dict[str, Any]:
to_object: dict[str, Any] = {}
if getv(from_object, ['operation_name']) is not None:
raise ValueError('operation_name parameter is not supported in Gemini API.')

if getv(from_object, ['resource_name']) is not None:
raise ValueError('resource_name parameter is not supported in Gemini API.')

if getv(from_object, ['config']) is not None:
raise ValueError('config parameter is not supported in Gemini API.')

return to_object


def _GetOperationParameters_to_mldev(
from_object: Union[dict[str, Any], object],
parent_object: Optional[dict[str, Any]] = None,
) -> dict[str, Any]:
to_object: dict[str, Any] = {}
if getv(from_object, ['operation_name']) is not None:
setv(
to_object,
['_url', 'operationName'],
getv(from_object, ['operation_name']),
)

if getv(from_object, ['config']) is not None:
setv(to_object, ['config'], getv(from_object, ['config']))

return to_object


def _FetchPredictOperationParameters_to_vertex(
from_object: Union[dict[str, Any], object],
parent_object: Optional[dict[str, Any]] = None,
) -> dict[str, Any]:
to_object: dict[str, Any] = {}
if getv(from_object, ['operation_name']) is not None:
setv(to_object, ['operationName'], getv(from_object, ['operation_name']))

if getv(from_object, ['resource_name']) is not None:
setv(
to_object,
['_url', 'resourceName'],
getv(from_object, ['resource_name']),
)

if getv(from_object, ['config']) is not None:
setv(to_object, ['config'], getv(from_object, ['config']))

return to_object


def _GetOperationParameters_to_vertex(
from_object: Union[dict[str, Any], object],
parent_object: Optional[dict[str, Any]] = None,
) -> dict[str, Any]:
to_object: dict[str, Any] = {}
if getv(from_object, ['operation_name']) is not None:
setv(
to_object,
['_url', 'operationName'],
getv(from_object, ['operation_name']),
)

if getv(from_object, ['config']) is not None:
setv(to_object, ['config'], getv(from_object, ['config']))

return to_object


def _Video_from_mldev(
from_object: Union[dict[str, Any], object],
parent_object: Optional[dict[str, Any]] = None,
) -> dict[str, Any]:
to_object: dict[str, Any] = {}
if getv(from_object, ['video', 'uri']) is not None:
setv(to_object, ['uri'], getv(from_object, ['video', 'uri']))

if getv(from_object, ['video', 'encodedVideo']) is not None:
setv(
to_object,
['video_bytes'],
base_t.t_bytes(getv(from_object, ['video', 'encodedVideo'])),
)

if getv(from_object, ['encoding']) is not None:
setv(to_object, ['mime_type'], getv(from_object, ['encoding']))

return to_object


def _GeneratedVideo_from_mldev(
from_object: Union[dict[str, Any], object],
parent_object: Optional[dict[str, Any]] = None,
) -> dict[str, Any]:
to_object: dict[str, Any] = {}
if getv(from_object, ['_self']) is not None:
setv(
to_object,
['video'],
_Video_from_mldev(getv(from_object, ['_self']), to_object),
)

return to_object


def _GenerateVideosResponse_from_mldev(
from_object: Union[dict[str, Any], object],
parent_object: Optional[dict[str, Any]] = None,
) -> dict[str, Any]:
to_object: dict[str, Any] = {}
if getv(from_object, ['generatedSamples']) is not None:
setv(
to_object,
['generated_videos'],
[
_GeneratedVideo_from_mldev(item, to_object)
for item in getv(from_object, ['generatedSamples'])
],
)

if getv(from_object, ['raiMediaFilteredCount']) is not None:
setv(
to_object,
['rai_media_filtered_count'],
getv(from_object, ['raiMediaFilteredCount']),
)

if getv(from_object, ['raiMediaFilteredReasons']) is not None:
setv(
to_object,
['rai_media_filtered_reasons'],
getv(from_object, ['raiMediaFilteredReasons']),
)

return to_object


def _GenerateVideosOperation_from_mldev(
from_object: Union[dict[str, Any], object],
parent_object: Optional[dict[str, Any]] = None,
) -> dict[str, Any]:
to_object: dict[str, Any] = {}
if getv(from_object, ['name']) is not None:
setv(to_object, ['name'], getv(from_object, ['name']))

if getv(from_object, ['metadata']) is not None:
setv(to_object, ['metadata'], getv(from_object, ['metadata']))

if getv(from_object, ['done']) is not None:
setv(to_object, ['done'], getv(from_object, ['done']))

if getv(from_object, ['error']) is not None:
setv(to_object, ['error'], getv(from_object, ['error']))

if getv(from_object, ['response', 'generateVideoResponse']) is not None:
setv(
to_object,
['response'],
_GenerateVideosResponse_from_mldev(
getv(from_object, ['response', 'generateVideoResponse']), to_object
),
)

if getv(from_object, ['response', 'generateVideoResponse']) is not None:
setv(
to_object,
['result'],
_GenerateVideosResponse_from_mldev(
getv(from_object, ['response', 'generateVideoResponse']), to_object
),
)

return to_object


def _Video_from_vertex(
from_object: Union[dict[str, Any], object],
parent_object: Optional[dict[str, Any]] = None,
) -> dict[str, Any]:
to_object: dict[str, Any] = {}
if getv(from_object, ['gcsUri']) is not None:
setv(to_object, ['uri'], getv(from_object, ['gcsUri']))

if getv(from_object, ['bytesBase64Encoded']) is not None:
setv(
to_object,
['video_bytes'],
base_t.t_bytes(getv(from_object, ['bytesBase64Encoded'])),
)

if getv(from_object, ['mimeType']) is not None:
setv(to_object, ['mime_type'], getv(from_object, ['mimeType']))

return to_object


def _GeneratedVideo_from_vertex(
from_object: Union[dict[str, Any], object],
parent_object: Optional[dict[str, Any]] = None,
) -> dict[str, Any]:
to_object: dict[str, Any] = {}
if getv(from_object, ['_self']) is not None:
setv(
to_object,
['video'],
_Video_from_vertex(getv(from_object, ['_self']), to_object),
)

return to_object


def _GenerateVideosResponse_from_vertex(
from_object: Union[dict[str, Any], object],
parent_object: Optional[dict[str, Any]] = None,
) -> dict[str, Any]:
to_object: dict[str, Any] = {}
if getv(from_object, ['videos']) is not None:
setv(
to_object,
['generated_videos'],
[
_GeneratedVideo_from_vertex(item, to_object)
for item in getv(from_object, ['videos'])
],
)

if getv(from_object, ['raiMediaFilteredCount']) is not None:
setv(
to_object,
['rai_media_filtered_count'],
getv(from_object, ['raiMediaFilteredCount']),
)

if getv(from_object, ['raiMediaFilteredReasons']) is not None:
setv(
to_object,
['rai_media_filtered_reasons'],
getv(from_object, ['raiMediaFilteredReasons']),
)

return to_object


def _GenerateVideosOperation_from_vertex(
from_object: Union[dict[str, Any], object],
parent_object: Optional[dict[str, Any]] = None,
) -> dict[str, Any]:
to_object: dict[str, Any] = {}
if getv(from_object, ['name']) is not None:
setv(to_object, ['name'], getv(from_object, ['name']))

if getv(from_object, ['metadata']) is not None:
setv(to_object, ['metadata'], getv(from_object, ['metadata']))

if getv(from_object, ['done']) is not None:
setv(to_object, ['done'], getv(from_object, ['done']))

if getv(from_object, ['error']) is not None:
setv(to_object, ['error'], getv(from_object, ['error']))

if getv(from_object, ['response']) is not None:
setv(
to_object,
['response'],
_GenerateVideosResponse_from_vertex(
getv(from_object, ['response']), to_object
),
)

if getv(from_object, ['response']) is not None:
setv(
to_object,
['result'],
_GenerateVideosResponse_from_vertex(
getv(from_object, ['response']), to_object
),
)

return to_object
10 changes: 0 additions & 10 deletions google/genai/_transformers.py
Original file line number Diff line number Diff line change
Expand Up @@ -1156,16 +1156,6 @@ def t_tuning_job_status(status: str) -> Union[types.JobState, str]:
return status


# Some fields don't accept url safe base64 encoding.
# We shouldn't use this transformer if the backend adhere to Cloud Type
# format https://cloud.google.com/docs/discovery/type-format.
# TODO(b/389133914,b/390320301): Remove the hack after backend fix the issue.
def t_bytes(data: bytes) -> str:
if not isinstance(data, bytes):
return data
return base64.b64encode(data).decode('ascii')


def t_content_strict(content: types.ContentOrDict) -> types.Content:
if isinstance(content, dict):
return types.Content.model_validate(content)
Expand Down
Loading