# `Alloy.Provider.Gemini`
[🔗](https://github.com/alloy-ex/alloy/blob/v0.12.4/lib/alloy/provider/gemini.ex#L1)

Provider for Google's Gemini GenerateContent API.

Normalizes Gemini's `contents` / `parts` wire format to Alloy messages,
including function calling and thinking-part round-tripping.

## Config

Required:
- `:api_key` - Gemini API key
- `:model` - Model name (for example `"gemini-2.5-flash"`)

Optional:
- `:max_tokens` - Max output tokens (default: `4096`)
- `:system_prompt` - System prompt string
- `:api_url` - Base URL (default: `"https://generativelanguage.googleapis.com"`)
- `:api_version` - API version path (default: `"v1beta"`)
- `:generation_config` - Raw Gemini `generationConfig` fields
- `:tool_config` - Raw Gemini `toolConfig`
- `:safety_settings` - Raw Gemini `safetySettings`
- `:extra_headers` - Additional headers as `[{name, value}]`
- `:req_options` - Additional options passed to Req

## Example

    Alloy.run("Summarize this code.",
      provider: {Alloy.Provider.Gemini,
        api_key: System.get_env("GEMINI_API_KEY"),
        model: "gemini-2.5-flash"
      }
    )

# `config`

```elixir
@type config() :: %{
  :api_key =&gt; String.t(),
  :model =&gt; String.t(),
  optional(:max_tokens) =&gt; pos_integer(),
  optional(:system_prompt) =&gt; String.t(),
  optional(:api_url) =&gt; String.t(),
  optional(:api_version) =&gt; String.t(),
  optional(:generation_config) =&gt; map(),
  optional(:tool_config) =&gt; map(),
  optional(:safety_settings) =&gt; [map()],
  optional(:extra_headers) =&gt; [{String.t(), String.t()}],
  optional(:req_options) =&gt; keyword()
}
```

Configuration for the Gemini provider. See the module doc for field
semantics.

---

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