# `LangChain.Message.ToolCall`
[🔗](https://github.com/brainlid/langchain/blob/v0.8.0/lib/message/tool_call.ex#L1)

Represents an LLM's request to use tool. It specifies the tool to execute and
may provide arguments for the tool to use.

## Example

    ToolCall.new!(%{
      call_id: "call_123",
      name: "give_greeting"
      arguments: %{"name" => "Howard"}
    })

# `t`
[🔗](https://github.com/brainlid/langchain/blob/v0.8.0/lib/message/tool_call.ex#L43)

```elixir
@type t() :: %LangChain.Message.ToolCall{
  arguments: term(),
  call_id: term(),
  display_text: term(),
  index: term(),
  metadata: term(),
  name: term(),
  status: term(),
  type: term()
}
```

# `complete`
[🔗](https://github.com/brainlid/langchain/blob/v0.8.0/lib/message/tool_call.ex#L80)

```elixir
@spec complete(t()) :: {:ok, t()} | {:error, Ecto.Changeset.t()}
```

Ensure the ToolCall's status is set to `:complete`. The process of completing
it parses the tool arguments, which may be invalid. Any problems parsing are
returned as a changeset error.

# `execution_status`
[🔗](https://github.com/brainlid/langchain/blob/v0.8.0/lib/message/tool_call.ex#L261)

```elixir
@spec execution_status(t(), String.t()) :: String.t()
```

Get the execution status from a ToolCall's metadata.

Returns the status string ("identified", "executing", "completed", "failed")
or the default value if not set.

# `merge`
[🔗](https://github.com/brainlid/langchain/blob/v0.8.0/lib/message/tool_call.ex#L140)

```elixir
@spec merge(nil | t(), t()) :: t()
```

The left side, or `primary`, is the ToolCall that is being accumulated. The
`call_part` is being merged into the `primary`.

Used to process streamed deltas where a single tool call can be split over
many smaller parts.

# `new`
[🔗](https://github.com/brainlid/langchain/blob/v0.8.0/lib/message/tool_call.ex#L52)

```elixir
@spec new(attrs :: map()) :: {:ok, t()} | {:error, Ecto.Changeset.t()}
```

Build a new ToolCall and return an `:ok`/`:error` tuple with the result.

# `new!`
[🔗](https://github.com/brainlid/langchain/blob/v0.8.0/lib/message/tool_call.ex#L64)

```elixir
@spec new!(attrs :: map()) :: t() | no_return()
```

Build a new ToolCall and return it or raise an error if invalid.

# `set_execution_status`
[🔗](https://github.com/brainlid/langchain/blob/v0.8.0/lib/message/tool_call.ex#L272)

```elixir
@spec set_execution_status(t(), String.t()) :: t()
```

Set the execution status on a ToolCall's metadata.

---

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