# `LlmComposer.Cost.CostAssembler`
[🔗](https://github.com/doofinder/llm_composer/blob/master/lib/llm_composer/cost/cost_assembler.ex#L1)

Centralized cost information assembly module.

Handles the extraction of cost-related data from provider responses and
assembles `CostInfo` structs. This module consolidates all cost logic that
was previously scattered across the response handler.

## Responsibilities

- Extract tokens from provider-specific response formats
- Resolve model names (from response or options)
- Prepare pricing options for cost calculation
- Assemble complete CostInfo structs

## Provider-Specific Handling

- **OpenAI/OpenRouter**: Extracts tokens from `usage` field, model from response
- **Google**: Extracts tokens from `usageMetadata` field, model from options

# `extract_tokens`

```elixir
@spec extract_tokens(atom(), map()) ::
  {non_neg_integer() | nil, non_neg_integer() | nil, non_neg_integer() | nil}
```

# `get_cost_info`

```elixir
@spec get_cost_info(
  provider :: atom(),
  raw_response :: map(),
  opts :: keyword()
) :: LlmComposer.CostInfo.t() | nil
```

---

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