Awesome-omni-skill using-openai-platform

OpenAI SDK development with GPT-5 family, Chat Completions, Responses API, embeddings, and tool calling. Use for AI-powered applications, chatbots, agents, and semantic search.

install
source · Clone the upstream repo
git clone https://github.com/diegosouzapw/awesome-omni-skill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/diegosouzapw/awesome-omni-skill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data-ai/using-openai-platform" ~/.claude/skills/diegosouzapw-awesome-omni-skill-using-openai-platform-415f18 && rm -rf "$T"
manifest: skills/data-ai/using-openai-platform/SKILL.md
source content

OpenAI SDK Development Skill

Quick Reference

OpenAI SDK development with Python and TypeScript/JavaScript clients. Covers GPT-5 family models, Chat Completions API, Responses API, embeddings, tool calling, and streaming.

Progressive Disclosure: This file provides quick reference patterns. See REFERENCE.md for comprehensive API coverage, advanced patterns, and deep dives.


Table of Contents

  1. When to Use
  2. GPT-5 Model Family
  3. Quick Start
  4. Chat Completions API
  5. Responses API (Next Gen)
  6. Tool Calling
  7. Embeddings
  8. Error Handling
  9. Platform Differentiators
  10. Further Reading
  11. Context7 Integration

When to Use

This skill is loaded by

backend-developer
when:

  • openai
    package in
    requirements.txt
    or
    pyproject.toml
  • openai
    in
    package.json
    dependencies
  • Environment variables
    OPENAI_API_KEY
    present
  • User mentions "OpenAI", "GPT", or "ChatGPT" in task

GPT-5 Model Family

Model Selection Guide

ModelContextBest ForCost
gpt-5.2
400KFlagship - coding, agentic, multimodal$1.75/$14
gpt-5.2-pro
400KMaximum reasoning (xhigh effort)$21/$168
gpt-5.1
256KStable, previous generation$1.50/$12
gpt-5.1-codex
256KLong-running coding tasks$1.50/$12
gpt-5
128KGeneral purpose$1.25/$10
gpt-4o
128KFast, cost-effective$2.50/$10
gpt-4o-mini
128KCheapest, simple tasks$0.15/$0.60

Costs per 1M tokens (input/output). Cached input: 50-90% discount.

Quick Selection

Simple chat/Q&A           -> gpt-4o-mini
Standard tasks            -> gpt-4o or gpt-5
Complex reasoning         -> gpt-5.1 with reasoning_effort="high"
Coding/agentic           -> gpt-5.2 or gpt-5.1-codex
Maximum intelligence      -> gpt-5.2-pro with reasoning_effort="xhigh"

Reasoning Effort (GPT-5.1+)

reasoning_effort = "none"    # Fast, no reasoning
reasoning_effort = "low"     # Light reasoning
reasoning_effort = "medium"  # Default
reasoning_effort = "high"    # Extended reasoning
reasoning_effort = "xhigh"   # Maximum (GPT-5.2 Pro only)

Quick Start

Python Setup

from openai import OpenAI

# Client auto-uses OPENAI_API_KEY env var
client = OpenAI()

response = client.chat.completions.create(
    model="gpt-5",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Hello!"}
    ]
)

print(response.choices[0].message.content)

TypeScript Setup

import OpenAI from 'openai';

const openai = new OpenAI();

const response = await openai.chat.completions.create({
  model: 'gpt-5',
  messages: [
    { role: 'system', content: 'You are a helpful assistant.' },
    { role: 'user', content: 'Hello!' }
  ]
});

console.log(response.choices[0].message.content);

Async Python

import asyncio
from openai import AsyncOpenAI

async def main():
    client = AsyncOpenAI()
    response = await client.chat.completions.create(
        model="gpt-5",
        messages=[{"role": "user", "content": "Hello!"}]
    )
    print(response.choices[0].message.content)

asyncio.run(main())

Chat Completions API

Basic Completion

response = client.chat.completions.create(
    model="gpt-5",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "What is Python?"}
    ],
    temperature=0.7,
    max_tokens=1000
)

answer = response.choices[0].message.content
usage = response.usage  # tokens used

Message Roles

RoleDescription
system
Sets behavior/context (first message)
user
Human input
assistant
Model responses
tool
Tool/function results

Common Parameters

ParameterTypeDescription
model
stringModel ID (e.g., "gpt-5")
messages
arrayConversation messages
temperature
0-2Randomness (0=deterministic)
max_tokens
intMax response tokens
stream
booleanEnable streaming
response_format
objectJSON mode
tools
arrayTool definitions
reasoning_effort
stringReasoning level (GPT-5.1+)

JSON Mode

response = client.chat.completions.create(
    model="gpt-5",
    messages=[
        {"role": "system", "content": "Return JSON only."},
        {"role": "user", "content": "List 3 programming languages."}
    ],
    response_format={"type": "json_object"}
)

data = json.loads(response.choices[0].message.content)

Streaming

stream = client.chat.completions.create(
    model="gpt-5",
    messages=[{"role": "user", "content": "Tell me a story."}],
    stream=True
)

for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)

Responses API (Next Gen)

The Responses API provides built-in tools, conversation continuity, and chain-of-thought passing between turns.

When to Use

Use CaseAPI
Simple chat/completionChat Completions
Built-in web searchResponses API
Built-in code interpreterResponses API
Conversation continuity (CoT)Responses API

