mirror of
https://github.com/langchain-ai/langchain.git
synced 2026-10-05 17:35:28 +03:00
fix(openai): support o-series models in get_num_tokens_from_messages (#38710)
This commit is contained in:
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
|
||||
|
||||
|
||||
Reference in new issue
Block a user