From c1510159a4f940ac7aff99fa2b11cdc46204c0d7 Mon Sep 17 00:00:00 2001 From: Harjoth Khara Date: Thu, 7 Aug 2025 14:06:20 -0700 Subject: [PATCH] fix: preserve MCP session across tool calls When using remote MCP servers, closing the HTTP connection after listing tools causes the server to terminate the session. This change updates ResponseStreamManager.__exit__ and AsyncResponseStreamManager.__aexit__ so they only close the stream when no MCP tools are present. This preserves the session for subsequent tool calls. --- src/openai/lib/streaming/responses/_responses.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/openai/lib/streaming/responses/_responses.py b/src/openai/lib/streaming/responses/_responses.py index d45664de45..7a4b1fe9d9 100644 --- a/src/openai/lib/streaming/responses/_responses.py +++ b/src/openai/lib/streaming/responses/_responses.py @@ -1,5 +1,6 @@ from __future__ import annotations + import inspect from types import TracebackType from typing import Any, List, Generic, Iterable, Awaitable, cast @@ -126,7 +127,8 @@ def __exit__( exc_tb: TracebackType | None, ) -> None: if self.__stream is not None: - self.__stream.close() + self.__ + class AsyncResponseStream(Generic[TextFormatT]): @@ -229,7 +231,7 @@ async def __aexit__( ) -> None: if self.__stream is not None: await self.__stream.close() - + class ResponseStreamState(Generic[TextFormatT]): def __init__( @@ -301,6 +303,7 @@ def handle_event(self, event: RawResponseStreamEvent) -> List[ResponseStreamEven output_index=event.output_index, sequence_number=event.sequence_number, type="response.function_call_arguments.delta", + snapshot=output.arguments, ) )