Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions tests/test_misc.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,12 @@ def test_encoding_for_model():
assert enc.name == "o200k_base"
enc = tiktoken.encoding_for_model("gpt-oss-120b")
assert enc.name == "o200k_harmony"
# Regression for #464: a dotted minor like 'gpt-5.1' does not start
# with the 'gpt-5-' prefix, so it needs its own entry / prefix.
enc = tiktoken.encoding_for_model("gpt-5.1")
assert enc.name == "o200k_base"
enc = tiktoken.encoding_for_model("gpt-5.1-2025-11")
assert enc.name == "o200k_base"


def test_optional_blobfile_dependency():
Expand Down
7 changes: 7 additions & 0 deletions tiktoken/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,12 @@
"o3-": "o200k_base",
"o4-mini-": "o200k_base",
# chat
# NB: list 'gpt-5.1-' before 'gpt-5-' so that a dotted minor like
# 'gpt-5.1-2025-11' is matched by its own prefix rather than failing the
# 'gpt-5-' check ('gpt-5.1-' does not start with 'gpt-5-'). For dict
# iteration order this is purely cosmetic — startswith() is correct either
# way — but it makes the intent explicit.
"gpt-5.1-": "o200k_base",
"gpt-5-": "o200k_base",
"gpt-4.5-": "o200k_base",
"gpt-4.1-": "o200k_base",
Expand All @@ -32,6 +38,7 @@
"o3": "o200k_base",
"o4-mini": "o200k_base",
# chat
"gpt-5.1": "o200k_base",
"gpt-5": "o200k_base",
"gpt-4.1": "o200k_base",
"gpt-4o": "o200k_base",
Expand Down