60 lines
1.3 KiB
Python
60 lines
1.3 KiB
Python
from traceback import print_exc
|
|
import base64
|
|
from appPublic.log import info, debug, warning, error, exception, critical
|
|
from appPublic.dictObject import DictObject
|
|
from ahserver.serverenv import ServerEnv
|
|
from aiohttp.web import StreamResponse
|
|
|
|
async def generate(request, **kw):
|
|
params_kw = kw.get('params_kw', DictObject())
|
|
info(f'{params_kw=}')
|
|
model = params_kw.model
|
|
audiob64 = params_kw.audiob64
|
|
if audiob64 is None:
|
|
return {
|
|
'status':'error',
|
|
'message':'audio is null'
|
|
}
|
|
engine = None
|
|
g = ServerEnv()
|
|
if model=='whisper':
|
|
engine = g.whisper_engine
|
|
|
|
if engine is None:
|
|
return {
|
|
'status':'error',
|
|
'message':f'model={model} is not defined'
|
|
}
|
|
try:
|
|
txt = await engine.stt(audiob64)
|
|
info(f'{audiob64=}, {txt=}')
|
|
return {
|
|
"status":"ok",
|
|
"content":txt
|
|
}
|
|
except Exception as e:
|
|
exception(f'{e}')
|
|
print_exc()
|
|
return {
|
|
'status':'error',
|
|
'message':f'{e}'
|
|
}
|
|
|
|
async def streaming(request, **kw):
|
|
resp = StreamResponse()
|
|
await resp.prepare(request)
|
|
line = await request.content.readline()
|
|
content = ''
|
|
while line:
|
|
info(f'read from request stream {line=}')
|
|
txt = await engine.stt(line)
|
|
content += txt
|
|
d = json.dumps({'content':content}) + '\n'
|
|
btxt = d.encode('utf8')
|
|
await resp.write(btxt)
|
|
await resp.drain()
|
|
line = await request.content.readline()
|
|
info('response finish')
|
|
return resp
|
|
|