// `count --explain` 用的逐片明细。
//
// 这一层回答"到底哪段在吃 token":把预切分的每一片连同它的 token 数列出。

///|
/// 逐片明细:`(片文本, 该片的 token 数)`。
pub fn Vocab::piece_counts(self : Vocab, bytes : Bytes) -> Array[(String, Int64)] {
  let view = self.view()
  let out : Array[(String, Int64)] = []
  let pieces = @bpe.pretokenize(bytes)
  for entry in pieces {
    let (start, end) = entry
    let piece = @bpe.slice_bytes(bytes, start, end)
    let n = @bpe.encode_ordinary(view, piece).length().to_int64()
    out.push((@utf8.decode_lossy(piece), n))
  }
  out
}