From 9521c679db9641912b97297d434adc8d000b5a9c Mon Sep 17 00:00:00 2001 From: Matt Van Horn Date: Wed, 11 Mar 2026 20:07:45 -0700 Subject: [PATCH] fix(openai): close PIL Image handles in token counting to prevent fd leak (#35742) --- libs/partners/openai/langchain_openai/chat_models/base.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/libs/partners/openai/langchain_openai/chat_models/base.py b/libs/partners/openai/langchain_openai/chat_models/base.py index 0eb07cc9bb9..57312208cd2 100644 --- a/libs/partners/openai/langchain_openai/chat_models/base.py +++ b/libs/partners/openai/langchain_openai/chat_models/base.py @@ -3693,8 +3693,8 @@ def _url_to_size(image_source: str) -> tuple[int, int] | None: ) return None - # close things (context managers) - width, height = Image.open(BytesIO(response.content)).size + with Image.open(BytesIO(response.content)) as img: + width, height = img.size return width, height except httpx.TimeoutException: logger.warning("Image URL request timed out after %s seconds", timeout) @@ -3709,7 +3709,8 @@ def _url_to_size(image_source: str) -> tuple[int, int] | None: if _is_b64(image_source): _, encoded = image_source.split(",", 1) data = base64.b64decode(encoded) - width, height = Image.open(BytesIO(data)).size + with Image.open(BytesIO(data)) as img: + width, height = img.size return width, height return None