mirror of
https://github.com/fawney19/Aether.git
synced 2026-10-08 02:17:46 +08:00
fix(usage): streaming 状态在首字节到达前显示为 pending
新增 resolveDisplayRequestStatus 函数,当记录状态为 streaming 但 first_byte_time_ms 为空时回退显示为 pending,避免误导用户。
This commit is contained in:
@@ -5,6 +5,7 @@ import {
|
||||
isUsageRecordSuccessful,
|
||||
mapRequestStatusToTimelineStatus,
|
||||
normalizeRequestStatus,
|
||||
resolveDisplayRequestStatus,
|
||||
resolveTimelineFinalStatus,
|
||||
} from '../status'
|
||||
import type { UsageRecord } from '../../types'
|
||||
@@ -64,6 +65,18 @@ describe('usage status helpers', () => {
|
||||
expect(mapRequestStatusToTimelineStatus('failed')).toBe('failed')
|
||||
})
|
||||
|
||||
it('shows streaming as pending until first byte is recorded', () => {
|
||||
expect(resolveDisplayRequestStatus(buildUsageRecord({
|
||||
status: 'streaming',
|
||||
first_byte_time_ms: undefined,
|
||||
}))).toBe('pending')
|
||||
|
||||
expect(resolveDisplayRequestStatus(buildUsageRecord({
|
||||
status: 'streaming',
|
||||
first_byte_time_ms: 320,
|
||||
}))).toBe('streaming')
|
||||
})
|
||||
|
||||
it('treats explicit success status code as authoritative for the timeline', () => {
|
||||
expect(resolveTimelineFinalStatus({
|
||||
traceFinalStatus: 'success',
|
||||
|
||||
@@ -76,6 +76,16 @@ export function normalizeRequestStatus(status: RequestStatusLike): RequestStatus
|
||||
}
|
||||
}
|
||||
|
||||
export function resolveDisplayRequestStatus(
|
||||
record: Pick<UsageRecord, 'status' | 'first_byte_time_ms'>
|
||||
): RequestStatus | undefined {
|
||||
const status = normalizeRequestStatus(record.status)
|
||||
if (status === 'streaming' && record.first_byte_time_ms == null) {
|
||||
return 'pending'
|
||||
}
|
||||
return status
|
||||
}
|
||||
|
||||
export function mapRequestStatusToTimelineStatus(
|
||||
status: RequestStatusLike
|
||||
): TimelineFinalStatus | undefined {
|
||||
|
||||
Reference in New Issue
Block a user