# `Nous.Providers.Anthropic`
[🔗](https://github.com/nyo16/nous/blob/v0.17.1/lib/nous/providers/anthropic.ex#L1)

Anthropic Claude provider implementation.

Supports Claude models via the Anthropic Messages API.

## Usage

    # Basic usage
    {:ok, response} = Nous.Providers.Anthropic.chat(%{
      model: "claude-sonnet-4-20250514",
      max_tokens: 1024,
      messages: [%{"role" => "user", "content" => "Hello"}]
    })

    # With system prompt
    {:ok, response} = Nous.Providers.Anthropic.chat(%{
      model: "claude-sonnet-4-20250514",
      max_tokens: 1024,
      system: "You are a helpful assistant.",
      messages: [%{"role" => "user", "content" => "Hello"}]
    })

    # With long context beta
    {:ok, response} = Nous.Providers.Anthropic.chat(
      params,
      enable_long_context: true
    )

    # Streaming
    {:ok, stream} = Nous.Providers.Anthropic.chat_stream(params)
    Enum.each(stream, fn event -> IO.inspect(event) end)

## Configuration

    # In config.exs
    config :nous, :anthropic,
      api_key: "sk-ant-...",
      base_url: "https://api.anthropic.com"  # optional

# `api_key`

```elixir
@spec api_key(keyword()) :: String.t() | nil
```

Get the API key from options, environment, or application config.

Lookup order:
1. `:api_key` option passed directly
2. Environment variable (ANTHROPIC_API_KEY)
3. Application config: `config :nous, anthropic, api_key: "..."`

# `base_url`

```elixir
@spec base_url(keyword()) :: String.t()
```

Get the base URL from options, application config, or default.

Lookup order:
1. `:base_url` option passed directly
2. Application config: `config :nous, anthropic, base_url: "..."`
3. Default: https://api.anthropic.com

# `count_tokens`

```elixir
@spec count_tokens(list()) :: integer()
```

Count tokens in messages (rough estimate).

Override this in your provider for more accurate counting.

# `request`

High-level request with message conversion, telemetry, and error wrapping.

Default implementation that:
1. Converts messages to provider format
2. Builds request params
3. Calls chat/2
4. Parses response
5. Emits telemetry events
6. Wraps errors

# `request_stream`

High-level streaming request with message conversion and telemetry.

---

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