# `Aludel.DocumentConverter`
[🔗](https://github.com/ccarvalho-eng/aludel/blob/main/lib/aludel/interfaces/document_converter.ex#L1)

Converts documents between formats for LLM consumption.

Currently supports:
- PDF → PNG (first page only, 150 DPI)

## Usage

PDF-to-image conversion is used for:
- **OpenAI**: Chat API only supports images (PDFs work in Assistants API)
- **Ollama**: Vision models require image formats

Native PDF support:
- **Anthropic Claude 4.5+**: Supports PDFs via document API

## Requirements

Requires ImageMagick v7+ to be installed:
- macOS: `brew install imagemagick`
- Ubuntu/Debian: `apt-get install imagemagick`
- Docker: Install in runtime image

## Configuration

The conversion adapter can be configured in config files:

    config :aludel, :document_converter,
      adapter: Aludel.Interfaces.DocumentConverter.Adapters.Imagemagick

For testing, use a stub adapter.

# `convert_result`

```elixir
@type convert_result() :: {:ok, document()} | {:error, term()}
```

# `document`

```elixir
@type document() :: %{data: binary(), content_type: String.t()}
```

# `pdf_to_image`

```elixir
@spec pdf_to_image(document()) :: convert_result()
```

Converts a PDF document to PNG format.

Only converts the first page at 150 DPI for optimal text readability.
Creates temporary files for conversion and cleans them up afterwards.

## Examples

    iex> pdf_doc = %{data: pdf_binary, content_type: "application/pdf"}
    iex> {:ok, png_doc} = DocumentConverter.pdf_to_image(pdf_doc)
    iex> png_doc.content_type
    "image/png"

    iex> image_doc = %{data: png_binary, content_type: "image/png"}
    iex> {:ok, ^image_doc} = DocumentConverter.pdf_to_image(image_doc)
    :ok

---

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