fix: token usage not updated after editing message (#6725)

fix: update token usage when edit message
This commit is contained in:
Wang Jiyuan
2025-06-02 23:17:40 +08:00
committed by GitHub
parent 8f8c2f852e
commit 23eaae80c8
3 changed files with 25 additions and 8 deletions
@@ -332,11 +332,11 @@ export function useMessageOperations(topic: Topic) {
}
// 6. Log operations for debugging
console.log('[editMessageBlocks] Operations:', {
blocksToRemove: blockIdsToRemove.length,
blocksToUpdate: blocksToUpdate.length,
blocksToAdd: blocksToAdd.length
})
// console.log('[editMessageBlocks] Operations:', {
// blocksToRemove: blockIdsToRemove.length,
// blocksToUpdate: blocksToUpdate.length,
// blocksToAdd: blocksToAdd.length
// })
// 7. Update Redux state and database
// First update message and add/update blocks
@@ -21,6 +21,7 @@ import MessageErrorBoundary from './MessageErrorBoundary'
import MessageHeader from './MessageHeader'
import MessageMenubar from './MessageMenubar'
import MessageTokens from './MessageTokens'
import { estimateMessageUsage } from '@renderer/services/TokenService'
interface Props {
message: Message
@@ -52,7 +53,7 @@ const MessageItem: FC<Props> = ({
const model = useModel(getMessageModelId(message), message.model?.provider) || message.model
const { isBubbleStyle } = useMessageStyle()
const { showMessageDivider, messageFont, fontSize, narrowMode, messageStyle } = useSettings()
const { editMessageBlocks, resendUserMessageWithEdit } = useMessageOperations(topic)
const { editMessageBlocks, resendUserMessageWithEdit, editMessage } = useMessageOperations(topic)
const messageContainerRef = useRef<HTMLDivElement>(null)
const { editingMessageId, stopEditing } = useMessageEditing()
const isEditing = editingMessageId === message.id
@@ -69,14 +70,15 @@ const MessageItem: FC<Props> = ({
const handleEditSave = useCallback(
async (blocks: MessageBlock[]) => {
try {
console.log('after save blocks', blocks)
await editMessageBlocks(message.id, blocks)
const usage = await estimateMessageUsage(message)
editMessage(message.id, { usage: usage })
stopEditing()
} catch (error) {
console.error('Failed to save message blocks:', error)
}
},
[message, editMessageBlocks, stopEditing]
[message, editMessageBlocks, stopEditing, editMessage]
)
const handleEditResend = useCallback(
+15
View File
@@ -48,10 +48,25 @@ async function getMessageParam(message: Message): Promise<MessageItem[]> {
return param
}
/**
* 估算文本内容的 token 数量
*
* @param text - 需要估算的文本内容
* @returns 返回估算的 token 数量
*/
export function estimateTextTokens(text: string) {
return approximateTokenSize(text)
}
/**
* 估算图片文件的 token 数量
*
* 根据图片文件大小计算预估的 token 数量。
* 当前使用简单的文件大小除以 100 的方式进行估算。
*
* @param file - 图片文件对象
* @returns 返回估算的 token 数量
*/
export function estimateImageTokens(file: FileType) {
return Math.floor(file.size / 100)
}