File tree Expand file tree Collapse file tree 2 files changed +19
-0
lines changed Expand file tree Collapse file tree 2 files changed +19
-0
lines changed Original file line number Diff line number Diff line change @@ -61,6 +61,7 @@ class ModelDispatcher:
6161 def __init__ (self ):
6262 self .backends = {}
6363 self .llm_models = set ()
64+ self .asr_models = set ()
6465 self .lock = asyncio .Lock ()
6566
6667 async def get_backend (self , model_name ):
@@ -85,7 +86,14 @@ async def get_backend(self, model_name):
8586 elif model_config ["type" ] == "tts" :
8687 self .backends [model_name ] = TtsClientBackend (model_config )
8788 elif model_config ["type" ] == "asr" :
89+ if model_name not in self .asr_models :
90+ for old_model_name in list (self .asr_models ):
91+ old_instance = self .backends .pop (old_model_name , None )
92+ if old_instance :
93+ await old_instance .close ()
94+ self .asr_models .clear ()
8895 self .backends [model_name ] = ASRClientBackend (model_config )
96+ self .asr_models .add (model_name )
8997 else :
9098 return None
9199 return self .backends .get (model_name )
Original file line number Diff line number Diff line change @@ -81,6 +81,17 @@ async def _release_client(self, client):
8181 self ._client_pool .append (client )
8282 self .logger .debug (f"Returned client to pool | ID:{ id (client )} " )
8383
84+ async def close (self ):
85+ for task in self ._active_tasks :
86+ task .cancel ()
87+ if self ._active_tasks :
88+ await asyncio .wait (self ._active_tasks , timeout = 2 )
89+ for client in self ._client_pool :
90+ client .exit ()
91+ self ._client_pool .clear ()
92+ self ._active_clients .clear ()
93+ self ._inference_executor .shutdown (wait = False )
94+
8495 async def _inference (self , client , audio_b64 : str ):
8596 loop = asyncio .get_event_loop ()
8697 for chunk in await loop .run_in_executor (
You can’t perform that action at this time.
0 commit comments