convertMessage method
Convert ChatMessage to OpenAI API format
Implementation
Map<String, dynamic> convertMessage(ChatMessage message) {
final result = <String, dynamic>{'role': message.role.name};
// Add name field if present (useful for system messages)
if (message.name != null) {
result['name'] = message.name;
}
switch (message.messageType) {
case TextMessage():
result['content'] = message.content;
break;
case ImageMessage(mime: final mime, data: final data):
// Handle base64 encoded images
final base64Data = base64Encode(data);
result['content'] = [
{
'type': 'image_url',
'image_url': {'url': 'data:${mime.mimeType};base64,$base64Data'},
},
];
break;
case ImageUrlMessage(url: final url):
result['content'] = [
{
'type': 'image_url',
'image_url': {'url': url},
},
];
break;
case ToolUseMessage(toolCalls: final toolCalls):
result['tool_calls'] = toolCalls.map((tc) => tc.toJson()).toList();
break;
case ToolResultMessage(results: final results):
// Tool results need to be converted to separate tool messages
// This case should not happen in normal message conversion
// as tool results are handled separately in buildRequestBody
result['content'] =
message.content.isNotEmpty ? message.content : 'Tool result';
result['tool_call_id'] = results.isNotEmpty ? results.first.id : null;
break;
default:
result['content'] = message.content;
}
return result;
}