bugfix
This commit is contained in:
parent
cf5c7cec4c
commit
19b05d5d29
@ -16,6 +16,101 @@ from ahserver.filestorage import FileStorage
|
|||||||
from .accounting import llm_accounting, llm_charging
|
from .accounting import llm_accounting, llm_charging
|
||||||
from .utils import *
|
from .utils import *
|
||||||
|
|
||||||
|
async def grab_task_status(request, taskid):
|
||||||
|
env = ServerEnv()
|
||||||
|
llm = llmusage = None
|
||||||
|
async with get_sor_context(env, 'llmage') as sor:
|
||||||
|
recs = await sor.R('llmusage', {'taskid': taskid})
|
||||||
|
if len(recs) == 0:
|
||||||
|
exception(f'{taskid=} not found in llmusage')
|
||||||
|
return None
|
||||||
|
r = recs[0]
|
||||||
|
if r.status == 'SUCCEEDED':
|
||||||
|
io = json.loads(r.ioinfo)
|
||||||
|
return io['output'][-1]
|
||||||
|
llmusage = r
|
||||||
|
recs = await sor.R('llm', {'id': r.llmid})
|
||||||
|
if len(recs) == 0:
|
||||||
|
exception(f'id={r.llmid} not found in llm')
|
||||||
|
return None
|
||||||
|
llm = recs[0]
|
||||||
|
|
||||||
|
async with get_sor_context(env, 'llmage') as sor:
|
||||||
|
uapi = UAPI(request, sor)
|
||||||
|
apinames = llm.apiname.split(',')
|
||||||
|
apiname = apinames[0]
|
||||||
|
userid = await get_owner_userid(sor, llm)
|
||||||
|
changed = None
|
||||||
|
ns = {'taskid': taskid}
|
||||||
|
d = None
|
||||||
|
try:
|
||||||
|
b = await uapi.call(llm.upappid, apiname, userid, params=ns)
|
||||||
|
if isinstance(b, bytes):
|
||||||
|
b = b.decode('utf-8')
|
||||||
|
d = json.loads(b)
|
||||||
|
changed = DictObject(**{
|
||||||
|
'status': d['status'],
|
||||||
|
'output': d
|
||||||
|
})
|
||||||
|
if changed.status == 'SUCCEEDED' and len(apinames) > 1:
|
||||||
|
while True:
|
||||||
|
if changed.output.video:
|
||||||
|
break;
|
||||||
|
x = await uapi.call(llm.upappid, apiname[1], userid, params=d)
|
||||||
|
g = json.load(x)
|
||||||
|
if g.get('video'):
|
||||||
|
changed.output.video = g.get('video')
|
||||||
|
break
|
||||||
|
await asyncio.sleep(0.2)
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
exception(f'{e}, {b=}')
|
||||||
|
changed = {
|
||||||
|
'status': 'FAILED',
|
||||||
|
'output': {'status': 'FAILED', 'error': str(e)}
|
||||||
|
}
|
||||||
|
await add_new_llmusage_output(llmusage.id, changed)
|
||||||
|
return
|
||||||
|
if changed.status == 'SUCCEEDED':
|
||||||
|
llmusage.usage = changed.output.usage
|
||||||
|
if llm.ppid:
|
||||||
|
try:
|
||||||
|
charging = await llm_charging(sor,
|
||||||
|
llm.ppid, llmusage)
|
||||||
|
if charging:
|
||||||
|
changed.amount = charging.amount
|
||||||
|
changed.cost = charging.cost
|
||||||
|
debug(f'{changed=},{charging=}')
|
||||||
|
else:
|
||||||
|
changed.amount = cost = 0.0
|
||||||
|
except Exception as e:
|
||||||
|
e1 = Exception(f'{llm.ppid} charging error{e}, {llm.ppid}, {llmusage=}')
|
||||||
|
exception(f'{e}')
|
||||||
|
changed.amount = changed.cost = 0
|
||||||
|
else:
|
||||||
|
changed.amount = 0
|
||||||
|
changed.cost = 0
|
||||||
|
llmusage.amount = changed.amount
|
||||||
|
llmusage.cost = changed.cost
|
||||||
|
if len(apinames) > 1:
|
||||||
|
while True:
|
||||||
|
x = await uapi.call(llm.upappid, apiname[1], userid, params=d)
|
||||||
|
g = json.load(x)
|
||||||
|
if g.get('video'):
|
||||||
|
changed
|
||||||
|
await add_new_llmusage_output(llmusage.id, changed)
|
||||||
|
if changed.status == 'FAILED':
|
||||||
|
return changed.output
|
||||||
|
if changed.status == 'SUCCEEDED':
|
||||||
|
if llmusage.accounting_status != 'accounted' \
|
||||||
|
and changed.amount > 0.00001:
|
||||||
|
try:
|
||||||
|
await llm_accounting(request, llmusage)
|
||||||
|
except Exception as e:
|
||||||
|
debug(f'{changed=} accounting failed,{e=} ')
|
||||||
|
return changed.output
|
||||||
|
return changed.output
|
||||||
|
|
||||||
async def get_today_asynctask_list(userid):
|
async def get_today_asynctask_list(userid):
|
||||||
env = ServerEnv()
|
env = ServerEnv()
|
||||||
async with get_sor_context(env, 'llmage') as sor:
|
async with get_sor_context(env, 'llmage') as sor:
|
||||||
@ -139,6 +234,10 @@ async def add_new_llmusage_output(luid, newd):
|
|||||||
await sor.U('llmusage', r)
|
await sor.U('llmusage', r)
|
||||||
debug(f'llmuasage update to {r}')
|
debug(f'llmuasage update to {r}')
|
||||||
return
|
return
|
||||||
|
else:
|
||||||
|
exception(f'add_new_llmusage_output({luid}, {newd}) llmusage not found')
|
||||||
|
return
|
||||||
|
|
||||||
exception(f'add_new_llmusage_output({luid}, {newd}) Error')
|
exception(f'add_new_llmusage_output({luid}, {newd}) Error')
|
||||||
|
|
||||||
def get_llmusage_last_output(r):
|
def get_llmusage_last_output(r):
|
||||||
|
|||||||
@ -26,6 +26,7 @@ from .accounting import (
|
|||||||
|
|
||||||
from .asyncinference import (
|
from .asyncinference import (
|
||||||
get_asynctask_status,
|
get_asynctask_status,
|
||||||
|
grab_task_status,
|
||||||
query_task_status,
|
query_task_status,
|
||||||
get_today_asynctask_list
|
get_today_asynctask_list
|
||||||
)
|
)
|
||||||
@ -39,6 +40,7 @@ def load_llmage():
|
|||||||
env.get_asynctask_status = get_asynctask_status
|
env.get_asynctask_status = get_asynctask_status
|
||||||
env.query_task_status = query_task_status
|
env.query_task_status = query_task_status
|
||||||
env.get_llm = get_llm
|
env.get_llm = get_llm
|
||||||
|
env.grab_task_status = grab_task_status
|
||||||
env.b64media2url = b64media2url
|
env.b64media2url = b64media2url
|
||||||
env.hex2base64 = hex2base64
|
env.hex2base64 = hex2base64
|
||||||
env.inference = inference
|
env.inference = inference
|
||||||
|
|||||||
@ -3,7 +3,7 @@ userid = await get_user()
|
|||||||
if userid is None:
|
if userid is None:
|
||||||
return openai_403
|
return openai_403
|
||||||
|
|
||||||
s = await get_asynctask_status(taskid)
|
s = await grab_task_status(taskid)
|
||||||
return {
|
return {
|
||||||
'status': 'ok',
|
'status': 'ok',
|
||||||
'data': {
|
'data': {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user