From 5036bd7adb6b169169f928c5c199559e13f7f6e6 Mon Sep 17 00:00:00 2001 From: Michael Matloka Date: Thu, 7 Aug 2025 22:33:19 +0200 Subject: [PATCH] fix(openai): don't crash get_num_tokens_from_messages on gpt-5 (#32451) --- .../openai/langchain_openai/chat_models/base.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/libs/partners/openai/langchain_openai/chat_models/base.py b/libs/partners/openai/langchain_openai/chat_models/base.py index 5d0b480ce18..eb1fd4506e3 100644 --- a/libs/partners/openai/langchain_openai/chat_models/base.py +++ b/libs/partners/openai/langchain_openai/chat_models/base.py @@ -1447,8 +1447,10 @@ class BaseChatOpenAI(BaseChatModel): encoding = tiktoken.encoding_for_model(model) except KeyError: encoder = "cl100k_base" - if self.model_name.startswith("gpt-4o") or self.model_name.startswith( - "gpt-4.1" + if ( + self.model_name.startswith("gpt-4o") + or self.model_name.startswith("gpt-4.1") + or self.model_name.startswith("gpt-5") ): encoder = "o200k_base" encoding = tiktoken.get_encoding(encoder) @@ -1499,7 +1501,11 @@ class BaseChatOpenAI(BaseChatModel): tokens_per_message = 4 # if there's a name, the role is omitted tokens_per_name = -1 - elif model.startswith("gpt-3.5-turbo") or model.startswith("gpt-4"): + elif ( + model.startswith("gpt-3.5-turbo") + or model.startswith("gpt-4") + or model.startswith("gpt-5") + ): tokens_per_message = 3 tokens_per_name = 1 else: