OpenAI & Other SDKs
The OpenAI Python SDK is the reference pattern for chat completions, embeddings, and tool calling. LiteLLM and similar libraries abstract multiple providers when you need vendor flexibility.
Search across all documentation pages
The OpenAI Python SDK is the reference pattern for chat completions, embeddings, and tool calling. LiteLLM and similar libraries abstract multiple providers when you need vendor flexibility.
Quick-reference recipe card - copy-paste ready.
from openai import OpenAI
client = OpenAI() # reads OPENAI_API_KEY
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Hello"}],
)
print(response.choices[0].message.content)When to reach for this:
openai.ChatCompletion) to v1."""openai_sdks.py - chat, embeddings, tools, and LiteLLM fallback."""
from __future__ import annotations
import json
import os
from openai import OpenAI, AsyncOpenAI
client = OpenAI()
# Chat completion
chat = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "What is FastAPI?"},
],
temperature=0.2,
)
print(chat.choices[0].message.content)
# Embeddings
emb = client.embeddings.create(
model="text-embedding-3-small",
input=["Python data pipelines", "Machine learning basics"],
)
print("embedding dim:", len(emb.data[0].embedding))
# Function calling
tools = [{
"type": "function",
"function": {
"name": "search_docs",
"description": "Search internal documentation",
"parameters": {
"type": "object",
"properties": {"query": {"type": "string"}},
"required": ["query"],
},
},
}]
tool_resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Find docs about pydantic validators"}],
tools=tools,
)
msg = tool_resp.choices[0].message
if msg.tool_calls:
call = msg.tool_calls[0]
print(f"tool: {call.function.name}({call.function.arguments})")
# LiteLLM multi-provider
try:
import litellm
response = litellm.completion(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Hi"}],
)
print("litellm:", response.choices[0].message.content[:50])
except ImportError:
print("litellm not installed - skip")What this demonstrates:
| Provider | SDK | Strengths |
|---|---|---|
| OpenAI | openai | GPT models, embeddings, wide tooling |
| Anthropic | anthropic | Claude, long context, tool use |
google-genai | Gemini, multimodal | |
| LiteLLM | litellm | Unified API across 100+ models |
# Custom base URL (Azure OpenAI, local proxy)
client = OpenAI(base_url=os.environ["OPENAI_BASE_URL"], api_key=os.environ["OPENAI_API_KEY"])
# Async usage in FastAPI
async def ask(question: str) -> str:
client = AsyncOpenAI()
resp = await client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": question}],
)
return resp.choices[0].message.content or ""openai.ChatCompletion.create is removed. Fix: migrate to OpenAI() client.message.tool_calls and loop.retry-after headers.content as None. Fix: check before using .content.| Alternative | Use When | Don't Use When |
|---|---|---|
| OpenAI SDK | GPT models directly | Need Claude or Gemini |
| LiteLLM | Multi-provider apps | Single provider, no abstraction needed |
| LangChain LLM wrappers | Chains and agents | Simple one-off API calls |
| Raw HTTP (httpx) | Full control, no SDK dep | Standard SDK features suffice |
# v0 (deprecated)
# openai.ChatCompletion.create(model="gpt-3.5-turbo", messages=[...])
# v1
client = OpenAI()
client.chat.completions.create(model="gpt-4o-mini", messages=[...])client = OpenAI(
api_key=os.environ["AZURE_OPENAI_API_KEY"],
base_url=f"{os.environ['AZURE_OPENAI_ENDPOINT']}/openai/v1/",
)litellm.completion(model="claude-sonnet-4-20250514", ...).models = client.models.list()
for m in models.data:
print(m.id)client = OpenAI(timeout=30.0, max_retries=3)text-embedding-3-small vectors (1536 dims) in PostgreSQL./v1/chat/completions compatible endpoints.base_url to the local server.finish_reason == "content_filter".Stack versions: This page was written for Python 3.14.0 (stable 3.14, maintenance 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, and uv 0.6+.
Reviewed by Chris St. John·Last updated Jul 16, 2026