From d32e25feb1bd6f38401b08853e9939c90f159030 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Tue, 6 Jan 2026 11:00:38 +0800 Subject: [PATCH] bugfix --- llmage/accounting.py | 16 ++++++++++++++++ llmage/init.py | 2 ++ llmage/llmclient.py | 3 +++ models/llm.xlsx | Bin 17280 -> 17344 bytes wwwroot/show_llms.ui | 7 ++++++- 5 files changed, 27 insertions(+), 1 deletion(-) diff --git a/llmage/accounting.py b/llmage/accounting.py index d29c8f5..c1e8eed 100644 --- a/llmage/accounting.py +++ b/llmage/accounting.py @@ -2,8 +2,24 @@ from appPublic.log import exception, debug from appPublic.uniqueID import getID from appPublic.dictObject import DictObject from sqlor.dbpools import get_sor_context +from ahserver.serverenv import ServerEnv from pricing.pricing import pricing_program_charging from accounting.consume import consume_accounting +from accounting.getaccount import getCustomerBalance + +async def checkCustomerBalance(llmid, userorgid): + env = ServerEnv() + async with get_sor_context(env, 'llmage') as sor: + llms = await sor.R('llm', { 'id': llmid}) + if len(llms) < 1: + e = Exception(f'llm({llmid}) not exists') + exception(f'{e}') + raise e + if llms[0].ownerid == userorgid: + return True + balance = await getCustomerBalance(sor, userorgid) + return llms[0].min_balance < balance + return False async def llm_accounting(request, llmid, usage, customerid, userid, orderid=None): diff --git a/llmage/init.py b/llmage/init.py index ceac435..a9d45eb 100644 --- a/llmage/init.py +++ b/llmage/init.py @@ -10,6 +10,7 @@ from llmage.llmclient import ( get_llmcatelogs, get_llms_by_catelog ) +from llmage.accounting import checkCustomerBalance from llmage.messages import ( BaseMessages, SessionMessages, @@ -33,6 +34,7 @@ def load_llmage(): env.SessageMessages = SessionMessages env.BaseMessages = BaseMessages env.keling_token = keling_token + env.checkCustomerBalance = checkCustomerBalance rf = RegisterFunction() rf.register('jimeng_auth_headers', jimeng_auth_headers) diff --git a/llmage/llmclient.py b/llmage/llmclient.py index 729f97c..79b4086 100644 --- a/llmage/llmclient.py +++ b/llmage/llmclient.py @@ -177,6 +177,7 @@ async def uapi_request(request, llm, sor, params_kw=None): usage['prompt_tokens'] = cnt u = await write_llmusage(luid, llm, callerid, usage, params_kw, outlines, sor) if llm.ppid and callerorgid != llm.ownerid: + debug(f'{usage=},{llm.ownerid=},{callerorgid=}') await llm_accounting(request, llm.id, usage, callerorgid, callerid) except Exception as e: exception(f'{e=},{format_exc()}') @@ -228,6 +229,7 @@ async def sync_uapi_request(request, llm, sor, params_kw=None): yield b await write_llmusage(luid, llm, callerid, usage, params_kw, outlines, sor) if llm.ppid and callerorgid != llm.ownerid: + debug(f'{usage=},{llm.ownerid=},{callerorgid=}') await llm_accounting(request, llm.id, usage, callerorgid, callerid) async def async_uapi_request(request, llm, sor, params_kw=None): @@ -301,6 +303,7 @@ async def async_uapi_request(request, llm, sor, params_kw=None): usage['finish_time'] = t3 -t1 await write_llmusage(luid, llm, callerid, usage, params_kw, outlines, sor) if llm.ppid and callerorgid != llm.ownerid: + debug(f'{usage=},{llm.ownerid=},{callerorgid=}') await llm_accounting(request, llm.id, usage, callerorgid, callerid) d = rzt diff --git a/models/llm.xlsx b/models/llm.xlsx index 1903ac284589b93b33cc601880b89b2806b73cbb..5b849abc8596bcd85b73e37f829b8adeeb9d9c54 100644 GIT binary patch delta 4114 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 DE&+ro diff --git a/wwwroot/show_llms.ui b/wwwroot/show_llms.ui index 864336d..5003d24 100644 --- a/wwwroot/show_llms.ui +++ b/wwwroot/show_llms.ui @@ -1,3 +1,4 @@ +{% set userorgid = get_userorgid %} { "widgettype":"VScrollPanel", "options":{ @@ -28,10 +29,14 @@ }, "subwidgets":[ {% for llm in get_llms_by_catelog(cate.id) %} - { +{% set can_use = checkCustomerBalance(llm.id, userorgid) %} + { "widgettype":"VScrollPanel", "options":{ "css":"card", +{% if not can_use %} + "disabled":true, +{% endif %} "bgcolor": "#def0f0", "cwidth":20, "cheight":12