bugfix
This commit is contained in:
parent
e5d27bc6bd
commit
dff5a681a0
@ -112,7 +112,7 @@ async def async_uapi_request(request, llm,
|
|||||||
llmusage.accounting_status = 'created'
|
llmusage.accounting_status = 'created'
|
||||||
b = json.dumps(d, ensure_ascii=False)
|
b = json.dumps(d, ensure_ascii=False)
|
||||||
yield b
|
yield b
|
||||||
await write_llmusage(llmusage)
|
# await write_llmusage(llmusage)
|
||||||
# if llm.callbackurl:
|
# if llm.callbackurl:
|
||||||
# return
|
# return
|
||||||
if d.status == 'FAILED':
|
if d.status == 'FAILED':
|
||||||
@ -128,7 +128,29 @@ async def async_uapi_request(request, llm,
|
|||||||
s = ''.join(s.split('\n'))
|
s = ''.join(s.split('\n'))
|
||||||
exception(s)
|
exception(s)
|
||||||
yield f'{s}\n'
|
yield f'{s}\n'
|
||||||
|
llmusage = DictObject()
|
||||||
|
llmusage.id = luid
|
||||||
|
llmusage.llmid = llm.id
|
||||||
|
llmusage.use_date = curDateString()
|
||||||
|
llmusage.use_time = timestampstr()
|
||||||
|
llmusage.userid = callerid
|
||||||
|
ioinfo = {
|
||||||
|
"input": params_kw,
|
||||||
|
'output': [ed]
|
||||||
|
}
|
||||||
|
webpath = await write_llmio(llmusage.id, ioinfo)
|
||||||
|
llmusage.ioinfo = webpath
|
||||||
|
llmusage.taskid = d.taskid
|
||||||
|
llmusage.transno = params_kw.transno
|
||||||
|
llmusage.responsed_seconds = responsed_seconds
|
||||||
|
llmusage.finish_seconds = finish_seconds
|
||||||
|
llmusage.status = 'FAILED'
|
||||||
|
llmusage.userorgid = callerorgid
|
||||||
|
llmusage.tenantid = params_kw.get('tenantid', params_kw.get('tentantid'))
|
||||||
|
llmusage.ownerid = llm.ownerid
|
||||||
return
|
return
|
||||||
|
finally:
|
||||||
|
await write_llmusage(llmusage)
|
||||||
|
|
||||||
async def modify_llmusage(ns):
|
async def modify_llmusage(ns):
|
||||||
env = ServerEnv()
|
env = ServerEnv()
|
||||||
|
|||||||
@ -14,6 +14,7 @@ from ahserver.filestorage import FileStorage
|
|||||||
from .asyncinference import async_uapi_request
|
from .asyncinference import async_uapi_request
|
||||||
from .syncinference import sync_uapi_request
|
from .syncinference import sync_uapi_request
|
||||||
from .accounting import llm_accounting, llm_charging
|
from .accounting import llm_accounting, llm_charging
|
||||||
|
from .balance import refund_balance
|
||||||
from .utils import *
|
from .utils import *
|
||||||
|
|
||||||
async def uapi_request(request, llm, callerid, callerorgid, params_kw=None):
|
async def uapi_request(request, llm, callerid, callerorgid, params_kw=None):
|
||||||
@ -91,28 +92,14 @@ async def uapi_request(request, llm, callerid, callerorgid, params_kw=None):
|
|||||||
llmusage.tenantid = params_kw.get('tenantid', params_kw.get('tentantid'))
|
llmusage.tenantid = params_kw.get('tenantid', params_kw.get('tentantid'))
|
||||||
llmusage.ownerid = llm.ownerid
|
llmusage.ownerid = llm.ownerid
|
||||||
llmusage.accounting_status = 'created'
|
llmusage.accounting_status = 'created'
|
||||||
await write_llmusage(llmusage)
|
# await write_llmusage(llmusage)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
# Retry on duplicate key: append *1, *2, ...
|
|
||||||
retry = 0
|
|
||||||
while 'Duplicate entry' in str(e) and retry < 3:
|
|
||||||
retry += 1
|
|
||||||
llmusage.id = f'{luid}*{retry}'
|
|
||||||
try:
|
|
||||||
await write_llmusage(llmusage)
|
|
||||||
exception(f'write_llmusage retry {retry} succeeded with id={llmusage.id}')
|
|
||||||
e = None
|
|
||||||
break
|
|
||||||
except Exception as e2:
|
|
||||||
e = e2
|
|
||||||
# Refund balance reservation on failure
|
# Refund balance reservation on failure
|
||||||
try:
|
try:
|
||||||
from .balance import refund_balance
|
if luid:
|
||||||
from ahserver.serverenv import ServerEnv
|
await refund_balance(ServerEnv(), luid)
|
||||||
reserve_luid = params_kw.get('_luid') if params_kw else None
|
|
||||||
if reserve_luid:
|
|
||||||
await refund_balance(ServerEnv(), reserve_luid)
|
|
||||||
except:
|
except:
|
||||||
|
debug(f'refund_balance(ServerEnv(), {luid=}) errir')
|
||||||
pass
|
pass
|
||||||
exception(f'{e=},{format_exc()}')
|
exception(f'{e=},{format_exc()}')
|
||||||
estr = erase_apikey(e)
|
estr = erase_apikey(e)
|
||||||
@ -121,15 +108,27 @@ async def uapi_request(request, llm, callerid, callerorgid, params_kw=None):
|
|||||||
s = ''.join(s.split('\\n'))
|
s = ''.join(s.split('\\n'))
|
||||||
outlines.append(ed)
|
outlines.append(ed)
|
||||||
yield f'{s}\\n'
|
yield f'{s}\\n'
|
||||||
return
|
## except happand at call llm server
|
||||||
|
llmusage = DictObject()
|
||||||
|
llmusage.id = luid
|
||||||
|
llmusage.llmid = llm.id
|
||||||
|
llmusage.use_date = curDateString()
|
||||||
|
llmusage.use_time = timestampstr()
|
||||||
|
llmusage.userid = callerid
|
||||||
|
ioinfo = {
|
||||||
|
"input": params_kw,
|
||||||
|
'output': ed
|
||||||
|
}
|
||||||
|
webpath = await write_llmio(llmusage.id, ioinfo)
|
||||||
|
llmusage.ioinfo = webpath
|
||||||
|
llmusage.transno = params_kw.transno
|
||||||
|
llmusage.status = 'FAILED'
|
||||||
|
llmusage.userorgid = callerorgid
|
||||||
|
llmusage.tenantid = params_kw.get('tenantid', params_kw.get('tentantid'))
|
||||||
|
llmusage.ownerid = llm.ownerid
|
||||||
finally:
|
finally:
|
||||||
# GeneratorExit / client disconnect — flush partial usage
|
# GeneratorExit / client disconnect — flush partial usage
|
||||||
if llmusage and llmusage.get('id') == luid:
|
await write_llmusage(llmusage)
|
||||||
try:
|
|
||||||
llmusage.status = llmusage.status or 'UNKNOWN'
|
|
||||||
await write_llmusage(llmusage)
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
|
|
||||||
async def inference_generator(request, *args, params_kw=None, **kw):
|
async def inference_generator(request, *args, params_kw=None, **kw):
|
||||||
env = request._run_ns.copy()
|
env = request._run_ns.copy()
|
||||||
|
|||||||
@ -61,33 +61,13 @@ async def sync_uapi_request(request, llm, callerid, callerorgid, params_kw=None)
|
|||||||
llmusage.finish_seconds = finish_seconds
|
llmusage.finish_seconds = finish_seconds
|
||||||
llmusage.status = 'SUCCEEDED'
|
llmusage.status = 'SUCCEEDED'
|
||||||
llmusage.amount = 0.00
|
llmusage.amount = 0.00
|
||||||
""" 联机不记账
|
|
||||||
if llm.ppid:
|
|
||||||
try:
|
|
||||||
charging = await llm_charging(llm.ppid, llmusage)
|
|
||||||
if charging:
|
|
||||||
llmusage.amount = charging.amount
|
|
||||||
llmusage.cost = charging.cost
|
|
||||||
else:
|
|
||||||
llmusage.amount = llmusage.cost = 0.0
|
|
||||||
except Exception as e:
|
|
||||||
e = Exception(f'{llm.pid} charging error{e}')
|
|
||||||
exception(f'{e}')
|
|
||||||
else:
|
|
||||||
llmusage.amount = 0
|
|
||||||
llmusage.cost = 0
|
|
||||||
"""
|
|
||||||
llmusage.userorgid = callerorgid
|
llmusage.userorgid = callerorgid
|
||||||
llmusage.tenantid = params_kw.get('tenantid', params_kw.get('tentantid'))
|
llmusage.tenantid = params_kw.get('tenantid', params_kw.get('tentantid'))
|
||||||
llmusage.ownerid = llm.ownerid
|
llmusage.ownerid = llm.ownerid
|
||||||
llmusage.accounting_status = 'created'
|
llmusage.accounting_status = 'created'
|
||||||
b = json.dumps(d, ensure_ascii=False)
|
b = json.dumps(d, ensure_ascii=False)
|
||||||
yield b
|
yield b
|
||||||
await write_llmusage(llmusage)
|
# await write_llmusage(llmusage)
|
||||||
"""联机不记账
|
|
||||||
if llmusage.amount > 0.0001:
|
|
||||||
await llm_accounting(llmusage)
|
|
||||||
"""
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
exception(f'{e=},{format_exc()}, {b=}')
|
exception(f'{e=},{format_exc()}, {b=}')
|
||||||
estr = erase_apikey(e)
|
estr = erase_apikey(e)
|
||||||
@ -96,7 +76,29 @@ async def sync_uapi_request(request, llm, callerid, callerorgid, params_kw=None)
|
|||||||
s = ''.join(s.split('\n'))
|
s = ''.join(s.split('\n'))
|
||||||
outlines.append(ed)
|
outlines.append(ed)
|
||||||
yield f'{s}\n'
|
yield f'{s}\n'
|
||||||
|
llmusage = DictObject()
|
||||||
|
llmusage.id = luid
|
||||||
|
llmusage.llmid = llm.id
|
||||||
|
llmusage.use_date = curDateString()
|
||||||
|
llmusage.use_time = timestampstr()
|
||||||
|
llmusage.userid = callerid
|
||||||
|
llmusage.usages = None
|
||||||
|
ioinfo = {
|
||||||
|
"input": params_kw,
|
||||||
|
'output': [ed]
|
||||||
|
}
|
||||||
|
webpath = await write_llmio(llmusage.id, ioinfo)
|
||||||
|
llmusage.ioinfo = webpath
|
||||||
|
llmusage.transno = params_kw.transno
|
||||||
|
llmusage.responsed_seconds = responsed_seconds
|
||||||
|
llmusage.finish_seconds = finish_seconds
|
||||||
|
llmusage.status = 'FAILED'
|
||||||
|
llmusage.amount = 0.00
|
||||||
|
llmusage.userorgid = callerorgid
|
||||||
|
llmusage.tenantid = params_kw.get('tenantid', params_kw.get('tentantid'))
|
||||||
|
llmusage.ownerid = llm.ownerid
|
||||||
|
finally:
|
||||||
|
await write_llmusage(llmusage)
|
||||||
|
|
||||||
async def sync_uapi_request_product(llm, api_userid, user_id, user_org_id, params_kw, luid):
|
async def sync_uapi_request_product(llm, api_userid, user_id, user_org_id, params_kw, luid):
|
||||||
"""Product interface version: no HTTP request dependency. Returns dict."""
|
"""Product interface version: no HTTP request dependency. Returns dict."""
|
||||||
|
|||||||
@ -556,6 +556,14 @@ async def get_llm(llmid, catelogid=None):
|
|||||||
async def write_llmusage(llmusage):
|
async def write_llmusage(llmusage):
|
||||||
env = ServerEnv()
|
env = ServerEnv()
|
||||||
async with get_sor_context(env, 'llmage') as sor:
|
async with get_sor_context(env, 'llmage') as sor:
|
||||||
|
n = 0
|
||||||
|
part0 = llmusage.id
|
||||||
|
while True:
|
||||||
|
recs = await sor.R('llmusage', {'id': llmusage.id})
|
||||||
|
if len(recs) == 0:
|
||||||
|
break
|
||||||
|
n = n + 1
|
||||||
|
llmusage.id = f'{part0}*{n}'
|
||||||
await sor.C('llmusage', llmusage)
|
await sor.C('llmusage', llmusage)
|
||||||
|
|
||||||
async def llm_query_price(llmid, config_data):
|
async def llm_query_price(llmid, config_data):
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user