Use BytesIO streams directly for Interactions multimodal inputs

This commit is contained in:
silveroxides
2026-10-05 23:03:27 +02:00
parent 958c37d788
commit 782e668c04
2 changed files with 20 additions and 6 deletions
+6 -4
View File
@@ -720,6 +720,8 @@ class SSL_GeminiInteractionsTextPrompt(IO.ComfyNode):
vertexai_express = config.get("vertexai_express", False)
use_vertexai_env = config.get("use_vertexai_env", False)
api_version = config.get("api_version") or "v1beta"
if (use_vertexai_env or vertexai_express) and api_version == "v1beta":
api_version = "v1beta1"
project = config.get("vertexai_project")
location = config.get("vertexai_location")
credentials_path = config.get("google_application_credentials")
@@ -840,10 +842,10 @@ class SSL_GeminiInteractionsTextPrompt(IO.ComfyNode):
media_items = []
if video_bytes is not None:
video_b64 = base64.b64encode(video_bytes).decode("utf-8")
video_stream = BytesIO(video_bytes)
v_item = {
"type": "video",
"data": video_b64,
"data": video_stream,
"mime_type": video_mime_type,
}
if media_resolution and media_resolution != "unspecified":
@@ -858,10 +860,10 @@ class SSL_GeminiInteractionsTextPrompt(IO.ComfyNode):
pil_img = Image.fromarray(img_array)
img_byte_arr = BytesIO()
pil_img.save(img_byte_arr, format='PNG')
img_b64 = base64.b64encode(img_byte_arr.getvalue()).decode("utf-8")
img_byte_arr.seek(0)
img_item = {
"type": "image",
"data": img_b64,
"data": img_byte_arr,
"mime_type": "image/png",
}
if media_resolution and media_resolution != "unspecified":
+14 -2
View File
@@ -206,8 +206,15 @@ def test_multimodal_image_input(mock_interactions_client):
img_item = call["input"][0]
assert img_item["type"] == "image"
assert img_item["mime_type"] == "image/png"
assert "data" in img_item
assert isinstance(img_item["data"], BytesIO)
assert img_item["data"].tell() == 0
assert len(img_item["data"].getvalue()) > 0
assert img_item["resolution"] == "high"
from google.genai._gaos.types.interactions.imagecontent import ImageContent
validated_img = ImageContent(**img_item)
assert isinstance(validated_img.data, str)
assert len(validated_img.data) > 0
text_item = call["input"][1]
assert text_item["type"] == "text"
assert text_item["text"] == "Describe this image"
@@ -229,7 +236,12 @@ def test_multimodal_video_input(mock_interactions_client):
vid_item = call["input"][0]
assert vid_item["type"] == "video"
assert vid_item["mime_type"] == "video/mp4"
assert base64.b64decode(vid_item["data"]) == video_data
assert isinstance(vid_item["data"], BytesIO)
assert vid_item["data"].getvalue() == video_data
from google.genai._gaos.types.interactions.videocontent import VideoContent
validated_vid = VideoContent(**vid_item)
assert base64.b64decode(validated_vid.data) == video_data
def test_structured_output_with_schema(mock_interactions_client):