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