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