-
-
Notifications
You must be signed in to change notification settings - Fork 3.4k
Fix: Properly close aiohttp client sessions to prevent resource leaks #12251
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
colesmcintosh
wants to merge
11
commits into
BerriAI:main
Choose a base branch
from
colesmcintosh:fix/async-client-resource-leak
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Fix: Properly close aiohttp client sessions to prevent resource leaks #12251
colesmcintosh
wants to merge
11
commits into
BerriAI:main
from
colesmcintosh:fix/async-client-resource-leak
+182
−0
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
…BerriAI#12107) - Add close() method to BaseLLMAIOHTTPHandler to properly close aiohttp ClientSession - Create async_client_cleanup module with utility functions to close all cached async clients - Register automatic cleanup at exit via atexit hook - Export close_litellm_async_clients() function for manual cleanup - Add comprehensive tests to verify resource cleanup This fixes the "Unclosed client session" and "Unclosed connector" warnings when using acompletion with Gemini and other models that use aiohttp. Fixes BerriAI#12107
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Title
Fix: Properly close aiohttp client sessions to prevent resource leaks
Relevant issues
Fixes #12107
Pre-Submission checklist
Please complete all items before asking a LiteLLM maintainer to review your PR
tests/litellm/
directory, Adding at least 1 test is a hard requirement - see detailsmake test-unit
Type
🐛 Bug Fix
Changes
This PR fixes the resource leak issue reported in #12107 where aiohttp client sessions were not being properly closed when using
acompletion
with Gemini models (and other models that use aiohttp).Problem
When using
acompletion
, the code creates aiohttpClientSession
objects that are cached but never closed, leading to "Unclosed client session" and "Unclosed connector" warnings.Solution
Added close() method to BaseLLMAIOHTTPHandler: This method properly closes the aiohttp ClientSession if it exists and is not already closed.
Created async_client_cleanup module: This module provides utility functions to close all cached async clients:
close_litellm_async_clients()
: Manually close all cached async clientsregister_async_client_cleanup()
: Register automatic cleanup at exit using atexitAutomatic cleanup registration: The cleanup is automatically registered when litellm is imported, ensuring clients are closed when the program exits.
Exported manual cleanup function: Users can also manually call
litellm.close_litellm_async_clients()
if they need to clean up resources before exit.Testing
Added comprehensive tests in
tests/test_resource_cleanup.py
that verify:Test Results
Usage Example
The workaround mentioned in the issue is now built-in: