58 lines
1.6 KiB
Python
58 lines
1.6 KiB
Python
"""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)
|