feat(openai): bill gov.api.openai.com FedRAMP endpoint with 1.1x uplift (#49951)

* feat(openai): bill gov.api.openai.com FedRAMP endpoint with 1.1x uplift

* chore(openai): trim FedRAMP uplift diff

* refactor(openai): bill the FedRAMP endpoint through its own fedramp_uplift_multiplier key

* fix(ui): regenerate fedramp_uplift_multiplier doc comment in schema.d.ts

* style: ruff format utils.py and reorder fedramp_uplift_multiplier in schema.d.ts

* fix(openai): infer data_residency from OPENAI_BASE_URL and litellm.api_base when api_base is unset

* test(cost): cover get_fedramp_uplift_multiplier fallback paths

* fix(cost): apply fedramp_uplift_multiplier in batch_cost_calculator

* fix(openai): derive data_residency from a supplied client's base_url

* test: type the supplied-client data_residency test params

---------

Co-authored-by: devin-ai-integration[bot] <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
Kerry Lu 2026-11-04 08:57:42 -08:00 • committed by GitHub
parent 83be155b65
commit df78b16941
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
17 changed files with 445 additions and 24 deletions

View file

@ -50,6 +50,7 @@ from litellm.litellm_core_utils.llm_cost_calc.utils import (
get_batch_cost_rates,
get_billable_input_tokens,
get_cost_per_unit,
get_fedramp_uplift_multiplier,
get_modality_token_cost_key,
get_regional_uplift_multiplier,
get_service_tier_cost_key,
@ -3311,7 +3312,9 @@ def batch_cost_calculator(
text_tokens: Final = usage.completion_tokens - image_tokens
total_completion_cost = text_tokens * text_rate + image_tokens * image_rate
uplift: Final = get_regional_uplift_multiplier(model_info, data_residency)
uplift: Final = get_regional_uplift_multiplier(model_info, data_residency) * get_fedramp_uplift_multiplier(
model_info, data_residency
)
if uplift != 1.0:
total_prompt_cost *= uplift
total_completion_cost *= uplift

View file

@ -1441,6 +1441,29 @@ def get_regional_uplift_multiplier(model_info: ModelInfo, data_residency: str |
_get_regional_uplift_multiplier = get_regional_uplift_multiplier
def get_fedramp_uplift_multiplier(model_info: ModelInfo, data_residency: str | None) -> float:
"""
Resolve the per-model uplift multiplier for the OpenAI FedRAMP endpoint.
OpenAI applies a flat percentage uplift (e.g. +10%) on all token costs for
requests served from gov.api.openai.com. The multiplier is stored on the
model entry as ``fedramp_uplift_multiplier`` (e.g. 1.10).
Returns 1.0 (no uplift) unless ``data_residency`` is ``"fedramp"`` and the
model has a multiplier configured.
"""
if data_residency is None or data_residency.lower() != DataResidency.FEDRAMP.value:
return 1.0
multiplier: Final = model_info.get("fedramp_uplift_multiplier")
if multiplier is None:
return 1.0
try:
return float(multiplier)
except (TypeError, ValueError):
verbose_logger.exception("Invalid fedramp_uplift_multiplier for model; defaulting to 1.0")
return 1.0
def get_vertex_regional_endpoint_uplift(model_info: ModelInfo, vertex_location: str | None) -> float:
"""
Resolve the per-model uplift multiplier for Vertex AI non-global (regional and
@ -1550,8 +1573,8 @@ def generic_cost_per_token(
Input:
- model: str, the model name without provider prefix
- usage: LiteLLM Usage block, containing anthropic caching information
- data_residency: optional OpenAI data-residency region (e.g. "eu", "us"),
used to apply the per-model regional-processing uplift multiplier.
- data_residency: optional OpenAI data-residency region (e.g. "eu", "us") or
"fedramp", used to apply the per-model regional-processing or FedRAMP uplift multiplier.
- vertex_location: optional Vertex AI location the request was served from
(e.g. "us-east5", "global"), used to apply the per-model
regional-endpoint uplift multiplier when non-global.
@ -1728,10 +1751,9 @@ def generic_cost_per_token(
)
completion_cost += float(video_tokens) * _output_cost_per_video_token
## REGIONAL DATA-RESIDENCY UPLIFT
# Applied as a flat multiplier across all token costs for the request
# when the upstream is a regionalized OpenAI host (eu./us.api.openai.com).
uplift: Final = get_regional_uplift_multiplier(resolved_model_info, data_residency)
uplift: Final = get_regional_uplift_multiplier(resolved_model_info, data_residency) * get_fedramp_uplift_multiplier(
resolved_model_info, data_residency
)
if uplift != 1.0:
prompt_cost *= uplift
completion_cost *= uplift
@ -1874,6 +1896,7 @@ def _cost_map_billed_rates(
)
multiplier: Final = (
get_regional_uplift_multiplier(model_info, data_residency)
* get_fedramp_uplift_multiplier(model_info, data_residency)
* get_vertex_regional_endpoint_uplift(model_info, vertex_location)
* get_provider_specific_geo_multiplier(model_info=model_info, usage=usage)
* get_provider_specific_speed_multiplier(model_info=model_info, usage=usage)
@ -2059,8 +2082,10 @@ def calculate_prompt_caching_savings(
{ttl: rate - prompt_base_cost for ttl, rate in base_costs.cache_creation_rates_by_ttl.items()}
),
)
uplift: Final = get_regional_uplift_multiplier(model_info, data_residency) * get_vertex_regional_endpoint_uplift(
model_info, vertex_location
uplift: Final = (
get_regional_uplift_multiplier(model_info, data_residency)
* get_fedramp_uplift_multiplier(model_info, data_residency)
* get_vertex_regional_endpoint_uplift(model_info, vertex_location)
)
return (read_discount - write_premium) * uplift

View file

@ -31,9 +31,9 @@ def cost_per_token(
Input:
- model: str, the model name without provider prefix
- usage: LiteLLM Usage block, containing anthropic caching information
- data_residency: optional OpenAI data-residency region (e.g. "eu", "us"),
inferred from api_base. Applies the model's regional-processing
uplift multiplier when set.
- data_residency: optional OpenAI data-residency mode (e.g. "eu", "us", "fedramp"),
inferred from api_base, including gov.api.openai.com. Applies the
model's regional-processing uplift multiplier when set.
Returns:
Tuple[float, float] - prompt_cost_in_usd, completion_cost_in_usd

View file

@ -7,9 +7,12 @@ enabled and rejects requests sent to the wrong host, so the api_base hostname
is the authoritative signal of which region a request was processed in.
"""
import os
from typing import Final
from urllib.parse import urlparse
import litellm
# Mapping of OpenAI regional hostnames to the corresponding data-residency
# value used by the cost calculator. See
# https://developers.openai.com/api/docs/pricing for the regional-processing
@ -17,6 +20,7 @@ from urllib.parse import urlparse
_OPENAI_REGIONAL_HOSTS: Final[dict[str, str]] = {
"eu.api.openai.com": "eu",
"us.api.openai.com": "us",
"gov.api.openai.com": "fedramp",
}
@ -25,13 +29,22 @@ def infer_openai_data_residency(custom_llm_provider: str | None, api_base: str |
Derive the OpenAI data-residency region from an api_base URL.
Returns ``"eu"`` for the EU regional host, ``"us"`` for the US regional
host, and ``None`` for the default global host, any non-OpenAI provider,
or any non-OpenAI URL.
host, ``"fedramp"`` for ``gov.api.openai.com``, and ``None`` for the
default global host, any non-OpenAI provider, or any non-OpenAI URL.
When ``api_base`` is unset, falls back to the same defaults the OpenAI
handler uses (``litellm.api_base``, ``OPENAI_BASE_URL``, ``OPENAI_API_BASE``)
so env-configured regional endpoints are billed with their uplift.
"""
if custom_llm_provider != "openai" or not api_base:
if custom_llm_provider != "openai":
return None
resolved_api_base: Final = (
api_base or litellm.api_base or os.getenv("OPENAI_BASE_URL") or os.getenv("OPENAI_API_BASE")
)
if not resolved_api_base:
return None
try:
host: Final = urlparse(api_base).hostname
host: Final = urlparse(resolved_api_base).hostname
except (TypeError, ValueError):
return None
if not host:

View file

@ -6111,6 +6111,11 @@ def completion(
messages if readable_messages is None else list(readable_messages)
)
supplied_client_api_base: Final = (
str(client.base_url)
if custom_llm_provider == "openai" and isinstance(client, openai.OpenAI | openai.AsyncOpenAI)
else None
)
# For logging - save the values of the litellm-specific params passed in
requested_litellm_params: Final = get_litellm_params(
acompletion=acompletion,
@ -6119,7 +6124,7 @@ def completion(
logger_fn=logger_fn,
verbose=verbose,
custom_llm_provider=custom_llm_provider,
api_base=api_base,
api_base=supplied_client_api_base or api_base,
litellm_call_id=kwargs.get("litellm_call_id", None),
model_alias_map=litellm.model_alias_map,
completion_call_id=id,

View file

@ -17799,6 +17799,7 @@
"max_output_tokens": 1024,
"mode": "chat",
"output_cost_per_token": 1.2e-05,
"fedramp_uplift_multiplier": 1.1,
"supported_endpoints": [
"/v1/responses"
],
@ -17830,6 +17831,7 @@
"max_output_tokens": 1024,
"mode": "chat",
"output_cost_per_token": 1.2e-05,
"fedramp_uplift_multiplier": 1.1,
"supported_endpoints": [
"/v1/responses"
],
@ -29263,6 +29265,7 @@
"max_output_tokens": 4096,
"mode": "chat",
"output_cost_per_token": 6e-06,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 3e-06,
"source": "https://developers.openai.com/api/docs/pricing",
"supports_system_messages": true,
@ -29278,6 +29281,7 @@
"max_output_tokens": 4096,
"mode": "chat",
"output_cost_per_token": 6e-06,
"fedramp_uplift_multiplier": 1.1,
"supports_system_messages": true,
"supports_tool_choice": true
},
@ -29291,6 +29295,7 @@
"max_output_tokens": 4096,
"mode": "chat",
"output_cost_per_token": 6e-06,
"fedramp_uplift_multiplier": 1.1,
"supports_system_messages": true,
"supports_tool_choice": true
},
@ -29304,6 +29309,7 @@
"max_output_tokens": 4096,
"mode": "chat",
"output_cost_per_token": 6e-06,
"fedramp_uplift_multiplier": 1.1,
"supports_system_messages": true,
"supports_tool_choice": true
},
@ -29317,6 +29323,7 @@
"max_output_tokens": 4096,
"mode": "chat",
"output_cost_per_token": 6e-05,
"fedramp_uplift_multiplier": 1.1,
"source": "OpenAI needs to add pricing for this ft model, will be updated when added by OpenAI. Defaulting to base model pricing",
"supports_function_calling": true,
"supports_system_messages": true,
@ -29335,6 +29342,7 @@
"max_output_tokens": 16384,
"mode": "chat",
"output_cost_per_token": 1.5e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 1.25e-05,
"source": "https://developers.openai.com/api/docs/pricing",
"supports_function_calling": true,
@ -29357,6 +29365,7 @@
"max_output_tokens": 16384,
"mode": "chat",
"output_cost_per_token": 1.5e-05,
"fedramp_uplift_multiplier": 1.1,
"supports_function_calling": true,
"supports_parallel_function_calling": true,
"supports_pdf_input": true,
@ -29378,6 +29387,7 @@
"max_output_tokens": 16384,
"mode": "chat",
"output_cost_per_token": 1.2e-06,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 6e-07,
"source": "https://developers.openai.com/api/docs/pricing",
"supports_function_calling": true,
@ -29401,6 +29411,7 @@
"max_output_tokens": 32768,
"mode": "chat",
"output_cost_per_token": 1.2e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 6e-06,
"source": "https://developers.openai.com/api/docs/pricing",
"supports_function_calling": true,
@ -29423,6 +29434,7 @@
"max_output_tokens": 32768,
"mode": "chat",
"output_cost_per_token": 3.2e-06,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 1.6e-06,
"source": "https://developers.openai.com/api/docs/pricing",
"supports_function_calling": true,
@ -29445,6 +29457,7 @@
"max_output_tokens": 32768,
"mode": "chat",
"output_cost_per_token": 8e-07,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 4e-07,
"source": "https://developers.openai.com/api/docs/pricing",
"supports_function_calling": true,
@ -29467,6 +29480,7 @@
"max_output_tokens": 100000,
"mode": "chat",
"output_cost_per_token": 1.6e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 8e-06,
"source": "https://developers.openai.com/api/docs/pricing",
"supports_function_calling": true,
@ -35122,6 +35136,7 @@
"max_output_tokens": 4096,
"mode": "chat",
"output_cost_per_token": 1.5e-06,
"fedramp_uplift_multiplier": 1.1,
"source": "https://developers.openai.com/api/docs/pricing",
"supports_function_calling": true,
"supports_prompt_caching": true,
@ -35139,6 +35154,7 @@
"max_output_tokens": 4096,
"mode": "chat",
"output_cost_per_token": 1.5e-06,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 7.5e-07,
"source": "https://developers.openai.com/api/docs/pricing",
"supports_function_calling": true,
@ -35158,6 +35174,7 @@
"max_output_tokens": 4096,
"mode": "chat",
"output_cost_per_token": 2e-06,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 2e-06,
"source": "https://developers.openai.com/api/docs/pricing",
"supports_function_calling": true,
@ -35175,6 +35192,7 @@
"max_output_tokens": 4096,
"mode": "chat",
"output_cost_per_token": 4e-06,
"fedramp_uplift_multiplier": 1.1,
"supports_prompt_caching": true,
"supports_system_messages": true,
"supports_tool_choice": true
@ -35209,6 +35227,7 @@
"max_output_tokens": 4096,
"mode": "chat",
"output_cost_per_token": 6e-05,
"fedramp_uplift_multiplier": 1.1,
"supports_function_calling": true,
"supports_prompt_caching": true,
"supports_system_messages": true,
@ -35225,6 +35244,7 @@
"max_output_tokens": 4096,
"mode": "chat",
"output_cost_per_token": 6e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 3e-05,
"source": "https://developers.openai.com/api/docs/pricing",
"supports_function_calling": true,
@ -35242,6 +35262,7 @@
"max_output_tokens": 4096,
"mode": "chat",
"output_cost_per_token": 3e-05,
"fedramp_uplift_multiplier": 1.1,
"supports_function_calling": true,
"supports_parallel_function_calling": true,
"supports_prompt_caching": true,
@ -35258,6 +35279,7 @@
"max_output_tokens": 4096,
"mode": "chat",
"output_cost_per_token": 3e-05,
"fedramp_uplift_multiplier": 1.1,
"supports_function_calling": true,
"supports_parallel_function_calling": true,
"supports_pdf_input": true,
@ -35277,6 +35299,7 @@
"max_output_tokens": 4096,
"mode": "chat",
"output_cost_per_token": 3e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 1.5e-05,
"source": "https://developers.openai.com/api/docs/pricing",
"supports_function_calling": true,
@ -35301,6 +35324,7 @@
"max_output_tokens": 32768,
"mode": "chat",
"output_cost_per_token": 8e-06,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 4e-06,
"output_cost_per_token_priority": 1.4e-05,
"search_context_cost_per_query": {
@ -35346,6 +35370,7 @@
"max_output_tokens": 32768,
"mode": "chat",
"output_cost_per_token": 8e-06,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_priority": 1.4e-05,
"output_cost_per_token_batches": 4e-06,
"search_context_cost_per_query": {
@ -35391,6 +35416,7 @@
"max_output_tokens": 32768,
"mode": "chat",
"output_cost_per_token": 1.6e-06,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 8e-07,
"output_cost_per_token_priority": 2.8e-06,
"search_context_cost_per_query": {
@ -35436,6 +35462,7 @@
"max_output_tokens": 32768,
"mode": "chat",
"output_cost_per_token": 1.6e-06,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_priority": 2.8e-06,
"output_cost_per_token_batches": 8e-07,
"search_context_cost_per_query": {
@ -35481,6 +35508,7 @@
"max_output_tokens": 32768,
"mode": "chat",
"output_cost_per_token": 4e-07,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 2e-07,
"output_cost_per_token_priority": 8e-07,
"source": "https://developers.openai.com/api/docs/pricing",
@ -35520,6 +35548,7 @@
"max_output_tokens": 32768,
"mode": "chat",
"output_cost_per_token": 4e-07,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_priority": 8e-07,
"output_cost_per_token_batches": 2e-07,
"source": "https://developers.openai.com/api/docs/pricing",
@ -35559,6 +35588,7 @@
"max_output_tokens": 16384,
"mode": "chat",
"output_cost_per_token": 1e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 5e-06,
"output_cost_per_token_priority": 1.7e-05,
"source": "https://developers.openai.com/api/docs/pricing",
@ -35583,6 +35613,7 @@
"max_output_tokens": 4096,
"mode": "chat",
"output_cost_per_token": 1.5e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 7.5e-06,
"output_cost_per_token_priority": 2.625e-05,
"source": "https://developers.openai.com/api/docs/pricing",
@ -35608,6 +35639,7 @@
"max_output_tokens": 16384,
"mode": "chat",
"output_cost_per_token": 1e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_priority": 1.7e-05,
"output_cost_per_token_batches": 5e-06,
"source": "https://developers.openai.com/api/docs/pricing",
@ -35634,6 +35666,7 @@
"max_output_tokens": 16384,
"mode": "chat",
"output_cost_per_token": 1e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_priority": 1.7e-05,
"output_cost_per_token_batches": 5e-06,
"source": "https://developers.openai.com/api/docs/pricing",
@ -35926,6 +35959,7 @@
"max_output_tokens": 16384,
"mode": "chat",
"output_cost_per_token": 6e-07,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 3e-07,
"output_cost_per_token_priority": 1e-06,
"supports_function_calling": true,
@ -35957,6 +35991,7 @@
"max_output_tokens": 16384,
"mode": "chat",
"output_cost_per_token": 6e-07,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_priority": 1e-06,
"output_cost_per_token_batches": 3e-07,
"search_context_cost_per_query": {
@ -36021,6 +36056,7 @@
"max_output_tokens": 16384,
"mode": "chat",
"output_cost_per_token": 6e-07,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 3e-07,
"search_context_cost_per_query": {
"search_context_size_high": 0.025,
@ -36049,6 +36085,7 @@
"max_output_tokens": 16384,
"mode": "chat",
"output_cost_per_token": 6e-07,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 3e-07,
"search_context_cost_per_query": {
"search_context_size_high": 0.025,
@ -36136,6 +36173,7 @@
"max_output_tokens": 16384,
"mode": "chat",
"output_cost_per_token": 1e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 5e-06,
"search_context_cost_per_query": {
"search_context_size_high": 0.025,
@ -36164,6 +36202,7 @@
"max_output_tokens": 16384,
"mode": "chat",
"output_cost_per_token": 1e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 5e-06,
"search_context_cost_per_query": {
"search_context_size_high": 0.025,
@ -36786,6 +36825,7 @@
"max_output_tokens": 128000,
"mode": "chat",
"output_cost_per_token": 1e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 5e-06,
"output_cost_per_token_flex": 5e-06,
"output_cost_per_token_priority": 2e-05,
@ -36840,6 +36880,7 @@
"max_output_tokens": 128000,
"mode": "responses",
"output_cost_per_token": 1e-05,
"fedramp_uplift_multiplier": 1.1,
"source": "https://developers.openai.com/api/docs/models/gpt-5-codex",
"supported_endpoints": [
"/v1/responses"
@ -36874,6 +36915,7 @@
"max_output_tokens": 128000,
"mode": "chat",
"output_cost_per_token": 1e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_priority": 2e-05,
"reasoning_contexts": [
"auto",
@ -36934,6 +36976,7 @@
"max_output_tokens": 128000,
"mode": "responses",
"output_cost_per_token": 2e-06,
"fedramp_uplift_multiplier": 1.1,
"source": "https://developers.openai.com/api/docs/models/gpt-5.1-codex-mini",
"supported_endpoints": [
"/v1/responses"
@ -36966,6 +37009,7 @@
"max_output_tokens": 128000,
"mode": "responses",
"output_cost_per_token": 1e-05,
"fedramp_uplift_multiplier": 1.1,
"source": "https://developers.openai.com/api/docs/models/gpt-5.1-codex-max",
"supported_endpoints": [
"/v1/responses"
@ -36999,6 +37043,7 @@
"max_output_tokens": 128000,
"mode": "responses",
"output_cost_per_token": 1e-05,
"fedramp_uplift_multiplier": 1.1,
"source": "https://developers.openai.com/api/docs/models/gpt-5.1-codex",
"supported_endpoints": [
"/v1/responses"
@ -37032,6 +37077,7 @@
"max_output_tokens": 16384,
"mode": "chat",
"output_cost_per_token": 1e-05,
"fedramp_uplift_multiplier": 1.1,
"source": "https://developers.openai.com/api/docs/models/gpt-5.1-chat-latest",
"supported_endpoints": [
"/v1/chat/completions",
@ -37069,6 +37115,7 @@
"max_output_tokens": 128000,
"mode": "chat",
"output_cost_per_token": 1e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_priority": 2e-05,
"reasoning_contexts": [
"auto",
@ -37127,6 +37174,7 @@
"max_output_tokens": 128000,
"mode": "chat",
"output_cost_per_token": 1.4e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_priority": 2.8e-05,
"reasoning_contexts": [
"auto",
@ -37186,6 +37234,7 @@
"max_output_tokens": 128000,
"mode": "responses",
"output_cost_per_token": 1.4e-05,
"fedramp_uplift_multiplier": 1.1,
"source": "https://developers.openai.com/api/docs/models/gpt-5.2-codex",
"supported_endpoints": [
"/v1/responses"
@ -37219,6 +37268,7 @@
"max_output_tokens": 16384,
"mode": "chat",
"output_cost_per_token": 1.4e-05,
"fedramp_uplift_multiplier": 1.1,
"source": "https://developers.openai.com/api/docs/models/gpt-5.2-chat-latest",
"supported_endpoints": [
"/v1/chat/completions",
@ -37253,6 +37303,7 @@
"max_output_tokens": 128000,
"mode": "chat",
"output_cost_per_token": 1.4e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_priority": 2.8e-05,
"reasoning_contexts": [
"auto",
@ -37309,6 +37360,7 @@
"max_output_tokens": 128000,
"mode": "responses",
"output_cost_per_token": 0.000168,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 8.4e-05,
"reasoning_contexts": [
"auto",
@ -37357,6 +37409,7 @@
"max_output_tokens": 128000,
"mode": "responses",
"output_cost_per_token": 0.000168,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 8.4e-05,
"reasoning_contexts": [
"auto",
@ -37463,6 +37516,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -37556,6 +37610,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -37657,6 +37712,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -37749,6 +37805,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -37839,6 +37896,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -37931,6 +37989,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -38022,6 +38081,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -38070,6 +38130,7 @@
"max_output_tokens": 128000,
"mode": "chat",
"output_cost_per_token": 7.5e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_above_272k_tokens": 0.0001125,
"supported_endpoints": [
"/v1/chat/completions",
@ -38108,6 +38169,7 @@
"max_output_tokens": 128000,
"mode": "chat",
"output_cost_per_token": 7.5e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_above_272k_tokens": 0.0001125,
"supported_endpoints": [
"/v1/chat/completions",
@ -38146,6 +38208,7 @@
"max_output_tokens": 128000,
"mode": "responses",
"output_cost_per_token": 7.5e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_above_272k_tokens": 0.0001125,
"supported_endpoints": [
"/v1/responses"
@ -38183,6 +38246,7 @@
"max_output_tokens": 128000,
"mode": "chat",
"output_cost_per_token": 2e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_above_272k_tokens": 3e-05,
"supported_endpoints": [
"/v1/chat/completions",
@ -38221,6 +38285,7 @@
"max_output_tokens": 128000,
"mode": "responses",
"output_cost_per_token": 2e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_above_272k_tokens": 3e-05,
"supported_endpoints": [
"/v1/responses"
@ -38254,6 +38319,7 @@
"max_output_tokens": 128000,
"mode": "chat",
"output_cost_per_token": 3e-05,
"fedramp_uplift_multiplier": 1.1,
"reasoning_effort_levels": [
"medium"
],
@ -38322,6 +38388,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -38392,6 +38459,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -38454,6 +38522,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -38513,6 +38582,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -38580,6 +38650,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"supported_endpoints": [
"/v1/chat/completions",
"/v1/batch",
@ -38645,6 +38716,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"supported_endpoints": [
"/v1/chat/completions",
"/v1/batch",
@ -38702,6 +38774,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -38762,6 +38835,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -38824,6 +38898,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -38886,6 +38961,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -38945,6 +39021,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -39009,6 +39086,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -39054,6 +39132,7 @@
"max_output_tokens": 272000,
"mode": "responses",
"output_cost_per_token": 0.00012,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 6e-05,
"reasoning_contexts": [
"auto",
@ -39105,6 +39184,7 @@
"max_output_tokens": 272000,
"mode": "responses",
"output_cost_per_token": 0.00012,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 6e-05,
"reasoning_contexts": [
"auto",
@ -39162,6 +39242,7 @@
"max_output_tokens": 128000,
"mode": "chat",
"output_cost_per_token": 1e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 5e-06,
"output_cost_per_token_flex": 5e-06,
"output_cost_per_token_priority": 2e-05,
@ -39216,6 +39297,7 @@
"max_output_tokens": 16384,
"mode": "chat",
"output_cost_per_token": 1e-05,
"fedramp_uplift_multiplier": 1.1,
"supported_endpoints": [
"/v1/chat/completions",
"/v1/batch",
@ -39253,6 +39335,7 @@
"max_output_tokens": 16384,
"mode": "chat",
"output_cost_per_token": 1e-05,
"fedramp_uplift_multiplier": 1.1,
"source": "https://developers.openai.com/api/docs/models/gpt-5-chat-latest",
"supported_endpoints": [
"/v1/chat/completions",
@ -39285,6 +39368,7 @@
"max_output_tokens": 128000,
"mode": "responses",
"output_cost_per_token": 1.4e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_priority": 2.8e-05,
"reasoning_contexts": [
"auto",
@ -39339,6 +39423,7 @@
"max_output_tokens": 16384,
"mode": "chat",
"output_cost_per_token": 1.4e-05,
"fedramp_uplift_multiplier": 1.1,
"source": "https://developers.openai.com/api/docs/models/gpt-5.3-chat-latest",
"supported_endpoints": [
"/v1/chat/completions",
@ -39378,6 +39463,7 @@
"max_output_tokens": 128000,
"mode": "chat",
"output_cost_per_token": 2e-06,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 1e-06,
"output_cost_per_token_flex": 1e-06,
"output_cost_per_token_priority": 3.6e-06,
@ -39438,6 +39524,7 @@
"max_output_tokens": 128000,
"mode": "chat",
"output_cost_per_token": 2e-06,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 1e-06,
"output_cost_per_token_flex": 1e-06,
"output_cost_per_token_priority": 3.6e-06,
@ -39496,6 +39583,7 @@
"max_output_tokens": 128000,
"mode": "chat",
"output_cost_per_token": 4e-07,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 2e-07,
"output_cost_per_token_flex": 2e-07,
"reasoning_contexts": [
@ -39553,6 +39641,7 @@
"max_output_tokens": 128000,
"mode": "chat",
"output_cost_per_token": 4e-07,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 2e-07,
"output_cost_per_token_flex": 2e-07,
"reasoning_contexts": [
@ -45472,6 +45561,7 @@
"max_output_tokens": 100000,
"mode": "chat",
"output_cost_per_token": 6e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 3e-05,
"source": "https://developers.openai.com/api/docs/pricing",
"supports_function_calling": true,
@ -45496,6 +45586,7 @@
"max_output_tokens": 100000,
"mode": "chat",
"output_cost_per_token": 6e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 3e-05,
"source": "https://developers.openai.com/api/docs/pricing",
"supports_function_calling": true,
@ -45519,6 +45610,7 @@
"max_output_tokens": 100000,
"mode": "responses",
"output_cost_per_token": 0.0006,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 0.0003,
"source": "https://developers.openai.com/api/docs/pricing",
"supported_endpoints": [
@ -45554,6 +45646,7 @@
"max_output_tokens": 100000,
"mode": "responses",
"output_cost_per_token": 0.0006,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 0.0003,
"source": "https://developers.openai.com/api/docs/pricing",
"supported_endpoints": [
@ -45593,6 +45686,7 @@
"max_output_tokens": 100000,
"mode": "chat",
"output_cost_per_token": 8e-06,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 4e-06,
"output_cost_per_token_flex": 4e-06,
"output_cost_per_token_priority": 1.4e-05,
@ -45640,6 +45734,7 @@
"max_output_tokens": 100000,
"mode": "responses",
"output_cost_per_token": 4e-05,
"fedramp_uplift_multiplier": 1.1,
"source": "https://developers.openai.com/api/docs/models/o3-deep-research",
"supported_endpoints": [
"/v1/batch",
@ -45676,6 +45771,7 @@
"max_output_tokens": 100000,
"mode": "responses",
"output_cost_per_token": 4e-05,
"fedramp_uplift_multiplier": 1.1,
"source": "https://developers.openai.com/api/docs/models/o3-deep-research",
"supported_endpoints": [
"/v1/batch",
@ -45714,6 +45810,7 @@
"max_output_tokens": 100000,
"mode": "chat",
"output_cost_per_token": 8e-06,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 4e-06,
"output_cost_per_token_flex": 4e-06,
"output_cost_per_token_priority": 1.4e-05,
@ -45765,6 +45862,7 @@
"max_output_tokens": 100000,
"mode": "chat",
"output_cost_per_token": 4.4e-06,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 2.2e-06,
"source": "https://developers.openai.com/api/docs/pricing",
"supports_function_calling": true,
@ -45787,6 +45885,7 @@
"max_output_tokens": 100000,
"mode": "chat",
"output_cost_per_token": 4.4e-06,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 2.2e-06,
"source": "https://developers.openai.com/api/docs/pricing",
"supports_function_calling": true,
@ -45808,6 +45907,7 @@
"max_output_tokens": 100000,
"mode": "responses",
"output_cost_per_token": 8e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 4e-05,
"reasoning_contexts": [
"auto",
@ -45854,6 +45954,7 @@
"max_output_tokens": 100000,
"mode": "responses",
"output_cost_per_token": 8e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 4e-05,
"reasoning_contexts": [
"auto",
@ -45905,6 +46006,7 @@
"max_output_tokens": 100000,
"mode": "chat",
"output_cost_per_token": 4.4e-06,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 2.2e-06,
"output_cost_per_token_flex": 2.2e-06,
"output_cost_per_token_priority": 8e-06,
@ -45932,6 +46034,7 @@
"max_output_tokens": 100000,
"mode": "responses",
"output_cost_per_token": 8e-06,
"fedramp_uplift_multiplier": 1.1,
"source": "https://developers.openai.com/api/docs/models/o4-mini-deep-research",
"supported_endpoints": [
"/v1/batch",
@ -45968,6 +46071,7 @@
"max_output_tokens": 100000,
"mode": "responses",
"output_cost_per_token": 8e-06,
"fedramp_uplift_multiplier": 1.1,
"source": "https://developers.openai.com/api/docs/models/o4-mini-deep-research",
"supported_endpoints": [
"/v1/batch",
@ -46006,6 +46110,7 @@
"max_output_tokens": 100000,
"mode": "chat",
"output_cost_per_token": 4.4e-06,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 2.2e-06,
"output_cost_per_token_flex": 2.2e-06,
"output_cost_per_token_priority": 8e-06,
@ -59584,6 +59689,7 @@
"max_output_tokens": 128000,
"mode": "chat",
"output_cost_per_token": 1e-05,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -59611,6 +59717,7 @@
"max_output_tokens": 128000,
"mode": "chat",
"output_cost_per_token": 1e-05,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -70793,6 +70900,7 @@
"litellm_provider": "openai",
"mode": "chat",
"output_cost_per_token": 7.5e-05,
"fedramp_uplift_multiplier": 1.1,
"source": "https://developers.openai.com/api/docs/pricing",
"supports_reasoning": true
},
@ -70802,6 +70910,7 @@
"litellm_provider": "openai",
"mode": "chat",
"output_cost_per_token": 7.5e-05,
"fedramp_uplift_multiplier": 1.1,
"source": "https://developers.openai.com/api/docs/pricing",
"supports_reasoning": true
},
@ -76155,6 +76264,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -79685,6 +79795,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {"search_context_size_high":0.01,"search_context_size_low":0.01,"search_context_size_medium":0.01},
"source": "https://developers.openai.com/api/docs/pricing",
"supported_endpoints": [
@ -82379,6 +82490,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {"search_context_size_high":0.01,"search_context_size_low":0.01,"search_context_size_medium":0.01},
"source": "https://developers.openai.com/api/docs/pricing",
"supported_endpoints": [

View file

@ -431,6 +431,9 @@ class ModelInfoBase(ProviderSpecificModelInfo, total=False):
regional_processing_uplift_multiplier_us: (
float | None
) # OpenAI US data-residency uplift multiplier applied to all token costs (e.g. 1.10 = +10%)
fedramp_uplift_multiplier: ReadOnly[
float | None
] # OpenAI FedRAMP endpoint (gov.api.openai.com) uplift multiplier applied to all token costs (e.g. 1.10 = +10%)
regional_endpoint_uplift_multiplier: ReadOnly[
float | None
] # Vertex AI non-global (regional) endpoint uplift multiplier applied to all token costs (e.g. 1.10 = +10%)
@ -4258,6 +4261,7 @@ class CustomPricingLiteLLMParams(MirroredPricingParams):
annotation_cost_per_page_batches: float | None = None
regional_processing_uplift_multiplier_eu: float | None = None
regional_processing_uplift_multiplier_us: float | None = None
fedramp_uplift_multiplier: float | None = None
regional_endpoint_uplift_multiplier: float | None = None
@classmethod
@ -5260,11 +5264,13 @@ class DataResidency(Enum):
Inferred from the OpenAI api_base host (eu.api.openai.com -> EU,
us.api.openai.com -> US). Used to apply the regional-processing
cost uplift (see ``regional_processing_uplift_multiplier_<region>``
on ModelInfo).
on ModelInfo). gov.api.openai.com maps to FEDRAMP, which applies
``fedramp_uplift_multiplier`` instead.
"""
US = "us"
EU = "eu"
FEDRAMP = "fedramp"
LLMResponseTypes = (

View file

@ -7504,6 +7504,7 @@ def get_model_info_helper(
regional_processing_uplift_multiplier_us=_model_info.get(
"regional_processing_uplift_multiplier_us", None
),
fedramp_uplift_multiplier=_model_info.get("fedramp_uplift_multiplier", None),
regional_endpoint_uplift_multiplier=_model_info.get("regional_endpoint_uplift_multiplier", None),
output_cost_per_audio_token=_model_info.get("output_cost_per_audio_token", None),
output_cost_per_character=_model_info.get("output_cost_per_character", None),

View file

@ -17799,6 +17799,7 @@
"max_output_tokens": 1024,
"mode": "chat",
"output_cost_per_token": 1.2e-05,
"fedramp_uplift_multiplier": 1.1,
"supported_endpoints": [
"/v1/responses"
],
@ -17830,6 +17831,7 @@
"max_output_tokens": 1024,
"mode": "chat",
"output_cost_per_token": 1.2e-05,
"fedramp_uplift_multiplier": 1.1,
"supported_endpoints": [
"/v1/responses"
],
@ -29263,6 +29265,7 @@
"max_output_tokens": 4096,
"mode": "chat",
"output_cost_per_token": 6e-06,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 3e-06,
"source": "https://developers.openai.com/api/docs/pricing",
"supports_system_messages": true,
@ -29278,6 +29281,7 @@
"max_output_tokens": 4096,
"mode": "chat",
"output_cost_per_token": 6e-06,
"fedramp_uplift_multiplier": 1.1,
"supports_system_messages": true,
"supports_tool_choice": true
},
@ -29291,6 +29295,7 @@
"max_output_tokens": 4096,
"mode": "chat",
"output_cost_per_token": 6e-06,
"fedramp_uplift_multiplier": 1.1,
"supports_system_messages": true,
"supports_tool_choice": true
},
@ -29304,6 +29309,7 @@
"max_output_tokens": 4096,
"mode": "chat",
"output_cost_per_token": 6e-06,
"fedramp_uplift_multiplier": 1.1,
"supports_system_messages": true,
"supports_tool_choice": true
},
@ -29317,6 +29323,7 @@
"max_output_tokens": 4096,
"mode": "chat",
"output_cost_per_token": 6e-05,
"fedramp_uplift_multiplier": 1.1,
"source": "OpenAI needs to add pricing for this ft model, will be updated when added by OpenAI. Defaulting to base model pricing",
"supports_function_calling": true,
"supports_system_messages": true,
@ -29335,6 +29342,7 @@
"max_output_tokens": 16384,
"mode": "chat",
"output_cost_per_token": 1.5e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 1.25e-05,
"source": "https://developers.openai.com/api/docs/pricing",
"supports_function_calling": true,
@ -29357,6 +29365,7 @@
"max_output_tokens": 16384,
"mode": "chat",
"output_cost_per_token": 1.5e-05,
"fedramp_uplift_multiplier": 1.1,
"supports_function_calling": true,
"supports_parallel_function_calling": true,
"supports_pdf_input": true,
@ -29378,6 +29387,7 @@
"max_output_tokens": 16384,
"mode": "chat",
"output_cost_per_token": 1.2e-06,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 6e-07,
"source": "https://developers.openai.com/api/docs/pricing",
"supports_function_calling": true,
@ -29401,6 +29411,7 @@
"max_output_tokens": 32768,
"mode": "chat",
"output_cost_per_token": 1.2e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 6e-06,
"source": "https://developers.openai.com/api/docs/pricing",
"supports_function_calling": true,
@ -29423,6 +29434,7 @@
"max_output_tokens": 32768,
"mode": "chat",
"output_cost_per_token": 3.2e-06,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 1.6e-06,
"source": "https://developers.openai.com/api/docs/pricing",
"supports_function_calling": true,
@ -29445,6 +29457,7 @@
"max_output_tokens": 32768,
"mode": "chat",
"output_cost_per_token": 8e-07,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 4e-07,
"source": "https://developers.openai.com/api/docs/pricing",
"supports_function_calling": true,
@ -29467,6 +29480,7 @@
"max_output_tokens": 100000,
"mode": "chat",
"output_cost_per_token": 1.6e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 8e-06,
"source": "https://developers.openai.com/api/docs/pricing",
"supports_function_calling": true,
@ -35122,6 +35136,7 @@
"max_output_tokens": 4096,
"mode": "chat",
"output_cost_per_token": 1.5e-06,
"fedramp_uplift_multiplier": 1.1,
"source": "https://developers.openai.com/api/docs/pricing",
"supports_function_calling": true,
"supports_prompt_caching": true,
@ -35139,6 +35154,7 @@
"max_output_tokens": 4096,
"mode": "chat",
"output_cost_per_token": 1.5e-06,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 7.5e-07,
"source": "https://developers.openai.com/api/docs/pricing",
"supports_function_calling": true,
@ -35158,6 +35174,7 @@
"max_output_tokens": 4096,
"mode": "chat",
"output_cost_per_token": 2e-06,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 2e-06,
"source": "https://developers.openai.com/api/docs/pricing",
"supports_function_calling": true,
@ -35175,6 +35192,7 @@
"max_output_tokens": 4096,
"mode": "chat",
"output_cost_per_token": 4e-06,
"fedramp_uplift_multiplier": 1.1,
"supports_prompt_caching": true,
"supports_system_messages": true,
"supports_tool_choice": true
@ -35209,6 +35227,7 @@
"max_output_tokens": 4096,
"mode": "chat",
"output_cost_per_token": 6e-05,
"fedramp_uplift_multiplier": 1.1,
"supports_function_calling": true,
"supports_prompt_caching": true,
"supports_system_messages": true,
@ -35225,6 +35244,7 @@
"max_output_tokens": 4096,
"mode": "chat",
"output_cost_per_token": 6e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 3e-05,
"source": "https://developers.openai.com/api/docs/pricing",
"supports_function_calling": true,
@ -35242,6 +35262,7 @@
"max_output_tokens": 4096,
"mode": "chat",
"output_cost_per_token": 3e-05,
"fedramp_uplift_multiplier": 1.1,
"supports_function_calling": true,
"supports_parallel_function_calling": true,
"supports_prompt_caching": true,
@ -35258,6 +35279,7 @@
"max_output_tokens": 4096,
"mode": "chat",
"output_cost_per_token": 3e-05,
"fedramp_uplift_multiplier": 1.1,
"supports_function_calling": true,
"supports_parallel_function_calling": true,
"supports_pdf_input": true,
@ -35277,6 +35299,7 @@
"max_output_tokens": 4096,
"mode": "chat",
"output_cost_per_token": 3e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 1.5e-05,
"source": "https://developers.openai.com/api/docs/pricing",
"supports_function_calling": true,
@ -35301,6 +35324,7 @@
"max_output_tokens": 32768,
"mode": "chat",
"output_cost_per_token": 8e-06,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 4e-06,
"output_cost_per_token_priority": 1.4e-05,
"search_context_cost_per_query": {
@ -35346,6 +35370,7 @@
"max_output_tokens": 32768,
"mode": "chat",
"output_cost_per_token": 8e-06,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_priority": 1.4e-05,
"output_cost_per_token_batches": 4e-06,
"search_context_cost_per_query": {
@ -35391,6 +35416,7 @@
"max_output_tokens": 32768,
"mode": "chat",
"output_cost_per_token": 1.6e-06,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 8e-07,
"output_cost_per_token_priority": 2.8e-06,
"search_context_cost_per_query": {
@ -35436,6 +35462,7 @@
"max_output_tokens": 32768,
"mode": "chat",
"output_cost_per_token": 1.6e-06,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_priority": 2.8e-06,
"output_cost_per_token_batches": 8e-07,
"search_context_cost_per_query": {
@ -35481,6 +35508,7 @@
"max_output_tokens": 32768,
"mode": "chat",
"output_cost_per_token": 4e-07,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 2e-07,
"output_cost_per_token_priority": 8e-07,
"source": "https://developers.openai.com/api/docs/pricing",
@ -35520,6 +35548,7 @@
"max_output_tokens": 32768,
"mode": "chat",
"output_cost_per_token": 4e-07,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_priority": 8e-07,
"output_cost_per_token_batches": 2e-07,
"source": "https://developers.openai.com/api/docs/pricing",
@ -35559,6 +35588,7 @@
"max_output_tokens": 16384,
"mode": "chat",
"output_cost_per_token": 1e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 5e-06,
"output_cost_per_token_priority": 1.7e-05,
"source": "https://developers.openai.com/api/docs/pricing",
@ -35583,6 +35613,7 @@
"max_output_tokens": 4096,
"mode": "chat",
"output_cost_per_token": 1.5e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 7.5e-06,
"output_cost_per_token_priority": 2.625e-05,
"source": "https://developers.openai.com/api/docs/pricing",
@ -35608,6 +35639,7 @@
"max_output_tokens": 16384,
"mode": "chat",
"output_cost_per_token": 1e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_priority": 1.7e-05,
"output_cost_per_token_batches": 5e-06,
"source": "https://developers.openai.com/api/docs/pricing",
@ -35634,6 +35666,7 @@
"max_output_tokens": 16384,
"mode": "chat",
"output_cost_per_token": 1e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_priority": 1.7e-05,
"output_cost_per_token_batches": 5e-06,
"source": "https://developers.openai.com/api/docs/pricing",
@ -35926,6 +35959,7 @@
"max_output_tokens": 16384,
"mode": "chat",
"output_cost_per_token": 6e-07,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 3e-07,
"output_cost_per_token_priority": 1e-06,
"supports_function_calling": true,
@ -35957,6 +35991,7 @@
"max_output_tokens": 16384,
"mode": "chat",
"output_cost_per_token": 6e-07,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_priority": 1e-06,
"output_cost_per_token_batches": 3e-07,
"search_context_cost_per_query": {
@ -36021,6 +36056,7 @@
"max_output_tokens": 16384,
"mode": "chat",
"output_cost_per_token": 6e-07,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 3e-07,
"search_context_cost_per_query": {
"search_context_size_high": 0.025,
@ -36049,6 +36085,7 @@
"max_output_tokens": 16384,
"mode": "chat",
"output_cost_per_token": 6e-07,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 3e-07,
"search_context_cost_per_query": {
"search_context_size_high": 0.025,
@ -36136,6 +36173,7 @@
"max_output_tokens": 16384,
"mode": "chat",
"output_cost_per_token": 1e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 5e-06,
"search_context_cost_per_query": {
"search_context_size_high": 0.025,
@ -36164,6 +36202,7 @@
"max_output_tokens": 16384,
"mode": "chat",
"output_cost_per_token": 1e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 5e-06,
"search_context_cost_per_query": {
"search_context_size_high": 0.025,
@ -36786,6 +36825,7 @@
"max_output_tokens": 128000,
"mode": "chat",
"output_cost_per_token": 1e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 5e-06,
"output_cost_per_token_flex": 5e-06,
"output_cost_per_token_priority": 2e-05,
@ -36840,6 +36880,7 @@
"max_output_tokens": 128000,
"mode": "responses",
"output_cost_per_token": 1e-05,
"fedramp_uplift_multiplier": 1.1,
"source": "https://developers.openai.com/api/docs/models/gpt-5-codex",
"supported_endpoints": [
"/v1/responses"
@ -36874,6 +36915,7 @@
"max_output_tokens": 128000,
"mode": "chat",
"output_cost_per_token": 1e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_priority": 2e-05,
"reasoning_contexts": [
"auto",
@ -36934,6 +36976,7 @@
"max_output_tokens": 128000,
"mode": "responses",
"output_cost_per_token": 2e-06,
"fedramp_uplift_multiplier": 1.1,
"source": "https://developers.openai.com/api/docs/models/gpt-5.1-codex-mini",
"supported_endpoints": [
"/v1/responses"
@ -36966,6 +37009,7 @@
"max_output_tokens": 128000,
"mode": "responses",
"output_cost_per_token": 1e-05,
"fedramp_uplift_multiplier": 1.1,
"source": "https://developers.openai.com/api/docs/models/gpt-5.1-codex-max",
"supported_endpoints": [
"/v1/responses"
@ -36999,6 +37043,7 @@
"max_output_tokens": 128000,
"mode": "responses",
"output_cost_per_token": 1e-05,
"fedramp_uplift_multiplier": 1.1,
"source": "https://developers.openai.com/api/docs/models/gpt-5.1-codex",
"supported_endpoints": [
"/v1/responses"
@ -37032,6 +37077,7 @@
"max_output_tokens": 16384,
"mode": "chat",
"output_cost_per_token": 1e-05,
"fedramp_uplift_multiplier": 1.1,
"source": "https://developers.openai.com/api/docs/models/gpt-5.1-chat-latest",
"supported_endpoints": [
"/v1/chat/completions",
@ -37069,6 +37115,7 @@
"max_output_tokens": 128000,
"mode": "chat",
"output_cost_per_token": 1e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_priority": 2e-05,
"reasoning_contexts": [
"auto",
@ -37127,6 +37174,7 @@
"max_output_tokens": 128000,
"mode": "chat",
"output_cost_per_token": 1.4e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_priority": 2.8e-05,
"reasoning_contexts": [
"auto",
@ -37186,6 +37234,7 @@
"max_output_tokens": 128000,
"mode": "responses",
"output_cost_per_token": 1.4e-05,
"fedramp_uplift_multiplier": 1.1,
"source": "https://developers.openai.com/api/docs/models/gpt-5.2-codex",
"supported_endpoints": [
"/v1/responses"
@ -37219,6 +37268,7 @@
"max_output_tokens": 16384,
"mode": "chat",
"output_cost_per_token": 1.4e-05,
"fedramp_uplift_multiplier": 1.1,
"source": "https://developers.openai.com/api/docs/models/gpt-5.2-chat-latest",
"supported_endpoints": [
"/v1/chat/completions",
@ -37253,6 +37303,7 @@
"max_output_tokens": 128000,
"mode": "chat",
"output_cost_per_token": 1.4e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_priority": 2.8e-05,
"reasoning_contexts": [
"auto",
@ -37309,6 +37360,7 @@
"max_output_tokens": 128000,
"mode": "responses",
"output_cost_per_token": 0.000168,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 8.4e-05,
"reasoning_contexts": [
"auto",
@ -37357,6 +37409,7 @@
"max_output_tokens": 128000,
"mode": "responses",
"output_cost_per_token": 0.000168,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 8.4e-05,
"reasoning_contexts": [
"auto",
@ -37463,6 +37516,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -37556,6 +37610,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -37657,6 +37712,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -37749,6 +37805,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -37839,6 +37896,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -37931,6 +37989,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -38022,6 +38081,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -38070,6 +38130,7 @@
"max_output_tokens": 128000,
"mode": "chat",
"output_cost_per_token": 7.5e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_above_272k_tokens": 0.0001125,
"supported_endpoints": [
"/v1/chat/completions",
@ -38108,6 +38169,7 @@
"max_output_tokens": 128000,
"mode": "chat",
"output_cost_per_token": 7.5e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_above_272k_tokens": 0.0001125,
"supported_endpoints": [
"/v1/chat/completions",
@ -38146,6 +38208,7 @@
"max_output_tokens": 128000,
"mode": "responses",
"output_cost_per_token": 7.5e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_above_272k_tokens": 0.0001125,
"supported_endpoints": [
"/v1/responses"
@ -38183,6 +38246,7 @@
"max_output_tokens": 128000,
"mode": "chat",
"output_cost_per_token": 2e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_above_272k_tokens": 3e-05,
"supported_endpoints": [
"/v1/chat/completions",
@ -38221,6 +38285,7 @@
"max_output_tokens": 128000,
"mode": "responses",
"output_cost_per_token": 2e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_above_272k_tokens": 3e-05,
"supported_endpoints": [
"/v1/responses"
@ -38254,6 +38319,7 @@
"max_output_tokens": 128000,
"mode": "chat",
"output_cost_per_token": 3e-05,
"fedramp_uplift_multiplier": 1.1,
"reasoning_effort_levels": [
"medium"
],
@ -38322,6 +38388,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -38392,6 +38459,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -38454,6 +38522,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -38513,6 +38582,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -38580,6 +38650,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"supported_endpoints": [
"/v1/chat/completions",
"/v1/batch",
@ -38645,6 +38716,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"supported_endpoints": [
"/v1/chat/completions",
"/v1/batch",
@ -38702,6 +38774,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -38762,6 +38835,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -38824,6 +38898,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -38886,6 +38961,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -38945,6 +39021,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -39009,6 +39086,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -39054,6 +39132,7 @@
"max_output_tokens": 272000,
"mode": "responses",
"output_cost_per_token": 0.00012,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 6e-05,
"reasoning_contexts": [
"auto",
@ -39105,6 +39184,7 @@
"max_output_tokens": 272000,
"mode": "responses",
"output_cost_per_token": 0.00012,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 6e-05,
"reasoning_contexts": [
"auto",
@ -39162,6 +39242,7 @@
"max_output_tokens": 128000,
"mode": "chat",
"output_cost_per_token": 1e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 5e-06,
"output_cost_per_token_flex": 5e-06,
"output_cost_per_token_priority": 2e-05,
@ -39216,6 +39297,7 @@
"max_output_tokens": 16384,
"mode": "chat",
"output_cost_per_token": 1e-05,
"fedramp_uplift_multiplier": 1.1,
"supported_endpoints": [
"/v1/chat/completions",
"/v1/batch",
@ -39253,6 +39335,7 @@
"max_output_tokens": 16384,
"mode": "chat",
"output_cost_per_token": 1e-05,
"fedramp_uplift_multiplier": 1.1,
"source": "https://developers.openai.com/api/docs/models/gpt-5-chat-latest",
"supported_endpoints": [
"/v1/chat/completions",
@ -39285,6 +39368,7 @@
"max_output_tokens": 128000,
"mode": "responses",
"output_cost_per_token": 1.4e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_priority": 2.8e-05,
"reasoning_contexts": [
"auto",
@ -39339,6 +39423,7 @@
"max_output_tokens": 16384,
"mode": "chat",
"output_cost_per_token": 1.4e-05,
"fedramp_uplift_multiplier": 1.1,
"source": "https://developers.openai.com/api/docs/models/gpt-5.3-chat-latest",
"supported_endpoints": [
"/v1/chat/completions",
@ -39378,6 +39463,7 @@
"max_output_tokens": 128000,
"mode": "chat",
"output_cost_per_token": 2e-06,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 1e-06,
"output_cost_per_token_flex": 1e-06,
"output_cost_per_token_priority": 3.6e-06,
@ -39438,6 +39524,7 @@
"max_output_tokens": 128000,
"mode": "chat",
"output_cost_per_token": 2e-06,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 1e-06,
"output_cost_per_token_flex": 1e-06,
"output_cost_per_token_priority": 3.6e-06,
@ -39496,6 +39583,7 @@
"max_output_tokens": 128000,
"mode": "chat",
"output_cost_per_token": 4e-07,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 2e-07,
"output_cost_per_token_flex": 2e-07,
"reasoning_contexts": [
@ -39553,6 +39641,7 @@
"max_output_tokens": 128000,
"mode": "chat",
"output_cost_per_token": 4e-07,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 2e-07,
"output_cost_per_token_flex": 2e-07,
"reasoning_contexts": [
@ -45472,6 +45561,7 @@
"max_output_tokens": 100000,
"mode": "chat",
"output_cost_per_token": 6e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 3e-05,
"source": "https://developers.openai.com/api/docs/pricing",
"supports_function_calling": true,
@ -45496,6 +45586,7 @@
"max_output_tokens": 100000,
"mode": "chat",
"output_cost_per_token": 6e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 3e-05,
"source": "https://developers.openai.com/api/docs/pricing",
"supports_function_calling": true,
@ -45519,6 +45610,7 @@
"max_output_tokens": 100000,
"mode": "responses",
"output_cost_per_token": 0.0006,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 0.0003,
"source": "https://developers.openai.com/api/docs/pricing",
"supported_endpoints": [
@ -45554,6 +45646,7 @@
"max_output_tokens": 100000,
"mode": "responses",
"output_cost_per_token": 0.0006,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 0.0003,
"source": "https://developers.openai.com/api/docs/pricing",
"supported_endpoints": [
@ -45593,6 +45686,7 @@
"max_output_tokens": 100000,
"mode": "chat",
"output_cost_per_token": 8e-06,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 4e-06,
"output_cost_per_token_flex": 4e-06,
"output_cost_per_token_priority": 1.4e-05,
@ -45640,6 +45734,7 @@
"max_output_tokens": 100000,
"mode": "responses",
"output_cost_per_token": 4e-05,
"fedramp_uplift_multiplier": 1.1,
"source": "https://developers.openai.com/api/docs/models/o3-deep-research",
"supported_endpoints": [
"/v1/batch",
@ -45676,6 +45771,7 @@
"max_output_tokens": 100000,
"mode": "responses",
"output_cost_per_token": 4e-05,
"fedramp_uplift_multiplier": 1.1,
"source": "https://developers.openai.com/api/docs/models/o3-deep-research",
"supported_endpoints": [
"/v1/batch",
@ -45714,6 +45810,7 @@
"max_output_tokens": 100000,
"mode": "chat",
"output_cost_per_token": 8e-06,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 4e-06,
"output_cost_per_token_flex": 4e-06,
"output_cost_per_token_priority": 1.4e-05,
@ -45765,6 +45862,7 @@
"max_output_tokens": 100000,
"mode": "chat",
"output_cost_per_token": 4.4e-06,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 2.2e-06,
"source": "https://developers.openai.com/api/docs/pricing",
"supports_function_calling": true,
@ -45787,6 +45885,7 @@
"max_output_tokens": 100000,
"mode": "chat",
"output_cost_per_token": 4.4e-06,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 2.2e-06,
"source": "https://developers.openai.com/api/docs/pricing",
"supports_function_calling": true,
@ -45808,6 +45907,7 @@
"max_output_tokens": 100000,
"mode": "responses",
"output_cost_per_token": 8e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 4e-05,
"reasoning_contexts": [
"auto",
@ -45854,6 +45954,7 @@
"max_output_tokens": 100000,
"mode": "responses",
"output_cost_per_token": 8e-05,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 4e-05,
"reasoning_contexts": [
"auto",
@ -45905,6 +46006,7 @@
"max_output_tokens": 100000,
"mode": "chat",
"output_cost_per_token": 4.4e-06,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 2.2e-06,
"output_cost_per_token_flex": 2.2e-06,
"output_cost_per_token_priority": 8e-06,
@ -45932,6 +46034,7 @@
"max_output_tokens": 100000,
"mode": "responses",
"output_cost_per_token": 8e-06,
"fedramp_uplift_multiplier": 1.1,
"source": "https://developers.openai.com/api/docs/models/o4-mini-deep-research",
"supported_endpoints": [
"/v1/batch",
@ -45968,6 +46071,7 @@
"max_output_tokens": 100000,
"mode": "responses",
"output_cost_per_token": 8e-06,
"fedramp_uplift_multiplier": 1.1,
"source": "https://developers.openai.com/api/docs/models/o4-mini-deep-research",
"supported_endpoints": [
"/v1/batch",
@ -46006,6 +46110,7 @@
"max_output_tokens": 100000,
"mode": "chat",
"output_cost_per_token": 4.4e-06,
"fedramp_uplift_multiplier": 1.1,
"output_cost_per_token_batches": 2.2e-06,
"output_cost_per_token_flex": 2.2e-06,
"output_cost_per_token_priority": 8e-06,
@ -59584,6 +59689,7 @@
"max_output_tokens": 128000,
"mode": "chat",
"output_cost_per_token": 1e-05,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -59611,6 +59717,7 @@
"max_output_tokens": 128000,
"mode": "chat",
"output_cost_per_token": 1e-05,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -70793,6 +70900,7 @@
"litellm_provider": "openai",
"mode": "chat",
"output_cost_per_token": 7.5e-05,
"fedramp_uplift_multiplier": 1.1,
"source": "https://developers.openai.com/api/docs/pricing",
"supports_reasoning": true
},
@ -70802,6 +70910,7 @@
"litellm_provider": "openai",
"mode": "chat",
"output_cost_per_token": 7.5e-05,
"fedramp_uplift_multiplier": 1.1,
"source": "https://developers.openai.com/api/docs/pricing",
"supports_reasoning": true
},
@ -76155,6 +76264,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {
"search_context_size_high": 0.01,
"search_context_size_low": 0.01,
@ -79685,6 +79795,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {"search_context_size_high":0.01,"search_context_size_low":0.01,"search_context_size_medium":0.01},
"source": "https://developers.openai.com/api/docs/pricing",
"supported_endpoints": [
@ -82379,6 +82490,7 @@
],
"regional_processing_uplift_multiplier_eu": 1.1,
"regional_processing_uplift_multiplier_us": 1.1,
"fedramp_uplift_multiplier": 1.1,
"search_context_cost_per_query": {"search_context_size_high":0.01,"search_context_size_low":0.01,"search_context_size_medium":0.01},
"source": "https://developers.openai.com/api/docs/pricing",
"supported_endpoints": [

View file

@ -2766,9 +2766,9 @@ def test_aggregate_batch_cost_uses_custom_model_info():
assert result.cost == pytest.approx(expected), f"Expected total cost {expected}, got {result.cost}"
@pytest.mark.usefixtures("_vcr_outcome_gate", "setup_and_teardown")
@pytest.mark.parametrize("data_residency", ["eu", "us"])
@pytest.mark.parametrize("data_residency", ["eu", "us", "fedramp"])
def test_batch_cost_calculator_applies_data_residency_uplift(data_residency, monkeypatch):
"""batch_cost_calculator should apply the regional uplift multiplier when
"""batch_cost_calculator should apply the regional or FedRAMP uplift multiplier when
data_residency is set and the model carries a configured multiplier."""
monkeypatch.setenv("LITELLM_LOCAL_MODEL_COST_MAP", "True")
prev_model_cost = litellm.model_cost

View file

@ -33,6 +33,7 @@ from litellm.types.llms.base import CachedTokensDetails
from litellm.types.utils import (
CacheCreationTokenDetails,
CompletionTokensDetailsWrapper,
DataResidency,
ImageObject,
ImageResponse,
ImageUsage,
@ -2579,6 +2580,51 @@ def test_data_residency_applies_uplift(data_residency, model, _local_model_cost_
assert regional[1] == pytest.approx(base[1] * 1.10, rel=1e-9)
def test_fedramp_data_residency_applies_configured_uplift() -> None:
usage: Final = Usage(prompt_tokens=1000, completion_tokens=500, total_tokens=1500)
model_info: Final[ModelInfo] = {
"key": "fedramp-fixture",
"max_tokens": None,
"max_input_tokens": None,
"max_output_tokens": None,
"input_cost_per_token": 1e-6,
"output_cost_per_token": 2e-6,
"litellm_provider": "openai",
"mode": "chat",
"supported_openai_params": None,
"regional_processing_uplift_multiplier_us": 1.5,
"fedramp_uplift_multiplier": 1.1,
}
base: Final = generic_cost_per_token(
model="fedramp-fixture",
usage=usage,
custom_llm_provider="openai",
model_info=model_info,
)
fedramp: Final = generic_cost_per_token(
model="fedramp-fixture",
usage=usage,
custom_llm_provider="openai",
data_residency=DataResidency.FEDRAMP.value,
model_info=model_info,
)
us: Final = generic_cost_per_token(
model="fedramp-fixture",
usage=usage,
custom_llm_provider="openai",
data_residency=DataResidency.US.value,
model_info=model_info,
)
assert sum(base) > 0
assert fedramp[0] == pytest.approx(base[0] * 1.1)
assert fedramp[1] == pytest.approx(base[1] * 1.1)
assert us[0] == pytest.approx(base[0] * 1.5)
assert us[1] == pytest.approx(base[1] * 1.5)
@pytest.mark.parametrize("model", ["gpt-5", "gpt-5-mini", "gpt-5-nano", "gpt-5-pro", "gpt-4o", "gpt-4.1"])
def test_data_residency_no_uplift_for_pre_march_2026_models(model, _local_model_cost_map):
"""Models released before 2026-03-05 must not have the regional uplift."""
@ -2719,6 +2765,22 @@ def test_vertex_uplift_invalid_multiplier_defaults_to_one():
)
@pytest.mark.parametrize(
"model_info, data_residency",
[
({"fedramp_uplift_multiplier": "not-a-number"}, "fedramp"),
({}, "fedramp"),
({"fedramp_uplift_multiplier": 1.1}, "us"),
({"fedramp_uplift_multiplier": 1.1}, None),
],
)
def test_fedramp_uplift_defaults_to_one(model_info: ModelInfo, data_residency: str | None):
"""A malformed or missing FedRAMP multiplier, or a non-FedRAMP host, bills base pricing and never raises."""
from litellm.litellm_core_utils.llm_cost_calc.utils import get_fedramp_uplift_multiplier
assert get_fedramp_uplift_multiplier(model_info, data_residency) == 1.0
def test_service_tier_suffixes_constant_in_sync_with_enum():
from litellm.litellm_core_utils.llm_cost_calc.utils import _SERVICE_TIER_SUFFIXES
from litellm.types.utils import ServiceTier

View file

@ -340,6 +340,13 @@ class TestGetLitellmParamsDataResidency:
)
assert result["data_residency"] == "us"
def test_fedramp_host_resolves_to_fedramp(self):
result = get_litellm_params(
custom_llm_provider="openai",
api_base="https://gov.api.openai.com/v1",
)
assert result["data_residency"] == "fedramp"
def test_global_host_resolves_to_none(self):
result = get_litellm_params(
custom_llm_provider="openai",

View file

@ -112,6 +112,28 @@ def test_responses_us_api_base_sets_data_residency():
assert logging_obj.litellm_params.get("data_residency") == "us"
def test_responses_fedramp_api_base_sets_data_residency():
mock_client = _make_mock_http_client(_make_responses_api_response_body())
captured, init_spy = _capture_logging_obj()
with (
patch(
"litellm.llms.custom_httpx.llm_http_handler.get_httpx_client",
return_value=mock_client,
),
patch.object(litellm.Logging, "__init__", init_spy),
):
litellm.responses(
model="gpt-4.1",
input="hi",
api_base="https://gov.api.openai.com/v1",
api_key="test-key",
)
logging_obj = captured["logging_obj"]
assert logging_obj.litellm_params.get("data_residency") == "fedramp"
def test_responses_global_api_base_leaves_data_residency_none():
mock_client = _make_mock_http_client(_make_responses_api_response_body())
captured, init_spy = _capture_logging_obj()

View file

@ -2,7 +2,9 @@
import pytest
import litellm
from litellm.llms.openai.data_residency import infer_openai_data_residency
from litellm.types.utils import DataResidency
@pytest.mark.parametrize(
@ -13,6 +15,8 @@ from litellm.llms.openai.data_residency import infer_openai_data_residency
("https://us.api.openai.com/v1", "us"),
("https://us.api.openai.com", "us"),
("https://EU.api.openai.com/v1", "eu"),
("https://gov.api.openai.com/v1", DataResidency.FEDRAMP.value),
("https://GOV.api.openai.com/v1", DataResidency.FEDRAMP.value),
("https://api.openai.com/v1", None),
("https://api.openai.com", None),
("https://example.com/v1", None),
@ -28,7 +32,26 @@ def test_infer_openai_data_residency(api_base, expected):
@pytest.mark.parametrize("custom_llm_provider", [None, "anthropic", "azure", "bedrock"])
def test_infer_openai_data_residency_non_openai_provider(custom_llm_provider):
assert (
infer_openai_data_residency(custom_llm_provider, "https://eu.api.openai.com/v1")
is None
)
assert infer_openai_data_residency(custom_llm_provider, "https://eu.api.openai.com/v1") is None
@pytest.mark.parametrize("env_var", ["OPENAI_BASE_URL", "OPENAI_API_BASE"])
def test_infer_openai_data_residency_from_env_when_api_base_unset(monkeypatch, env_var):
monkeypatch.setattr(litellm, "api_base", None)
monkeypatch.delenv("OPENAI_BASE_URL", raising=False)
monkeypatch.delenv("OPENAI_API_BASE", raising=False)
monkeypatch.setenv(env_var, "https://gov.api.openai.com/v1")
assert infer_openai_data_residency("openai", None) == DataResidency.FEDRAMP.value
def test_infer_openai_data_residency_explicit_api_base_wins_over_env(monkeypatch):
monkeypatch.setattr(litellm, "api_base", None)
monkeypatch.setenv("OPENAI_BASE_URL", "https://gov.api.openai.com/v1")
assert infer_openai_data_residency("openai", "https://eu.api.openai.com/v1") == "eu"
def test_infer_openai_data_residency_from_litellm_api_base(monkeypatch):
monkeypatch.delenv("OPENAI_BASE_URL", raising=False)
monkeypatch.delenv("OPENAI_API_BASE", raising=False)
monkeypatch.setattr(litellm, "api_base", "https://us.api.openai.com/v1")
assert infer_openai_data_residency("openai", None) == "us"

View file

@ -11547,3 +11547,28 @@ async def test_bedrock_strict_tools_limit_rejection_is_not_sent_again_when_no_to
assert error is not None and "Too many strict tools" in str(error)
assert len(sent) == 1
def test_supplied_openai_client_base_url_decides_data_residency(monkeypatch: pytest.MonkeyPatch) -> None:
"""A caller-supplied OpenAI client sends the request to its own base_url, so billing must use that
host and not an env-configured FedRAMP or regional base."""
import openai
monkeypatch.setattr(litellm, "api_base", None)
monkeypatch.setenv("OPENAI_BASE_URL", "https://gov.api.openai.com/v1")
captured = {}
real_init = litellm.Logging.__init__
def init_spy(self, *args, **kwargs):
real_init(self, *args, **kwargs)
captured["logging_obj"] = self
with patch.object(litellm.Logging, "__init__", init_spy):
litellm.completion(
model="gpt-4.1",
messages=[{"role": "user", "content": "hi"}],
client=openai.OpenAI(api_key="test-key", base_url="https://api.openai.com/v1"),
mock_response="ok",
)
assert captured["logging_obj"].litellm_params.get("data_residency") is None

View file

@ -1079,6 +1079,7 @@ _COST_MAP_ROW_SCHEMA: Final = {
"regional_endpoint_uplift_multiplier": {"type": "number"},
"regional_processing_uplift_multiplier_eu": {"type": "number"},
"regional_processing_uplift_multiplier_us": {"type": "number"},
"fedramp_uplift_multiplier": {"type": "number"},
"input_cost_per_pixel": {"type": "number"},
"input_cost_per_query": {"type": "number"},
"input_cost_per_request": {"type": "number"},

View file

@ -35973,6 +35973,8 @@ export interface components {
drop_params?: boolean | string | null;
/** Explicit Cache Read Input Token Cost */
explicit_cache_read_input_token_cost?: number | null;
/** Fedramp Uplift Multiplier */
fedramp_uplift_multiplier?: number | null;
/**
* Fireworks Forward User Id
* @description Send the LiteLLM user id of the calling key as the `user` field on Fireworks AI chat, responses and messages requests.
@ -51677,6 +51679,8 @@ export interface components {
drop_params?: boolean | string | null;
/** Explicit Cache Read Input Token Cost */
explicit_cache_read_input_token_cost?: number | null;
/** Fedramp Uplift Multiplier */
fedramp_uplift_multiplier?: number | null;
/**
* Fireworks Forward User Id
* @description Send the LiteLLM user id of the calling key as the `user` field on Fireworks AI chat, responses and messages requests.