🐛 fix: use display messages for token counting in group chats (#13247)

* 🐛 fix: use partial-json fallback in ToolArgumentsRepairer to recover incomplete args

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* 🐛 fix: use display messages for token counting in group chats

The TokenTag component used dbMessageSelectors.activeDbMessages which
generates a key without groupId, causing empty results in group chats.
This made the Context Details token tag invisible for group agents.

Switch to using the messageString prop (from mainAIChatsMessageString)
which correctly includes groupId in its key generation.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Arvin Xu
2026-03-26 00:59:45 +08:00
committed by GitHub
parent a1e91ab30d
commit 2c7a3f934d

View File

@@ -4,7 +4,7 @@ import { Center, Flexbox, Tooltip } from '@lobehub/ui';
import { TokenTag } from '@lobehub/ui/chat';
import { cssVar } from 'antd-style';
import numeral from 'numeral';
import { memo, useMemo } from 'react';
import { memo } from 'react';
import { useTranslation } from 'react-i18next';
import { createAgentToolsEngine } from '@/helpers/toolEngineering';
@@ -14,7 +14,7 @@ import { useTokenCount } from '@/hooks/useTokenCount';
import { useAgentStore } from '@/store/agent';
import { agentByIdSelectors, chatConfigByIdSelectors } from '@/store/agent/selectors';
import { useChatStore } from '@/store/chat';
import { dbMessageSelectors, topicSelectors } from '@/store/chat/selectors';
import { topicSelectors } from '@/store/chat/selectors';
import { useToolStore } from '@/store/tool';
import { pluginHelpers } from '@/store/tool/helpers';
import { useUserStore } from '@/store/user';
@@ -49,14 +49,6 @@ const Token = memo<TokenTagProps>(({ total: messageString }) => {
];
});
const [historyCount, enableHistoryCount] = useAgentStore((s) => [
chatConfigByIdSelectors.getHistoryCountById(agentId)(s),
chatConfigByIdSelectors.getEnableHistoryCountById(agentId)(s),
// need to re-render by search mode
chatConfigByIdSelectors.isEnableSearchById(agentId)(s),
chatConfigByIdSelectors.getUseModelBuiltinSearchById(agentId)(s),
]);
const maxTokens = useModelContextWindowTokens(model, provider);
// Tool usage token
@@ -97,12 +89,9 @@ const Token = memo<TokenTagProps>(({ total: messageString }) => {
// Chat usage token
const inputTokenCount = useTokenCount(input);
const chatsString = useMemo(() => {
const chats = dbMessageSelectors.activeDbMessages(useChatStore.getState());
return chats.map((chat) => chat.content).join('');
}, [messageString, historyCount, enableHistoryCount]);
const chatsToken = useTokenCount(chatsString) + inputTokenCount;
// Use messageString directly (from displayMessageSelectors.mainAIChatsMessageString)
// which correctly handles group chats via currentDisplayChatKey (includes groupId)
const chatsToken = useTokenCount(messageString) + inputTokenCount;
// SystemRole token
const systemRoleToken = useTokenCount(systemRole);