Skip to main content
Premove ITN targets English structured values commonly used by voice agents. The table shows valid written candidates. The contextual scorer can leave a phrase unchanged or select another candidate when the sentence supports it. The deterministic Rust layer exposes 13 candidate kinds: DIGIT_SEQUENCE, CARDINAL, TIME, DATE, MONEY, DECIMAL, PHONE, ELECTRONIC, MEASUREMENT, ORDINAL, PUNCTUATION, WHITELIST, and WORD.

Contextual temporal resolution

The v0.3.0 Python layer can enrich selected DATE candidates and unchanged temporal text after decoding. It does not add context-dependent candidates to the Rust graph and it never performs a second model call. Resolved calendar dates use ISO YYYY-MM-DD. Missing or contradictory context leaves the expression unresolved instead of guessing. Numeric separators are part of the surface form, not separate context fields. DateOrder describes the field order only and supports DMY, DYM, MDY, MYD, YDM, and YMD. Provide context explicitly through NormalizationContext; the runtime does not discover the current clock, timezone, or locale.

Current boundaries

Premove ITN does not provide first-class normalization for non-English speech, street addresses, free-form rewriting, or arbitrary application-specific formats. Text remains unchanged when the decoder does not select a candidate. The model cannot create a written form that the Rust candidate layer did not offer. If an application requires a stricter output schema, validate the result before passing it to a tool. For the exact accepted grammar and edge cases, see Rust candidate coverage.