Add message role counts to memory debug panel

This commit is contained in:
Bohdan Triapitsyn
2026-06-13 16:40:29 +03:00
parent 560e24cbc2
commit 676f0b3898
10 changed files with 70 additions and 6 deletions
@@ -149,22 +149,43 @@ export const DebugPanel: React.FC<DebugPanelProps> = ({ onClose }) => {
return () => window.clearTimeout(timeoutId); return () => window.clearTimeout(timeoutId);
}, [copyState]); }, [copyState]);
const totalMessages = React.useMemo(() => { const messageRoleCounts = React.useMemo(() => {
let assistant = 0;
let total = 0; let total = 0;
let user = 0;
for (const sessionId of Object.keys(messageRecord)) { for (const sessionId of Object.keys(messageRecord)) {
total += messageRecord[sessionId]?.length ?? 0; const messages = messageRecord[sessionId] ?? [];
total += messages.length;
for (const message of messages) {
if (message.role === 'user') {
user += 1;
} else if (message.role === 'assistant') {
assistant += 1;
}
}
} }
return total; return { assistant, total, user };
}, [messageRecord]); }, [messageRecord]);
const sessionStats = React.useMemo(() => { const sessionStats = React.useMemo(() => {
return sessions.map(session => { return sessions.map(session => {
const messageCount = messageRecord[session.id]?.length || 0; const messages = messageRecord[session.id] ?? [];
let assistantMessageCount = 0;
let userMessageCount = 0;
for (const message of messages) {
if (message.role === 'user') {
userMessageCount += 1;
} else if (message.role === 'assistant') {
assistantMessageCount += 1;
}
}
const memoryState = sessionMemoryState.get(session.id); const memoryState = sessionMemoryState.get(session.id);
return { return {
id: session.id, id: session.id,
title: session.title || t('memoryDebugPanel.common.untitled'), title: session.title || t('memoryDebugPanel.common.untitled'),
messageCount, assistantMessageCount,
messageCount: messages.length,
userMessageCount,
isStreaming: memoryState?.isStreaming || false, isStreaming: memoryState?.isStreaming || false,
isZombie: memoryState?.isZombie || false, isZombie: memoryState?.isZombie || false,
backgroundCount: memoryState?.backgroundMessageCount || 0, backgroundCount: memoryState?.backgroundMessageCount || 0,
@@ -256,8 +277,10 @@ export const DebugPanel: React.FC<DebugPanelProps> = ({ onClose }) => {
{activeTab === 'memory' ? ( {activeTab === 'memory' ? (
<div className="space-y-3"> <div className="space-y-3">
<div className="grid grid-cols-2 gap-2 typography-meta"> <div className="grid grid-cols-2 gap-2 typography-meta">
<MetricCard label={t('memoryDebugPanel.metric.totalMessages')} value={totalMessages} /> <MetricCard label={t('memoryDebugPanel.metric.totalMessages')} value={messageRoleCounts.total} />
<MetricCard label={t('memoryDebugPanel.metric.cachedSessions')} value={`${cachedSessionCount} / ${MEMORY_LIMITS.MAX_SESSIONS}`} /> <MetricCard label={t('memoryDebugPanel.metric.cachedSessions')} value={`${cachedSessionCount} / ${MEMORY_LIMITS.MAX_SESSIONS}`} />
<MetricCard label={t('memoryDebugPanel.metric.userMessages')} value={messageRoleCounts.user} />
<MetricCard label={t('memoryDebugPanel.metric.assistantMessages')} value={messageRoleCounts.assistant} />
</div> </div>
<div className="typography-meta space-y-1 border-t border-[var(--interactive-border)] pt-2"> <div className="typography-meta space-y-1 border-t border-[var(--interactive-border)] pt-2">
@@ -294,6 +317,12 @@ export const DebugPanel: React.FC<DebugPanelProps> = ({ onClose }) => {
{stat.isZombie ? <span className="text-[var(--status-warning)]">!</span> : null} {stat.isZombie ? <span className="text-[var(--status-warning)]">!</span> : null}
</div> </div>
<div className="flex items-center gap-2"> <div className="flex items-center gap-2">
<span className="font-mono text-[var(--surface-muted-foreground)]">
{t('memoryDebugPanel.metric.roleMsgsValue', {
assistant: stat.assistantMessageCount,
user: stat.userMessageCount,
})}
</span>
<span className="font-mono text-[var(--surface-foreground)]"> <span className="font-mono text-[var(--surface-foreground)]">
{t('memoryDebugPanel.metric.msgsValue', { count: stat.messageCount })} {t('memoryDebugPanel.metric.msgsValue', { count: stat.messageCount })}
</span> </span>
@@ -318,6 +347,14 @@ export const DebugPanel: React.FC<DebugPanelProps> = ({ onClose }) => {
sessions: sessions.map(s => ({ id: s.id, title: s.title })), sessions: sessions.map(s => ({ id: s.id, title: s.title })),
currentSessionId, currentSessionId,
cachedSessions: Object.keys(messageRecord), cachedSessions: Object.keys(messageRecord),
messageRoleCounts,
sessionMessageRoleCounts: sessionStats.map(stat => ({
id: stat.id,
title: stat.title,
total: stat.messageCount,
user: stat.userMessageCount,
assistant: stat.assistantMessageCount,
})),
memoryStates: Object.fromEntries(sessionMemoryState), memoryStates: Object.fromEntries(sessionMemoryState),
}); });
}} }}
+3
View File
@@ -2505,6 +2505,8 @@ export const dict = {
'memoryDebugPanel.section.noVscodeSamples': 'No VS Code bridge samples yet.', 'memoryDebugPanel.section.noVscodeSamples': 'No VS Code bridge samples yet.',
'memoryDebugPanel.metric.totalMessages': 'Total Messages', 'memoryDebugPanel.metric.totalMessages': 'Total Messages',
'memoryDebugPanel.metric.cachedSessions': 'Cached Sessions', 'memoryDebugPanel.metric.cachedSessions': 'Cached Sessions',
'memoryDebugPanel.metric.userMessages': 'User Messages',
'memoryDebugPanel.metric.assistantMessages': 'Assistant Messages',
'memoryDebugPanel.metric.viewportWindow': 'Viewport Window', 'memoryDebugPanel.metric.viewportWindow': 'Viewport Window',
'memoryDebugPanel.metric.zombieTimeout': 'Zombie Timeout', 'memoryDebugPanel.metric.zombieTimeout': 'Zombie Timeout',
'memoryDebugPanel.metric.githubTotalRequests': 'GitHub Total Requests', 'memoryDebugPanel.metric.githubTotalRequests': 'GitHub Total Requests',
@@ -2522,6 +2524,7 @@ export const dict = {
'memoryDebugPanel.metric.messagesValue': '{count} messages', 'memoryDebugPanel.metric.messagesValue': '{count} messages',
'memoryDebugPanel.metric.minutesValue': '{count} minutes', 'memoryDebugPanel.metric.minutesValue': '{count} minutes',
'memoryDebugPanel.metric.msgsValue': '{count} msgs', 'memoryDebugPanel.metric.msgsValue': '{count} msgs',
'memoryDebugPanel.metric.roleMsgsValue': 'U {user} / A {assistant}',
'memoryDebugPanel.metric.countValue': 'count {value}', 'memoryDebugPanel.metric.countValue': 'count {value}',
'memoryDebugPanel.metric.avgValue': 'avg {value}', 'memoryDebugPanel.metric.avgValue': 'avg {value}',
'memoryDebugPanel.metric.maxValue': 'max {value}', 'memoryDebugPanel.metric.maxValue': 'max {value}',
+3
View File
@@ -2471,6 +2471,8 @@ export const dict: Record<I18nKey, string> = {
"memoryDebugPanel.section.noVscodeSamples": "No hay muestras de puente VS Code aún.", "memoryDebugPanel.section.noVscodeSamples": "No hay muestras de puente VS Code aún.",
"memoryDebugPanel.metric.totalMessages": "Mensajes totales", "memoryDebugPanel.metric.totalMessages": "Mensajes totales",
"memoryDebugPanel.metric.cachedSessions": "Sesiones en caché", "memoryDebugPanel.metric.cachedSessions": "Sesiones en caché",
"memoryDebugPanel.metric.userMessages": "Mensajes del usuario",
"memoryDebugPanel.metric.assistantMessages": "Mensajes del asistente",
"memoryDebugPanel.metric.viewportWindow": "Ventana de visualización", "memoryDebugPanel.metric.viewportWindow": "Ventana de visualización",
"memoryDebugPanel.metric.zombieTimeout": "Timeout zombie", "memoryDebugPanel.metric.zombieTimeout": "Timeout zombie",
"memoryDebugPanel.metric.githubTotalRequests": "Solicitudes totales de GitHub", "memoryDebugPanel.metric.githubTotalRequests": "Solicitudes totales de GitHub",
@@ -2488,6 +2490,7 @@ export const dict: Record<I18nKey, string> = {
"memoryDebugPanel.metric.messagesValue": "{count} mensajes", "memoryDebugPanel.metric.messagesValue": "{count} mensajes",
"memoryDebugPanel.metric.minutesValue": "{count} minutos", "memoryDebugPanel.metric.minutesValue": "{count} minutos",
"memoryDebugPanel.metric.msgsValue": "{count} mensajes", "memoryDebugPanel.metric.msgsValue": "{count} mensajes",
"memoryDebugPanel.metric.roleMsgsValue": "U {user} / A {assistant}",
"memoryDebugPanel.metric.countValue": "conteo {value}", "memoryDebugPanel.metric.countValue": "conteo {value}",
"memoryDebugPanel.metric.avgValue": "prom. {value}", "memoryDebugPanel.metric.avgValue": "prom. {value}",
"memoryDebugPanel.metric.maxValue": "máx. {value}", "memoryDebugPanel.metric.maxValue": "máx. {value}",
+3
View File
@@ -2315,6 +2315,8 @@ export const dict = {
'memoryDebugPanel.section.noVscodeSamples': 'Aucun échantillon de pont VS Code pour l\'instant.', 'memoryDebugPanel.section.noVscodeSamples': 'Aucun échantillon de pont VS Code pour l\'instant.',
'memoryDebugPanel.metric.totalMessages': 'Nombre total de messages', 'memoryDebugPanel.metric.totalMessages': 'Nombre total de messages',
'memoryDebugPanel.metric.cachedSessions': 'Sessions mises en cache', 'memoryDebugPanel.metric.cachedSessions': 'Sessions mises en cache',
'memoryDebugPanel.metric.userMessages': 'Messages utilisateur',
'memoryDebugPanel.metric.assistantMessages': 'Messages assistant',
'memoryDebugPanel.metric.viewportWindow': 'Fenêtre d\'affichage', 'memoryDebugPanel.metric.viewportWindow': 'Fenêtre d\'affichage',
'memoryDebugPanel.metric.zombieTimeout': 'Délai d\'attente des zombies', 'memoryDebugPanel.metric.zombieTimeout': 'Délai d\'attente des zombies',
'memoryDebugPanel.metric.githubTotalRequests': 'GitHub Total des demandes', 'memoryDebugPanel.metric.githubTotalRequests': 'GitHub Total des demandes',
@@ -2332,6 +2334,7 @@ export const dict = {
'memoryDebugPanel.metric.messagesValue': 'Messages {count}', 'memoryDebugPanel.metric.messagesValue': 'Messages {count}',
'memoryDebugPanel.metric.minutesValue': 'Minutes {count}', 'memoryDebugPanel.metric.minutesValue': 'Minutes {count}',
'memoryDebugPanel.metric.msgsValue': 'Messages {count}', 'memoryDebugPanel.metric.msgsValue': 'Messages {count}',
'memoryDebugPanel.metric.roleMsgsValue': 'U {user} / A {assistant}',
'memoryDebugPanel.metric.countValue': 'compter {value}', 'memoryDebugPanel.metric.countValue': 'compter {value}',
'memoryDebugPanel.metric.avgValue': 'moyenne {value}', 'memoryDebugPanel.metric.avgValue': 'moyenne {value}',
'memoryDebugPanel.metric.maxValue': 'maximum {value}', 'memoryDebugPanel.metric.maxValue': 'maximum {value}',
+3
View File
@@ -2505,6 +2505,8 @@ export const dict: Record<I18nKey, string> = {
'memoryDebugPanel.section.noVscodeSamples': 'VS Code 브리지 샘플 없음', 'memoryDebugPanel.section.noVscodeSamples': 'VS Code 브리지 샘플 없음',
'memoryDebugPanel.metric.totalMessages': '전체 메시지', 'memoryDebugPanel.metric.totalMessages': '전체 메시지',
'memoryDebugPanel.metric.cachedSessions': '캐시된 세션', 'memoryDebugPanel.metric.cachedSessions': '캐시된 세션',
'memoryDebugPanel.metric.userMessages': '사용자 메시지',
'memoryDebugPanel.metric.assistantMessages': '어시스턴트 메시지',
'memoryDebugPanel.metric.viewportWindow': '뷰포트', 'memoryDebugPanel.metric.viewportWindow': '뷰포트',
'memoryDebugPanel.metric.zombieTimeout': '좀비 타임아웃', 'memoryDebugPanel.metric.zombieTimeout': '좀비 타임아웃',
'memoryDebugPanel.metric.githubTotalRequests': 'GitHub 전체 요청', 'memoryDebugPanel.metric.githubTotalRequests': 'GitHub 전체 요청',
@@ -2522,6 +2524,7 @@ export const dict: Record<I18nKey, string> = {
'memoryDebugPanel.metric.messagesValue': '{count}개 메시지', 'memoryDebugPanel.metric.messagesValue': '{count}개 메시지',
'memoryDebugPanel.metric.minutesValue': '{count}분', 'memoryDebugPanel.metric.minutesValue': '{count}분',
'memoryDebugPanel.metric.msgsValue': '{count}개 메시지', 'memoryDebugPanel.metric.msgsValue': '{count}개 메시지',
'memoryDebugPanel.metric.roleMsgsValue': 'U {user} / A {assistant}',
'memoryDebugPanel.metric.countValue': '개수 {value}', 'memoryDebugPanel.metric.countValue': '개수 {value}',
'memoryDebugPanel.metric.avgValue': '평균 {value}', 'memoryDebugPanel.metric.avgValue': '평균 {value}',
'memoryDebugPanel.metric.maxValue': '최대 {value}', 'memoryDebugPanel.metric.maxValue': '최대 {value}',
+3
View File
@@ -2064,6 +2064,8 @@ export const dict: Record<I18nKey, string> = {
'memoryDebugPanel.common.untitled': 'Bez tytułu', 'memoryDebugPanel.common.untitled': 'Bez tytułu',
'memoryDebugPanel.metric.avgValue': 'średnio {value}', 'memoryDebugPanel.metric.avgValue': 'średnio {value}',
'memoryDebugPanel.metric.cachedSessions': 'Sesje w cache', 'memoryDebugPanel.metric.cachedSessions': 'Sesje w cache',
'memoryDebugPanel.metric.userMessages': 'Wiadomości użytkownika',
'memoryDebugPanel.metric.assistantMessages': 'Wiadomości asystenta',
'memoryDebugPanel.metric.chatMessageRenders': 'Renderowania ChatMessage', 'memoryDebugPanel.metric.chatMessageRenders': 'Renderowania ChatMessage',
'memoryDebugPanel.metric.chatMessageStaticDuringStream': 'ChatMessage statyczny podczas streamu', 'memoryDebugPanel.metric.chatMessageStaticDuringStream': 'ChatMessage statyczny podczas streamu',
'memoryDebugPanel.metric.chatMessageStaticOutsideActiveTurn': 'ChatMessage statyczny poza aktywną turą', 'memoryDebugPanel.metric.chatMessageStaticOutsideActiveTurn': 'ChatMessage statyczny poza aktywną turą',
@@ -2078,6 +2080,7 @@ export const dict: Record<I18nKey, string> = {
'memoryDebugPanel.metric.metrics': 'Metryki', 'memoryDebugPanel.metric.metrics': 'Metryki',
'memoryDebugPanel.metric.minutesValue': '{count} minut', 'memoryDebugPanel.metric.minutesValue': '{count} minut',
'memoryDebugPanel.metric.msgsValue': '{count} wiad.', 'memoryDebugPanel.metric.msgsValue': '{count} wiad.',
'memoryDebugPanel.metric.roleMsgsValue': 'U {user} / A {assistant}',
'memoryDebugPanel.metric.samples': 'Próbki', 'memoryDebugPanel.metric.samples': 'Próbki',
'memoryDebugPanel.metric.totalMessages': 'Łączna liczba wiadomości', 'memoryDebugPanel.metric.totalMessages': 'Łączna liczba wiadomości',
'memoryDebugPanel.metric.totalValue': 'łącznie {value}', 'memoryDebugPanel.metric.totalValue': 'łącznie {value}',
@@ -2471,6 +2471,8 @@ export const dict: Record<I18nKey, string> = {
"memoryDebugPanel.section.noVscodeSamples": "Ainda não há amostras da ponte VS Code.", "memoryDebugPanel.section.noVscodeSamples": "Ainda não há amostras da ponte VS Code.",
"memoryDebugPanel.metric.totalMessages": "Mensagens totais", "memoryDebugPanel.metric.totalMessages": "Mensagens totais",
"memoryDebugPanel.metric.cachedSessions": "Sessões em cache", "memoryDebugPanel.metric.cachedSessions": "Sessões em cache",
"memoryDebugPanel.metric.userMessages": "Mensagens do usuário",
"memoryDebugPanel.metric.assistantMessages": "Mensagens do assistente",
"memoryDebugPanel.metric.viewportWindow": "Janela de visualização", "memoryDebugPanel.metric.viewportWindow": "Janela de visualização",
"memoryDebugPanel.metric.zombieTimeout": "Timeout zombie", "memoryDebugPanel.metric.zombieTimeout": "Timeout zombie",
"memoryDebugPanel.metric.githubTotalRequests": "Solicitações totais do GitHub", "memoryDebugPanel.metric.githubTotalRequests": "Solicitações totais do GitHub",
@@ -2488,6 +2490,7 @@ export const dict: Record<I18nKey, string> = {
"memoryDebugPanel.metric.messagesValue": "{count} mensagens", "memoryDebugPanel.metric.messagesValue": "{count} mensagens",
"memoryDebugPanel.metric.minutesValue": "{count} minutos", "memoryDebugPanel.metric.minutesValue": "{count} minutos",
"memoryDebugPanel.metric.msgsValue": "{count} mensagens", "memoryDebugPanel.metric.msgsValue": "{count} mensagens",
"memoryDebugPanel.metric.roleMsgsValue": "U {user} / A {assistant}",
"memoryDebugPanel.metric.countValue": "contagem {value}", "memoryDebugPanel.metric.countValue": "contagem {value}",
"memoryDebugPanel.metric.avgValue": "méd. {value}", "memoryDebugPanel.metric.avgValue": "méd. {value}",
"memoryDebugPanel.metric.maxValue": "máx. {value}", "memoryDebugPanel.metric.maxValue": "máx. {value}",
+3
View File
@@ -2471,6 +2471,8 @@ export const dict: Record<I18nKey, string> = {
"memoryDebugPanel.section.noVscodeSamples": "Ще немає зразків мостів VS Code.", "memoryDebugPanel.section.noVscodeSamples": "Ще немає зразків мостів VS Code.",
"memoryDebugPanel.metric.totalMessages": "Усього повідомлень", "memoryDebugPanel.metric.totalMessages": "Усього повідомлень",
"memoryDebugPanel.metric.cachedSessions": "Кешовані сесії", "memoryDebugPanel.metric.cachedSessions": "Кешовані сесії",
"memoryDebugPanel.metric.userMessages": "Повідомлення користувача",
"memoryDebugPanel.metric.assistantMessages": "Повідомлення асистента",
"memoryDebugPanel.metric.viewportWindow": "Вікно вʼюпорту", "memoryDebugPanel.metric.viewportWindow": "Вікно вʼюпорту",
"memoryDebugPanel.metric.zombieTimeout": "Тайм-аут зомбі", "memoryDebugPanel.metric.zombieTimeout": "Тайм-аут зомбі",
"memoryDebugPanel.metric.githubTotalRequests": "Загальна кількість запитів GitHub", "memoryDebugPanel.metric.githubTotalRequests": "Загальна кількість запитів GitHub",
@@ -2488,6 +2490,7 @@ export const dict: Record<I18nKey, string> = {
"memoryDebugPanel.metric.messagesValue": "{count} повідомлення", "memoryDebugPanel.metric.messagesValue": "{count} повідомлення",
"memoryDebugPanel.metric.minutesValue": "{count} хвилин", "memoryDebugPanel.metric.minutesValue": "{count} хвилин",
"memoryDebugPanel.metric.msgsValue": "{count} повідомлення", "memoryDebugPanel.metric.msgsValue": "{count} повідомлення",
"memoryDebugPanel.metric.roleMsgsValue": "К {user} / А {assistant}",
"memoryDebugPanel.metric.countValue": "кількість {value}", "memoryDebugPanel.metric.countValue": "кількість {value}",
"memoryDebugPanel.metric.avgValue": "середнє {value}", "memoryDebugPanel.metric.avgValue": "середнє {value}",
"memoryDebugPanel.metric.maxValue": "макс. {value}", "memoryDebugPanel.metric.maxValue": "макс. {value}",
@@ -2471,6 +2471,8 @@ export const dict: Record<I18nKey, string> = {
'memoryDebugPanel.section.noVscodeSamples': '暂无 VS Code 桥接采样。', 'memoryDebugPanel.section.noVscodeSamples': '暂无 VS Code 桥接采样。',
'memoryDebugPanel.metric.totalMessages': '消息总数', 'memoryDebugPanel.metric.totalMessages': '消息总数',
'memoryDebugPanel.metric.cachedSessions': '缓存会话', 'memoryDebugPanel.metric.cachedSessions': '缓存会话',
'memoryDebugPanel.metric.userMessages': '用户消息',
'memoryDebugPanel.metric.assistantMessages': '助手消息',
'memoryDebugPanel.metric.viewportWindow': '视口窗口', 'memoryDebugPanel.metric.viewportWindow': '视口窗口',
'memoryDebugPanel.metric.zombieTimeout': '僵尸超时', 'memoryDebugPanel.metric.zombieTimeout': '僵尸超时',
'memoryDebugPanel.metric.githubTotalRequests': 'GitHub 请求总数', 'memoryDebugPanel.metric.githubTotalRequests': 'GitHub 请求总数',
@@ -2488,6 +2490,7 @@ export const dict: Record<I18nKey, string> = {
'memoryDebugPanel.metric.messagesValue': '{count} 条消息', 'memoryDebugPanel.metric.messagesValue': '{count} 条消息',
'memoryDebugPanel.metric.minutesValue': '{count} 分钟', 'memoryDebugPanel.metric.minutesValue': '{count} 分钟',
'memoryDebugPanel.metric.msgsValue': '{count} 条', 'memoryDebugPanel.metric.msgsValue': '{count} 条',
'memoryDebugPanel.metric.roleMsgsValue': '用户 {user} / 助手 {assistant}',
'memoryDebugPanel.metric.countValue': '次数 {value}', 'memoryDebugPanel.metric.countValue': '次数 {value}',
'memoryDebugPanel.metric.avgValue': '平均 {value}', 'memoryDebugPanel.metric.avgValue': '平均 {value}',
'memoryDebugPanel.metric.maxValue': '最大 {value}', 'memoryDebugPanel.metric.maxValue': '最大 {value}',
@@ -2468,6 +2468,8 @@ export const dict: Record<I18nKey, string> = {
'memoryDebugPanel.section.noVscodeSamples': '暫無 VS Code 橋接取樣。', 'memoryDebugPanel.section.noVscodeSamples': '暫無 VS Code 橋接取樣。',
'memoryDebugPanel.metric.totalMessages': '訊息總數', 'memoryDebugPanel.metric.totalMessages': '訊息總數',
'memoryDebugPanel.metric.cachedSessions': '快取會話', 'memoryDebugPanel.metric.cachedSessions': '快取會話',
'memoryDebugPanel.metric.userMessages': '使用者訊息',
'memoryDebugPanel.metric.assistantMessages': '助理訊息',
'memoryDebugPanel.metric.viewportWindow': '視口視窗', 'memoryDebugPanel.metric.viewportWindow': '視口視窗',
'memoryDebugPanel.metric.zombieTimeout': '殭屍逾時', 'memoryDebugPanel.metric.zombieTimeout': '殭屍逾時',
'memoryDebugPanel.metric.githubTotalRequests': 'GitHub 請求總數', 'memoryDebugPanel.metric.githubTotalRequests': 'GitHub 請求總數',
@@ -2485,6 +2487,7 @@ export const dict: Record<I18nKey, string> = {
'memoryDebugPanel.metric.messagesValue': '{count} 條訊息', 'memoryDebugPanel.metric.messagesValue': '{count} 條訊息',
'memoryDebugPanel.metric.minutesValue': '{count} 分鐘', 'memoryDebugPanel.metric.minutesValue': '{count} 分鐘',
'memoryDebugPanel.metric.msgsValue': '{count} 條', 'memoryDebugPanel.metric.msgsValue': '{count} 條',
'memoryDebugPanel.metric.roleMsgsValue': '使用者 {user} / 助理 {assistant}',
'memoryDebugPanel.metric.countValue': '次數 {value}', 'memoryDebugPanel.metric.countValue': '次數 {value}',
'memoryDebugPanel.metric.avgValue': '平均 {value}', 'memoryDebugPanel.metric.avgValue': '平均 {value}',
'memoryDebugPanel.metric.maxValue': '最大 {value}', 'memoryDebugPanel.metric.maxValue': '最大 {value}',