fix(chat): make context meter strictly backend-reported

Remove misleading local/cumulative token fallback in ContextDetailSheet and hide 0% badge when context used is unknown.
This commit is contained in:
M57 committed 2026-09-21 10:59:47 +03:00
1 parent 107701077d
commit 6fe62f9646
5 files changed
+23 -13

No files matched your search

@@ -51,12 +51,12 @@ fun ContextDetailSheet(
sheetState = sheetState,
) {
val full = fullTokens ?: 0L
val used = usedTokens ?: breakdown.inputTokens
val fraction = if (full > 0L) min(1f, used.toFloat() / full.toFloat()) else 0f
val fraction = if (full > 0L && usedTokens != null) min(1f, usedTokens.toFloat() / full.toFloat()) else 0f
val pct = (fraction * 100).toInt()
val statusColors = LocalHermesStatusColors.current
val barColor =
when {
usedTokens == null -> MaterialTheme.colorScheme.primary
pct >= 90 -> statusColors.error
pct >= 70 -> statusColors.warning
else -> MaterialTheme.colorScheme.primary
@@ -83,7 +83,7 @@ fun ContextDetailSheet(
verticalAlignment = Alignment.Bottom,
) {
Text(
text = formatTokens(used),
text = if (usedTokens != null) formatTokens(usedTokens) else "—",
style = MaterialTheme.typography.headlineSmall,
fontWeight = FontWeight.Bold,
color = barColor,
@@ -115,7 +115,12 @@ fun ContextDetailSheet(
)
}
Text(
text = "$pct% of context window used",
text =
if (usedTokens != null) {
"$pct% of context window used"
} else {
stringResource(R.string.context_window_usage_unavailable)
},
style = MaterialTheme.typography.labelMedium,
color = MaterialTheme.colorScheme.onSurfaceVariant,
)
@@ -56,12 +56,12 @@ fun ContextUsageChip(
val full = fullTokens
if (full == null || full <= 0L) return
val used = usedTokens ?: 0L
val fraction = min(1f, used.toFloat() / full.toFloat())
val fraction = if (usedTokens != null) min(1f, usedTokens.toFloat() / full.toFloat()) else 0f
val pct = (fraction * 100).toInt()
val statusColors = LocalHermesStatusColors.current
val barColor =
when {
usedTokens == null -> MaterialTheme.colorScheme.primary
pct >= 90 -> statusColors.error
pct >= 70 -> statusColors.warning
else -> MaterialTheme.colorScheme.primary
@@ -90,7 +90,7 @@ fun ContextUsageChip(
Text(
text =
if (usedTokens != null) {
"${formatTokens(used)} / ${formatTokens(full)} context"
"${formatTokens(usedTokens)} / ${formatTokens(full)} context"
} else {
"— / ${formatTokens(full)} context"
},
@@ -111,12 +111,14 @@ fun ContextUsageChip(
maxLines = 1,
)
}
Text(
text = "$pct%",
style = MaterialTheme.typography.labelSmall,
color = barColor,
maxLines = 1,
)
if (usedTokens != null) {
Text(
text = "$pct%",
style = MaterialTheme.typography.labelSmall,
color = barColor,
maxLines = 1,
)
}
}
}
Box(