This commit is contained in:
yumoqing 2025-11-13 14:14:56 +08:00
parent a3b23a348f
commit 220d816993
2 changed files with 32 additions and 24 deletions

View File

@ -107,13 +107,15 @@ async def write_llmusage(llm, userid, usage, params_kw, outdata, sor):
"use_time": timestampstr(), "use_time": timestampstr(),
"userid": userid, "userid": userid,
"transno": params_kw.transno, "transno": params_kw.transno,
"evalvalue": 0,
"useages": usages, "useages": usages,
"ioinfo": json.dumps({ "ioinfo": json.dumps({
"input": params_kw, "input": params_kw,
"output": outdata "output": outdata
}) }, ensure_ascii=False)
} }
await sor.C('llmusage', d) await sor.C('llmusage', d)
return d
async def uapi_request(request, llm, sor, params_kw=None): async def uapi_request(request, llm, sor, params_kw=None):
env = request._run_ns.copy() env = request._run_ns.copy()
@ -125,6 +127,7 @@ async def uapi_request(request, llm, sor, params_kw=None):
userid = await get_owner_userid(sor, llm) userid = await get_owner_userid(sor, llm)
outlines = [] outlines = []
txt = '' txt = ''
luid = getID()
try: try:
t1 = time.time() t1 = time.time()
t2 = t1 t2 = t1
@ -155,6 +158,7 @@ async def uapi_request(request, llm, sor, params_kw=None):
if d.get('content'): if d.get('content'):
txt = txt + d['content'] txt = txt + d['content']
yield_it = True yield_it = True
d['llmusageid'] = luid
outlines.append(d) outlines.append(d)
yield json.dumps(d) + '\n' yield json.dumps(d) + '\n'
usage = outlines[-1].get('usage',{}) usage = outlines[-1].get('usage',{})
@ -170,16 +174,15 @@ async def uapi_request(request, llm, sor, params_kw=None):
if params_kw.negitive_prompt: if params_kw.negitive_prompt:
cnt += len(params_kw.negitive_promot) cnt += len(params_kw.negitive_promot)
usage['input_tokens'] = len usage['input_tokens'] = len
await write_llmusage(llm, callerid, usage, params_kw, outlines, sor) u = await write_llmusage(luid, llm, callerid, usage, params_kw, outlines, sor)
except Exception as e: except Exception as e:
exception(f'{e=},{format_exc()}') exception(f'{e=},{format_exc()}')
estr = erase_apikey(e) estr = erase_apikey(e)
outlines.append({"error": "ERROR:{estr}", "status": "FAILED" })
yield f'{{"error": "ERROR:{estr}", "status": "SUCCEEDED" }}\n'
await write_llmusage(llm, callerid, None, params_kw, outlines, sor)
return
debug(f'{txt=}') outlines.append({f"error": "ERROR:{estr}", "status": "FAILED" ,"llmusageid": luid})
yield f'{{"error": "ERROR:{estr}", "status": "SUCCEEDED" ,"llmusageid": luid}}\n'
await write_llmusage(luid, llm, callerid, None, params_kw, outlines, sor)
return
async def sync_uapi_request(request, llm, sor, params_kw=None): async def sync_uapi_request(request, llm, sor, params_kw=None):
env = request._run_ns.copy() env = request._run_ns.copy()
@ -193,6 +196,7 @@ async def sync_uapi_request(request, llm, sor, params_kw=None):
b = None b = None
d = None d = None
t1 = t2 = t3 = time.time() t1 = t2 = t3 = time.time()
luid = getID()
try: try:
b = await uapi.call(llm.upappid, llm.apiname, userid, params=params_kw) b = await uapi.call(llm.upappid, llm.apiname, userid, params=params_kw)
@ -202,17 +206,18 @@ async def sync_uapi_request(request, llm, sor, params_kw=None):
except Exception as e: except Exception as e:
exception(f'{e=},{format_exc()}') exception(f'{e=},{format_exc()}')
estr = erase_apikey(e) estr = erase_apikey(e)
yield f'{{"error": "ERROR:{estr}", "status": "SUCCEEDED" }}\n' yield f'{{"error": "ERROR:{estr}", "status": "SUCCEEDED", "llmusageid": luid }}\n'
outlines.append({"error": "ERROR:{estr}", "status": "FAILED" }) outlines.append({"error": "ERROR:{estr}", "status": "FAILED" ,"llmusageid": luid})
await write_llmusage(llm, callerid, None, params_kw, outlines, sor) await write_llmusage(luid, llm, callerid, None, params_kw, outlines, sor)
return return
d['llmusageid'] = luid
outlines.append(d) outlines.append(d)
t2 = t3 = time.time() t2 = t3 = time.time()
usage = d.get('usage', {}) usage = d.get('usage', {})
usage['response_time'] = t2 - t1 usage['response_time'] = t2 - t1
usage['finish_time'] = t3 - t1 usage['finish_time'] = t3 - t1
await write_llmusage(llm, callerid, usage, params_kw, outlines, sor) await write_llmusage(luid, llm, callerid, usage, params_kw, outlines, sor)
debug(f'finished:{b}') b = json.dumps(d, ensure_ascii=False)
yield b yield b
async def async_uapi_request(request, llm, sor, params_kw=None): async def async_uapi_request(request, llm, sor, params_kw=None):
@ -226,14 +231,15 @@ async def async_uapi_request(request, llm, sor, params_kw=None):
outlines = [] outlines = []
b = None b = None
t1 = t2 = t3 = time.time() t1 = t2 = t3 = time.time()
luid = getID()
try: try:
b = await uapi.call(llm.upappid, llm.apiname, userid, params=params_kw) b = await uapi.call(llm.upappid, llm.apiname, userid, params=params_kw)
except Exception as e: except Exception as e:
exception(f'{e=},{format_exc()}') exception(f'{e=},{format_exc()}')
estr = erase_apikey(e) estr = erase_apikey(e)
yield f'{{"error": "ERROR:{estr}", "status": "SUCCEEDED" }}\n' yield f'{{"error": "ERROR:{estr}", "status": "SUCCEEDED" ,"llmusageid": luid}}\n'
outlines.append({"error": "ERROR:{estr}", "status": "FAILED" }) outlines.append({"error": "ERROR:{estr}", "status": "FAILED" ,"llmusageid": luid})
await write_llmusage(llm, callerid, None, params_kw, outlines, sor) await write_llmusage(luid, llm, callerid, None, params_kw, outlines, sor)
return return
if isinstance(b, bytes): if isinstance(b, bytes):
b = b.decode('utf-8') b = b.decode('utf-8')
@ -251,25 +257,27 @@ async def async_uapi_request(request, llm, sor, params_kw=None):
except Exception as e: except Exception as e:
exception(f'{e=},{format_exc()}') exception(f'{e=},{format_exc()}')
estr = erase_apikey(e) estr = erase_apikey(e)
yield f'{{"error": "ERROR:{estr}", "status": "SUCCEEDED" }}\n' yield f'{{"error": "ERROR:{estr}", "status": "SUCCEEDED" ,"llmusageid": luid}}\n'
outlines.append({"error": "ERROR:{estr}", "status": "FAILED" }) outlines.append({"error": "ERROR:{estr}", "status": "FAILED" ,"llmusageid": luid})
await write_llmusage(llm, callerid, None, params_kw, outlines, sor) await write_llmusage(luid, llm, callerid, None, params_kw, outlines, sor)
return return
if isinstance(b, bytes): if isinstance(b, bytes):
b = b.decode('utf-8') b = b.decode('utf-8')
d = json.loads(b)
rzt = DictObject(**json.loads(b))
rzt['llmusageid'] = luid
b = json.dumps(rzt, ensure_ascii=False)
b = ''.join(b.split('\n')) b = ''.join(b.split('\n'))
debug(f'response line = {b}') debug(f'response line = {b}')
rzt = DictObject(**json.loads(b))
yield b + '\n' yield b + '\n'
if not rzt.status or rzt.status == 'FAILED': if not rzt.status or rzt.status == 'FAILED':
debug(f'{b=} return error') debug(f'{b=} return error')
yield f'{{"error": "ERROR:upapp return failed", "status": "SUCCEEDED" }}\n' yield f'{{"error": "ERROR:upapp return failed", "status": "SUCCEEDED" ,"llmusageid": luid}}\n'
outlines.append({"error": "ERROR:{estr}", "status": "FAILED" }) outlines.append({"error": "ERROR:{estr}", "status": "FAILED" ,"llmusageid": luid})
await write_llmusage(llm, callerid, None, params_kw, outlines, sor) await write_llmusage(luid, llm, callerid, None, params_kw, outlines, sor)
return return
if rzt.status == 'SUCCEEDED': if rzt.status == 'SUCCEEDED':
debug(f'{b=} return successed')
await asyncio.sleep(1) await asyncio.sleep(1)
d = rzt d = rzt
outlines.append(d) outlines.append(d)
@ -277,7 +285,7 @@ async def async_uapi_request(request, llm, sor, params_kw=None):
t3 = time.time() t3 = time.time()
usage['response_time'] = t2 - t1 usage['response_time'] = t2 - t1
usage['finish_time'] = t3 -t1 usage['finish_time'] = t3 -t1
await write_llmusage(llm, callerid, usage, params_kw, outlines, sor) await write_llmusage(luid, llm, callerid, usage, params_kw, outlines, sor)
break break
period = llm.query_period or 30 period = llm.query_period or 30
await asyncio.sleep(period) await asyncio.sleep(period)

Binary file not shown.