# `ReqLLM.Speech.DetailedResult`
[🔗](https://github.com/agentjido/req_llm/blob/main/lib/req_llm/speech/detailed_result.ex#L1)

Opt-in speech result with sparse call metadata.

The nested `result` is the unchanged `ReqLLM.Speech.Result` returned by
`ReqLLM.speak/3`. `call_metadata` contains only values observed for the same
provider request. Unavailable usage, identifiers, warnings, timings, and
provider metadata are omitted rather than represented by defaults.

The top-level `request_id` is ReqLLM's telemetry correlation ID. A provider's
request ID, when supplied in the response, is kept separately at
`call_metadata.provider_metadata.request_id`.

# `call_metadata`

```elixir
@type call_metadata() :: %{
  :model =&gt; String.t(),
  :provider =&gt; atom(),
  optional(:status) =&gt; non_neg_integer(),
  optional(:usage) =&gt; map(),
  optional(:request_id) =&gt; String.t(),
  optional(:response_id) =&gt; String.t(),
  optional(:warnings) =&gt; [String.t()],
  optional(:timings) =&gt; map(),
  optional(:provider_metadata) =&gt; map()
}
```

# `t`

```elixir
@type t() :: %ReqLLM.Speech.DetailedResult{
  call_metadata: call_metadata(),
  result: ReqLLM.Speech.Result.t()
}
```

---

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