From d0bacbb53899e25f118bab796a9598af21c28a37 Mon Sep 17 00:00:00 2001 From: narawat Date: Thu, 6 Aug 2026 19:39:42 +0700 Subject: [PATCH] update --- src/utils.jl | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 72 insertions(+), 2 deletions(-) diff --git a/src/utils.jl b/src/utils.jl index 38729f4..2efd78b 100644 --- a/src/utils.jl +++ b/src/utils.jl @@ -153,9 +153,79 @@ function formatMsgForLLM(preparedContext::Vector{agentMessage})::Dict{String, An ) """ - # convert various messages to openai message format + messages = Dict{String, Any}[] - return openai_message + for msg in preparedContext + if msg isa userMessage + push!(messages, _userMessageToOpenAI(msg)) + elseif msg isa assistantMessage + push!(messages, _assistantMessageToOpenAI(msg)) + elseif msg isa toolResultMessage + push!(messages, _toolResultMessageToOpenAI(msg)) + end + end + + return Dict("messages" => messages) +end + + +""" +Convert a userMessage to OpenAI message format. +""" +function _userMessageToOpenAI(msg::userMessage)::Dict{String, Any} + return Dict( + "role" => "user", + "content" => _messageContentToBlocks(msg.content) + ) +end + + +""" +Convert an assistantMessage to OpenAI message format. +""" +function _assistantMessageToOpenAI(msg::assistantMessage)::Dict{String, Any} + return Dict( + "role" => "assistant", + "content" => _messageContentToBlocks(msg.content) + ) +end + + +""" +Convert a toolResultMessage to OpenAI message format. +""" +function _toolResultMessageToOpenAI(msg::toolResultMessage)::Dict{String, Any} + return Dict( + "role" => "tool", + "tool_call_id" => msg.toolCallId, + "content" => _messageContentToBlocks(msg.content) + ) +end + + +""" +Convert a vector of messageContent to OpenAI content blocks. + +Each textContent becomes a text block, each imageContent becomes +an image_url block. +""" +function _messageContentToBlocks(contents::Vector{messageContent})::Vector{Dict{String, Any}} + blocks = Vector{Dict{String, Any}}() + + for c in contents + if c isa textContent + push!(blocks, Dict("type" => "text", "text" => c.text)) + elseif c isa imageContent + push!(blocks, Dict( + "type" => "image_url", + "image_url" => Dict( + "url" => "data:$(c.mimeType);base64,$(c.data)" + ) + )) + end + end + + return blocks end