feat(usage): 活跃请求轮询增加缓存与成本字段

- 后端 getActiveRequests 返回新增 cache_creation/read_input_tokens、actual_cost、rate_multiplier
- 前端轮询时同步更新这些字段到记录中
- 优化刷新逻辑:全局刷新开启时停止1秒轮询,关闭时恢复
This commit is contained in:
fawney19
2026-01-15 12:13:47 +08:00
parent 514bf7e3ed
commit 76f648b4eb
4 changed files with 28 additions and 1 deletions

View File

@@ -212,7 +212,11 @@ export const meApi = {
status: 'pending' | 'streaming' | 'completed' | 'failed'
input_tokens: number
output_tokens: number
cache_creation_input_tokens?: number | null
cache_read_input_tokens?: number | null
cost: number
actual_cost?: number | null
rate_multiplier?: number | null
response_time_ms: number | null
first_byte_time_ms: number | null
}>

View File

@@ -192,7 +192,11 @@ export const usageApi = {
status: 'pending' | 'streaming' | 'completed' | 'failed'
input_tokens: number
output_tokens: number
cache_creation_input_tokens?: number | null
cache_read_input_tokens?: number | null
cost: number
actual_cost?: number | null
rate_multiplier?: number | null
response_time_ms: number | null
first_byte_time_ms: number | null
provider?: string | null

View File

@@ -283,7 +283,11 @@ async function pollActiveRequests() {
// 进行中状态也需要持续更新provider/key/TTFB 可能在 streaming 后才落库)
record.input_tokens = update.input_tokens
record.output_tokens = update.output_tokens
record.cache_creation_input_tokens = update.cache_creation_input_tokens ?? undefined
record.cache_read_input_tokens = update.cache_read_input_tokens ?? undefined
record.cost = update.cost
record.actual_cost = update.actual_cost ?? undefined
record.rate_multiplier = update.rate_multiplier ?? undefined
record.response_time_ms = update.response_time_ms ?? undefined
record.first_byte_time_ms = update.first_byte_time_ms ?? undefined
// 管理员接口返回额外字段
@@ -318,8 +322,9 @@ function stopAutoRefresh() {
}
// 监听活跃请求状态,自动启动/停止刷新
// 注意全局刷新开启时不需要1秒轮询全局刷新已经包含完整数据刷新
watch(hasActiveRequests, (hasActive) => {
if (hasActive) {
if (hasActive && !globalAutoRefresh.value) {
startAutoRefresh()
} else {
stopAutoRefresh()
@@ -344,10 +349,16 @@ function stopGlobalAutoRefresh() {
function handleAutoRefreshChange(value: boolean) {
globalAutoRefresh.value = value
if (value) {
// 开启全局刷新时停止1秒轮询避免重复请求
stopAutoRefresh()
refreshData() // 立即刷新一次
startGlobalAutoRefresh()
} else {
stopGlobalAutoRefresh()
// 关闭全局刷新后如果有活跃请求恢复1秒轮询
if (hasActiveRequests.value) {
startAutoRefresh()
}
}
}