The Agents SDK comes with out-of-the-box support for OpenAI models in two flavors:
- Recommended: the [
OpenAIResponsesModel
][agents.models.openai_responses.OpenAIResponsesModel], which calls OpenAI APIs using the new Responses API. - The [
OpenAIChatCompletionsModel
][agents.models.openai_chatcompletions.OpenAIChatCompletionsModel], which calls OpenAI APIs using the Chat Completions API.
Within a single workflow, you may want to use different models for each agent. For example, you could use a smaller, faster model for triage, while using a larger, more capable model for complex tasks. When configuring an [Agent
][agents.Agent], you can select a specific model by either:
- Passing the name of an OpenAI model.
- Passing any model name + a [
ModelProvider
][agents.models.interface.ModelProvider] that can map that name to a Model instance. - Directly providing a [
Model
][agents.models.interface.Model] implementation.
!!!note
While our SDK supports both the [`OpenAIResponsesModel`][agents.models.openai_responses.OpenAIResponsesModel] and the [`OpenAIChatCompletionsModel`][agents.models.openai_chatcompletions.OpenAIChatCompletionsModel] shapes, we recommend using a single model shape for each workflow because the two shapes support a different set of features and tools. If your workflow requires mixing and matching model shapes, make sure that all the features you're using are available on both.
from agents import Agent, Runner, AsyncOpenAI, OpenAIChatCompletionsModel
import asyncio
spanish_agent = Agent(
name="Spanish agent",
instructions="You only speak Spanish.",
model="o3-mini", # (1)!
)
english_agent = Agent(
name="English agent",
instructions="You only speak English",
model=OpenAIChatCompletionsModel( # (2)!
model="gpt-4o",
openai_client=AsyncOpenAI()
),
)
triage_agent = Agent(
name="Triage agent",
instructions="Handoff to the appropriate agent based on the language of the request.",
handoffs=[spanish_agent, english_agent],
model="gpt-3.5-turbo",
)
async def main():
result = await Runner.run(triage_agent, input="Hola, ¿cómo estás?")
print(result.final_output)
- Sets the name of an OpenAI model directly.
- Provides a [
Model
][agents.models.interface.Model] implementation.
Many providers also support the OpenAI API format, which means you can pass a base_url
to the existing OpenAI model implementations and use them easily. ModelSettings
is used to configure tuning parameters (e.g., temperature, top_p) for the model you select.
external_client = AsyncOpenAI(
api_key="EXTERNAL_API_KEY",
base_url="https://api.external.com/v1/",
)
spanish_agent = Agent(
name="Spanish agent",
instructions="You only speak Spanish.",
model=OpenAIChatCompletionsModel(
model="EXTERNAL_MODEL_NAME",
openai_client=external_client,
),
model_settings=ModelSettings(temperature=0.5),
)