(tokenmap, token, max_rank)
| 166 | merges = BPEMerges() |
| 167 | |
| 168 | def bpe(tokenmap, token, max_rank): |
| 169 | parts = list(token) |
| 170 | while True: |
| 171 | min_idx = None |
| 172 | min_rank = None |
| 173 | for i, pair in enumerate(zip(parts[:-1], parts[1:])): |
| 174 | rank = tokenmap.get((pair[0] + pair[1]).encode()) |
| 175 | if rank is not None and (min_rank is None or rank < min_rank): |
| 176 | min_idx = i |
| 177 | min_rank = rank |
| 178 | if min_rank is None or (max_rank is not None and min_rank >= max_rank): |
| 179 | break |
| 180 | assert min_idx is not None |
| 181 | parts = ( |
| 182 | parts[:min_idx] |
| 183 | + [parts[min_idx] + parts[min_idx + 1]] |
| 184 | + parts[min_idx + 2 :] |
| 185 | ) |
| 186 | return parts |
| 187 | |
| 188 | for t in merged: |
| 189 | left, right = bpe(tokenmap, t.decode(), tokenmap[t]) |
no test coverage detected