# `Gemini.Types.Request.CountTokensRequest`
[🔗](https://github.com/nshkrdotcom/gemini_ex/blob/v0.15.0/lib/gemini/types/request/types_request_list_models_request.ex#L250)

Request structure for counting tokens.

Supports counting tokens for both simple contents and
full GenerateContentRequest structures.

# `t`

```elixir
@type t() :: %Gemini.Types.Request.CountTokensRequest{
  contents: [Gemini.Types.Content.t()] | nil,
  generate_content_request:
    Gemini.Types.Request.GenerateContentRequest.t() | nil
}
```

# `new`

```elixir
@spec new(
  String.t()
  | [Gemini.Types.Content.t()]
  | Gemini.Types.Request.GenerateContentRequest.t(),
  keyword()
) :: {:ok, t()} | {:error, String.t()}
```

Create a new CountTokensRequest.

## Parameters
- `input` - Either contents (string/list) or a GenerateContentRequest
- `opts` - Additional options

## Examples

    iex> CountTokensRequest.new("Hello world")
    {:ok, %CountTokensRequest{contents: [%Content{...}]}}

    iex> CountTokensRequest.new(generate_request)
    {:ok, %CountTokensRequest{generate_content_request: generate_request}}

# `to_json_map`

```elixir
@spec to_json_map(t()) :: map()
```

Convert request to map suitable for JSON encoding.

Only includes the non-nil field (either contents or generate_content_request).

---

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