Skip to main content

lib/llm_utils/providers/openai.ex

defmodule LLMUtils.Providers.OpenAI do
  @moduledoc """
  Provider implementation for OpenAI API.
  """
  @behaviour LLMUtils.Provider

  @impl true
  def config do
    %{
      id: "openai",
      name: "OpenAI",
      base_url: "https://api.openai.com/v1",
      default_model: "gpt-4o",
      auth_type: :bearer,
      api_key_env: "OPENAI_API_KEY",
      supports_json_mode: true,
      supports_system_role: true,
      rate_limit: nil,
      rate_window_ms: 60_000,
      models: ["gpt-4o", "gpt-4o-mini", "gpt-4-turbo"],
      suppress_thinking: false
    }
  end

  @impl true
  def api_key, do: LLMUtils.Provider.get_api_key("openai")

  @impl true
  def headers(api_key), do: LLMUtils.Provider.auth_headers(:bearer, api_key)

  @impl true
  def handle_response(response), do: {:ok, response}

  @impl true
  def supports_system_role?, do: true
end