finite-extract
On-device structured extraction for Apple platforms. Turn unstructured text into clean, typed data — entirely on device, with nothing sent to a server.
Live · MIT-licensedThe problem
A lot of useful software needs to read free-form text — a note, a message, a page of jotted details — and turn it into structured records it can actually work with. The usual way to do that today is to send the text to a large model in the cloud. That means a user's words leave their device, and the result is only as private as the promise attached to it.
finite-extract takes the other path. It runs the whole extraction locally, on Apple Silicon, through MLX — no network, no cloud, no API key. The text never leaves the device, so privacy isn't a policy you have to trust; it's a property of where the work happens.
How it works
Small on-device models are capable, but asked to do everything in one pass they make the kinds of mistakes that are hard to undo — mistaking one kind of thing for another, inventing details, drifting from the source. finite-extract avoids that by splitting the work into three stages, each doing the one thing it's good at:
Type
A fast, discriminative pass decides what each entity is before the language model ever runs — so a thing can't be quietly misfiled as the wrong kind of thing. It pairs a lexicon with a compact Core ML named-entity recognizer.
Generate
A small fine-tuned language model reads the text against those already-decided types and pulls out the attributes — names, dates, relationships, details — without having to re-litigate what anything is.
Assemble
A deterministic step validates and assembles the final structured output, repairing malformed results rather than hoping the model got the shape exactly right. What you get back is typed and predictable.
Splitting the work this way makes the system both more accurate and more legible: when something goes wrong you can see which stage to look at, instead of staring at one opaque generation.
Open mechanisms, your assets
finite-extract is MIT-licensed and ships the mechanisms — the staged pipeline, the entity-typer, an open Core ML NER runner, the JSON repair. The assets that adapt it to a particular domain — your model, your schema, your rules — stay yours. The engine is a foundation other builders can stand on; it doesn't lock you into ours.
In production
finite-extract powers the on-device extraction in Pocket Extrovert, where it reads everyday notes about the people in someone's life and keeps the structure — without any of it leaving the phone.