fix: 模型延迟统一用COALESCE(ttft,ttot)覆盖异步模型
This commit is contained in:
parent
85913f8332
commit
bdffa5c81b
@ -55,26 +55,20 @@ async def _resolve_view(request):
|
||||
|
||||
async def api_model_perf(sor, params_kw=None):
|
||||
try:
|
||||
model = params_kw.get('model') if params_kw else None
|
||||
stat_date = params_kw.get('date') if params_kw else None
|
||||
sql = """SELECT model, catelogid, providerid,
|
||||
SUM(total_calls) as total_calls,
|
||||
SUM(success_calls) as success_calls,
|
||||
SUM(fail_calls) as fail_calls,
|
||||
CASE WHEN SUM(total_calls)>0 THEN ROUND(SUM(success_calls)*100.0/SUM(total_calls),1) ELSE 0 END as success_rate,
|
||||
CASE WHEN SUM(total_calls)>0 THEN ROUND(SUM(total_calls*avg_ttft_ms)/SUM(total_calls),1) ELSE NULL END as avg_ttft_ms,
|
||||
sql = """SELECT COALESCE(l.name, f.model) as model,
|
||||
CASE WHEN SUM(total_calls)>0 THEN ROUND(SUM(total_calls*COALESCE(avg_ttft_ms,avg_ttot_ms))/SUM(total_calls),1) ELSE NULL END as avg_latency_ms,
|
||||
CASE WHEN SUM(total_calls)>0 THEN ROUND(SUM(total_calls*avg_ttot_ms)/SUM(total_calls),1) ELSE NULL END as avg_ttot_ms,
|
||||
COALESCE(SUM(total_amount_cny),0) as total_amount_cny
|
||||
FROM dm_model_perf_daily WHERE 1=1"""
|
||||
ROUND(SUM(success_calls)*100.0/GREATEST(SUM(total_calls),1),1) as success_rate
|
||||
FROM dm_model_perf_daily f
|
||||
LEFT JOIN llm l ON l.id = f.llmid
|
||||
WHERE 1=1"""
|
||||
ns = {}
|
||||
if stat_date:
|
||||
sql += " AND stat_date=${stat_date}$"
|
||||
sql += " AND f.stat_date=${stat_date}$"
|
||||
ns['stat_date'] = stat_date
|
||||
if model:
|
||||
sql += " AND model=${model}$"
|
||||
ns['model'] = model
|
||||
sql += " GROUP BY model, catelogid, providerid"
|
||||
sql += " ORDER BY total_calls DESC LIMIT 50"
|
||||
sql += " GROUP BY f.model, f.catelogid, f.providerid"
|
||||
sql += " ORDER BY avg_latency_ms ASC LIMIT 5"
|
||||
rows = await sor.sqlExe(sql, ns)
|
||||
return [dict(r) for r in rows]
|
||||
except Exception as e:
|
||||
|
||||
@ -1,23 +1,11 @@
|
||||
{% set data = j2_model_perf_data(request) %}
|
||||
{% set names = [] %}{% set vals = [] %}{% for r in data %}{% set _ = names.append(r.get("model","")) %}{% set _ = vals.append(r.get("avg_latency_ms",0)|float) %}{% endfor %}
|
||||
{% set script %}(function(){var c=echarts.init(document.getElementById('chart_model_perf'));c.setOption({tooltip:{trigger:'axis',formatter:function(p){return p[0].name+'<br/>延迟: '+p[0].value+'ms'}},grid:{left:10,right:40,top:5,bottom:5,containLabel:true},xAxis:{type:'value',name:'ms',axisLabel:{fontSize:10}},yAxis:{type:'category',data:{{json.dumps(names,ensure_ascii=False)}},inverse:true,axisLabel:{fontSize:11}},series:[{type:'bar',data:{{json.dumps(vals,ensure_ascii=False)}},barMaxWidth:18,label:{show:true,position:'right',formatter:'{c}ms',fontSize:10},itemStyle:{borderRadius:[0,4,4,0]}}]});window.addEventListener('resize',function(){c.resize()});})();{% endset %}
|
||||
{
|
||||
"widgettype": "VBox",
|
||||
"options": {"width": "100%"},
|
||||
"subwidgets": [
|
||||
{"widgettype": "HBox","options":{"cheight":2,"width":"100%","bgcolor":"var(--sage-bg-secondary)","borderRadius":"4px 4px 0 0","padding":"4px 8px"},"subwidgets":[
|
||||
{"widgettype":"Text","options":{"text":"模型","width":"30%","fontSize":"11px","color":"var(--sage-text-secondary)"}},
|
||||
{"widgettype":"Text","options":{"text":"延迟","width":"15%","fontSize":"11px","color":"var(--sage-text-secondary)"}},
|
||||
{"widgettype":"Text","options":{"text":"成功率","width":"15%","fontSize":"11px","color":"var(--sage-text-secondary)"}},
|
||||
{"widgettype":"Text","options":{"text":"调用","width":"20%","fontSize":"11px","color":"var(--sage-text-secondary)"}},
|
||||
{"widgettype":"Text","options":{"text":"金额","width":"20%","fontSize":"11px","color":"var(--sage-text-secondary)"}}
|
||||
]}
|
||||
{% for r in data %}
|
||||
,{"widgettype":"HBox","options":{"cheight":2,"width":"100%","padding":"2px 8px"},"subwidgets":[
|
||||
{"widgettype":"Text","options":{"text":{{json.dumps(r.get("model",""),ensure_ascii=False)}},"width":"30%","fontSize":"12px"}},
|
||||
{"widgettype":"Text","options":{"text":{{json.dumps(r.get("avg_ttft_ms",""),ensure_ascii=False)}},"width":"15%","fontSize":"12px"}},
|
||||
{"widgettype":"Text","options":{"text":{{json.dumps(r.get("success_rate",""),ensure_ascii=False)}},"width":"15%","fontSize":"12px"}},
|
||||
{"widgettype":"Text","options":{"text":{{json.dumps(r.get("total_calls",""),ensure_ascii=False)}},"width":"20%","fontSize":"12px"}},
|
||||
{"widgettype":"Text","options":{"text":{{json.dumps(r.get("total_amount_cny",""),ensure_ascii=False)}},"width":"20%","fontSize":"12px"}}
|
||||
]}
|
||||
{% endfor %}
|
||||
]
|
||||
"widgettype": "WebWidget",
|
||||
"options": {
|
||||
"height": "180px",
|
||||
"html": "<div id=\"chart_model_perf\" style=\"width:100%;height:180px;\"></div>",
|
||||
"script": {{json.dumps(script, ensure_ascii=False)}}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user