From 4db100cade4cd33a9d282b91b470ec7f9c12f06c Mon Sep 17 00:00:00 2001 From: yumoqing Date: Fri, 10 Apr 2026 16:48:33 +0800 Subject: [PATCH] bugfix --- llmage/asyncinference.py | 19 ++++++++++++++----- llmage/init.py | 4 +++- wwwroot/get_asynctask_status.dspy | 2 +- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/llmage/asyncinference.py b/llmage/asyncinference.py index 3416e40..e74730b 100644 --- a/llmage/asyncinference.py +++ b/llmage/asyncinference.py @@ -29,12 +29,16 @@ where userid=${userid}$ return recs return [] -async def get_asynctask_status(taskid): +async def get_asynctask_status(request, taskid): env = ServerEnv() async with get_sor_context(env, 'llmage') as sor: recs = await sor.R('llmusage', {'taskid': taskid}) if recs: r = recs[0] + if r.status not in ['SUCCEEDED', 'FAILED']: + await query_task_status(request, r.id, onetime=True) + recs = await sor.R('llmusage', {'id': r.id}) + r = recs[0] output = await get_lastoutput(r.ioinfo) return output return { @@ -107,8 +111,7 @@ async def async_uapi_request(request, llm, if d.status == 'FAILED': e = Exception(f'resp={d} FFAILED') return - asyncio.create_task(query_task_status(request, llm.upappid, - llm.query_apiname, luid, userid, d.taskid)) + asyncio.create_task(query_task_status(request, luid)) except Exception as e: ed = {"error": f"ERROR:{e}", "status": "FAILED"} @@ -147,10 +150,14 @@ async def get_llm_llmusage(luid): llm = llms[0] return llm, llmusage -async def query_task_status(request, upappid, apiname, luid, userid, taskid): +async def query_task_status(request, luid, onetime=False): uapi = UpAppApi(request) - apinames = apiname.split(',') llm, llmusage = await get_llm_llmusage(luid) + env = ServerEnv() + userid = await env.uapi_data.get_calluserid(llm.upappid, orgid=llm.ownerid) + taskid = llmusage.taskid + upappid = llm.upappid + apinames = llm.query_apiname.split(',') for apiname in apinames: while True: @@ -179,6 +186,8 @@ async def query_task_status(request, upappid, apiname, luid, userid, taskid): dcritical(f'finished .. {llmusage.status=}') return + if onetime: + critical(f'onetime is true, returned') await asyncio.sleep(llm.query_period or 30) critical(f'{llm.query_period=} seconds will retry, {changed.status=}') diff --git a/llmage/init.py b/llmage/init.py index 859c26e..a81a823 100644 --- a/llmage/init.py +++ b/llmage/init.py @@ -7,6 +7,7 @@ from .jimeng import jimeng_auth_headers from .utils import ( llm_query_orders, read_webpath, + get_owner_userid, llm_query_price, get_llm_by_model ) @@ -30,7 +31,7 @@ from .accounting import ( from .asyncinference import ( get_asynctask_status, - query_task_status, + query_task_status get_today_asynctask_list ) @@ -60,6 +61,7 @@ def load_llmage(): env.get_llms_sort_by_provider = get_llms_sort_by_provider env.keling_token = keling_token env.llm_query_price = llm_query_price + env.get_owner_userid = get_owner_userid rf = RegisterFunction() rf.register('jimeng_auth_headers', jimeng_auth_headers) add_cleanupctx(start_backend) diff --git a/wwwroot/get_asynctask_status.dspy b/wwwroot/get_asynctask_status.dspy index fa62eb3..a145aeb 100644 --- a/wwwroot/get_asynctask_status.dspy +++ b/wwwroot/get_asynctask_status.dspy @@ -1,5 +1,5 @@ taskid = params_kw.taskid -s = await get_asynctask_status(taskid) +s = await get_asynctask_status(request, taskid) return { 'status': 'ok', 'data': {