- Create stats.py with get_llmage_stats() helper function - Add 4 stat widgets: stat_total_models, stat_today_calls, stat_today_amount, stat_catelog_count - Update index.ui to display stat cards row above navigation cards - Register get_llmage_stats in load_llmage()
70 lines
2.2 KiB
Python
70 lines
2.2 KiB
Python
from sqlor.dbpools import get_sor_context
|
|
from appPublic.timeUtils import curDateString, timestampstr
|
|
from datetime import datetime, timedelta
|
|
from appPublic.log import debug, exception
|
|
|
|
async def get_llmage_stats(request):
|
|
"""Get llmage module statistics"""
|
|
env = request._run_ns
|
|
userorgid = await env.get_userorgid()
|
|
today = curDateString()
|
|
tomorrow = (datetime.now() + timedelta(days=1)).strftime('%Y-%m-%d')
|
|
|
|
stats = {
|
|
'total_models': 0,
|
|
'today_usage_count': 0,
|
|
'today_amount': 0,
|
|
'catelog_count': 0
|
|
}
|
|
|
|
async with get_sor_context(env, 'llmage') as sor:
|
|
# Total enabled models
|
|
sql_models = """
|
|
SELECT COUNT(DISTINCT id) as cnt FROM llm
|
|
WHERE enabled_date <= ${today}$
|
|
AND expired_date > ${today}$
|
|
"""
|
|
recs = await sor.sqlExe(sql_models, {'today': today})
|
|
if recs:
|
|
stats['total_models'] = int(recs[0].cnt or 0)
|
|
|
|
# Today's usage count
|
|
sql_usage = """
|
|
SELECT COUNT(*) as cnt FROM llmusage
|
|
WHERE userorgid = ${userorgid}$
|
|
AND use_date >= ${today}$
|
|
AND use_date < ${tomorrow}$
|
|
"""
|
|
recs = await sor.sqlExe(sql_usage, {
|
|
'userorgid': userorgid,
|
|
'today': today,
|
|
'tomorrow': tomorrow
|
|
})
|
|
if recs:
|
|
stats['today_usage_count'] = int(recs[0].cnt or 0)
|
|
|
|
# Today's total amount
|
|
sql_amount = """
|
|
SELECT COALESCE(SUM(amount), 0) as total FROM llmusage
|
|
WHERE userorgid = ${userorgid}$
|
|
AND use_date >= ${today}$
|
|
AND use_date < ${tomorrow}$
|
|
"""
|
|
recs = await sor.sqlExe(sql_amount, {
|
|
'userorgid': userorgid,
|
|
'today': today,
|
|
'tomorrow': tomorrow
|
|
})
|
|
if recs:
|
|
stats['today_amount'] = float(recs[0].total or 0)
|
|
|
|
# Catalog count
|
|
sql_catelog = """
|
|
SELECT COUNT(*) as cnt FROM llmcatelog
|
|
"""
|
|
recs = await sor.sqlExe(sql_catelog, {})
|
|
if recs:
|
|
stats['catelog_count'] = int(recs[0].cnt or 0)
|
|
|
|
return stats
|