Basic Usage

response = client.responses.create(
    model="gpt-5",
    input="Explain quantum computing simply."
)

print(response.output_text)

Built-in Tools

# Web search
response = client.responses.create(
    model="gpt-5",
    input="What are the latest AI news today?",
    tools=[{"type": "web_search"}]
)

# Code interpreter
response = client.responses.create(
    model="gpt-5",
    input="Calculate factorial of 20 and plot it",
    tools=[{"type": "code_interpreter"}]
)

Conversation Continuity

# First turn
response1 = client.responses.create(
    model="gpt-5",
    input="My name is Alice and I'm a software engineer."
)

# Continue - CoT passes between turns
response2 = client.responses.create(
    model="gpt-5",
    input="What do I do for work?",
    previous_response_id=response1.id
)

Tool Calling

Quick Tool Definition

tools = [{
    "type": "function",
    "function": {
        "name": "get_weather",
        "description": "Get weather for a location",
        "parameters": {
            "type": "object",
            "properties": {
                "location": {"type": "string", "description": "City, country"},
                "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}
            },
            "required": ["location"],
            "additionalProperties": False
        },
        "strict": True
    }
}]

Basic Tool Loop

import json

def get_weather(location: str, unit: str = "celsius") -> dict:
    return {"temperature": 22, "conditions": "sunny", "unit": unit}

# Initial request
response = client.chat.completions.create(
    model="gpt-5",
    messages=[{"role": "user", "content": "What's the weather in Tokyo?"}],
    tools=tools
)

message = response.choices[0].message

# Process tool calls if present
if message.tool_calls:
    messages = [{"role": "user", "content": "What's the weather in Tokyo?"}]
    messages.append(message)

    for tool_call in message.tool_calls:
        args = json.loads(tool_call.function.arguments)
        result = get_weather(**args)

        messages.append({
            "role": "tool",
            "tool_call_id": tool_call.id,
            "content": json.dumps(result)
        })

    # Get final response
    final = client.chat.completions.create(
        model="gpt-5",
        messages=messages
    )
    print(final.choices[0].message.content)

Tool Choice Options

tool_choice = "auto"      # Model decides
tool_choice = "none"      # No tools
tool_choice = "required"  # Must use at least one
tool_choice = {"type": "function", "function": {"name": "get_weather"}}  # Force specific

Embeddings

Generate Embeddings

response = client.embeddings.create(
    model="text-embedding-3-large",
    input="The quick brown fox",
    dimensions=1024  # Optional: reduce dimensions
)

vector = response.data[0].embedding

Embedding Models

ModelDimensionsUse Case
text-embedding-3-large
3072 (default)Highest quality
text-embedding-3-small
1536 (default)Cost-effective

Batch Embeddings

texts = ["Hello world", "How are you?", "Goodbye"]

response = client.embeddings.create(
    model="text-embedding-3-small",
    input=texts
)

embeddings = [d.embedding for d in response.data]

Error Handling

Common Errors

ErrorCauseSolution
AuthenticationError
Invalid API keyCheck OPENAI_API_KEY
RateLimitError
Too many requestsImplement backoff
InvalidRequestError
Bad parametersValidate inputs
APIConnectionError
Network issuesRetry with backoff

Retry Pattern

from openai import OpenAI, RateLimitError, APIError
import time

def call_with_retry(func, max_retries=3):
    for attempt in range(max_retries):
        try:
            return func()
        except RateLimitError:
            wait = 2 ** attempt
            time.sleep(wait)
        except APIError as e:
            if attempt == max_retries - 1:
                raise
            time.sleep(1)
    raise Exception("Max retries exceeded")

Platform Differentiators

FeatureOpenAI
Reasoning EffortBudget-controlled reasoning (none->xhigh)
Responses APINext-gen API with CoT passing
Built-in Toolsweb_search, code_interpreter, file_search
400K ContextGPT-5.2 largest context window
Agents SDKPersistent threads with tool integration
ChatKitOfficial React chat components
Batch API50% cost savings for async processing

Further Reading

For comprehensive coverage, see REFERENCE.md:

  • Installation & Configuration: Detailed setup, Azure OpenAI, proxies
  • Chat Completions: Complete parameter reference, multi-turn patterns
  • Responses API: Full tool integration, streaming events
  • Streaming: SSE patterns, tool call streaming
  • Tool Calling: Complete loop implementation, Pydantic helpers
  • Structured Outputs: JSON Schema mode, Pydantic integration
  • Embeddings: Similarity search, vector DB patterns
  • Vision & Audio: Multimodal inputs, Whisper, TTS
  • Agents SDK: Thread management, multi-agent orchestration
  • Batch API: Async processing, cost optimization
  • Realtime API: WebSocket audio/video
  • ChatKit: React components for chat UIs
  • Error Handling: Comprehensive retry patterns
  • Rate Limits: Quotas, tier management
  • Security: Best practices, API key management

Context7 Integration

For up-to-date documentation beyond this skill:

# Python SDK latest
mcp__context7__resolve-library-id(libraryName="openai")
mcp__context7__query-docs(libraryId="/openai/openai-python", query="streaming")

# Node SDK latest
mcp__context7__query-docs(libraryId="/openai/openai-node", query="tool calling")