summaryrefslogtreecommitdiff
path: root/tokenizer/bpe/bytelevel.go
diff options
context:
space:
mode:
authorJonas Knobloch <jonas.knobloch@t-online.de>2026-03-24 15:37:50 +0100
committerJonas Knobloch <jonas.knobloch@t-online.de>2026-03-24 15:42:10 +0100
commitf796560cb4de0b6de118c00be54c58206bad5b60 (patch)
treeda12930d66ec6511abb723b3ef811a310c07bdb0 /tokenizer/bpe/bytelevel.go
parenta63589d6584548b286825f4fb23202c35382032c (diff)
Expose finite state automaton
Diffstat (limited to 'tokenizer/bpe/bytelevel.go')
-rw-r--r--tokenizer/bpe/bytelevel.go44
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
+}