Skip to content

Commit fb2ddcb

Browse files
committed
fix: api
1 parent 071cb37 commit fb2ddcb

6 files changed

Lines changed: 19 additions & 22 deletions

File tree

tokenizers/tk-encode/src/models/bpe/model.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -856,8 +856,8 @@ impl pipeline::Model for PipelineBPE {
856856
}
857857
}
858858

859-
fn id_to_token_bytes(&self, id: &PipelineToken) -> Option<&[u8]> {
860-
self.vocab.id_to_token_bytes(id.id)
859+
fn id_to_token_bytes(&self, id: u32) -> Option<&[u8]> {
860+
self.vocab.id_to_token_bytes(id)
861861
}
862862
}
863863

tokenizers/tk-encode/src/models/unigram/model.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -550,8 +550,8 @@ impl pipeline::Model for Unigram {
550550
Ok(())
551551
}
552552

553-
fn id_to_token_bytes(&self, id: &PipelineToken) -> Option<&[u8]> {
554-
self.token_to_ids.id_to_token_bytes(id.id)
553+
fn id_to_token_bytes(&self, id: u32) -> Option<&[u8]> {
554+
self.token_to_ids.id_to_token_bytes(id)
555555
}
556556
}
557557

tokenizers/tk-encode/src/models/wordlevel/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -229,8 +229,8 @@ impl pipeline::Model for WordLevel {
229229
Ok(())
230230
}
231231

232-
fn id_to_token_bytes(&self, id: &PipelineToken) -> Option<&[u8]> {
233-
self.vocab_r.get(&id.id).map(|s| s.as_bytes())
232+
fn id_to_token_bytes(&self, id: u32) -> Option<&[u8]> {
233+
self.vocab_r.get(&id).map(|s| s.as_bytes())
234234
}
235235
}
236236

tokenizers/tk-encode/src/models/wordpiece/mod.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -435,8 +435,8 @@ impl pipeline::Model for PipelineWordPiece {
435435
Ok(())
436436
}
437437

438-
fn id_to_token_bytes(&self, id: &PipelineToken) -> Option<&[u8]> {
439-
let i = id.id as usize;
438+
fn id_to_token_bytes(&self, id: u32) -> Option<&[u8]> {
439+
let i = id as usize;
440440
let start = *self.vocab_r_offsets.get(i)? as usize;
441441
let end = *self.vocab_r_offsets.get(i + 1)? as usize;
442442
Some(&self.vocab_r[start..end])
@@ -454,7 +454,7 @@ mod tests {
454454

455455
#[test]
456456
fn id_to_token_bytes_round_trips() {
457-
use crate::pipeline::{Model as _, PipelineToken};
457+
use crate::pipeline::Model as _;
458458

459459
let vocab: Vocab = [
460460
("[UNK]".to_string(), 0),
@@ -467,9 +467,9 @@ mod tests {
467467
let model = PipelineWordPiece::try_from(wp).unwrap();
468468

469469
for (token, id) in [("[UNK]", 0), ("hello", 1), ("##world", 2)] {
470-
let bytes = model.id_to_token_bytes(&PipelineToken { id }).unwrap();
470+
let bytes = model.id_to_token_bytes(id).unwrap();
471471
assert_eq!(bytes, token.as_bytes());
472472
}
473-
assert_eq!(model.id_to_token_bytes(&PipelineToken { id: 3 }), None);
473+
assert_eq!(model.id_to_token_bytes(3), None);
474474
}
475475
}

tokenizers/tk-encode/src/tokenizer/pipeline.rs

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -417,18 +417,16 @@ impl PipelineTokenizer {
417417

418418
/// Decode token ids back to a `String`.
419419
///
420-
/// Not implemented yet — the pipeline decode path is being built. It fails
421-
/// loud (rather than returning a plausible-but-wrong string) so the oracle
422-
/// test and the comparative benchmark report decode as *pending* instead of
423-
/// silently validating garbage. Implementing this flips the ignored
424-
/// `pipeline_decode_oracle` test on and lights up the decode charts.
425-
pub fn decode(&self, ids: &[PipelineToken], _skip_special_tokens: bool) -> Result<String> {
420+
/// Incomplete: it concatenates raw token bytes only. No decoder, no added-
421+
/// vocab lookup, no `skip_special_tokens` — so the `pipeline_decode_oracle`
422+
/// test fails on purpose until those land.
423+
pub fn decode(&self, ids: &[u32], _skip_special_tokens: bool) -> Result<String> {
426424
let mut output = Vec::with_capacity(ids.len());
427-
for id in ids {
425+
for &id in ids {
428426
let slice = self
429427
.model
430428
.id_to_token_bytes(id)
431-
.ok_or::<crate::Error>(format!("Invalid token id: {}", id.id).into())?;
429+
.ok_or::<crate::Error>(format!("Invalid token id: {id}").into())?;
432430
output.extend_from_slice(slice);
433431
}
434432
Ok(String::from_utf8(output)?)
@@ -729,7 +727,7 @@ pub trait Model {
729727

730728
fn init_scratch(&self) -> Self::Scratch;
731729

732-
fn id_to_token_bytes(&self, id: &PipelineToken) -> Option<&[u8]>;
730+
fn id_to_token_bytes(&self, id: u32) -> Option<&[u8]>;
733731
}
734732

735733
#[allow(
@@ -778,7 +776,7 @@ impl Model for PipelineModel {
778776
}
779777
}
780778

781-
fn id_to_token_bytes(&self, id: &PipelineToken) -> Option<&[u8]> {
779+
fn id_to_token_bytes(&self, id: u32) -> Option<&[u8]> {
782780
match self {
783781
Self::BPE(model) => model.id_to_token_bytes(id),
784782
Self::WordLevel(model) => model.id_to_token_bytes(id),

tokenizers/tk-encode/tests/pipeline_decode_oracle.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@ macro_rules! decode_tests {
8888
($($name:ident => $tok:literal),* $(,)?) => {
8989
$(
9090
#[test]
91-
#[ignore = "un-ignore once PipelineTokenizer::decode is implemented"]
9291
fn $name() {
9392
check($tok);
9493
}

0 commit comments

Comments
 (0)