# `Gemini.Types.Part`
[🔗](https://github.com/nshkrdotcom/gemini_ex/blob/v0.13.0/lib/gemini/types/common/part.ex#L1)

Part type for content in Gemini API.

## Gemini 3 Features

### Media Resolution

Control token allocation for media processing with `media_resolution`:
- `:low` - 280 tokens for images, 70 for video
- `:medium` - 560 tokens for images, 70 for video
- `:high` - 1120 tokens for images, 280 for video

### Thought Signature

Gemini 3 returns `thought_signature` fields that must be echoed back
in subsequent turns to maintain reasoning context. The SDK handles
this automatically in chat sessions.

# `inline_data`
[🔗](https://github.com/nshkrdotcom/gemini_ex/blob/v0.13.0/lib/gemini/types/common/part.ex#L64)

```elixir
@type inline_data() :: Gemini.Types.Blob.t() | nil
```

Inline data (base64 encoded).

# `t`
[🔗](https://github.com/nshkrdotcom/gemini_ex/blob/v0.13.0/lib/gemini/types/common/part.ex#L45)

```elixir
@type t() :: %Gemini.Types.Part{
  file_data: Gemini.Types.FileData.t() | nil,
  function_call: Altar.ADM.FunctionCall.t() | nil,
  function_response: Gemini.Types.FunctionResponse.t() | nil,
  inline_data: Gemini.Types.Blob.t() | nil,
  media_resolution:
    Gemini.Types.MediaResolution.t()
    | Gemini.Types.Part.MediaResolution.t()
    | nil,
  text: String.t() | nil,
  thought: boolean() | nil,
  thought_signature: String.t() | nil
}
```

# `text_content`
[🔗](https://github.com/nshkrdotcom/gemini_ex/blob/v0.13.0/lib/gemini/types/common/part.ex#L61)

```elixir
@type text_content() :: String.t() | nil
```

Text content.

# `blob`
[🔗](https://github.com/nshkrdotcom/gemini_ex/blob/v0.13.0/lib/gemini/types/common/part.ex#L87)

```elixir
@spec blob(String.t(), String.t()) :: t()
```

Create a blob part with raw data and MIME type.

# `file`
[🔗](https://github.com/nshkrdotcom/gemini_ex/blob/v0.13.0/lib/gemini/types/common/part.ex#L109)

```elixir
@spec file(String.t()) :: t()
```

Create a part from a file path.

# `file_data`
[🔗](https://github.com/nshkrdotcom/gemini_ex/blob/v0.13.0/lib/gemini/types/common/part.ex#L101)

```elixir
@spec file_data(String.t(), String.t()) :: t()
```

Create a part referencing an uploaded file by URI.

## Examples

    Part.file_data("https://generativelanguage.googleapis.com/v1beta/files/abc123", "image/png")
    Part.file_data("gs://my-bucket/doc.pdf", "application/pdf")

# `from_api`
[🔗](https://github.com/nshkrdotcom/gemini_ex/blob/v0.13.0/lib/gemini/types/common/part.ex#L194)

```elixir
@spec from_api(map() | nil) :: t() | map() | nil
```

Parse a part from API payload.

# `inline_data`
[🔗](https://github.com/nshkrdotcom/gemini_ex/blob/v0.13.0/lib/gemini/types/common/part.ex#L78)

```elixir
@spec inline_data(String.t(), String.t()) :: t()
```

Create an inline data part with base64 encoded data.

# `inline_data_with_resolution`
[🔗](https://github.com/nshkrdotcom/gemini_ex/blob/v0.13.0/lib/gemini/types/common/part.ex#L133)

```elixir
@spec inline_data_with_resolution(String.t(), String.t(), :low | :medium | :high) ::
  t()
```

Create an inline data part with media resolution for Gemini 3.

## Parameters
- `data`: Base64 encoded data
- `mime_type`: MIME type of the data
- `resolution`: Media resolution level (`:low`, `:medium`, or `:high`)

## Examples

    # High resolution for detailed image analysis
    Part.inline_data_with_resolution(image_data, "image/jpeg", :high)

    # Low resolution for faster processing
    Part.inline_data_with_resolution(video_frame, "image/png", :low)

# `text`
[🔗](https://github.com/nshkrdotcom/gemini_ex/blob/v0.13.0/lib/gemini/types/common/part.ex#L70)

```elixir
@spec text(String.t()) :: t()
```

Create a text part.

# `with_resolution`
[🔗](https://github.com/nshkrdotcom/gemini_ex/blob/v0.13.0/lib/gemini/types/common/part.ex#L163)

```elixir
@spec with_resolution(t(), :low | :medium | :high) :: t()
```

Set media resolution on an existing part.

## Parameters
- `part`: Existing Part struct
- `resolution`: Resolution level (`:low`, `:medium`, or `:high`)

## Examples

    part = Part.inline_data(image_data, "image/jpeg")
    |> Part.with_resolution(:high)

# `with_thought_signature`
[🔗](https://github.com/nshkrdotcom/gemini_ex/blob/v0.13.0/lib/gemini/types/common/part.ex#L186)

```elixir
@spec with_thought_signature(t(), String.t()) :: t()
```

Set thought signature on an existing part.

Used to maintain reasoning context across API calls in Gemini 3.
The SDK handles this automatically in most cases.

## Parameters
- `part`: Existing Part struct
- `signature`: Thought signature string from a previous response

---

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