LFM2.5-350M CURSOR Agent — English meeting-notes editor

A fine-tuned Liquid LFM2.5-350M (linear-attention, 350M params, ~215 MB at Q4_K_M) that runs an agentic meeting-summarization protocol (CURSOR): it streams a meeting transcript chunk-by-chunk and emits edit operations that curate one evolving set of structured, timestamp-anchored meeting notes — instead of passively summarizing a window.

This is the English model of a per-language pair; the Chinese-Traditional model is at Luigi/lfm2.5-350m-cursor-zh.

The task: CURSOR, not map-reduce

Classic map-reduce summarization (independent per-window digests → merge → shrink) produces locally-correct but globally-disconnected notes: it cannot say how a decision evolved. CURSOR streams the transcript and gives the model exactly one job per step: look at the current notes (STATE) and the next transcript block (CHUNK), and revise:

per step i:
  input:   SYS + STATE (current notes) + CHUNK_i (transcript block)
  output:  edit ops — ADD / UPD / DEL / NOP / TITLE
  harness: validates, applies, caps, advances
end:       optional VERIFY/ANCHOR sweep (judge-backed faithfulness backstop) → render

Because STATE is the only memory (no conversation history crosses steps), temporal integration becomes revising a visible earlier bullet (UPD) — the property that makes the protocol learnable at sub-1B scale. The deterministic harness owns the final word.

Output format (NOTES v2)

TITLE: Office move decision
SUMMARY:
- Move to Building B agreed after discussion [5:10]
DECISIONS:
- Relocate the office to Building B [5:10]
ACTIONS:
- S2: circulate the move checklist (due: Friday) [6:02]
OPEN:
- Parking allocation for Building B [7:40]
TOPICS:
- Office move [0:00]

Every bullet ends with the [m:ss] of the transcript line that supports it.

Training

stage data purpose
SFT teacher traces (Gemma-4-31B replaying the real harness, judge-filtered), screen-structured synthetic meetings (revision chains, deadlines, trap topics), real transcripts (QMSum, MeetingBank) at 2048 and 128-token chunks learn the protocol: op grammar, state-gated UPD/DEL, anchor copying, content selection
phase-2 real-transcript traces upsampled ×3 (the evaluation distribution), low LR (2e-5), 2 epochs, continuing from the G1-passing checkpoint fix fabrication on real meetings (the synthetic/real distribution gap)

Full fine-tune, bf16, completion-only loss, 4096 context. The per-language split exists because a 350M model holds one language's full protocol at a time (measured seesaw); the composite (en + zh, ~430 MB total) stays inside the on-device envelope.

Evaluation (T1 tier, n=20, paired vs a 9B map-reduce baseline)

metric result
G1 capability screen (decision chain, deadlines, anchors, trap) PASS (valid-op 100%)
FAITH-claim +1.05 (14/2/2, p=0.004)
INVERT (notes stating the opposite of the transcript) 0 / 20 (baseline: 3)
FAITH-anchor +0.40
SYNTH (meeting-level insight) +0.50 (at the +0.5 gate)
prefill vs baseline 0.51x

Judges: local gpt-oss-20b (FAITH/INVERT, 3× majority), qwen3.6-35B (COVER/SYNTH) — judge family ∉ {student, teacher}. The VERIFY/ANCHOR sweep (harness-side, judge-backed) is part of the deployed pipeline and is what turns 12/20 raw inversions into 0/20.

Quick start (with the project harness)

The model is a component of the CURSOR pipeline in agentic-summarizer; it speaks the harness's op grammar. Minimal use:

# via the project's eval/screen.py (text grammar, greedy)
python eval/screen.py --base-url http://127.0.0.1:8080 --lang en

Served via llama.cpp:

llama-server -m lfm2.5-350m-cursor-en.Q4_K_M.gguf \
  --n-gpu-layers 999 --ctx-size 4096 --temp 0 --jinja

The GGUF (Q4_K_M) and the HF safetensors are both in this repo.

Intended use

  • Meeting/transcript → structured, timestamp-anchored notes (decisions, actions, open questions, topics)
  • On-device: 350M params, ~215 MB Q4_K_M, 4k context — fits a 785 MB envelope with room for a bigger sweep budget

Limitations

  • English only (see the zh model for Chinese-Traditional); each language model holds one language's protocol
  • 4k context per step: ~2048-token chunks with a ≤600-token state
  • Trained with synthesized clocks (150 wpm): anchors are internally consistent but the wall-clock values are not real; FAITH-anchor on real audio is unmeasured
  • zh training data is synthetic-only (VCSum unobtainable); contested zh is unmeasured
  • The base model's license is the LFM Open License v1.0 — redistribution requires the license text and attribution (included in this repo)

Model

  • Base: LiquidAI/LFM2.5-350M
  • Architecture: LFM2.5 (linear attention), 16 layers, hidden 1024
  • Parameters: 350M (268M trainable in SFT)
  • Context: 4096 (trained) / 128k (architecture)
  • Quantization: Q4_K_M GGUF included (~215 MB)

License

This model is a derivative of LFM2.5-350M under the LFM Open License v1.0 (included in this repo). Training data is synthetic and public-corpus derived (QMSum, MeetingBank); no personal data. Distributed under the same license with attribution to Liquid AI, Inc.

Downloads last month
-
Safetensors
Model size
0.4B params
Tensor type
F32
·
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for Luigi/lfm2.5-350m-cursor-en

Quantized
(55)
this model