mirror of
https://github.com/EthanMarti/infio-copilot.git
synced 2026-01-16 16:31:56 +00:00
63 lines
1.6 KiB
TypeScript
63 lines
1.6 KiB
TypeScript
import { App } from 'obsidian'
|
|
|
|
import { ChatMessage, SerializedChatMessage } from '../../types/chat'
|
|
import { Mentionable } from '../../types/mentionable'
|
|
import {
|
|
deserializeMentionable,
|
|
serializeMentionable,
|
|
} from '../../utils/mentionable'
|
|
|
|
|
|
export const serializeChatMessage = (message: ChatMessage): SerializedChatMessage => {
|
|
switch (message.role) {
|
|
case 'user':
|
|
return {
|
|
role: 'user',
|
|
applyStatus: message.applyStatus,
|
|
content: message.content,
|
|
promptContent: message.promptContent,
|
|
id: message.id,
|
|
mentionables: message.mentionables.map(serializeMentionable),
|
|
similaritySearchResults: message.similaritySearchResults,
|
|
}
|
|
case 'assistant':
|
|
return {
|
|
role: 'assistant',
|
|
applyStatus: message.applyStatus,
|
|
content: message.content,
|
|
reasoningContent: message.reasoningContent,
|
|
id: message.id,
|
|
metadata: message.metadata,
|
|
}
|
|
}
|
|
}
|
|
|
|
export const deserializeChatMessage = (
|
|
message: SerializedChatMessage,
|
|
app: App,
|
|
): ChatMessage => {
|
|
switch (message.role) {
|
|
case 'user': {
|
|
return {
|
|
role: 'user',
|
|
applyStatus: message.applyStatus,
|
|
content: message.content,
|
|
promptContent: message.promptContent,
|
|
id: message.id,
|
|
mentionables: message.mentionables
|
|
.map((m) => deserializeMentionable(m, app))
|
|
.filter((m): m is Mentionable => m !== null),
|
|
similaritySearchResults: message.similaritySearchResults,
|
|
}
|
|
}
|
|
case 'assistant':
|
|
return {
|
|
role: 'assistant',
|
|
applyStatus: message.applyStatus,
|
|
content: message.content,
|
|
reasoningContent: message.reasoningContent,
|
|
id: message.id,
|
|
metadata: message.metadata,
|
|
}
|
|
}
|
|
} |