fix(openai): support o-series models in get_num_tokens_from_messages (#38710)

This commit is contained in:
Anay Garodia authored and GitHub committed 2026-08-17 09:15:44 -04:00
1 parent 82fd04260c
commit 313bc541c0
2 files changed
+21 -1

No files matched your search

@@ -2158,7 +2158,7 @@ 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", "gpt-4", "gpt-5")):
elif model.startswith(("gpt-3.5-turbo", "gpt-4", "gpt-5", "o1", "o3", "o4")):
tokens_per_message = 3
tokens_per_name = 1
else:
@@ -1099,6 +1099,26 @@ def test_get_num_tokens_from_messages() -> None:
assert actual
@pytest.mark.parametrize(
"model", ["o1", "o1-preview", "o1-mini", "o3", "o3-mini", "o4-mini"]
)
def test_get_num_tokens_from_messages_o_series(model: str) -> None:
"""o-series models use the same message token format as gpt-4/gpt-5.
Regression test: these raised NotImplementedError.
"""
llm = ChatOpenAI(model=model)
messages = [
SystemMessage("you're a good assistant"),
HumanMessage("how are you"),
]
actual = llm.get_num_tokens_from_messages(messages)
expected = ChatOpenAI(model=OPENAI_TEST_MODEL).get_num_tokens_from_messages(
messages
)
assert actual == expected
class Foo(BaseModel):
bar: int