diff --git a/src/renderer/src/hooks/useMessageOperations.ts b/src/renderer/src/hooks/useMessageOperations.ts index ef0ea6a2e0..559b4ad879 100644 --- a/src/renderer/src/hooks/useMessageOperations.ts +++ b/src/renderer/src/hooks/useMessageOperations.ts @@ -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 diff --git a/src/renderer/src/pages/home/Messages/Message.tsx b/src/renderer/src/pages/home/Messages/Message.tsx index 484d212bb5..6f0a362b9f 100644 --- a/src/renderer/src/pages/home/Messages/Message.tsx +++ b/src/renderer/src/pages/home/Messages/Message.tsx @@ -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 = ({ 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(null) const { editingMessageId, stopEditing } = useMessageEditing() const isEditing = editingMessageId === message.id @@ -69,14 +70,15 @@ const MessageItem: FC = ({ 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( diff --git a/src/renderer/src/services/TokenService.ts b/src/renderer/src/services/TokenService.ts index 0247d042ee..4d75a2cef7 100644 --- a/src/renderer/src/services/TokenService.ts +++ b/src/renderer/src/services/TokenService.ts @@ -48,10 +48,25 @@ async function getMessageParam(message: Message): Promise { 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) }