Why two encodings exist
cl100k_base is the older vocabulary, used by GPT-4 and GPT-3.5. o200k_base is the current one, with roughly twice the entries, used from GPT-4o onwards.
The larger vocabulary produces fewer tokens for the same text. The gain is largest on non-English content and on code, which was a deliberate goal rather than a side effect.
Where the difference bites
A cost projection built on one encoding does not transfer to a model using another, and the error consistently flatters the older model on a per-token comparison.
The same caution applies across providers, only more so: Anthropic has stated that the tokenizer introduced with Claude 4.7 produces roughly 30% more tokens for the same input than its predecessor.