返回 oh-my-ppt
imageMessageUtils.ts
根目录 / src / renderer / src / components / session-detail / shared / imageMessageUtils.ts
1 import type { ImageGenerationMessage } from '@renderer/store'
2 import type { ImageGenerationHistoryRecord } from '@shared/image-generation.js'
3
4 export function buildImageMessageCacheKey(sessionId: string, pageId: string): string {
5 return `${sessionId}:${pageId}`
6 }
7
8 export function mergeImageMessages(
9 ...groups: ImageGenerationMessage[][]
10 ): ImageGenerationMessage[] {
11 const messagesById = new Map<string, ImageGenerationMessage>()
12 for (const message of groups.flat()) {
13 messagesById.set(message.id, message)
14 }
15 return [...messagesById.values()]
16 .sort((a, b) => {
17 const byTime = a.createdAt - b.createdAt
18 if (byTime !== 0) return byTime
19 if (a.role === b.role) return a.id.localeCompare(b.id)
20 return a.role === 'user' ? -1 : 1
21 })
22 .slice(-48)
23 }
24
25 export function imageHistoryToMessages(
26 histories: ImageGenerationHistoryRecord[]
27 ): ImageGenerationMessage[] {
28 return [...histories]
29 .sort((a, b) => a.createdAt - b.createdAt)
30 .flatMap((history) => [
31 {
32 id: `${history.id}:user`,
33 role: 'user' as const,
34 content: history.prompt,
35 createdAt: history.createdAt
36 },
37 {
38 id: `${history.id}:assistant`,
39 role: 'assistant' as const,
40 content: '',
41 assets: history.assets,
42 createdAt: history.createdAt
43 }
44 ])
45 }
46
46 lines TYPESCRIPT