feat(openai): add Live gateway support

This commit is contained in:
song
2026-07-25 12:50:46 +08:00
parent 37ed639d1e
commit e6eb23eaac
55 changed files with 2607 additions and 30 deletions
+4 -1
View File
@@ -15,9 +15,10 @@ export function statusCodeBadgeClass(code: number): string {
return 'bg-gray-100 text-gray-800 dark:bg-dark-700 dark:text-gray-200'
}
/** 请求类型徽章配色(cyber 红、ws 紫、stream 蓝、sync 灰、未知琥珀) */
/** 请求类型徽章配色(cyber 红、live 绿、ws 紫、stream 蓝、sync 灰、未知琥珀) */
export function requestTypeBadgeClass(kind: UsageRequestKind): string {
if (kind === 'cyber') return 'bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200'
if (kind === 'live') return 'bg-emerald-100 text-emerald-800 dark:bg-emerald-900 dark:text-emerald-200'
if (kind === 'ws_v2') return 'bg-violet-100 text-violet-800 dark:bg-violet-900 dark:text-violet-200'
if (kind === 'stream') return 'bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200'
if (kind === 'sync') return 'bg-gray-100 text-gray-800 dark:bg-dark-700 dark:text-gray-200'
@@ -27,6 +28,7 @@ export function requestTypeBadgeClass(kind: UsageRequestKind): string {
/** 请求类型 i18n 键(展示方自行 t()) */
export function requestTypeLabelKey(kind: UsageRequestKind): string {
if (kind === 'cyber') return 'usage.cyber'
if (kind === 'live') return 'usage.live'
if (kind === 'ws_v2') return 'usage.ws'
if (kind === 'stream') return 'usage.stream'
if (kind === 'sync') return 'usage.sync'
@@ -43,6 +45,7 @@ export function numericRequestTypeKind(
): UsageRequestKind | null {
const rt = requestType ?? (stream == null ? 0 : stream ? 2 : 1)
if (rt === 3) return 'ws_v2'
if (rt === 5) return 'live'
if (rt === 2) return 'stream'
if (rt === 1) return 'sync'
return null
+2 -2
View File
@@ -6,7 +6,7 @@ export interface UsageRequestTypeLike {
openai_ws_mode?: boolean | null
}
const VALID_REQUEST_TYPES = new Set<UsageRequestType>(['unknown', 'sync', 'stream', 'ws_v2', 'cyber'])
const VALID_REQUEST_TYPES = new Set<UsageRequestType>(['unknown', 'sync', 'stream', 'ws_v2', 'cyber', 'live'])
export const isUsageRequestType = (value: unknown): value is UsageRequestType => {
return typeof value === 'string' && VALID_REQUEST_TYPES.has(value as UsageRequestType)
@@ -24,7 +24,7 @@ export const resolveUsageRequestType = (value: UsageRequestTypeLike): UsageReque
export const requestTypeToLegacyStream = (requestType?: UsageRequestType | null): boolean | null | undefined => {
// cyber 与 stream 正交(cyber 可发生在 stream 或非 stream 请求),不映射到 legacy stream 维度。
if (!requestType || requestType === 'unknown' || requestType === 'cyber') {
if (!requestType || requestType === 'unknown' || requestType === 'cyber' || requestType === 'live') {
return null
}
if (requestType === 'sync') {