Spaces:
Running
Running
import { Message } from '@prisma/client'; | |
import { MessageAssistantResponse, MessageUI } from '../types'; | |
import { ChunkBody } from './content'; | |
/** | |
* The Message we saved to database consists of a prompt and a response | |
* for the UI to use, we need to break them to 2 messages, User and Assistant(if responded) | |
*/ | |
export const convertDBMessageToUIMessage = ( | |
messages: Message[], | |
): MessageUI[] => { | |
return messages.reduce((acc, message) => { | |
const { id, mediaUrl, prompt, response, result } = message; | |
if (mediaUrl && prompt) { | |
acc.push({ | |
id: id + '-user', | |
role: 'user', | |
content: prompt, | |
mediaUrl, | |
}); | |
} | |
if (response) { | |
acc.push({ | |
id: id + '-assistant', | |
role: 'assistant', | |
content: response, | |
}); | |
} | |
return acc; | |
}, [] as MessageUI[]); | |
}; | |
export const convertAssistantUIMessageToDBMessageResponse = ( | |
message: MessageUI, | |
): MessageAssistantResponse => { | |
let result = null; | |
const lines = message.content.split('\n'); | |
for (let line of lines) { | |
try { | |
const json = JSON.parse(line) as ChunkBody; | |
if (json.type == 'final_code') { | |
result = json as PrismaJson.FinalChatResult; | |
break; | |
} | |
} catch (e) { | |
console.error((e as Error).message); | |
} | |
} | |
return { | |
response: message.content, | |
result, | |
}; | |
}; | |