diff options
| author | Jonas Knobloch <jonas.knobloch@t-online.de> | 2026-03-24 15:37:50 +0100 |
|---|---|---|
| committer | Jonas Knobloch <jonas.knobloch@t-online.de> | 2026-03-24 15:42:10 +0100 |
| commit | f796560cb4de0b6de118c00be54c58206bad5b60 (patch) | |
| tree | da12930d66ec6511abb723b3ef811a310c07bdb0 /tokenizer/bpe/bytelevel.go | |
| parent | a63589d6584548b286825f4fb23202c35382032c (diff) | |
Expose finite state automaton
Diffstat (limited to 'tokenizer/bpe/bytelevel.go')
| -rw-r--r-- | tokenizer/bpe/bytelevel.go | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/tokenizer/bpe/bytelevel.go b/tokenizer/bpe/bytelevel.go new file mode 100644 index 0000000..4059d0d --- /dev/null +++ b/tokenizer/bpe/bytelevel.go @@ -0,0 +1,44 @@ +package bpe + +import ( + "github.com/jonasknobloch/mbpe" + "go.jknobloc.com/x/tokenizer/bpe/split" +) + +type ByteLevel struct { + *mbpe.ByteLevel + addPrefixSpace bool + fsa *split.FSA +} + +func NewByteLevel(addPrefixSpace bool) *ByteLevel { + return &ByteLevel{ + ByteLevel: mbpe.NewByteLevel(addPrefixSpace), + addPrefixSpace: addPrefixSpace, + fsa: split.NewFSA(), + } +} + +func (p *ByteLevel) PreTokenize(phrase string) []string { + if phrase == "" { + return []string{} + } + + if p.addPrefixSpace && phrase[0] != ' ' { + phrase = " " + phrase + } + + compounds := p.fsa.FindAll(phrase) + + for i, compound := range compounds { + r := "" + + for _, b := range []byte(compound) { + r += mbpe.BytesChar[b] + } + + compounds[i] = r + } + + return compounds +} |
