diff --git a/src/lib.rs b/src/lib.rs index ea54eac8..0315600e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -633,12 +633,14 @@ impl CoreBPE { let decoder: HashMap> = encoder.iter().map(|(k, v)| (*v, k.clone())).collect(); - assert!( - encoder.len() == decoder.len(), - "Encoder and decoder must be of equal length. Encoder length: {}, decoder length: {}.\nMaybe you had duplicate token indices in your encoder?", - encoder.len(), - decoder.len() - ); + if encoder.len() != decoder.len() { + return Err(format!( + "Encoder and decoder must be of equal length. Encoder length: {}, decoder length: {}.\nMaybe you had duplicate token indices in your encoder?", + encoder.len(), + decoder.len() + ) + .into()); + } let special_tokens_decoder: HashMap> = special_tokens_encoder .iter() diff --git a/tests/test_duplicate_ranks.py b/tests/test_duplicate_ranks.py new file mode 100644 index 00000000..306e8171 --- /dev/null +++ b/tests/test_duplicate_ranks.py @@ -0,0 +1,13 @@ +import pytest + +import tiktoken + + +def test_duplicate_mergeable_ranks_raise_value_error(): + with pytest.raises(ValueError): + tiktoken.Encoding( + name="duplicate_ranks", + pat_str=r".", + mergeable_ranks={b"a": 0, b"b": 0, b"c": 1}, + special_tokens={}, + )