diff --git a/apps/desktop/layer/renderer/src/modules/settings/tabs/ai/usage/components/DetailedUsageModal.tsx b/apps/desktop/layer/renderer/src/modules/settings/tabs/ai/usage/components/DetailedUsageModal.tsx index b95016be9..13dc332e2 100644 --- a/apps/desktop/layer/renderer/src/modules/settings/tabs/ai/usage/components/DetailedUsageModal.tsx +++ b/apps/desktop/layer/renderer/src/modules/settings/tabs/ai/usage/components/DetailedUsageModal.tsx @@ -57,10 +57,7 @@ export const DetailedUsageModal = () => { const byModel = analysis?.patterns?.byModel ?? [] const dailyTotals = daily.map((d: any) => Number(d.totalTokens) || 0) - const avgDaily = - dailyTotals.length > 0 - ? Math.round(dailyTotals.reduce((a, b) => a + b, 0) / dailyTotals.length) - : 0 + const peakDay = daily.reduce( (acc: any, cur: any) => (cur.totalTokens > (acc?.totalTokens ?? -1) ? cur : acc), null, @@ -81,16 +78,11 @@ export const DetailedUsageModal = () => { const formattedUsageTokens = formatTokenCount(usage.used) const formattedRemainingTokens = formatTokenCount(rateLimit.remainingTokens) const formattedTotalTokens = formatTokenCount(usage.total) - const formattedAvgDaily = formatTokenCount(avgDaily) return (
-

- {t("usage_analysis.detailed_description", { - defaultValue: "Track your AI credits usage, patterns, and efficiency.", - })} -

+

{t("usage_analysis.detailed_description")}

{rateLimit?.warningLevel && rateLimit.warningLevel !== "safe" && ( { {/* Layout Option 4: Asymmetric Modern */}
-
+
-
-
-
+
+
+
-
+
-
-
-
-
-
-
+
+
+
+ +
+
{
-
-
- -
-
- -
-
diff --git a/apps/desktop/layer/renderer/src/modules/settings/tabs/ai/usage/components/HistoryTab.tsx b/apps/desktop/layer/renderer/src/modules/settings/tabs/ai/usage/components/HistoryTab.tsx index 03c39971f..db398b7ec 100644 --- a/apps/desktop/layer/renderer/src/modules/settings/tabs/ai/usage/components/HistoryTab.tsx +++ b/apps/desktop/layer/renderer/src/modules/settings/tabs/ai/usage/components/HistoryTab.tsx @@ -26,7 +26,7 @@ export const HistoryTab = ({ analysis }: HistoryTabProps) => {
{t("analytics.event", { defaultValue: "Event" })}
-
+
{t("analytics.tokens", { defaultValue: "Tokens" })}
@@ -52,7 +52,7 @@ export const HistoryTab = ({ analysis }: HistoryTabProps) => {
-
+
{ const normalized = Math.max(0, Math.min(100, Number.isFinite(percentage) ? percentage : 0)) const dimension = typeof size === "number" ? size : sizeMap[size] - const strokeWidth = size === "sm" ? 6 : size === "md" ? 8 : 10 + const strokeWidth = size === "sm" ? 8 : size === "md" ? 12 : 14 const radius = (dimension - strokeWidth) / 2 const circumference = 2 * Math.PI * radius const offset = circumference - (normalized / 100) * circumference - // Color coding by percentage - const color = normalized >= 90 ? "#ef4444" : normalized >= 70 ? "#f59e0b" : "#22c55e" + // Gradient colors by percentage + const gradientId = `gradient-${Math.random().toString(36).slice(2, 9)}` + const gradientColors = + normalized >= 90 + ? { start: "#ef4444", end: "#dc2626" } // red + : normalized >= 70 + ? { start: "#f59e0b", end: "#d97706" } // amber + : { start: "#22c55e", end: "#16a34a" } // green return (
+ + + + + + -
+
{Math.round(normalized)}%
diff --git a/locales/ai/en.json b/locales/ai/en.json index 6e30853cd..bfa370b44 100644 --- a/locales/ai/en.json +++ b/locales/ai/en.json @@ -300,12 +300,14 @@ "usage_analysis.title": "AI Credits Usage", "usage_analysis.tokens_remaining": "credits remaining", "usage_analysis.tokens_used": "Credits Used", + "usage_analysis.total_credits": "Total Credits", "usage_analysis.total_limit": "Total Limit", "usage_analysis.view_details": "View Details", "usage_analysis.warning.general": "Consider reducing usage to avoid hitting limits", "usage_analysis.warning.projected": "Projected limit in {{eta}}", "usage_analysis.warning.rate": "Rate: {{rate}} tok/min", "usage_analysis.warning.title": "High AI usage detected", + "usage_analysis.window_remaining": "Window credits left", "welcome_description": "I'm here to help you with your reading needs. How can I assist you today?", "welcome_description_contextual": "Let's discuss this entry together" } diff --git a/locales/ai/ja.json b/locales/ai/ja.json index 32b4e6489..92bcd6abc 100644 --- a/locales/ai/ja.json +++ b/locales/ai/ja.json @@ -260,12 +260,14 @@ "usage_analysis.title": "トークン使用状況", "usage_analysis.tokens_remaining": "残りトークン", "usage_analysis.tokens_used": "使用済みトークン", + "usage_analysis.total_credits": "総クレジット", "usage_analysis.total_limit": "総上限", "usage_analysis.view_details": "詳細を表示", "usage_analysis.warning.general": "上限に達しないよう使用量の削減を検討してください", "usage_analysis.warning.projected": "{{eta}}で上限に達する可能性があります", - "usage_analysis.warning.rate": "レート: {{rate}} トークン/分", - "usage_analysis.warning.title": "AIの高い使用量が検出されました", + "usage_analysis.warning.rate": "レート:{{rate}} トークン/分", + "usage_analysis.warning.title": "AI の高い使用量が検出されました", + "usage_analysis.window_remaining": "ウィンドウ内の残りクレジット", "welcome_description": "私はあなたの読書と執筆のニーズをサポートするためにここにいます。今日はどのようにお手伝いできますか?", "welcome_description_contextual": "このエントリについて一緒に話し合いましょう" } diff --git a/locales/ai/zh-CN.json b/locales/ai/zh-CN.json index 777d103e5..4941c4820 100644 --- a/locales/ai/zh-CN.json +++ b/locales/ai/zh-CN.json @@ -293,12 +293,14 @@ "usage_analysis.title": "令牌使用情况", "usage_analysis.tokens_remaining": "剩余令牌", "usage_analysis.tokens_used": "已使用令牌", + "usage_analysis.total_credits": "总额度", "usage_analysis.total_limit": "总限制", "usage_analysis.view_details": "查看详情", "usage_analysis.warning.general": "请考虑降低使用以避免达到限制", "usage_analysis.warning.projected": "预计在 {{eta}} 达到限制", "usage_analysis.warning.rate": "速率:{{rate}} 令牌/分钟", "usage_analysis.warning.title": "检测到较高的 AI 使用量", + "usage_analysis.window_remaining": "窗口内剩余额度", "welcome_description": "我在这里帮助您处理阅读需求。今天我能为您做些什么?", "welcome_description_contextual": "让我们一起讨论这个条目" }