Skip to content

Commit c12eed1

Browse files
committed
Add async context manager to OpenAI model client
1 parent 027ecf0 commit c12eed1

2 files changed

Lines changed: 17 additions & 0 deletions

File tree

python/packages/autogen-ext/src/autogen_ext/models/openai/_openai_client.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1142,6 +1142,12 @@ async def _create_stream_chunks_beta_client(
11421142
async def close(self) -> None:
11431143
await self._client.close()
11441144

1145+
async def __aenter__(self) -> "BaseOpenAIChatCompletionClient":
1146+
return self
1147+
1148+
async def __aexit__(self, exc_type: Any, exc_value: Any, traceback: Any) -> None:
1149+
await self.close()
1150+
11451151
def actual_usage(self) -> RequestUsage:
11461152
return self._actual_usage
11471153

python/packages/autogen-ext/tests/models/test_openai_model_client.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,17 @@ class MyArgs(BaseModel):
7878
query: str = Field(description="The description.")
7979

8080

81+
@pytest.mark.asyncio
82+
async def test_openai_client_is_async_context_manager() -> None:
83+
client = OpenAIChatCompletionClient(model="gpt-4o", api_key="test")
84+
client.close = AsyncMock() # type: ignore[method-assign]
85+
86+
async with client as entered:
87+
assert entered is client
88+
89+
client.close.assert_awaited_once()
90+
91+
8192
class MockChunkDefinition(BaseModel):
8293
# defining elements for diffentiating mocking chunks
8394
chunk_choice: ChunkChoice

0 commit comments

Comments
 (0)