lmux-openai
OpenAI provider for lmux. Talks to the OpenAI REST API directly over httpx.
Supports chat completions, streaming, embeddings, and the Responses API.
Part of the lmux ecosystem: standardized interface, cost tracking on every response, and registry-based routing across providers.
Auth
Set OPENAI_API_KEY in your environment. The default OpenAIEnvAuthProvider reads it automatically.
from lmux_openai import OpenAIProvider
provider = OpenAIProvider()
Or pass a custom auth provider:
provider = OpenAIProvider(auth=my_auth_provider)
Usage
Chat
from lmux import UserMessage
response = provider.chat("gpt-4o", [UserMessage(content="Hello")])
print(response.content)
print(response.cost)
Streaming
for chunk in provider.chat_stream("gpt-4o", [UserMessage(content="Hello")]):
if chunk.delta:
print(chunk.delta, end="")
Embeddings
response = provider.embed("text-embedding-3-small", "Hello")
print(response.embeddings)
Responses API
response = provider.create_response("gpt-4o", "Hello")
print(response.output_text)
Explicit prompt caching
GPT-5.6 and later models accept explicit cache breakpoints in both Chat Completions and Responses. Place CachePointContent after the stable content block you want cached:
from lmux import CachePointContent, ResponseInputMessage, TextContent
from lmux_openai import OpenAIParams
input_items = [
ResponseInputMessage(
role="developer",
content=[TextContent(text=stable_instructions), CachePointContent()],
),
ResponseInputMessage(role="user", content="What changed?"),
]
response = provider.create_response(
"gpt-5.6-terra",
input_items,
provider_params=OpenAIParams(prompt_cache_key="knowledge-base-v1"),
)
When at least one breakpoint is present, lmux sets prompt_cache_options.mode to "explicit", disabling OpenAI's implicit breakpoint so only the marked prefixes are read or written. Cache points are dropped for older models, which continue using automatic prompt caching. CachePointContent.ttl is not mapped because OpenAI's TTL is request-wide and currently fixed at "30m".
Async
All methods have async variants: achat, achat_stream, aembed, acreate_response.
Registry
Use with the lmux registry to route across multiple providers:
from lmux import Registry
registry = Registry()
registry.register("openai", provider)
response = registry.chat("openai/gpt-4o", messages)
Provider Params
Pass OpenAI-specific parameters via provider_params:
from lmux_openai import OpenAIParams
response = provider.chat(
"o3",
messages,
provider_params=OpenAIParams(reasoning_effort="high", service_tier="flex"),
)
| Parameter | Type | Description |
|---|---|---|
service_tier |
"auto" | "default" | "flex" |
Service tier selection |
reasoning_effort |
"low" | "medium" | "high" |
Reasoning effort for o-series models |
seed |
int |
Deterministic sampling seed |
user |
str |
End-user identifier |
prompt_cache_key |
str |
Prompt-cache routing key for better hit rates (chat + responses) |
prompt_cache_retention |
"in_memory" | "24h" |
Prompt-cache retention; legacy, pre-gpt-5.6 (chat + responses) |
Constructor Options
OpenAIProvider(
auth=..., # AuthProvider[str], default: OpenAIEnvAuthProvider()
base_url=..., # Optional base URL override
timeout=..., # Request timeout in seconds
max_retries=..., # Max retry attempts
data_residency=..., # bool, default: False — apply 10% uplift for regional endpoints
organization=..., # Optional org id -> OpenAI-Organization header
project=..., # Optional project id -> OpenAI-Project header
default_headers=..., # Optional Mapping[str, str] added to every request
transport=..., # Optional httpx.BaseTransport for the sync client (proxies, testing)
async_transport=..., # Optional httpx.AsyncBaseTransport for the async client
)
lmux does not read OpenAI's OPENAI_BASE_URL / OPENAI_ORG_ID / OPENAI_PROJECT_ID
environment variables (only the API key, via OpenAIEnvAuthProvider). Pass base_url,
organization, and project explicitly instead.
Custom Headers
default_headers applies to every request — useful for gateways and proxies (e.g. a
Helicone-Auth token). lmux-managed headers (Authorization, Content-Type,
OpenAI-Organization, OpenAI-Project) take precedence and cannot be overridden by
default_headers; use organization / project for those.
provider = OpenAIProvider(
organization="org-abc",
project="proj-123",
default_headers={"Helicone-Auth": "Bearer sk-helicone-..."},
)
Data Residency
OpenAI charges a 10% uplift on the gpt-5.4, gpt-5.5, and gpt-5.6 families when requests go through a regional processing (data residency) endpoint.
Data residency is selected at the transport layer (regional hostname like eu.api.openai.com), not via a per-request parameter. Set data_residency=True on the provider so lmux applies the uplift to the reported cost.
provider = OpenAIProvider(
base_url="https://eu.api.openai.com/v1",
data_residency=True,
)
The uplift is only applied to eligible models (checked via regional_uplift_applies); other models (e.g. gpt-4o, embeddings) return their standard cost even when data_residency=True.
Metadata
Release files for lmux-openai 0.10.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| lmux_openai-0.10.2.tar.gz | 15.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| lmux_openai-0.10.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 35.0 kB
Release files / lmux_openai-0.10.2.tar.gz
| Download URL | lmux_openai-0.10.2.tar.gz |
|---|---|
| Size | 15.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
941e25af606112766c904115bf2195978bacb334c05d11096eb5c93c1148000d
|
|
BLAKE2b-256 checksum How to use checksums |
f95cc9bc5ed6b2e04ee26aa3b7c9533f9ef8cd73b5f27f759160b5004eda866e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 1, 2026.
Transparency logRelease files / lmux_openai-0.10.2-py3-none-any.whl
| Download URL | lmux_openai-0.10.2-py3-none-any.whl |
|---|---|
| Size | 19.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e2a99d9d5d514e18b4325ff3c8c53f0e0336d4a2836a40b682b955bbe0be834d
|
|
BLAKE2b-256 checksum How to use checksums |
2778af6685d5e12fbcdf7939ea3e535cd6d4f0bcaf15b8eac05c065ec12cb809
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 1, 2026.
Transparency log