> ## Documentation Index
> Fetch the complete documentation index at: https://phidatainc.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# OpenAI

> Use OpenAI GPT and reasoning models with Agno agents.

GPT models are used as the default LLM by **Agents**. OpenAI supports a variety of models. See the [full list](https://platform.openai.com/docs/models).

We recommend experimenting to find the best-suited model for your use-case. Here are some general recommendations:

* `gpt-5.4` is good for most general use-cases.
* `gpt-5.4-mini` is good for smaller tasks and faster inference.
* `o4-mini` and `o3` are good for complex reasoning and multi-step tasks.

OpenAI has tier-based rate limits. See the [rate limit docs](https://platform.openai.com/docs/guides/rate-limits/usage-tiers).

## Authentication

Set your `OPENAI_API_KEY` environment variable. You can get one [from OpenAI here](https://platform.openai.com/account/api-keys).

<CodeGroup>
  ```bash Mac theme={null}
  export OPENAI_API_KEY=sk-***
  ```

  ```bash Windows theme={null}
  setx OPENAI_API_KEY sk-***
  ```
</CodeGroup>

## Example

Use `OpenAIChat` with your `Agent`:

<CodeGroup>
  ```python agent.py theme={null}
  from agno.agent import Agent
  from agno.models.openai import OpenAIChat

  agent = Agent(
      model=OpenAIChat(id="gpt-5.4-mini"),
      markdown=True
  )

  # Print the response in the terminal
  agent.print_response("Share a 2 sentence horror story.")

  ```
</CodeGroup>

## Prompt caching

Prompt caching happens automatically with the `OpenAIChat` model. Read more about how OpenAI handles caching in [their docs](https://platform.openai.com/docs/guides/prompt-caching).

<Note> View more examples [here](/models/providers/native/openai/completion/usage/basic-stream). </Note>

## Parameters

See the [OpenAI docs](https://platform.openai.com/docs/api-reference/chat/create).

| Parameter                       | Type                                               | Default          | Description                                                                                            |
| ------------------------------- | -------------------------------------------------- | ---------------- | ------------------------------------------------------------------------------------------------------ |
| `id`                            | `str`                                              | `"gpt-5.4-mini"` | The id of the OpenAI model to use                                                                      |
| `name`                          | `str`                                              | `"OpenAIChat"`   | The name of the model                                                                                  |
| `provider`                      | `str`                                              | `"OpenAI"`       | The provider of the model                                                                              |
| `collect_metrics_on_completion` | `bool`                                             | `False`          | Collect token metrics only from the final streaming chunk (for providers with cumulative token counts) |
| `store`                         | `Optional[bool]`                                   | `None`           | Whether to store the conversation for training purposes                                                |
| `reasoning_effort`              | `Optional[str]`                                    | `None`           | The reasoning effort level for reasoning models ("low", "medium", "high")                              |
| `verbosity`                     | `Optional[Literal["low", "medium", "high"]]`       | `None`           | Controls verbosity level of reasoning models                                                           |
| `metadata`                      | `Optional[Dict[str, Any]]`                         | `None`           | Developer-defined metadata to associate with the completion                                            |
| `frequency_penalty`             | `Optional[float]`                                  | `None`           | Penalizes new tokens based on their frequency in the text so far (-2.0 to 2.0)                         |
| `logit_bias`                    | `Optional[Any]`                                    | `None`           | Modifies the likelihood of specified tokens appearing in the completion                                |
| `logprobs`                      | `Optional[bool]`                                   | `None`           | Whether to return log probabilities of the output tokens                                               |
| `top_logprobs`                  | `Optional[int]`                                    | `None`           | Number of most likely tokens to return log probabilities for (0 to 20)                                 |
| `max_tokens`                    | `Optional[int]`                                    | `None`           | Maximum number of tokens to generate (deprecated, use max\_completion\_tokens)                         |
| `max_completion_tokens`         | `Optional[int]`                                    | `None`           | Maximum number of completion tokens to generate                                                        |
| `modalities`                    | `Optional[List[str]]`                              | `None`           | List of modalities to use ("text" and/or "audio")                                                      |
| `audio`                         | `Optional[Dict[str, Any]]`                         | `None`           | Audio configuration (e.g., `{"voice": "alloy", "format": "wav"}`)                                      |
| `presence_penalty`              | `Optional[float]`                                  | `None`           | Penalizes new tokens based on whether they appear in the text so far (-2.0 to 2.0)                     |
| `seed`                          | `Optional[int]`                                    | `None`           | Random seed for deterministic sampling                                                                 |
| `stop`                          | `Optional[Union[str, List[str]]]`                  | `None`           | Up to 4 sequences where the API will stop generating further tokens                                    |
| `temperature`                   | `Optional[float]`                                  | `None`           | Controls randomness in the model's output (0.0 to 2.0)                                                 |
| `user`                          | `Optional[str]`                                    | `None`           | A unique identifier representing your end-user                                                         |
| `top_p`                         | `Optional[float]`                                  | `None`           | Controls diversity via nucleus sampling (0.0 to 1.0)                                                   |
| `service_tier`                  | `Optional[str]`                                    | `None`           | Service tier to use ("auto", "default", "flex", "priority")                                            |
| `strict_output`                 | `bool`                                             | `True`           | Controls schema adherence for structured outputs                                                       |
| `extra_headers`                 | `Optional[Any]`                                    | `None`           | Additional headers to include in requests                                                              |
| `extra_query`                   | `Optional[Any]`                                    | `None`           | Additional query parameters to include in requests                                                     |
| `extra_body`                    | `Optional[Any]`                                    | `None`           | Additional body parameters to include in requests                                                      |
| `request_params`                | `Optional[Dict[str, Any]]`                         | `None`           | Additional parameters to include in the request                                                        |
| `role_map`                      | `Optional[Dict[str, str]]`                         | `None`           | Mapping of message roles to OpenAI roles                                                               |
| `api_key`                       | `Optional[str]`                                    | `None`           | The API key for authenticating with OpenAI (defaults to OPENAI\_API\_KEY env var)                      |
| `organization`                  | `Optional[str]`                                    | `None`           | The organization ID to use for requests                                                                |
| `base_url`                      | `Optional[Union[str, httpx.URL]]`                  | `None`           | The base URL for the OpenAI API                                                                        |
| `timeout`                       | `Optional[float]`                                  | `None`           | Request timeout in seconds                                                                             |
| `max_retries`                   | `Optional[int]`                                    | `None`           | Maximum number of retries for failed requests                                                          |
| `default_headers`               | `Optional[Any]`                                    | `None`           | Default headers to include in all requests                                                             |
| `default_query`                 | `Optional[Any]`                                    | `None`           | Default query parameters to include in all requests                                                    |
| `http_client`                   | `Optional[Union[httpx.Client, httpx.AsyncClient]]` | `None`           | HTTP client instance for making requests                                                               |
| `client_params`                 | `Optional[Dict[str, Any]]`                         | `None`           | Additional parameters for client configuration                                                         |

`OpenAIChat` is a subclass of the [Model](/reference/models/model) class and has access to the same params.
