OpenAI
import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem';
Overview
OpenAI
LiteLLM supports OpenAI Chat + Embedding calls.
:::tip
We recommend using litellm.responses() / Responses API for the latest OpenAI models (GPT-5, gpt-5-codex, o3-mini, etc.)
:::
Required API Keys
os.environ["OPENAI_API_KEY"] = "your-api-key"
Usage
from litellm import completion
os.environ["OPENAI_API_KEY"] = "your-api-key"
# openai call
response = completion(
model = "gpt-4o",
messages=[{ "content": "Hello, how are you?","role": "user"}]
)
:::info Metadata passthrough (preview)
When litellm.enable_preview_features = True, LiteLLM forwards only the values inside metadata to OpenAI.
completion(
model="gpt-4o",
messages=[{"role": "user", "content": "hi"}],
metadata= {"custom_meta_key": "value"},
)
:::
Usage - LiteLLM Proxy Server
Here's how to call OpenAI models with the LiteLLM Proxy Server
1. Save key in your environment
2. Start the proxy
model_list:
- model_name: gpt-3.5-turbo
litellm_params:
model: openai/gpt-3.5-turbo # The `openai/` prefix will call openai.chat.completions.create
api_key: os.environ/OPENAI_API_KEY
- model_name: gpt-3.5-turbo-instruct
litellm_params:
model: text-completion-openai/gpt-3.5-turbo-instruct # The `text-completion-openai/` prefix will call openai.completions.create
api_key: os.environ/OPENAI_API_KEY
Use this to add all openai models with one API Key. WARNING: This will not do any load balancing
This means requests to gpt-4, gpt-3.5-turbo , gpt-4-turbo-preview will all go through this route
model_list:
- model_name: "*" # all requests where model not in your config go to this deployment
litellm_params:
model: openai/* # set `openai/` to use the openai route
api_key: os.environ/OPENAI_API_KEY
$ litellm --model gpt-3.5-turbo
# Server running on http://0.0.0.0:4000
3. Test it
curl --location 'http://0.0.0.0:4000/chat/completions' \\
--header 'Content-Type: application/json' \\
--data ' {
"model": "gpt-3.5-turbo",
"messages": [
{
"role": "user",
"content": "what llm are you"
}
]
}
'
client = openai.OpenAI(
api_key="anything",
base_url="http://0.0.0.0:4000"
)
# request sent to model set on litellm proxy, `litellm --model`
response = client.chat.completions.create(model="gpt-3.5-turbo", messages = [
{
"role": "user",
"content": "this is a test request, write a short poem"
}
])
print(response)
from langchain.chat_models import ChatOpenAI
from langchain.prompts.chat import (
ChatPromptTemplate,
HumanMessagePromptTemplate,
SystemMessagePromptTemplate,
)
from langchain.schema import HumanMessage, SystemMessage
chat = ChatOpenAI(
openai_api_base="http://0.0.0.0:4000", # set openai_api_base to the LiteLLM Proxy
model = "gpt-3.5-turbo",
temperature=0.1
)
messages = [
SystemMessage(
content="You are a helpful assistant that im using to make a test request to."
),
HumanMessage(
content="test from litellm. tell me why it's amazing in 1 sentence"
),
]
response = chat(messages)
print(response)
Optional Keys - OpenAI Organization, OpenAI API Base
os.environ["OPENAI_ORGANIZATION"] = "your-org-id" # OPTIONAL
os.environ["OPENAI_BASE_URL"] = "https://your_host/v1" # OPTIONAL
OpenAI Chat Completion Models
| Model Name | Function Call |
|---|---|
| gpt-5 | response = completion(model="gpt-5", messages=messages) |
| gpt-5-mini | response = completion(model="gpt-5-mini", messages=messages) |
| gpt-5-nano | response = completion(model="gpt-5-nano", messages=messages) |
| gpt-5-chat | response = completion(model="gpt-5-chat", messages=messages) |
| gpt-5-chat-latest | response = completion(model="gpt-5-chat-latest", messages=messages) |
| gpt-5-2025-08-07 | response = completion(model="gpt-5-2025-08-07", messages=messages) |
| gpt-5-mini-2025-08-07 | response = completion(model="gpt-5-mini-2025-08-07", messages=messages) |
| gpt-5-nano-2025-08-07 | response = completion(model="gpt-5-nano-2025-08-07", messages=messages) |
| gpt-5-pro | response = completion(model="gpt-5-pro", messages=messages) |
| gpt-5.2 | response = completion(model="gpt-5.2", messages=messages) |
| gpt-5.2-2025-12-11 | response = completion(model="gpt-5.2-2025-12-11", messages=messages) |
| gpt-5.2-chat-latest | response = completion(model="gpt-5.2-chat-latest", messages=messages) |
| gpt-5.3-chat-latest | response = completion(model="gpt-5.3-chat-latest", messages=messages) |
| gpt-5.4 | response = completion(model="gpt-5.4", messages=messages) |
| gpt-5.4-2026-03-05 | response = completion(model="gpt-5.4-2026-03-05", messages=messages) |
| gpt-5.2-pro | response = completion(model="gpt-5.2-pro", messages=messages) |
| gpt-5.2-pro-2025-12-11 | response = completion(model="gpt-5.2-pro-2025-12-11", messages=messages) |
| gpt-5.4-pro | response = completion(model="gpt-5.4-pro", messages=messages) |
| gpt-5.4-pro-2026-03-05 | response = completion(model="gpt-5.4-pro-2026-03-05", messages=messages) |
| gpt-5.1 | response = completion(model="gpt-5.1", messages=messages) |
| gpt-5.1-codex | response = completion(model="gpt-5.1-codex", messages=messages) |
| gpt-5.1-codex-mini | response = completion(model="gpt-5.1-codex-mini", messages=messages) |
| gpt-5.1-codex-max | response = completion(model="gpt-5.1-codex-max", messages=messages) |
| gpt-4.1 | response = completion(model="gpt-4.1", messages=messages) |
| gpt-4.1-mini | response = completion(model="gpt-4.1-mini", messages=messages) |
| gpt-4.1-nano | response = completion(model="gpt-4.1-nano", messages=messages) |
| o4-mini | response = completion(model="o4-mini", messages=messages) |
| o3-mini | response = completion(model="o3-mini", messages=messages) |
| o3 | response = completion(model="o3", messages=messages) |
| o1-mini | response = completion(model="o1-mini", messages=messages) |
| o1-preview | response = completion(model="o1-preview", messages=messages) |
| gpt-4o-mini | response = completion(model="gpt-4o-mini", messages=messages) |
| gpt-4o-mini-2024-07-18 | response = completion(model="gpt-4o-mini-2024-07-18", messages=messages) |
| gpt-4o | response = completion(model="gpt-4o", messages=messages) |
| gpt-4o-2024-08-06 | response = completion(model="gpt-4o-2024-08-06", messages=messages) |
| gpt-4o-2024-05-13 | response = completion(model="gpt-4o-2024-05-13", messages=messages) |
| gpt-4-turbo | response = completion(model="gpt-4-turbo", messages=messages) |
| gpt-4-turbo-preview | response = completion(model="gpt-4-0125-preview", messages=messages) |
| gpt-4-0125-preview | response = completion(model="gpt-4-0125-preview", messages=messages) |
| gpt-4-1106-preview | response = completion(model="gpt-4-1106-preview", messages=messages) |
| gpt-3.5-turbo-1106 | response = completion(model="gpt-3.5-turbo-1106", messages=messages) |
| gpt-3.5-turbo | response = completion(model="gpt-3.5-turbo", messages=messages) |
| gpt-3.5-turbo-0301 | response = completion(model="gpt-3.5-turbo-0301", messages=messages) |
| gpt-3.5-turbo-0613 | response = completion(model="gpt-3.5-turbo-0613", messages=messages) |
| gpt-3.5-turbo-16k | response = completion(model="gpt-3.5-turbo-16k", messages=messages) |
| gpt-3.5-turbo-16k-0613 | response = completion(model="gpt-3.5-turbo-16k-0613", messages=messages) |
| gpt-4 | response = completion(model="gpt-4", messages=messages) |
| gpt-4-0314 | response = completion(model="gpt-4-0314", messages=messages) |
| gpt-4-0613 | response = completion(model="gpt-4-0613", messages=messages) |
| gpt-4-32k | response = completion(model="gpt-4-32k", messages=messages) |
| gpt-4-32k-0314 | response = completion(model="gpt-4-32k-0314", messages=messages) |
| gpt-4-32k-0613 | response = completion(model="gpt-4-32k-0613", messages=messages) |
These also support the OPENAI_BASE_URL environment variable, which can be used to specify a custom API endpoint.
OpenAI Web Search Models
OpenAI has two ways to use web search, depending on the endpoint:
| Approach | Endpoint | Models | How to enable |
|---|---|---|---|
| Search Models | /chat/completions | gpt-5-search-api, gpt-4o-search-preview, gpt-4o-mini-search-preview | Pass web_search_options parameter |
| Web Search Tool | /responses | gpt-5, gpt-4.1, gpt-4o, and other regular models | Pass web_search_preview tool |
from litellm import completion
response = completion(
model="openai/gpt-5-search-api",
messages=[{"role": "user", "content": "What is the capital of France?"}],
web_search_options={
"search_context_size": "medium" # Options: "low", "medium", "high"
}
)
from litellm import responses
response = responses(
model="openai/gpt-5",
input="What is the capital of France?",
tools=[{
"type": "web_search_preview",
"search_context_size": "low"
}]
)
model_list:
# Search model for /chat/completions
- model_name: gpt-5-search-api
litellm_params:
model: openai/gpt-5-search-api
api_key: os.environ/OPENAI_API_KEY
# Regular model for /responses with web_search_preview tool
- model_name: gpt-5
litellm_params:
model: openai/gpt-5
api_key: os.environ/OPENAI_API_KEY
For full details, see the Web Search guide.
OpenAI Vision Models
| Model Name | Function Call |
|---|---|
| gpt-4o | response = completion(model="gpt-4o", messages=messages) |
| gpt-4-turbo | response = completion(model="gpt-4-turbo", messages=messages) |
| gpt-4-vision-preview | response = completion(model="gpt-4-vision-preview", messages=messages) |
Usage
from litellm import completion
os.environ["OPENAI_API_KEY"] = "your-api-key"
# openai call
response = completion(
model = "gpt-4-vision-preview",
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": "What’s in this image?"
},
{
"type": "image_url",
"image_url": {
"url": "https://awsmp-logos.s3.amazonaws.com/seller-xw5kijmvmzasy/c233c9ade2ccb5491072ae232c814942.png"
}
}
]
}
],
)
PDF File Parsing
OpenAI has a new file message type that allows you to pass in a PDF file and have it parsed into a structured output. Read more
from litellm import completion
with open("draconomicon.pdf", "rb") as f:
data = f.read()
base64_string = base64.b64encode(data).decode("utf-8")
completion = completion(
model="gpt-4o",
messages=[
{
"role": "user",
"content": [
{
"type": "file",
"file": {
"filename": "draconomicon.pdf",
"file_data": f"data:application/pdf;base64,{base64_string}",
}
},
{
"type": "text",
"text": "What is the first dragon in the book?",
}
],
},
],
)
print(completion.choices[0].message.content)
- Setup config.yaml
model_list:
- model_name: openai-model
litellm_params:
model: gpt-4o
api_key: os.environ/OPENAI_API_KEY
- Start the proxy
litellm --config config.yaml
- Test it!
curl -X POST 'http://0.0.0.0:4000/chat/completions' \\
-H 'Content-Type: application/json' \\
-H 'Authorization: Bearer sk-1234' \\
-d '{
"model": "openai-model",
"messages": [
{"role": "user", "content": [
{
"type": "file",
"file": {
"filename": "draconomicon.pdf",
"file_data": f"data:application/pdf;base64,{base64_string}",
}
}
]}
]
}'
OpenAI Fine Tuned Models
| Model Name | Function Call |
|---|---|
fine tuned gpt-4-0613 | response = completion(model="ft:gpt-4-0613", messages=messages) |
fine tuned gpt-4o-2024-05-13 | response = completion(model="ft:gpt-4o-2024-05-13", messages=messages) |
fine tuned gpt-3.5-turbo-0125 | response = completion(model="ft:gpt-3.5-turbo-0125", messages=messages) |
fine tuned gpt-3.5-turbo-1106 | response = completion(model="ft:gpt-3.5-turbo-1106", messages=messages) |
fine tuned gpt-3.5-turbo-0613 | response = completion(model="ft:gpt-3.5-turbo-0613", messages=messages) |
[BETA] Route all .completions requests to Responses API (better quality)
When enabled, LiteLLM sends OpenAI traffic from litellm.completion() and the proxy /chat/completions endpoint through the Responses API instead of Chat Completions. That path generally matches Ope