fix: 记账失败记录三个问题修复
1) show_failed_reason.dspy: 增加llm表JOIN,弹窗显示llmID/model/ppid/用户/机构/金额等详情+失败原因 2) failed_accounting_list.dspy: page参数-Infinity崩溃,加try/except+最小值校验 3) failed_accounting.ui: alters去掉params/dataurl(dspy已JOIN返回_text字段,dataurl会覆盖)
This commit is contained in:
parent
211b9d7663
commit
e99e7774f2
@ -21,8 +21,13 @@ try:
|
||||
if params_kw.get('filter_llmid'):
|
||||
filters['filter_llmid'] = params_kw.get('filter_llmid')
|
||||
|
||||
page = int(params_kw.get('page', 1))
|
||||
page_size = int(params_kw.get('page_size', 50))
|
||||
try:
|
||||
page = int(params_kw.get('page', 1))
|
||||
except (ValueError, TypeError):
|
||||
page = 1
|
||||
if page < 1:
|
||||
page = 1
|
||||
page_size = int(params_kw.get('rows', params_kw.get('page_size', 20)))
|
||||
|
||||
async with db.sqlorContext(llmage_db) as sor:
|
||||
conditions = []
|
||||
|
||||
@ -1,14 +1,75 @@
|
||||
record_id = params_kw.get('id', '')
|
||||
|
||||
llm_info = {}
|
||||
reason = '未找到记录'
|
||||
if record_id:
|
||||
dbname = get_module_dbname('llmage')
|
||||
sage_db = get_module_dbname('sage')
|
||||
async with DBPools().sqlorContext(dbname) as sor:
|
||||
rows = await sor.R('llmusage_accounting_failed', {'id': record_id})
|
||||
# 查询失败记录 + JOIN llm表获取模型详情
|
||||
sql = f"""
|
||||
SELECT f.*, l.name as llm_name, l.model as llm_model, l.upappid as llm_ppid,
|
||||
u.username as userid_text, o.orgname as userorgid_text
|
||||
FROM llmusage_accounting_failed f
|
||||
LEFT JOIN llm l ON f.llmid = l.id
|
||||
LEFT JOIN {sage_db}.users u ON f.userid = u.id
|
||||
LEFT JOIN {sage_db}.organization o ON f.userorgid = o.id
|
||||
WHERE f.id = ${{record_id}}$
|
||||
"""
|
||||
rows = await sor.sqlExe(sql, {'record_id': record_id})
|
||||
if rows:
|
||||
reason = rows[0].get('failed_reason', '') or '(空)'
|
||||
rec = dict(rows[0])
|
||||
llm_info = {
|
||||
'llmid': rec.get('llmid', ''),
|
||||
'llm_name': rec.get('llm_name', ''),
|
||||
'llm_model': rec.get('llm_model', ''),
|
||||
'llm_ppid': rec.get('llm_ppid', ''),
|
||||
'userid': rec.get('userid', ''),
|
||||
'username': rec.get('userid_text', ''),
|
||||
'orgid': rec.get('userorgid', ''),
|
||||
'orgname': rec.get('userorgid_text', ''),
|
||||
'use_time': str(rec.get('use_time', '')),
|
||||
'amount': str(rec.get('amount', '')),
|
||||
'failed_time': str(rec.get('failed_time', '')),
|
||||
'retry_count': str(rec.get('retry_count', '')),
|
||||
}
|
||||
reason = rec.get('failed_reason', '') or '(空)'
|
||||
|
||||
return {
|
||||
fields = [
|
||||
{'label': '模型ID (llmID)', 'value': llm_info.get('llmid', '')},
|
||||
{'label': '模型名称', 'value': llm_info.get('llm_name', '')},
|
||||
{'label': '模型标识 (model)', 'value': llm_info.get('llm_model', '')},
|
||||
{'label': '上位系统 (ppid)', 'value': llm_info.get('llm_ppid', '')},
|
||||
{'label': '用户', 'value': f"{llm_info.get('username', '')} ({llm_info.get('userid', '')})"},
|
||||
{'label': '机构', 'value': f"{llm_info.get('orgname', '')} ({llm_info.get('orgid', '')})"},
|
||||
{'label': '使用时间', 'value': llm_info.get('use_time', '')},
|
||||
{'label': '金额', 'value': llm_info.get('amount', '')},
|
||||
{'label': '失败时间', 'value': llm_info.get('failed_time', '')},
|
||||
{'label': '重试次数', 'value': llm_info.get('retry_count', '')},
|
||||
]
|
||||
|
||||
field_widgets = []
|
||||
for f in fields:
|
||||
if f['value']:
|
||||
field_widgets.append({
|
||||
"widgettype": "HBox",
|
||||
"options": {"padding": "4px 0"},
|
||||
"subwidgets": [
|
||||
{"widgettype": "Text", "options": {"text": f['label'] + ":", "cwidth": 12, "i18n": False, "css": "field-label"}},
|
||||
{"widgettype": "Text", "options": {"text": f['value'], "cwidth": 18, "i18n": False}}
|
||||
]
|
||||
})
|
||||
|
||||
field_widgets.append({
|
||||
"widgettype": "Text",
|
||||
"options": {"text": "───── 失败原因 ─────", "cwidth": 30, "i18n": False, "padding": "12px 0 4px 0"}
|
||||
})
|
||||
field_widgets.append({
|
||||
"widgettype": "Text",
|
||||
"options": {"text": reason, "i18n": False}
|
||||
})
|
||||
|
||||
return json.dumps({
|
||||
"widgettype": "VScrollPanel",
|
||||
"options": {
|
||||
"width": "100%",
|
||||
@ -16,13 +77,5 @@ return {
|
||||
"css": "card",
|
||||
"padding": "12px"
|
||||
},
|
||||
"subwidgets": [
|
||||
{
|
||||
"widgettype": "Text",
|
||||
"options": {
|
||||
"text": reason,
|
||||
"i18n": False
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
"subwidgets": field_widgets
|
||||
}, ensure_ascii=False)
|
||||
|
||||
@ -89,44 +89,17 @@
|
||||
"userid": {
|
||||
"uitype": "code",
|
||||
"valueField": "userid",
|
||||
"textField": "userid_text",
|
||||
"params": {
|
||||
"dbname": "sage",
|
||||
"table": "users",
|
||||
"tblvalue": "userid",
|
||||
"tbltext": "username",
|
||||
"valueField": "userid",
|
||||
"textField": "userid_text"
|
||||
},
|
||||
"dataurl": "{{entire_url('/appbase/get_code.dspy')}}"
|
||||
"textField": "userid_text"
|
||||
},
|
||||
"userorgid": {
|
||||
"uitype": "code",
|
||||
"valueField": "userorgid",
|
||||
"textField": "userorgid_text",
|
||||
"params": {
|
||||
"dbname": "sage",
|
||||
"table": "organization",
|
||||
"tblvalue": "id",
|
||||
"tbltext": "orgname",
|
||||
"valueField": "userorgid",
|
||||
"textField": "userorgid_text"
|
||||
},
|
||||
"dataurl": "{{entire_url('/appbase/get_code.dspy')}}"
|
||||
"textField": "userorgid_text"
|
||||
},
|
||||
"llmid": {
|
||||
"uitype": "code",
|
||||
"valueField": "llmid",
|
||||
"textField": "llmid_text",
|
||||
"params": {
|
||||
"dbname": "llmage",
|
||||
"table": "llm",
|
||||
"tblvalue": "id",
|
||||
"tbltext": "name",
|
||||
"valueField": "llmid",
|
||||
"textField": "llmid_text"
|
||||
},
|
||||
"dataurl": "{{entire_url('/appbase/get_code.dspy')}}"
|
||||
"textField": "llmid_text"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user