developer preview · not yet released

Pom’s shorthand, as a Swift package.

Pomvox Cleanup Engine turns raw transcripts into text a person would send. Locally, with every edit accounted for, and your exact words back when it can’t do better.

See exactly what clean() hands back.

Pick an example. The result shows the text, the outcome, and the edit as the engine reports it: one replacement, measured in UTF‑8 bytes of the original.

request
result

Illustrative examples. Offsets are computed the way the engine reports them; the cleaned text is not live model output.

Three outcomes. No surprises.

.cleaned

Accepted output differs from the input. Inspect the edits, then apply them.

.unchanged

The input was already fine, or empty. Nothing to do.

.fallback(reason)

Timeout, rejection, a full queue. You get the exact input bytes and zero edits. Never a guess.

Cancellation throws instead, so a superseded dictation never inserts late text.

Local by default. Cloud only when you call it.

Localyour text→Cleaner · MLX on your Mac→result
Cloud clientyour text→endpoint + credentials you supply→result

The cloud client is a separate module. It sends nothing until you configure an endpoint and call it. No automatic uploads, downloads, route changes or retries.

What the engine does

  • Removes fillers, fixes punctuation and casing
  • Honors a bounded vocabulary for names
  • Reports UTF‑8 edits, provenance and stage timings
  • Verifies model packs by hash before opening

What it leaves to you

  • Microphone and speech recognition
  • Clipboard, paste and UI
  • History and telemetry
  • Any network call you didn’t make

Open once. Clean repeatedly.

// Package.swift
.package(name: "PomvoxCleanupMLX", path: "/path/to/pomvox-cleanup-engine/Runtime/MLX")

// prepare a verified pack once, from a pinned snapshot on disk
// $ python3 scripts/prepare-local-pack.py /path/to/snapshot .local/simplewords-v3

import PomvoxCleanupMLX

let cleaner = try await Cleaner.open(
    pack: .directory(URL(fileURLWithPath: "/absolute/path/to/pack")),
    runtime: .mlx, policy: .local)

let result = try await cleaner.clean(CleanupRequest(
    "um please send the pomvox report tomorrow",
    vocabulary: ["Pomvox"], deadline: .seconds(2)))

await cleaner.close()
Where it stands, honestly.
  • Unreleased developer preview. The repository is private for now.
  • macOS 14+ and Apple Silicon. English, with bounded vocabulary.
  • Sub‑100 ms cleanup is a benchmark target, not a demonstrated capability.
  • Engine is MIT. Baseline weights ship separately under their own license.