"""VibeVoice ASR — ahserver app with same API as fastwhisper.""" import asyncio import json from appPublic.worker import get_event_loop from appPublic.log import debug from vv import load_vibevoice_asr from ahserver.webapp import webapp from ahserver.configuredServer import add_startup from ahserver.serverenv import ServerEnv from appPublic.registerfunction import RegisterFunction async def transcribe(request, *args, **kw): env = request._run_ns payload = dict(env.params_kw) ret = await env.vibevoice.submit_task(payload) return ret async def get_status(request, *args, **kw): env = request._run_ns data = await env.vibevoice.get_status(env.params_kw.task_id) return data async def asr(request, *args, **kw): env = request._run_ns payload = json.loads(json.dumps(dict(env.params_kw))) debug(f'asr(): payload={payload}') ret = await env.vibevoice.submit_task(payload) while True: data = await env.vibevoice.get_status(ret['task_id']) if data['status'] in ['SUCCEEDED', 'FAILED']: break await asyncio.sleep(0.2) return data async def start_engine(*args, **kw): debug('starting VibeVoice ASR engine...') env = ServerEnv() asyncio.create_task(env.vibevoice.run()) debug('VibeVoice ASR engine started') def init(): rf = RegisterFunction() rf.register('asr', asr) rf.register('transcribe', transcribe) rf.register('get_status', get_status) load_vibevoice_asr() add_startup(start_engine) if __name__ == '__main__': loop = get_event_loop() webapp(init)