defprotocol GenAI.Provider.Anthropic.MessageProtocol do
def message(message)
end
defimpl GenAI.Provider.Anthropic.MessageProtocol, for: GenAI.Message do
def message(message) do
role = case message.role do
:user -> :user
:assistant -> :assistant
:system -> :user
end
%{role: role, content: message.content}
end
end
defimpl GenAI.Provider.Anthropic.MessageProtocol, for: GenAI.Message.ToolCall do
def message(message) do
tool_calls = Enum.map(message.tool_calls,
fn(tc) ->
"""
tc.function.name
#{tc.function.arguments && Jason.encode!(tc.function.arguments)}
"""
end
) |> Enum.join("\n")
content = """
#{message.content}
---
#{tool_calls}
"""
%{
role: :assistant,
content: content,
}
end
end
defimpl GenAI.Provider.Anthropic.MessageProtocol, for: GenAI.Message.ToolResponse do
def message(message) do
content = """
#{Jason.encode!(message.response)}
"""
%{
role: :user,
content: content
}
end
end