# `ExAthena.ToolCalls.RawJson`
[🔗](https://github.com/udin-io/ex_athena/blob/v0.7.1/lib/ex_athena/tool_calls/raw_json.ex#L1)

Best-effort parser for bare JSON tool calls embedded in assistant text.

Handles weak open-weight models (e.g. `qwen2.5-coder:14b` via Ollama) that
emit tool calls as raw JSON objects in the text rather than structured
`tool_calls` arrays or `~~~tool_call` fences.

A valid payload looks like:

    {"name": "read_file", "arguments": {"path": "/tmp/foo"}}

or wrapped in a markdown code fence:

    ```json
    {"name": "read_file", "arguments": {"path": "/tmp/foo"}}
    ```

The parser walks the text scanning for `{` characters, then uses a
balanced-brace scanner that respects JSON string boundaries (backslash
escapes, in-string state). Never raises — malformed input returns `{:ok, []}`.

# `parse`

```elixir
@spec parse(String.t()) :: {:ok, [ExAthena.Messages.ToolCall.t()]}
```

Extract tool calls from assistant text. Always returns `{:ok, list}`.

---

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