From d40fc83d7549293372f3d20cc599a79ec355acef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E6=A0=8B=E6=A2=81?= Date: Mon, 3 Nov 2025 20:30:09 +0800 Subject: [PATCH] fix(server): iterate provider instances during shutdown Problem: cleanup_providers() loops over dict.items(), so the loop variable is a (ProviderType, ModelProvider) tuple and close() never runs. Impact: Providers like DIAL keep httpx clients open, leaking sockets and emitting unclosed-client warnings on shutdown. Solution: Iterate registry._initialized_providers.values() so we close real provider instances and release network resources. --- server.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server.py b/server.py index 26ed923..8a8050f 100644 --- a/server.py +++ b/server.py @@ -572,7 +572,8 @@ def configure_providers(): try: registry = ModelProviderRegistry() if hasattr(registry, "_initialized_providers"): - for provider in list(registry._initialized_providers.items()): + # Iterate over provider instances (values), not (type, instance) tuples + for provider in list(registry._initialized_providers.values()): try: if provider and hasattr(provider, "close"): provider.close()