This commit is contained in:
yumoqing 2026-04-09 14:58:49 +08:00
parent 3659c75097
commit b5da4b902d
5 changed files with 23 additions and 29 deletions

View File

@ -169,13 +169,8 @@ where a.llmid = b.id
# debug(f'{sql=}, {ns=}, {len(recs)=}') # debug(f'{sql=}, {ns=}, {len(recs)=}')
for r in recs: for r in recs:
if r.usages is None: if r.usages is None:
io = json.loads(r.ioinfo) output = await get_lastoutput(r.ioinfo)
if len(io['output']) == 0: r.usages = output.get('usage')
llmusage.accounting_status = 'failed'
await sor.U('llmusage', {'id': llmusage.id, 'accounting_status': 'failed'})
debug(f'{len(io["output"])} is 0')
continue
r.usages = json.dumps(io['output'][-1].get('usage'))
if r.usages is None: if r.usages is None:
llmusage.accounting_status = 'failed' llmusage.accounting_status = 'failed'
await sor.U('llmusage', {'id': llmusage.id, 'accounting_status': 'failed'}) await sor.U('llmusage', {'id': llmusage.id, 'accounting_status': 'failed'})

View File

@ -35,11 +35,8 @@ async def get_asynctask_status(taskid):
recs = await sor.R('llmusage', {'taskid': taskid}) recs = await sor.R('llmusage', {'taskid': taskid})
if recs: if recs:
r = recs[0] r = recs[0]
io = json.loads(r.ioinfo) output = await get_lastoutput(r.ioinfo)
d = io.get('output', {}) return output
if isinstance(d, list):
return d[-1]
return d
return { return {
'taskid': taskid, 'taskid': taskid,
'status': 'FAILED', 'status': 'FAILED',
@ -129,14 +126,6 @@ async def modify_llmusage_status(llmusage):
'status': llmusage.status 'status': llmusage.status
}) })
def get_llmusage_last_output(r):
io = json.loads(r.ioinfo)
outs = io.get('output', [])
if len(outs) == 0:
return None
d = DictObject(**outs[-1])
return d
async def get_llm_llmusage(luid): async def get_llm_llmusage(luid):
env = request._run_ns env = request._run_ns
async with get_sor_context(env, 'llmage') as sor: async with get_sor_context(env, 'llmage') as sor:
@ -165,7 +154,7 @@ async def query_task_status(request, upappid, apiname, luid, userid, taskid):
for apiname in apinames: for apiname in apinames:
while True while True
lastoutout = get_llmusage_last_output(llmusage) lastoutout = await get_lastoutput(llmusage.ioinfo)
if lastoutout['status'] in ['FAILED', 'SUCCEEDED'] if lastoutout['status'] in ['FAILED', 'SUCCEEDED']
return return
ns = {'taskid': taskid} ns = {'taskid': taskid}

View File

@ -84,10 +84,13 @@ async def uapi_request(request, llm, callerid, callerorgid, params_kw=None):
llmusage.use_time = timestampstr() llmusage.use_time = timestampstr()
llmusage.userid = callerid llmusage.userid = callerid
llmusage.usages = json.dumps(usage, ensure_ascii=False) llmusage.usages = json.dumps(usage, ensure_ascii=False)
llmusage.ioinfo = json.dumps({ ioinfo = json.dumps({
"input": params_kw, "input": params_kw,
"output": outlines 'output': [d]
}, ensure_ascii=False) }, ensure_ascii=False)
webpath = await write_llmio(llmusage.id, ioinfo)
llmusage.ioinfo = webpath
debug(f'webpath={webpath}:')
llmusage.transno = params_kw.transno llmusage.transno = params_kw.transno
llmusage.responsed_seconds = responsed_seconds llmusage.responsed_seconds = responsed_seconds
llmusage.finish_seconds = finish_seconds llmusage.finish_seconds = finish_seconds

View File

@ -50,10 +50,12 @@ async def sync_uapi_request(request, llm, callerid, callerorgid, params_kw=None)
llmusage.use_time = timestampstr() llmusage.use_time = timestampstr()
llmusage.userid = callerid llmusage.userid = callerid
llmusage.usages = json.dumps(usage, ensure_ascii=False) llmusage.usages = json.dumps(usage, ensure_ascii=False)
llmusage.ioinfo = json.dumps({ ioinfo = json.dumps({
"input": params_kw, "input": params_kw,
"output": [d] 'output': [d]
}, ensure_ascii=False) }, ensure_ascii=False)
webpath = await write_llmio(llmusage.id, ioinfo)
llmusage.ioinfo = webpath
llmusage.transno = params_kw.transno llmusage.transno = params_kw.transno
llmusage.responsed_seconds = responsed_seconds llmusage.responsed_seconds = responsed_seconds
llmusage.finish_seconds = finish_seconds llmusage.finish_seconds = finish_seconds

View File

@ -25,6 +25,11 @@ async def append_new_llmoutput(webpath, output):
iostr = json.dumps(io, ensure_ascii=False, indent=4) iostr = json.dumps(io, ensure_ascii=False, indent=4)
f.write(iostr.encode('utf-8')) f.write(iostr.encode('utf-8'))
async def get_usage_from_lastoutput(webpath):
bin = await read_webpath(webpath)
io = json.load(bin.decode('utf-8'))
return io['output'][-1]
async def read_webpath(webpath): async def read_webpath(webpath):
fs = FileStorage() fs = FileStorage()
p = fs.realPath(webpath) p = fs.realPath(webpath)