feat: v0.5.2 - daily trend refactor + provider/model two-level drill-down
- Dashboard: 用量趋势卡片改为外层 tab 容器(下划线 tab),移除卡片标题与内部 pill 切换器 - 用量趋势: 新增 供应商模型用量趋势 tab,与 模型用量趋势 并列 - 供应商 tab 弹窗: 每日用量详情改为两级(供应商 → 模型)分组 - 后端: DailyRow 新增 by_provider_model 嵌套聚合 - 前端: DailyBars 通用化(dimension/colorMap),DailyDetailModal 按 tab 维度渲染 - i18n: 新增 providerDistribution(中/英) - 版本: 0.5.1 → 0.5.2(tauri.conf / Cargo.toml / package.json / README)
This commit is contained in:
1 parent
3dd1fd93fe
commit
a1fdc6c93d
16 files changed
+1190
-506
No files matched your search
@@ -209,6 +209,7 @@ export const enTranslations: Record<TranslationKey, string> = {
|
||||
totalTokens: "Total tokens",
|
||||
cost: "Cost",
|
||||
modelDistribution: "Model distribution",
|
||||
providerDistribution: "Provider distribution",
|
||||
modalEscHint: "Press Esc or click outside to close",
|
||||
doubleClickHint: "Double-click for details",
|
||||
|
||||
@@ -252,4 +253,67 @@ export const enTranslations: Record<TranslationKey, string> = {
|
||||
unknownModelProvider: "Model '{0}' references unknown provider '{1}'",
|
||||
emptyModelId: "Model '{0}' has an empty model ID",
|
||||
invalidMaxContextSize: "Model '{0}' has an invalid max_context_size",
|
||||
|
||||
// Dashboard — ranges / status
|
||||
rangeToday: "Today",
|
||||
range7d: "7d",
|
||||
range30d: "30d",
|
||||
rangeAll: "All",
|
||||
dashLoadFailed: "Failed to load",
|
||||
|
||||
// Dashboard — KPI labels
|
||||
kpiRequests: "Requests",
|
||||
kpiInputOther: "Non-cached input",
|
||||
kpiOutput: "Output",
|
||||
kpiCacheRead: "Cache read",
|
||||
kpiCacheCreation: "Cache creation",
|
||||
kpiCacheHit: "Cache hit",
|
||||
kpiCost: "Est. cost",
|
||||
|
||||
// Dashboard — cards
|
||||
cardHeatmap: "Full-year heatmap",
|
||||
cardHeatmapSub: "Coloured by token volume",
|
||||
cardDailyTrend: "Usage trend",
|
||||
cardDailyTrendSubCapped: "Last 30 days · {n} days total",
|
||||
tabModelTrend: "Model usage trend",
|
||||
tabProviderTrend: "Provider–model usage trend",
|
||||
providerUnknown: "Unknown provider",
|
||||
cardDailyTrendSub: "{n} days",
|
||||
cardModelUsage: "Model usage",
|
||||
cardModelUsageSub: "{n} models",
|
||||
cardRecent: "Recent requests",
|
||||
cardRecentCapped: "Showing first {n} / {m}",
|
||||
cardRecentCount: "{n} entries",
|
||||
|
||||
// Dashboard — table columns / units
|
||||
colModel: "Model",
|
||||
colTokens: "Tokens",
|
||||
colCacheHit: "Cache hit",
|
||||
colTime: "Time",
|
||||
colInput: "Input",
|
||||
colOutput: "Output",
|
||||
colCacheRead: "Cache read",
|
||||
unitTimes: "requests",
|
||||
estimate: "est.",
|
||||
collapse: "Collapse",
|
||||
expandAll: "Expand all ({n})",
|
||||
|
||||
// Dashboard — pagination
|
||||
paginationPage: "Page {x} / {y}",
|
||||
paginationRange: "{x}–{y}",
|
||||
paginationPerPage: "{n} per page",
|
||||
pageFirst: "First",
|
||||
pagePrev: "Previous",
|
||||
pageNext: "Next",
|
||||
pageLast: "Last",
|
||||
|
||||
// Dashboard — footer / attribution
|
||||
footerScanned: "Scanned {n} files · {m} records",
|
||||
dashboardAttribution: "Dashboard ported from",
|
||||
sessionsAttribution: "Session manager ported from",
|
||||
attributionSuffix: "(MIT, © JochenYang)",
|
||||
|
||||
// Sessions — preview
|
||||
previewCollapseChars: "Collapse · {n} chars",
|
||||
previewExpandChars: "Expand · {n} chars",
|
||||
};
|
||||
@@ -204,6 +204,7 @@ export const zhTranslations = {
|
||||
totalTokens: "总 Token",
|
||||
cost: "费用",
|
||||
modelDistribution: "模型用量分布",
|
||||
providerDistribution: "供应商用量分布",
|
||||
modalEscHint: "按 Esc 或点击外部关闭",
|
||||
doubleClickHint: "双击查看详情",
|
||||
|
||||
@@ -247,6 +248,69 @@ export const zhTranslations = {
|
||||
unknownModelProvider: "模型「{0}」引用了未知供应商「{1}」",
|
||||
emptyModelId: "模型「{0}」的模型 ID 为空",
|
||||
invalidMaxContextSize: "模型「{0}」的 max_context_size 无效",
|
||||
|
||||
// Dashboard — ranges / status
|
||||
rangeToday: "今天",
|
||||
range7d: "7 天",
|
||||
range30d: "30 天",
|
||||
rangeAll: "全部",
|
||||
dashLoadFailed: "加载失败",
|
||||
|
||||
// Dashboard — KPI labels
|
||||
kpiRequests: "请求数",
|
||||
kpiInputOther: "非缓存输入",
|
||||
kpiOutput: "输出",
|
||||
kpiCacheRead: "缓存读",
|
||||
kpiCacheCreation: "缓存创建",
|
||||
kpiCacheHit: "缓存命中",
|
||||
kpiCost: "预估费用",
|
||||
|
||||
// Dashboard — cards
|
||||
cardHeatmap: "全年热力图",
|
||||
cardHeatmapSub: "按 Token 量着色",
|
||||
cardDailyTrend: "用量趋势",
|
||||
cardDailyTrendSubCapped: "近 30 天 · 共 {n} 天",
|
||||
tabModelTrend: "模型用量趋势",
|
||||
tabProviderTrend: "供应商模型用量趋势",
|
||||
providerUnknown: "未知供应商",
|
||||
cardDailyTrendSub: "共 {n} 天",
|
||||
cardModelUsage: "模型用量",
|
||||
cardModelUsageSub: "{n} 个模型",
|
||||
cardRecent: "最近请求",
|
||||
cardRecentCapped: "显示前 {n} / {m} 条",
|
||||
cardRecentCount: "{n} 条",
|
||||
|
||||
// Dashboard — table columns / units
|
||||
colModel: "模型",
|
||||
colTokens: "Token",
|
||||
colCacheHit: "缓存命中",
|
||||
colTime: "时间",
|
||||
colInput: "输入",
|
||||
colOutput: "输出",
|
||||
colCacheRead: "缓存读",
|
||||
unitTimes: "次",
|
||||
estimate: "估算",
|
||||
collapse: "收起",
|
||||
expandAll: "展开全部 ({n})",
|
||||
|
||||
// Dashboard — pagination
|
||||
paginationPage: "第 {x} / {y} 页",
|
||||
paginationRange: "{x}–{y} 条",
|
||||
paginationPerPage: "每页 {n} 条",
|
||||
pageFirst: "首页",
|
||||
pagePrev: "上一页",
|
||||
pageNext: "下一页",
|
||||
pageLast: "末页",
|
||||
|
||||
// Dashboard — footer / attribution
|
||||
footerScanned: "扫描 {n} 个文件 · {m} 条记录",
|
||||
dashboardAttribution: "仪表盘功能基于",
|
||||
sessionsAttribution: "会话管理功能基于",
|
||||
attributionSuffix: "(MIT,© JochenYang)移植",
|
||||
|
||||
// Sessions — preview
|
||||
previewCollapseChars: "收起 · {n} 字符",
|
||||
previewExpandChars: "展开全文 · {n} 字符",
|
||||
} as const;
|
||||
|
||||
export type TranslationKey = keyof typeof zhTranslations;
|
||||
Reference in new issue
Block a user