Skip to content

Commit 3347707

Browse files
author
LittleMouse
committed
[feat] The asr backend supports model switching.
1 parent 3e211eb commit 3347707

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

api_server.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff 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)

backend/asr_client_backend.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff 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(

0 commit comments

Comments
 (0)