mirror of
https://github.com/farion1231/cc-switch.git
synced 2026-06-16 13:34:04 +08:00
Hermes aggregates all in-process API calls into a single sessions row with the `model` field locked to the initial model, so the usage dashboard cannot cleanly surface per-call billing context. Two rounds of UI workarounds (raw mapping, then `<model> @ <host>` display) did not resolve the user-facing confusion, so the whole tracking integration is dropped for now. Removes session_usage_hermes service (and its 17 tests), sync wiring in commands/usage.rs and lib.rs, _hermes_session/hermes_session entries in usage_stats SQL (provider_name_coalesce CASE and effective_usage_log_filter IN clause), frontend Tab/banner/dropdown/ icon entries, and four i18n keys per locale. Hermes app integration outside usage tracking (proxy routing, session manager, config) is preserved. Pre-existing hermes rows in proxy_request_logs are left as orphans — filtered out by the updated SQL and never surfaced in the UI.
139 lines
2.8 KiB
TypeScript
139 lines
2.8 KiB
TypeScript
// 使用统计相关类型定义
|
|
|
|
export interface TokenUsage {
|
|
inputTokens: number;
|
|
outputTokens: number;
|
|
cacheReadTokens: number;
|
|
cacheCreationTokens: number;
|
|
}
|
|
|
|
export interface RequestLog {
|
|
requestId: string;
|
|
providerId: string;
|
|
providerName?: string;
|
|
appType: string;
|
|
model: string;
|
|
requestModel?: string;
|
|
costMultiplier: string;
|
|
inputTokens: number;
|
|
outputTokens: number;
|
|
cacheReadTokens: number;
|
|
cacheCreationTokens: number;
|
|
inputCostUsd: string;
|
|
outputCostUsd: string;
|
|
cacheReadCostUsd: string;
|
|
cacheCreationCostUsd: string;
|
|
totalCostUsd: string;
|
|
isStreaming: boolean;
|
|
latencyMs: number;
|
|
firstTokenMs?: number;
|
|
durationMs?: number;
|
|
statusCode: number;
|
|
errorMessage?: string;
|
|
createdAt: number;
|
|
dataSource?: string;
|
|
}
|
|
|
|
export interface SessionSyncResult {
|
|
imported: number;
|
|
skipped: number;
|
|
filesScanned: number;
|
|
errors: string[];
|
|
}
|
|
|
|
export interface DataSourceSummary {
|
|
dataSource: string;
|
|
requestCount: number;
|
|
totalCostUsd: string;
|
|
}
|
|
|
|
export interface PaginatedLogs {
|
|
data: RequestLog[];
|
|
total: number;
|
|
page: number;
|
|
pageSize: number;
|
|
}
|
|
|
|
export interface ModelPricing {
|
|
modelId: string;
|
|
displayName: string;
|
|
inputCostPerMillion: string;
|
|
outputCostPerMillion: string;
|
|
cacheReadCostPerMillion: string;
|
|
cacheCreationCostPerMillion: string;
|
|
}
|
|
|
|
export interface UsageSummary {
|
|
totalRequests: number;
|
|
totalCost: string;
|
|
totalInputTokens: number;
|
|
totalOutputTokens: number;
|
|
totalCacheCreationTokens: number;
|
|
totalCacheReadTokens: number;
|
|
successRate: number;
|
|
}
|
|
|
|
export interface DailyStats {
|
|
date: string;
|
|
requestCount: number;
|
|
totalCost: string;
|
|
totalTokens: number;
|
|
totalInputTokens: number;
|
|
totalOutputTokens: number;
|
|
totalCacheCreationTokens: number;
|
|
totalCacheReadTokens: number;
|
|
}
|
|
|
|
export interface ProviderStats {
|
|
providerId: string;
|
|
providerName: string;
|
|
requestCount: number;
|
|
totalTokens: number;
|
|
totalCost: string;
|
|
successRate: number;
|
|
avgLatencyMs: number;
|
|
}
|
|
|
|
export interface ModelStats {
|
|
model: string;
|
|
requestCount: number;
|
|
totalTokens: number;
|
|
totalCost: string;
|
|
avgCostPerRequest: string;
|
|
}
|
|
|
|
export interface LogFilters {
|
|
appType?: string;
|
|
providerName?: string;
|
|
model?: string;
|
|
statusCode?: number;
|
|
startDate?: number;
|
|
endDate?: number;
|
|
}
|
|
|
|
export interface ProviderLimitStatus {
|
|
providerId: string;
|
|
dailyUsage: string;
|
|
dailyLimit?: string;
|
|
dailyExceeded: boolean;
|
|
monthlyUsage: string;
|
|
monthlyLimit?: string;
|
|
monthlyExceeded: boolean;
|
|
}
|
|
|
|
export type UsageRangePreset = "today" | "1d" | "7d" | "14d" | "30d" | "custom";
|
|
|
|
export interface UsageRangeSelection {
|
|
preset: UsageRangePreset;
|
|
customStartDate?: number;
|
|
customEndDate?: number;
|
|
}
|
|
|
|
export type AppTypeFilter = "all" | "claude" | "codex" | "gemini";
|
|
|
|
export interface StatsFilters {
|
|
timeRange: UsageRangePreset;
|
|
providerId?: string;
|
|
appType?: string;
|
|
}
|