Skip to content

Commit 3193c3e

Browse files
authored
Cleanup file data handling. (#321)
* Fix typing Change-Id: I09fb7df098da08bb24337b08cbbc997c4c62af1e * format Change-Id: I7923e2257a6d935bb1b60f4f81dd7910387292ae
1 parent 30337c2 commit 3193c3e

File tree

2 files changed

+43
-33
lines changed

2 files changed

+43
-33
lines changed

google/generativeai/types/content_types.py

Lines changed: 11 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ def _convert_dict(d: Mapping) -> glm.Content | glm.Part | glm.Blob:
128128
if "inline_data" in part:
129129
part["inline_data"] = to_blob(part["inline_data"])
130130
if "file_data" in part:
131-
part["file_data"] = to_file_data(part["file_data"])
131+
part["file_data"] = file_types.to_file_data(part["file_data"])
132132
return glm.Part(part)
133133
elif is_blob_dict(d):
134134
blob = d
@@ -176,43 +176,21 @@ def to_blob(blob: BlobType) -> glm.Blob:
176176
)
177177

178178

179-
class FileDataDict(TypedDict):
180-
mime_type: str
181-
file_uri: str
182-
183-
184-
FileDataType = Union[FileDataDict, glm.FileData, file_types.File]
185-
186-
187-
def to_file_data(file_data: FileDataType):
188-
if isinstance(file_data, dict):
189-
if "file_uri" in file_data:
190-
file_data = glm.FileData(file_data)
191-
else:
192-
file_data = glm.File(file_data)
193-
194-
if isinstance(file_data, file_types.File):
195-
file_data = file_data.to_proto()
196-
197-
if isinstance(file_data, (glm.File, file_types.File)):
198-
file_data = glm.FileData(
199-
mime_type=file_data.mime_type,
200-
file_uri=file_data.uri,
201-
)
202-
203-
if isinstance(file_data, glm.FileData):
204-
return file_data
205-
else:
206-
raise TypeError(f"Could not convert a {type(file_data)} to `FileData`")
207-
208-
209179
class PartDict(TypedDict):
210180
text: str
211181
inline_data: BlobType
212182

213183

214184
# When you need a `Part` accept a part object, part-dict, blob or string
215-
PartType = Union[glm.Part, PartDict, BlobType, str, glm.FunctionCall, glm.FunctionResponse]
185+
PartType = Union[
186+
glm.Part,
187+
PartDict,
188+
BlobType,
189+
str,
190+
glm.FunctionCall,
191+
glm.FunctionResponse,
192+
file_types.FileDataType,
193+
]
216194

217195

218196
def is_part_dict(d):
@@ -236,7 +214,7 @@ def to_part(part: PartType):
236214
elif isinstance(part, glm.FileData):
237215
return glm.Part(file_data=part)
238216
elif isinstance(part, (glm.File, file_types.File)):
239-
return glm.Part(file_data=to_file_data(part))
217+
return glm.Part(file_data=file_types.to_file_data(part))
240218
elif isinstance(part, glm.FunctionCall):
241219
return glm.Part(function_call=part)
242220
elif isinstance(part, glm.FunctionResponse):

google/generativeai/types/file_types.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
from __future__ import annotations
1616

1717
import datetime
18+
from typing import Union
19+
from typing_extensions import TypedDict
1820

1921
from google.generativeai.client import get_default_file_client
2022

@@ -73,3 +75,33 @@ def state(self) -> glm.File.State:
7375
def delete(self):
7476
client = get_default_file_client()
7577
client.delete_file(name=self.name)
78+
79+
80+
class FileDataDict(TypedDict):
81+
mime_type: str
82+
file_uri: str
83+
84+
85+
FileDataType = Union[FileDataDict, glm.FileData, glm.File, File]
86+
87+
88+
def to_file_data(file_data: FileDataType):
89+
if isinstance(file_data, dict):
90+
if "file_uri" in file_data:
91+
file_data = glm.FileData(file_data)
92+
else:
93+
file_data = glm.File(file_data)
94+
95+
if isinstance(file_data, File):
96+
file_data = file_data.to_proto()
97+
98+
if isinstance(file_data, glm.File):
99+
file_data = glm.FileData(
100+
mime_type=file_data.mime_type,
101+
file_uri=file_data.uri,
102+
)
103+
104+
if isinstance(file_data, glm.FileData):
105+
return file_data
106+
else:
107+
raise TypeError(f"Could not convert a {type(file_data)} to `FileData`")

0 commit comments

Comments
 (0)