Instructions to use milsoni201/lfm25-350m-axstream-matcher with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- llama.cpp
How to use milsoni201/lfm25-350m-axstream-matcher with llama.cpp:
Install (macOS, Linux)
curl -LsSf https://llama.app/install.sh | sh # Start a local OpenAI-compatible server with a web UI: llama serve -hf milsoni201/lfm25-350m-axstream-matcher:Q4_K_M # Run inference directly in the terminal: llama cli -hf milsoni201/lfm25-350m-axstream-matcher:Q4_K_M
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf milsoni201/lfm25-350m-axstream-matcher:Q4_K_M # Run inference directly in the terminal: llama cli -hf milsoni201/lfm25-350m-axstream-matcher:Q4_K_M
Use pre-built binary
# Download pre-built binary from: # https://github.com/ggerganov/llama.cpp/releases # Start a local OpenAI-compatible server with a web UI: ./llama-server -hf milsoni201/lfm25-350m-axstream-matcher:Q4_K_M # Run inference directly in the terminal: ./llama-cli -hf milsoni201/lfm25-350m-axstream-matcher:Q4_K_M
Build from source code
git clone https://github.com/ggerganov/llama.cpp.git cd llama.cpp cmake -B build cmake --build build -j --target llama-server llama-cli # Start a local OpenAI-compatible server with a web UI: ./build/bin/llama-server -hf milsoni201/lfm25-350m-axstream-matcher:Q4_K_M # Run inference directly in the terminal: ./build/bin/llama-cli -hf milsoni201/lfm25-350m-axstream-matcher:Q4_K_M
Use Docker
docker model run hf.co/milsoni201/lfm25-350m-axstream-matcher:Q4_K_M
- LM Studio
- Jan
- vLLM
How to use milsoni201/lfm25-350m-axstream-matcher with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "milsoni201/lfm25-350m-axstream-matcher" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "milsoni201/lfm25-350m-axstream-matcher", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/milsoni201/lfm25-350m-axstream-matcher:Q4_K_M
- Ollama
How to use milsoni201/lfm25-350m-axstream-matcher with Ollama:
ollama run hf.co/milsoni201/lfm25-350m-axstream-matcher:Q4_K_M
- Unsloth Studio
How to use milsoni201/lfm25-350m-axstream-matcher with Unsloth Studio:
Install Unsloth Studio (macOS, Linux, WSL)
curl -fsSL https://unsloth.ai/install.sh | sh # Run unsloth studio unsloth studio -H 0.0.0.0 -p 8888 # Then open http://localhost:8888 in your browser # Search for milsoni201/lfm25-350m-axstream-matcher to start chatting
Install Unsloth Studio (Windows)
irm https://unsloth.ai/install.ps1 | iex # Run unsloth studio unsloth studio -H 0.0.0.0 -p 8888 # Then open http://localhost:8888 in your browser # Search for milsoni201/lfm25-350m-axstream-matcher to start chatting
Using HuggingFace Spaces for Unsloth
# No setup required # Open https://huggingface.co/spaces/unsloth/studio in your browser # Search for milsoni201/lfm25-350m-axstream-matcher to start chatting
- Pi
How to use milsoni201/lfm25-350m-axstream-matcher with Pi:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf milsoni201/lfm25-350m-axstream-matcher:Q4_K_M
Configure the model in Pi
# Install Pi: npm install -g @mariozechner/pi-coding-agent # Add to ~/.pi/agent/models.json: { "providers": { "llama-cpp": { "baseUrl": "http://localhost:8080/v1", "api": "openai-completions", "apiKey": "none", "models": [ { "id": "milsoni201/lfm25-350m-axstream-matcher:Q4_K_M" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Hermes Agent new
How to use milsoni201/lfm25-350m-axstream-matcher with Hermes Agent:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf milsoni201/lfm25-350m-axstream-matcher:Q4_K_M
Configure Hermes
# Install Hermes: curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash hermes setup # Point Hermes at the local server: hermes config set model.provider custom hermes config set model.base_url http://127.0.0.1:8080/v1 hermes config set model.default milsoni201/lfm25-350m-axstream-matcher:Q4_K_M
Run Hermes
hermes
- OpenClaw new
How to use milsoni201/lfm25-350m-axstream-matcher with OpenClaw:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf milsoni201/lfm25-350m-axstream-matcher:Q4_K_M
Configure OpenClaw
# Install OpenClaw: npm install -g openclaw@latest # Register the local server and set it as the default model: openclaw onboard --non-interactive --mode local \ --auth-choice custom-api-key \ --custom-base-url http://127.0.0.1:8080/v1 \ --custom-model-id "milsoni201/lfm25-350m-axstream-matcher:Q4_K_M" \ --custom-provider-id llama-cpp \ --custom-compatibility openai \ --custom-text-input \ --accept-risk \ --skip-health
Run OpenClaw
openclaw agent --local --agent main --message "Hello from Hugging Face"
- Docker Model Runner
How to use milsoni201/lfm25-350m-axstream-matcher with Docker Model Runner:
docker model run hf.co/milsoni201/lfm25-350m-axstream-matcher:Q4_K_M
- Lemonade
How to use milsoni201/lfm25-350m-axstream-matcher with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull milsoni201/lfm25-350m-axstream-matcher:Q4_K_M
Run and chat with the model
lemonade run user.lfm25-350m-axstream-matcher-Q4_K_M
List all available models
lemonade list
- Atomic Chat
axstream-matcher (LFM2.5-350M fine-tune)
The instant-tier matcher for axstream — a streaming action language for computer-use agents. Given a library of known voice-command templates and a spoken utterance, this model answers one constrained question in ~100ms on Apple Silicon: which known command is this, and what are the variable words?
input (system): the user's command library — id, description, slots, examples
input (user): "uh can you open apple music for me"
output: {"template": "open_app", "slots": {"app": "apple music"}}
It never plans, never sees the screen, never invents actions — it recognizes.
Misses return "none", which routes the utterance to a full LLM. Slot values
are copied verbatim from the utterance by contract (train- and serve-time
enforced), so the matcher cannot act on words the user didn't say.
Files
| file | what |
|---|---|
lfm25-350m-axstream-v2-Q4_K_M.gguf |
v2 — current. Trained on variable 10–40-template libraries, sibling families, deliberate look-alike traps, and description-only templates. |
lfm25-350m-axstream-Q4_K_M.gguf |
v1 (kept for reproducibility). |
adapter_model.safetensors |
v1 LoRA adapter over LiquidAI/LFM2.5-350M. |
v2 results
v2 targets the failure modes observed running v1 in production: accuracy collapse past ~15 in-context templates, wrong matches on plausible unknown commands ("open apple maps" with no maps template present), and never matching templates that lack examples. Evaluated through the real serving path (llama-server + JSON-schema constrained decoding), v1 vs v2 on the same suites:
| gate | v1 | v2 |
|---|---|---|
| exact canonical examples @ 25-template libraries | 96.0% | 100% |
| wrong-match rate on deliberate-rival non-commands | 23.3% | 4.8% |
| accuracy at 40-template libraries | 73% | 91% |
| library-size sweep spread (10→40 templates) | 11 pts | 4 pts |
| paraphrase holdout (generated by a model family unused in training) | — | 94.0% |
| description-only (example-less) templates | ~0% | 92.2% |
| latency p50 (M-series, Q4_K_M, prefix-cached) | ~110ms | ~120ms |
In axstream, v2 is paired with an embedding prerank (top-10 shortlist, measured recall@3 = 100% on the live library), which keeps the effective context in the 10-candidate sweet spot at any library size.
v1 results
Evaluated through the real serving path (llama.cpp llama-server + JSON-schema
constrained decoding) on a 521-example held-out test set of dictated-speech
commands over dynamic 8–14-template libraries, including compound-sentence
negatives, near-miss app names, and chit-chat:
| metric | base LFM2.5-350M | this model |
|---|---|---|
| end-to-end correct (template + slots) | 47.3%* | 94.2% |
| template accuracy | 53.2%* | 96.0% |
| slot values exact (given template) | 53.3%* | 97.5% |
| refusal recall on non-commands | 55.0%* | 94.3% |
| wrong-match rate on non-commands | 45.0%* | 5.7% |
| latency p50 (M-series, Q4_K_M, prefix-cached) | 104ms | 114ms |
*base measured on the round-1 test set (387 examples); this model's numbers are from the harder superset. Trained in 3.7 minutes on one RTX 4090 (~$0.10).
Usage
Serve the GGUF with llama.cpp and constrain the output with a JSON schema over
your template ids (grammar-constrained decoding makes invalid output
impossible). The exact prompt builder and schema this model was trained
against are open source:
axstream/tiny.py.
llama-server -m lfm25-350m-axstream-v2-Q4_K_M.gguf --port 8791 -ngl 99 -c 8192 --no-webui
(v2 was trained with prompts up to 3072 tokens — give the server headroom
with -c 8192.)
Or as the matcher inside axstream directly — see the quickstart.
Training
LoRA (r=32, α=64) on all projections including LFM2's conv-block in_proj /
out_proj and MLP w1/w2/w3, per the official unsloth LFM2.5 recipe.
Prompts are byte-identical to the serving format; response-only masking;
trained on one rented RTX 4090. The dataset and generation pipeline are not
released.
v1: ~2.6k synthetic dictation-style examples with machine-validated labels (verbatim-slot checks, cross-model judge filtering), 3 epochs at lr 5e-5, seq 2048. ~4 minutes, ~$0.10.
v2: ~5.5k train rows over a harder curriculum — every context library
sampled at 10–40 templates (median 23, shuffled); ~12 authored families of
near-identical sibling commands trained co-present; ~580 deliberate-rival
negatives (a plausible command whose true template is absent while a
confusable same-verb template is present → gold none); 400 positives whose
true template renders description-only; paraphrase refresh across six spoken
style axes including whisper-transcript artifacts. Generation by one model
family, judging by two others, and the paraphrase holdout by a fourth used
nowhere in training. 2 epochs at lr 5e-5, seq 3072. Well under $1.
Limitations
- English, macOS-command domain, dictated-speech register.
- v2 is in-distribution for 10–40-template contexts; beyond that, pre-filter (axstream preranks to a top-10 shortlist with a local embedding model).
- v2 traded a little recall for its much lower wrong-match rate: some preamble-heavy phrasings ("open the browser and search for …") over-refuse and route to the LLM tier — the safe direction.
- Slot values are verbatim by contract, so tasks whose spoken word maps to a different UI value (say "times", click the button named "Multiply") are out of scope for the matcher by design.
- This is a recognizer. Pair it with guards before acting on its output — in axstream, replays verify targets against the live screen and anything destructive is risk-gated.
License and attribution
This model is a derivative of LiquidAI/LFM2.5-350M by Liquid AI, Inc., modified by merging a LoRA adapter fine-tuned on synthetic voice-command data and quantizing to GGUF (Q4_K_M). Distributed under the LFM Open License v1.0 (see LICENSE).
Note: under LFM Open License v1.0 §5, commercial use by entities (including affiliates) with ≥ $10M annual revenue is not licensed. This restriction travels with the weights and cannot be relicensed away.
Not affiliated with or endorsed by Liquid AI, Inc.
- Downloads last month
- 32
4-bit