Skip to main content
The OpenAI provider enables LangExtract to use OpenAI’s GPT models, including GPT-4o, GPT-4o-mini, and other models from the OpenAI API.

Installation

The OpenAI provider requires an optional dependency:
pip install langextract[openai]
The OpenAI provider code ships with LangExtract, but the openai Python SDK must be installed separately using the command above.

Quick Start

import langextract as lx
import os

result = lx.extract(
    text="Your document text",
    model_id="gpt-4o-mini",
    api_key=os.environ.get('OPENAI_API_KEY'),
    prompt_description="Extract key information",
    examples=[...],
    fence_output=True,
    use_schema_constraints=False
)
OpenAI models currently require fence_output=True and use_schema_constraints=False because LangExtract doesn’t yet implement schema constraints for OpenAI.

API Setup

Get an API key from OpenAI Platform.
export OPENAI_API_KEY="your-api-key-here"

Model Selection

Available Models

The OpenAI provider supports models matching patterns like ^gpt, ^o1, ^o3, and other OpenAI model IDs:
  • gpt-4o - Most capable GPT-4 model
  • gpt-4o-mini - Fast and cost-effective (recommended for most tasks)
  • gpt-4-turbo - Previous generation advanced model
  • gpt-3.5-turbo - Legacy fast model
  • o1 - Reasoning model series
  • o3-mini - Efficient reasoning model
import langextract as lx

# Recommended for most use cases
result = lx.extract(
    text="Your text",
    model_id="gpt-4o-mini",
    api_key=os.environ.get('OPENAI_API_KEY'),
    prompt_description="Extract information",
    examples=[...],
    fence_output=True,
    use_schema_constraints=False
)

# For complex tasks requiring advanced reasoning
result = lx.extract(
    text="Your text",
    model_id="gpt-4o",
    api_key=os.environ.get('OPENAI_API_KEY'),
    prompt_description="Extract complex relationships",
    examples=[...],
    fence_output=True,
    use_schema_constraints=False
)

Configuration Options

Basic Parameters

result = lx.extract(
    text="Your document",
    model_id="gpt-4o-mini",
    api_key=os.environ.get('OPENAI_API_KEY'),
    prompt_description="Extract entities",
    examples=[...],
    fence_output=True,
    use_schema_constraints=False,
    # Provider-specific parameters:
    temperature=0.7,          # Sampling temperature (0.0-2.0)
    max_output_tokens=1000,  # Maximum tokens in response
    top_p=0.95,              # Nucleus sampling
)

Advanced Configuration

from langextract.providers.openai import OpenAILanguageModel

model = OpenAILanguageModel(
    model_id="gpt-4o",
    api_key="your-key",
    temperature=0.7,
    max_workers=10,           # Parallel API calls
    base_url=None,            # Custom API endpoint (optional)
    organization=None         # OpenAI organization ID (optional)
)

Reasoning Models

For OpenAI’s reasoning models (o1, o3 series):
result = lx.extract(
    text="Complex problem requiring reasoning",
    model_id="o1",
    api_key=os.environ.get('OPENAI_API_KEY'),
    prompt_description="Extract and reason about entities",
    examples=[...],
    fence_output=True,
    use_schema_constraints=False,
    reasoning_effort="high"  # or "medium", "low"
)

JSON Mode

The OpenAI provider automatically enables JSON mode for structured output:
result = lx.extract(
    text="Your document",
    model_id="gpt-4o-mini",
    api_key=os.environ.get('OPENAI_API_KEY'),
    prompt_description="Extract structured data",
    examples=[...],
    format_type=lx.data.FormatType.JSON,  # Enables JSON mode automatically
    fence_output=True,
    use_schema_constraints=False
)
When format_type=JSON, the provider:
  1. Sets response_format={"type": "json_object"} in the API call
  2. Adds a system message instructing JSON output
  3. Returns raw JSON without markdown fences

Parallel Processing

The OpenAI provider automatically parallelizes multiple prompts:
result = lx.extract(
    text="Your long document",
    model_id="gpt-4o-mini",
    api_key=os.environ.get('OPENAI_API_KEY'),
    prompt_description="Extract entities",
    examples=[...],
    fence_output=True,
    use_schema_constraints=False,
    max_workers=20,           # Process up to 20 chunks in parallel
    max_chunk_size=3000      # Split document into 3000-char chunks
)

Code Examples

Basic Extraction

import langextract as lx
import os

# Define your task
prompt = "Extract person names, locations, and dates in order of appearance."

