> ## Documentation Index
> Fetch the complete documentation index at: https://agno-v2.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).

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

```bash Windows theme={null}
setx OPENAI_API_KEY sk-***
```

## Example

Use `OpenAIChat` with your `Agent`:

```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.")

```

## 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](https://agno-v2.mintlify.site/models/providers/native/openai/completion/usage/basic-stream.md).

## 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](https://agno-v2.mintlify.site/reference/models/model.md) class and has access to the same params.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.