# `Codex.Voice.Models.OpenAIProvider`
[🔗](https://github.com/nshkrdotcom/codex_sdk/blob/v0.18.1/lib/codex/voice/models/openai_provider.ex#L1)

OpenAI voice model provider.

This module implements the `Codex.Voice.Model.ModelProvider` behaviour,
providing factory methods for creating OpenAI STT and TTS models.

## Configuration

The provider can be configured with:
- API key (defaults to OPENAI_API_KEY env var)
- Base URL (defaults to OpenAI's API)
- Organization and project IDs (optional)

## Example

    # Default configuration
    provider = OpenAIProvider.new()
    stt = OpenAIProvider.get_stt_model(provider, nil)
    tts = OpenAIProvider.get_tts_model(provider, nil)

    # Custom API key
    provider = OpenAIProvider.new(api_key: "sk-...")
    stt = OpenAIProvider.get_stt_model(provider, "whisper-1")

## Default Models

- STT: `gpt-4o-transcribe`
- TTS: `gpt-4o-mini-tts`

# `t`

```elixir
@type t() :: %Codex.Voice.Models.OpenAIProvider{
  api_key: String.t() | nil,
  base_url: String.t() | nil,
  organization: String.t() | nil,
  project: String.t() | nil
}
```

# `get_stt_model`

```elixir
@spec get_stt_model(t(), String.t() | nil) :: Codex.Voice.Models.OpenAISTT.t()
```

Get a speech-to-text model by name.

If `model_name` is nil, returns the default STT model (`gpt-4o-transcribe`).

## Examples

    iex> provider = Codex.Voice.Models.OpenAIProvider.new()
    iex> model = Codex.Voice.Models.OpenAIProvider.get_stt_model(provider, nil)
    iex> model.model
    "gpt-4o-transcribe"

    iex> provider = Codex.Voice.Models.OpenAIProvider.new()
    iex> model = Codex.Voice.Models.OpenAIProvider.get_stt_model(provider, "whisper-1")
    iex> model.model
    "whisper-1"

# `get_tts_model`

```elixir
@spec get_tts_model(t(), String.t() | nil) :: Codex.Voice.Models.OpenAITTS.t()
```

Get a text-to-speech model by name.

If `model_name` is nil, returns the default TTS model (`gpt-4o-mini-tts`).

## Examples

    iex> provider = Codex.Voice.Models.OpenAIProvider.new()
    iex> model = Codex.Voice.Models.OpenAIProvider.get_tts_model(provider, nil)
    iex> model.model
    "gpt-4o-mini-tts"

    iex> provider = Codex.Voice.Models.OpenAIProvider.new()
    iex> model = Codex.Voice.Models.OpenAIProvider.get_tts_model(provider, "tts-1")
    iex> model.model
    "tts-1"

# `new`

```elixir
@spec new(keyword()) :: t()
```

Create a new OpenAI voice model provider.

## Options

- `:api_key` - API key (defaults to OPENAI_API_KEY env var)
- `:base_url` - Base URL for API requests
- `:organization` - Organization ID
- `:project` - Project ID

## Examples

    iex> provider = Codex.Voice.Models.OpenAIProvider.new()
    iex> is_struct(provider, Codex.Voice.Models.OpenAIProvider)
    true

    iex> provider = Codex.Voice.Models.OpenAIProvider.new(api_key: "sk-test")
    iex> provider.api_key
    "sk-test"

---

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