feat(mobile): TrOCR-Tokenizer in JavaScript implementieren #80
Labels
No labels
app/archiv
app/einkaufslisten
app/imap-client
app/wissensbasis
arch-answered
arch-question
area/api
area/auth
area/infra
area/mobile
area/shared
area/ui
area/web
portfolio-status
prio/high
prio/low
prio/medium
roadmap/public
size/l
size/m
size/s
size/xl
size/xs
status/blocked
status/needs-info
type/bug
type/chore
type/docs
type/feature
type/idea
type/refactor
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
admin-mrrm/mrrmlabapp#80
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Ziel
Den TrOCR-Decoder-Tokenizer (RoBERTa BPE) in JavaScript implementieren, sodass On-Device-Inferenz ohne Server-Roundtrip möglich ist.
Hintergrund
TrOCR nutzt RoBERTa als Tokenizer (Byte-Pair Encoding). Der Decoder generiert Token-IDs, die in Text umgewandelt werden müssen. Dafür wird benötigt:
vocab.json– Mapping Token → IDmerges.txt– BPE-Merge-RegelnOptionen (absteigend nach Aufwand)
Option A:
@xenova/transformers(empfohlen)Hugging Face Transformers.js läuft in React Native via JSI und enthält bereits einen fertigen Tokenizer:
Vorteil: Kein eigener Code, gut getestet
Nachteil: Paketgröße (~2 MB JS), React Native Kompatibilität prüfen
Option B: Minimale BPE-Implementierung in TypeScript
Nur die Decode-Richtung implementieren (IDs → Text), kein Encode nötig:
vocab.jsonladenVorteil: Keine externe Abhängigkeit, klein
Nachteil: ~100–150 Zeilen Code, edge cases
Option C: WASM-Bundle
Python-Tokenizer via Pyodide oder ähnliches – zu schwer für Mobile.
Empfehlung
Option A zuerst versuchen; bei Kompatibilitätsproblemen auf Option B zurückfallen.
Aufgaben
@xenova/transformersin React Native testen (JSI-Kompatibilität)Akzeptanzkriterien
decode([1, 234, 567, 2])liefert identisches Ergebnis wie Pythontokenizer.decode()Done-by-spike #77: Tokenizer via
@huggingface/transformers(Xenova/trocr-small-printed/tokenizer.json) statt eigener BartTokenizer-JS-Port. Hardcodeddecoder_start_token_id=2/eos_token_id=2da Xenovabos_token_id=nullsetzt.pm-bot referenced this issue2026-05-28 06:48:27 +02:00