Skip to content
Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -206,10 +206,11 @@ def _contents_from_response(self, response: genai_types.GenerateImagesResponse)
content = []
if response.generated_images:
for image in response.generated_images:
b64_data = base64.b64encode(image.image.image_bytes).decode('utf-8')
content.append(
Part(
media=Media(
url=base64.b64encode(image.image.image_bytes),
url=f'data:{image.image.mime_type};base64,{b64_data}',
contentType=image.image.mime_type,
)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,10 +89,13 @@ def to_gemini(cls, part: Part) -> genai.types.Part:
)
)
if isinstance(part.root, MediaPart):
url = part.root.media.url
if not url.startswith(cls.DATA):
raise ValueError(f'Unsupported media URL for inline_data: {url}')
data = base64.b64decode(url.split(',', 1)[1])
return genai.types.Part(
inline_data=genai.types.Blob(
data=part.root.media.url,
mime_type=part.root.media.content_type,
data=data,
)
)
if isinstance(part.root, CustomPart):
Expand Down Expand Up @@ -160,9 +163,10 @@ def from_gemini(cls, part: genai.types.Part) -> Part:
)
)
if part.inline_data:
b64_data = base64.b64encode(part.inline_data.data).decode('utf-8')
return Part(
media=Media(
url=base64.b64encode(part.inline_data.data),
url=f'data:{part.inline_data.mime_type};base64,{b64_data}',
contentType=part.inline_data.mime_type,
)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,8 @@
#
# SPDX-License-Identifier: Apache-2.0

import base64
import sys
import unittest
import urllib.request
from unittest.mock import ANY, AsyncMock, MagicMock, patch

if sys.version_info < (3, 11): # noqa
Expand Down Expand Up @@ -186,8 +185,8 @@ async def test_generate_media_response(mocker, version):

assert content.root.media.content_type == response_mimetype

decoded_url = base64.b64decode(content.root.media.url)
assert decoded_url == response_byte_string
with urllib.request.urlopen(content.root.media.url) as response:
assert response.read() == response_byte_string


def test_convert_schema_property(mocker):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
# SPDX-License-Identifier: Apache-2.0

import base64
import urllib.request

import pytest
from google import genai
Expand Down Expand Up @@ -76,5 +77,5 @@ async def test_generate_media_response(mocker, version):

assert content.root.media.content_type == response_mimetype

decoded_url = base64.b64decode(content.root.media.url)
assert decoded_url == response_byte_string
with urllib.request.urlopen(content.root.media.url) as response:
assert response.read() == response_byte_string
3 changes: 0 additions & 3 deletions py/samples/google-genai-hello/src/google_genai_hello.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,6 @@ async def simple_generate_with_tools_flow(value: int, ctx: ActionRunContext) ->
The generated response with a function.
"""
response = await ai.generate(
model='googleai/gemini-2.5-flash',
prompt=f'what is a gablorken of {value}',
tools=['gablorkenTool'],
on_chunk=ctx.send_chunk,
Expand Down Expand Up @@ -149,7 +148,6 @@ async def simple_generate_with_interrupts(value: int) -> str:
The generated response with a function.
"""
response1 = await ai.generate(
model='googleai/gemini-2.5-flash',
messages=[
Message(
role=Role.USER,
Expand All @@ -164,7 +162,6 @@ async def simple_generate_with_interrupts(value: int) -> str:

tr = tool_response(response1.interrupts[0], 178)
response = await ai.generate(
model='googleai/gemini-2.5-flash',
messages=response1.messages,
tool_responses=[tr],
tools=['gablorkenTool'],
Expand Down
Loading