# `Puck.Message`
[🔗](https://github.com/bradleygolden/puck/blob/v0.2.25/lib/puck/message.ex#L1)

A single message in a conversation.

## Example

    Puck.Message.new(:user, "Hello!")
    Puck.Message.new(:user, [Puck.Content.text("Hi"), Puck.Content.image_url("...")])

# `role`

```elixir
@type role() :: :system | :user | :assistant
```

# `t`

```elixir
@type t() :: %Puck.Message{
  content: [Puck.Content.Part.t()],
  metadata: map(),
  role: role()
}
```

# `new`

Creates a new message.

Content can be a string (wrapped to Content.Part), a single Part, or a list of Parts.

## Examples

    iex> Puck.Message.new(:user, "Hello!")
    %Puck.Message{role: :user, content: [%Puck.Content.Part{type: :text, text: "Hello!"}], metadata: %{}}

    iex> Puck.Message.new(:user, Puck.Content.text("Hi!"))
    %Puck.Message{role: :user, content: [%Puck.Content.Part{type: :text, text: "Hi!"}], metadata: %{}}

---

*Consult [api-reference.md](api-reference.md) for complete listing*
