flowxai/intentrouter
IntentRouter
IntentRouter is a small, on-device healthcare text classifier from the FlowX OpenNER family. Developed by FlowX.AI. Runs 100% on-premise / air-gapped, so no data leaves your boundary.
What it does
- Task: text-classification
- Base model:
answerdotai/ModernBERT-base - Classes (8): REFILLREQUEST, NEWPRESCRIPTION, STOCKORDER, RETURNSREBATE, DELIVERYISSUE, BILLINGQUERY, CLINICALURGENT, GENERALADMIN
- Trained on: synthetic pharmacy contact-centre messages. Despite the name, it is not a general-purpose intent router.
- Runtime: CPU, Apple Silicon, one GPU, or browser/edge via ONNX (INT8). ~100-160 ms/doc on CPU.
Evaluation
Held-out F1 on synthetic data: 1.0000. Read that as a pipeline check, not as accuracy on your documents.
Train and test are drawn from the same generator, so a rule of the form "the entity sits at position N of template T" is sufficient to score on the test split, and the reported test loss of 4.89e-07 is consistent with close to that having been learned. Human annotators do not agree with each other at 1.0 on this task.
What makes that more than a caveat is that two models from this same pipeline did not reach 1.0: flowxai/filingtag scores 0.6444 across 139 labels, and flowxai/ibandetect scores 0.9488. The pipeline is capable of reporting a number below 1.0. So a 1.0 here says the generated task was trivially separable, rather than that the model is perfect.
There is no per-label breakdown, only this aggregate, so it cannot tell you whether the label you depend on is one of the ones the model is good at. An aggregate hides the tail.
Validate on your own documents before production use. Treat 1.0000 as evidence that training converged and the pipeline is wired up correctly, and as nothing more.
What this model does not do
It assigns one class to the whole text. It does not extract entities, it does not locate anything within the text, and it validates nothing.
Correction, 2026-09-14. Until this date the card claimed that identifiers are "validated by checksum (IBAN mod-97, card Luhn, ISIN/LEI, container ISO-6346, VIN, national IDs), a correctness guarantee general LLMs lack". That sentence was shared boilerplate across the OpenNER family and it was not true of any model in it. These repositories contain a config, weights, an ONNX export, a tokenizer and a metrics file, and no validation code of any kind. If you relied on that sentence, the guarantee it described does not exist and never did.
The licence note at the foot of this card says the model was trained on "synthetic, checksum-validated data". That is a statement about how the training corpus was generated. It is not a statement about anything this model checks when you run it, and the two were being read as one claim.
Why a small model
Fine-tuned encoders match or beat frontier LLMs on structured, convention-bound extraction, at a fraction of the latency and cost, with zero data egress.
Usage
from transformers import AutoTokenizer, AutoModelForSequenceClassification
tok = AutoTokenizer.from_pretrained("flowxai/intentrouter")
model = AutoModelForSequenceClassification.from_pretrained("flowxai/intentrouter")License & attribution
Licensed under the Apache License 2.0. Copyright 2026 FlowX.AI (https://flowx.ai). See the NOTICE file. Trained on synthetic, checksum-validated data.
Part of the FlowX OpenNER model family.
