From 895acb9f4e7bdc0cd4994b6efa70a26b5f845e22 Mon Sep 17 00:00:00 2001 From: Kevin Lin Date: Tue, 24 Feb 2026 14:56:56 -0800 Subject: [PATCH] feat(core): add gpt-5.3-codex model support (#9628) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(core): add gpt-5.3-codex model support Add OpenAI gpt-5.3-codex model: context window overrides, model pricing and capabilities, none-reasoning-effort support, and test config. 🐾 Generated with [Letta Code](https://letta.com) Co-Authored-By: Letta * just stage-api && just publish-api --------- Co-authored-by: Letta --- fern/openapi.json | 12 ++++----- letta/constants.py | 2 ++ letta/llm_api/openai_client.py | 2 +- .../model_prices_and_context_window.json | 26 +++++++++++++++++++ .../openai-gpt-5.3-codex.json | 8 ++++++ 5 files changed, 43 insertions(+), 7 deletions(-) create mode 100644 tests/configs/llm_model_configs/openai-gpt-5.3-codex.json diff --git a/fern/openapi.json b/fern/openapi.json index e51cc200..90182718 100644 --- a/fern/openapi.json +++ b/fern/openapi.json @@ -29104,7 +29104,7 @@ "type": "integer", "title": "Limit", "description": "Character limit of the block.", - "default": 20000 + "default": 100000 }, "project_id": { "anyOf": [ @@ -29317,7 +29317,7 @@ "type": "integer", "title": "Limit", "description": "Character limit of the block.", - "default": 20000 + "default": 100000 }, "project_id": { "anyOf": [ @@ -29535,7 +29535,7 @@ "type": "integer", "title": "Limit", "description": "Character limit of the block.", - "default": 20000 + "default": 100000 }, "project_id": { "anyOf": [ @@ -33178,7 +33178,7 @@ "type": "integer", "title": "Limit", "description": "Character limit of the block.", - "default": 20000 + "default": 100000 }, "project_id": { "anyOf": [ @@ -34592,7 +34592,7 @@ "type": "integer", "title": "Limit", "description": "Character limit of the block.", - "default": 20000 + "default": 100000 }, "project_id": { "anyOf": [ @@ -37733,7 +37733,7 @@ "type": "integer", "title": "Limit", "description": "Character limit of the block.", - "default": 20000 + "default": 100000 }, "project_id": { "anyOf": [ diff --git a/letta/constants.py b/letta/constants.py index 0abe94a8..0276ea1a 100644 --- a/letta/constants.py +++ b/letta/constants.py @@ -278,6 +278,8 @@ LLM_MAX_CONTEXT_WINDOW = { "gpt-5.2-pro": 272000, "gpt-5.2-pro-2025-12-11": 272000, "gpt-5.2-codex": 272000, + # gpt-5.3 + "gpt-5.3-codex": 272000, # reasoners "o1": 200000, # "o1-pro": 200000, # responses API only diff --git a/letta/llm_api/openai_client.py b/letta/llm_api/openai_client.py index 0367072f..8eabfa27 100644 --- a/letta/llm_api/openai_client.py +++ b/letta/llm_api/openai_client.py @@ -88,7 +88,7 @@ def supports_none_reasoning_effort(model: str) -> bool: Currently, GPT-5.1 and GPT-5.2 models support the 'none' reasoning effort level. """ - return model.startswith("gpt-5.1") or model.startswith("gpt-5.2") + return model.startswith("gpt-5.1") or model.startswith("gpt-5.2") or model.startswith("gpt-5.3") def is_openai_5_model(model: str) -> bool: diff --git a/letta/model_specs/model_prices_and_context_window.json b/letta/model_specs/model_prices_and_context_window.json index 2ce2e366..e932d734 100644 --- a/letta/model_specs/model_prices_and_context_window.json +++ b/letta/model_specs/model_prices_and_context_window.json @@ -17295,6 +17295,32 @@ "supports_tool_choice": true, "supports_vision": true }, + "gpt-5.3-codex": { + "cache_read_input_token_cost": 1.75e-7, + "cache_read_input_token_cost_priority": 3.5e-7, + "input_cost_per_token": 1.75e-6, + "input_cost_per_token_priority": 3.5e-6, + "litellm_provider": "openai", + "max_input_tokens": 272000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "responses", + "output_cost_per_token": 1.4e-5, + "output_cost_per_token_priority": 2.8e-5, + "supported_endpoints": ["/v1/responses"], + "supported_modalities": ["text", "image"], + "supported_output_modalities": ["text"], + "supports_function_calling": true, + "supports_native_streaming": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": false, + "supports_tool_choice": true, + "supports_vision": true + }, "gpt-5-mini": { "cache_read_input_token_cost": 2.5e-8, "cache_read_input_token_cost_flex": 1.25e-8, diff --git a/tests/configs/llm_model_configs/openai-gpt-5.3-codex.json b/tests/configs/llm_model_configs/openai-gpt-5.3-codex.json new file mode 100644 index 00000000..3ade6e2f --- /dev/null +++ b/tests/configs/llm_model_configs/openai-gpt-5.3-codex.json @@ -0,0 +1,8 @@ +{ + "context_window": 32000, + "model": "gpt-5.3-codex", + "model_endpoint_type": "openai", + "model_endpoint": "https://api.openai.com/v1", + "model_wrapper": null, + "reasoning_effort": "low" +}