This commit is contained in:
yumoqing 2026-03-18 11:40:00 +08:00
parent f4665237e8
commit 841fa347f4
2 changed files with 43 additions and 12 deletions

View File

@ -164,12 +164,12 @@ async def write_llmusage(id, llm, userid, usage, params_kw, outdata, sor):
} }
await sor.C('llmusage', d) await sor.C('llmusage', d)
async def uapi_request(request, llm, sor, params_kw=None): async def uapi_request(request, llm, sor, callerid, callerorgid, params_kw=None):
env = request._run_ns.copy() env = request._run_ns.copy()
if not params_kw: if not params_kw:
params_kw = env.params_kw params_kw = env.params_kw
callerorgid = await env.get_userorgid() # callerorgid = await env.get_userorgid()
callerid = await env.get_user() # callerid = await env.get_user()
uapi = UAPI(request, sor=sor) uapi = UAPI(request, sor=sor)
userid = await get_owner_userid(sor, llm) userid = await get_owner_userid(sor, llm)
outlines = [] outlines = []
@ -236,12 +236,12 @@ async def uapi_request(request, llm, sor, params_kw=None):
await write_llmusage(luid, llm, callerid, None, params_kw, outlines, sor) await write_llmusage(luid, llm, callerid, None, params_kw, outlines, sor)
return return
async def sync_uapi_request(request, llm, sor, params_kw=None): async def sync_uapi_request(request, llm, sor, callerid, callerorgid, params_kw=None):
env = request._run_ns.copy() env = request._run_ns.copy()
if not params_kw: if not params_kw:
params_kw = env.params_kw params_kw = env.params_kw
callerid = await env.get_user() # callerid = await env.get_user()
callerorgid = await env.get_userorgid() # callerorgid = await env.get_userorgid()
uapi = UAPI(request, sor=sor) uapi = UAPI(request, sor=sor)
userid = await get_owner_userid(sor, llm) userid = await get_owner_userid(sor, llm)
outlines = [] outlines = []
@ -281,12 +281,12 @@ async def sync_uapi_request(request, llm, sor, params_kw=None):
debug(f'{usage=},{llm.ownerid=},{callerorgid=}') debug(f'{usage=},{llm.ownerid=},{callerorgid=}')
await llm_accounting(request, llm.id, usage, callerorgid, callerid) await llm_accounting(request, llm.id, usage, callerorgid, callerid)
async def async_uapi_request(request, llm, sor, params_kw=None): async def async_uapi_request(request, llm, sor, callerid, callerorgid, params_kw=None):
env = request._run_ns.copy() env = request._run_ns.copy()
if not params_kw: if not params_kw:
params_kw = env.params_kw params_kw = env.params_kw
callerorgid = await env.get_userorgid() # callerorgid = await env.get_userorgid()
callerid = await env.get_user() # callerid = await env.get_user()
uapi = UAPI(request, sor=sor) uapi = UAPI(request, sor=sor)
userid = await get_owner_userid(sor, llm) userid = await get_owner_userid(sor, llm)
outlines = [] outlines = []
@ -381,6 +381,14 @@ def b64media2url(request, mediafile):
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()
callerorgid = await env.get_userorgid()
callerid = await env.get_user()
async for d in _inference_generator(request, callerid,
callerorgid, params_kw=params_kw, **kw):
yield d
async def _inference_generator(request, callerid, callerorgid,
params_kw=params_kw, **kw):
if not params_kw: if not params_kw:
params_kw = env.params_kw params_kw = env.params_kw
if not params_kw.transno: if not params_kw.transno:
@ -401,13 +409,13 @@ async def inference_generator(request, *args, params_kw=None, **kw):
if params_kw.nostream and llm.stream == 'stream': if params_kw.nostream and llm.stream == 'stream':
llm.stream = 'sync' llm.stream = 'sync'
if llm.stream == 'async': if llm.stream == 'async':
f = partial(async_uapi_request, request, llm, sor, params_kw=params_kw) f = partial(async_uapi_request, request, llm, sor, callerid, callerorgid, params_kw=params_kw)
elif llm.stream == 'sync': elif llm.stream == 'sync':
f = partial(sync_uapi_request, request, llm, sor, params_kw=params_kw) f = partial(sync_uapi_request, request, llm, sor, callerid, callerorgid, params_kw=params_kw)
# env.update(llm) # env.update(llm)
else: else:
uapi = UAPI(request, sor=sor) uapi = UAPI(request, sor=sor)
f = partial(uapi_request, request, llm, sor, params_kw=params_kw) f = partial(uapi_request, request, llm, sor, callerid, callerorgid, params_kw=params_kw)
async for d in f(): async for d in f():
yield d yield d

23
wwwroot/openai/index.dspy Normal file
View File

@ -0,0 +1,23 @@
"""
params_kw has:
model: name of model
messages:
"""
if params_kw.model is None:
return json_response(
{"error": {"message": "Missing required parameter: model", "type": "invalid_request_error"}},
status=400
)
if params_kw.messages is None:
return json_response(
{
"error": {
"message": "Messages array cannot be empty",
"type": "invalid_request_error"
}
},
status=400
)
try:
async with get_sor_context(request._run_ns, 'llmage') as sor:
recs = await sor.R('llm', {'model': params_kw.model})