fix(175): NLI auf React Native funktionsfähig (ORT-Symbol-Hook + Hermes-Polyfills) #250
No reviewers
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
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
admin-mrrm/mrrmlabapp!250
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fix/175-nli-onnxruntime-symbol"
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?
Summary
onnxruntime-react-nativeunterglobalThis[Symbol.for('onnxruntime')], bevor@huggingface/transformersgeladen wird → ONNX.Tensor ist auf RN nicht mehrundefinedund die interneninstanceof-Checks der Library werfen nicht mehr.instanceof Xin transformers.web.js zufalseevaluieren statt zu werfen.env.allowLocalModels/useFSCache/useBrowserCachezusätzlich ininitialize()für HMR-Robustheit; neuer TDD-Test deckt das ab.Background
Auf Mobile blieb die NLI-Klassifikation hartnäckig im Llama-Fallback hängen mit
TypeError: right operand of 'instanceof' is not an object. Ursache (Z. 7655 intransformers.web.js):RN ist weder Node noch Browser → ONNX_WEB ohne nutzbare
Tensor-Klasse →isONNXTensor(x) { return x instanceof ONNX.Tensor }warf bei jedem Tokenize-Call. Der Symbol-Hook ist der vorgesehene Extension-Punkt, um eine andere Runtime einzuhängen.Test plan
pnpm --filter @mrrmlab/mobile typecheckpnpm --filter @mrrmlab/mobile test -- nli-classifier model-manager— 12/12[MailModel] NLI uncertain (top 0.297) → Llama fallbackohne instanceof-Error; bei klaren Mails NLI-Hit erwartet.Issue
Gehört zu #175.
transformers.js v4 erkennt zur Laufzeit über `globalThis[Symbol.for("onnxruntime")]` welche ONNX-Runtime es nutzen soll. Auf React Native war das Symbol nicht gesetzt und kein Node-Env vorhanden → Fallback auf `onnxruntime-web`, das in RN kein gültiges `Tensor`-Objekt liefert. Jedes `x instanceof ONNX.Tensor` warf damit "right operand of 'instanceof' is not an object", was den NLI-Pfad komplett blockiert und immer in den Llama-Fallback degradiert hat. Zusätzlich enthält transformers.web.js ungeguardete `instanceof Blob/File/…`-Checks, die in Hermes (keine Browser-Globals) ebenfalls werfen. Fix: - Neues Side-Effect-Modul `nli-classifier-polyfill.ts`, das vor transformers geladen wird: registriert `onnxruntime-react-native` unter dem ORT-Symbol und installiert Empty-Class-Polyfills für die fehlenden Browser-Globals. - `env.allowLocalModels/useFSCache/useBrowserCache` zusätzlich in `initialize()` reasserten, falls HMR das Modul re-evaluiert ohne Top-Level-Statements neu auszuführen (TDD-Test prüft das Verhalten). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>9b336e29385bd0fa48a8