examples = [
    lx.data.ExampleData(
        text="Dr. Jane Smith visited Paris on March 15, 2024.",
        extractions=[
            lx.data.Extraction(
                extraction_class="person",
                extraction_text="Dr. Jane Smith",
                attributes={"title": "Dr."}
            ),
            lx.data.Extraction(
                extraction_class="location",
                extraction_text="Paris",
                attributes={"type": "city"}
            ),
            lx.data.Extraction(
                extraction_class="date",
                extraction_text="March 15, 2024",
                attributes={"format": "full date"}
            )
        ]
    )
]

# Run extraction
result = lx.extract(
    text="Prof. John Doe traveled to London on April 20, 2024.",
    model_id="gpt-4o-mini",
    api_key=os.environ.get('OPENAI_API_KEY'),
    prompt_description=prompt,
    examples=examples,
    fence_output=True,
    use_schema_constraints=False
)

print(f"Found {len(result.extractions)} extractions")
for ext in result.extractions:
    print(f"{ext.extraction_class}: {ext.extraction_text}")

Long Document Processing

import langextract as lx
import os

# Process a long document with optimal settings
result = lx.extract(
    text="https://example.com/long-document.txt",  # Or pass text directly
    model_id="gpt-4o-mini",
    api_key=os.environ.get('OPENAI_API_KEY'),
    prompt_description="Extract all medication mentions",
    examples=[...],
    fence_output=True,
    use_schema_constraints=False,
    # Chunking and parallelization:
    max_chunk_size=3000,      # Smaller chunks for accuracy
    max_workers=20,           # High parallelism for speed
    extraction_passes=3,      # Multiple passes for recall
    # Provider configuration:
    temperature=0.0,          # Deterministic output
    max_output_tokens=2000,   # Allow longer responses
)

Custom Base URL

For Azure OpenAI or other compatible endpoints:
from langextract.providers.openai import OpenAILanguageModel

model = OpenAILanguageModel(
    model_id="gpt-4o",
    api_key="your-key",
    base_url="https://your-azure-endpoint.openai.azure.com/",
    organization="your-org-id"  # Optional
)

# Use with lx.extract by passing the model instance
result = lx.extract(
    text="Your text",
    model=model,
    prompt_description="Extract data",
    examples=[...],
    fence_output=True,
    use_schema_constraints=False
)

Error Handling

import langextract as lx
from langextract.core.exceptions import InferenceConfigError, InferenceRuntimeError

try:
    result = lx.extract(
        text="Your text",
        model_id="gpt-4o-mini",
        api_key=os.environ.get('OPENAI_API_KEY'),
        prompt_description="Extract data",
        examples=[...],
        fence_output=True,
        use_schema_constraints=False
    )
except InferenceConfigError as e:
    # Configuration errors (missing API key, invalid parameters)
    print(f"Configuration error: {e}")
    if "OpenAI provider requires openai package" in str(e):
        print("Install with: pip install langextract[openai]")
except InferenceRuntimeError as e:
    # Runtime errors (API errors, rate limits, timeouts)
    print(f"Runtime error: {e}")

Rate Limits

OpenAI API has rate limits based on your usage tier. For production use:
  • Monitor your rate limits
  • Implement retry logic for rate limit errors
  • Consider adjusting max_workers to stay within limits

Direct Provider Usage

For advanced use cases, instantiate the provider directly:
from langextract.providers.openai import OpenAILanguageModel
from langextract.core.types import ScoredOutput
import os

model = OpenAILanguageModel(
    model_id="gpt-4o-mini",
    api_key=os.environ.get('OPENAI_API_KEY'),
    temperature=0.7,
    max_workers=10
)

# Run inference on prompts
prompts = ["Extract entities from: ...", "Summarize: ..."]
for outputs in model.infer(prompts):
    for scored_output in outputs:
        print(f"Score: {scored_output.score}, Output: {scored_output.output}")

Comparison with Gemini

FeatureOpenAIGemini
Installationpip install langextract[openai]Built-in
Schema ConstraintsNot supportedSupported
Fence OutputRequired (fence_output=True)Optional
JSON ModeAutomaticAutomatic with schema
Parallel ProcessingYesYes
Batch APINoYes (Vertex AI)

Next Steps

Provider Overview

Learn about the provider architecture

Gemini Provider

Use Google’s Gemini models

Ollama Provider

Run local models

Custom Providers

Create your own providers

Build docs developers (and LLMs) love