update
This commit is contained in:
+72
-2
@@ -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
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user