Skip to content

fix(api_client): explicitly close connections and clear large response buffers to prevent memory leaks - #2900

Open
x-tahosin wants to merge 1 commit into
googleapis:mainfrom
x-tahosin:bugfix-memory-leak-2369
Open

fix(api_client): explicitly close connections and clear large response buffers to prevent memory leaks#2900
x-tahosin wants to merge 1 commit into
googleapis:mainfrom
x-tahosin:bugfix-memory-leak-2369

Conversation

@x-tahosin

@x-tahosin x-tahosin commented Aug 23, 2026

Copy link
Copy Markdown

Description

When running multiple async generation requests, the google-genai SDK leaks memory. The underlying httpx or aiohttp response objects accumulate in memory because they are not explicitly closed after the text is read. This causes unbounded memory growth over time.

Fix implemented

I modified google/genai/_api_client.py to eagerly release network resources. For non streaming responses, as soon as response.text() is read, the patch explicitly calls close() or release() on the response object and clears out the internal _content buffers.

Steps to Reproduce

Run a loop doing await client.aio.models.generate_content(...). Check tracemalloc. You will see httpx.Response and raw bytes accumulating in memory. After this patch, memory stays flat.

@google-cla

google-cla Bot commented Aug 23, 2026

Copy link
Copy Markdown

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

@x-tahosin
x-tahosin force-pushed the bugfix-memory-leak-2369 branch from 91f0f86 to 3e60c74 Compare August 23, 2026 17:07
…d growth

Fixes googleapis#2369.

When using generate_content(stream=False), the SDK extracts the text from the response and wraps it in a list inside HttpResponse. However, the underlying httpx.Response or aiohttp.ClientResponse can be kept alive by exceptions or internal async event loop state. For responses containing large strings (e.g. base64 images), this causes a significant memory leak.

This change ensures that once the text is read, we explicitly close the connection and clear large string buffers from the response objects.
@x-tahosin
x-tahosin force-pushed the bugfix-memory-leak-2369 branch from 3e60c74 to 346f7b1 Compare August 23, 2026 17:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant