Michael Chen

ML & Research

Experiments I ran on my own Macs, mostly speech models and model compression. Each entry says what I measured, on which machine, under which licence, and where it fell short.

Speech

Speech models on Apple Silicon. Kestrel and the mlx-audio fix came out of my audiobook setup.

  1. LFM2.5-Audio Delegate

    My project adds learned delegation to Liquid AI's pretrained speech model on a 24 GB M4 Mac mini. A small adapter trained in the shared core teaches it to answer locally or request a stronger text model. Its existing audio head speaks both kinds of replies, including delegated answers that are still arriving. (Corrected model card (documentation commit 59c0adf); Liquid AI's pretrained base model; Retained E1 training configuration)

    The release includes the adapter, runtime, configuration and recorded evaluations. A four-turn check used prerecorded input, real external-model responses and device playback. It doesn't establish live-human reliability. (R3 four-turn playback report; Pinned runnable release v0.9.1)

    This is experimental half-duplex software with typed cancellation. Factual answers and room-microphone routing remain weak. Recent-answer context estimates what was spoken, and there is no live-human or human voice-quality validation. Audio processing is local, but delegation sends query and context text externally. It isn't production-ready. (Corrected model card (documentation commit 59c0adf); Acceptance criteria and retained failures; Runtime documentation)

    Built on pretrained weights, not trained from scratch. License restrictions and reproduction limits apply. (LFM Open License v1.0; Unpublished reproduction evidence: October 5, 2026 reproduction check; installed dependencies and missing per-item judged results. Not independently rerun by Editor or Dot.)

    What worked, what failed and how it was tested · Model card · Pinned release files

  2. Kestrel

    I distilled Kokoro-82M into a single-voice audiobook engine for MLX with about 10M active parameters. It renders speech quickly and stays intelligible, but it sounds less clear than Kokoro and misses both of its quality gates.

    times real time
    ×622
    WER, teacher 5.65%
    5.46%
    MCDpass bar 3.98 · target not met
    13.89

    Measurements, audit and limits · model card · code

  3. mlx-audio decoder fix

    I found five differences between the MLX iSTFTNet decoders (Kokoro, KittenTTS) and their PyTorch reference. I compared intermediate tensors layer by layer using identical phoneme and style inputs. The fixes merged upstream.

    Two differences affected the audio. Every Kokoro render was 2.5 dB quiet, because MLX's istft divides the overlap-add by Σw and torch.istft divides by Σw². And the upsample path in the pitch and energy predictor was misaligned by one frame against its own shortcut: F0 relative RMSE 0.134 → 0.0000.

    MCD
    7.29 → 4.09 dB
    F0 RMSE
    11.5 → 5.1 Hz

    Checked against frozen fp32 reference audio over 55 utterances, with the thresholds calibrated to the reference model's own render-to-render noise floor, since the decoder is stochastic. I hit this while building Kestrel.

  4. Vireo TTS 3B for Apple Silicon

    Vireo is my unofficial MLX build of Breeze TTS 2, a 3B speech model by BreezeBlue. BreezeBlue has not reviewed or endorsed it. It comes in two builds. The bfloat16 build converts the released checkpoint to MLX at unchanged precision, as the quality reference. The mixed 4-bit build adds activation-calibrated pruning and per-stage low-bit quantization, and it is the one I optimised and measured end to end.

    mixed 4-bit, real time
    1.15×
    bf16 reference, real time
    0.41×
    peak GPU memory
    3.0 / 7.0 GB
    warm first audio
    285–322 ms

    Limits. Speed is the best of three runs on one M2 and does not transfer to other machines. I picked the 4-bit build from more than sixty candidates against one probe set: its development word error rate is 0.0093, but 0.0368 on held-out text. Its worst speaker similarity, 0.856, is below the bf16 build's 0.903. The two builds are close on quality and far apart on cost; the compressed one is not uniformly better. The calibration clip is private, so nobody else can rebuild the 4-bit weights bit for bit.

    Weights: BreezeBlue Research and Non-Commercial License, gated, no commercial use. Runtime code: Apache-2.0. mixed 4-bit card · bf16 card · upstream Breeze TTS 2

Language models

A compressed build of someone else's model, and an experiment whose main result is negative.

  1. Ornith-1.5-35B-A3B, REAP-192, mxfp4

    The base model is the Ornith Team's, not mine. My work was compressing it to run on a 24 GB Mac mini, where the plain 4-bit conversion does not fit. I pruned each layer from 256 to 192 experts with REAP, quantised to mxfp4 while keeping the shared expert and router at 8 bits, and lowered the active experts per token from 8 to 7. There was no fine-tuning.

    decode
    49.8 tok/s
    weights
    14.2 GB
    42-task suite, unpruned 3-bit 0.954
    0.981

    Limits. The task suite is finite and English only: coding, math, tool calls, structured output and format checks. Expect some loss on knowledge-heavy tasks. I could not run the bf16 original on any hardware I had, so there is no direct comparison with it. The build is tuned for one user at a time.

    model card · original model · REAP paper

  2. Decision heads on a small local model

    Over four days in September 2026 I trained tiny classification heads on top of frozen, 4-bit Qwen2.5 models, to see how well a small local model could read decisions out of documents. Two public repositories hold phases one and two (depth and distillation sweeps) and phase three. On the task families they were trained on, the heads beat the backbone's own zero-shot read-out by 14.8 points. On the six unseen task families I tested, they lost.

    six unseen task families, vs zero-shot
    −3.25 pts
    workflow suite, zero-shot 0.650
    0.582
    20 of 28 layers, latency saved
    28%

    Limits. These heads are not production-ready and do not reproduce or match the commercial system I compared against; its published numbers were never run on my hardware. In held-out-task probes, accuracy on the held-out families fell to 0.0063 when two large-label families (150 and 100 labels) were left out, and to 0.594 when two small-label families were. No safety, robustness or calibration testing was done.

    phase 3 card · phases 1 and 2 card

Image generation

  1. PHiLIP

    Our PHiLIP prototype combines human feedback with image generation using AMD ROCm and PixArt-alpha. It won the AMD University Program Award in the AMD Pervasive AI Developer Contest. The current code has integration limits, which the project page describes.

    Prototype details and sources · official results