# `Mojentic.LLM.Tools.ParallelToolRunner`
[🔗](https://github.com/svetzal/mojentic-ex/blob/v1.5.0/lib/mojentic/llm/tools/parallel_tool_runner.ex#L1)

Execute tool calls concurrently using `Task.async_stream/3`.

`max_concurrency` defaults to 4 — high enough to win meaningfully on
typical realtime turns (2–3 concurrent function calls), low enough
that unbounded fan-out into rate-limited APIs doesn't punish users.

Output order matches input order even though execution is concurrent.

# `t`

```elixir
@type t() :: %Mojentic.LLM.Tools.ParallelToolRunner{
  max_concurrency: pos_integer(),
  timeout: timeout()
}
```

# `new`

# `run_with`

Variant that accepts an explicit runner struct so callers can override
concurrency / timeout per batch.

---

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