From cc85ce73c7eb7d6d78dd1ca45667ee41a5a47137 Mon Sep 17 00:00:00 2001 From: Mark Daoust Date: Mon, 13 May 2024 10:46:48 -0700 Subject: [PATCH 1/3] Revert "Use api_endpoint for uploads (#330)" (#333) This reverts commit bb58ab83865a4a2f60688af7d95166bfd379a72a. --- google/generativeai/client.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/google/generativeai/client.py b/google/generativeai/client.py index 3d6392391..bd45201dc 100644 --- a/google/generativeai/client.py +++ b/google/generativeai/client.py @@ -27,6 +27,7 @@ __version__ = "0.0.0" USER_AGENT = "genai-py" +GENAI_API_DISCOVERY_URL = "https://generativelanguage.googleapis.com/$discovery/rest" class FileServiceClient(glm.FileServiceClient): @@ -42,7 +43,7 @@ def _setup_discovery_api(self): request = googleapiclient.http.HttpRequest( http=httplib2.Http(), postproc=lambda resp, content: (resp, content), - uri=f"https://{self.api_endpoint}/$discovery/rest?version=v1beta&key={api_key}", + uri=f"{GENAI_API_DISCOVERY_URL}?version=v1beta&key={api_key}", ) response, content = request.execute() From 855f96f3def19100f3e518bf2114c62ac592158d Mon Sep 17 00:00:00 2001 From: Mark Daoust Date: Mon, 13 May 2024 10:50:01 -0700 Subject: [PATCH 2/3] Update version.py (#334) --- google/generativeai/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/google/generativeai/version.py b/google/generativeai/version.py index 9513911f8..7e073bf0e 100644 --- a/google/generativeai/version.py +++ b/google/generativeai/version.py @@ -14,4 +14,4 @@ # limitations under the License. from __future__ import annotations -__version__ = "0.5.2" +__version__ = "0.5.3" From efead6bea6768f6f4a3d90d348647b0a54fe2435 Mon Sep 17 00:00:00 2001 From: Michael Chen Date: Mon, 13 May 2024 14:41:31 -0400 Subject: [PATCH 3/3] Add support for resumable uploads for File API (#275) * add support for resumable uploads * run formatter * update docs * simplify resumable flow and set as default --- google/generativeai/client.py | 5 ++++- google/generativeai/files.py | 19 ++++++++++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/google/generativeai/client.py b/google/generativeai/client.py index bd45201dc..e8e91ae7e 100644 --- a/google/generativeai/client.py +++ b/google/generativeai/client.py @@ -59,6 +59,7 @@ def create_file( mime_type: str | None = None, name: str | None = None, display_name: str | None = None, + resumable: bool = True, ) -> glm.File: if self._discovery_api is None: self._setup_discovery_api() @@ -69,7 +70,9 @@ def create_file( if display_name is not None: file["displayName"] = display_name - media = googleapiclient.http.MediaFileUpload(filename=path, mimetype=mime_type) + media = googleapiclient.http.MediaFileUpload( + filename=path, mimetype=mime_type, resumable=resumable + ) request = self._discovery_api.media().upload(body={"file": file}, media_body=media) result = request.execute() diff --git a/google/generativeai/files.py b/google/generativeai/files.py index ffd9e6ed8..13535c47f 100644 --- a/google/generativeai/files.py +++ b/google/generativeai/files.py @@ -35,7 +35,24 @@ def upload_file( mime_type: str | None = None, name: str | None = None, display_name: str | None = None, + resumable: bool = True, ) -> file_types.File: + """Uploads a file using a supported file service. + + Args: + path: The path to the file to be uploaded. + mime_type: The MIME type of the file. If not provided, it will be + inferred from the file extension. + name: The name of the file in the destination (e.g., 'files/sample-image'). + If not provided, a system generated ID will be created. + display_name: Optional display name of the file. + resumable: Whether to use the resumable upload protocol. By default, this is enabled. + See details at + https://googleapis.github.io/google-api-python-client/docs/epy/googleapiclient.http.MediaFileUpload-class.html#resumable + + Returns: + file_types.File: The response of the uploaded file. + """ client = get_default_file_client() path = pathlib.Path(os.fspath(path)) @@ -50,7 +67,7 @@ def upload_file( display_name = path.name response = client.create_file( - path=path, mime_type=mime_type, name=name, display_name=display_name + path=path, mime_type=mime_type, name=name, display_name=display_name, resumable=resumable ) return file_types.File(response)