# `LangChain.FileUploader.FileOpenAI`
[🔗](https://github.com/brainlid/langchain/blob/v0.8.4/lib/file_uploaders/file_open_ai.ex#L1)

Uploads files to OpenAI's [Files API](https://platform.openai.com/docs/api-reference/files).

## Usage

    {:ok, uploader} = LangChain.FileUploader.FileOpenAI.new(%{api_key: "sk-..."})

    {:ok, result} = LangChain.FileUploader.upload(uploader, file_bytes, %{
      filename: "document.pdf",
      mime_type: "application/pdf"
    })

    result.file_id
    #=> "file-abc123"

The `purpose` field defaults to `"user_data"` and can be overridden per-call
via the `file_meta` map or globally via the `default_purpose` schema field.

# `t`
[🔗](https://github.com/brainlid/langchain/blob/v0.8.4/lib/file_uploaders/file_open_ai.ex#L43)

```elixir
@type t() :: %LangChain.FileUploader.FileOpenAI{
  api_key: term(),
  default_purpose: term(),
  endpoint: term(),
  receive_timeout: term(),
  req_opts: term()
}
```

# `new`
[🔗](https://github.com/brainlid/langchain/blob/v0.8.4/lib/file_uploaders/file_open_ai.ex#L52)

```elixir
@spec new(attrs :: map()) :: {:ok, t()} | {:error, Ecto.Changeset.t()}
```

Setup an OpenAI file uploader configuration.

# `new!`
[🔗](https://github.com/brainlid/langchain/blob/v0.8.4/lib/file_uploaders/file_open_ai.ex#L63)

```elixir
@spec new!(attrs :: map()) :: t() | no_return()
```

Setup an OpenAI file uploader configuration and return it or raise an error if invalid.

---

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