import { LanguageModelV1Prompt, UnsupportedFunctionalityError, } from '@ai-sdk/provider'; import { MistralChatPrompt } from './mistral-chat-prompt'; export function convertToMistralChatMessages( prompt: LanguageModelV1Prompt, ): MistralChatPrompt { const messages: MistralChatPrompt = []; for (const { role, content } of prompt) { switch (role) { case 'system': { messages.push({ role: 'system', content }); break; } case 'user': { messages.push({ role: 'user', content: content .map(part => { switch (part.type) { case 'text': { return part.text; } case 'image': { throw new UnsupportedFunctionalityError({ functionality: 'image-part', }); } } }) .join(''), }); break; } case 'assistant': { let text = ''; const toolCalls: Array<{ id: string; type: 'function'; function: { name: string; arguments: string }; }> = []; for (const part of content) { switch (part.type) { case 'text': { text += part.text; break; } case 'tool-call': { toolCalls.push({ id: part.toolCallId, type: 'function', function: { name: part.toolName, arguments: JSON.stringify(part.args), }, }); break; } default: { const _exhaustiveCheck: never = part; throw new Error(`Unsupported part: ${_exhaustiveCheck}`); } } } messages.push({ role: 'assistant', content: text, tool_calls: toolCalls.length > 0 ? toolCalls.map(({ function: { name, arguments: args } }) => ({ id: 'null', type: 'function', function: { name, arguments: args }, })) : undefined, }); break; } case 'tool': { for (const toolResponse of content) { messages.push({ role: 'tool', name: toolResponse.toolName, content: JSON.stringify(toolResponse.result), }); } break; } default: { const _exhaustiveCheck: never = role; throw new Error(`Unsupported role: ${_exhaustiveCheck}`); } } } return messages; }