--- license: apache-2.0 tags: - flowcast - loudink - loudink-v1.1 - voice-agent - mlx - apple-silicon - compact-ir - dictation - computer-use - skills - record-and-replay library_name: mlx-lm --- # loudink-v1.1 v1.1.1 (canary) On-device dual-stack for **LoudInk / Flowcast** on Apple Silicon, plus **user skills**: 1. **Writer** — LFM2.5-1.2B LoRA (dictation polish / messages / email / prompts) 2. **Planner** — FunctionGemma compact-IR LoRA (`run_skill` + freeform computer-use) 3. **Skill store** — local JSON skills (record → compile → voice replay) **Stable GA line:** [`nsalerni/loudink-v1`](https://huggingface.co/nsalerni/loudink-v1) (0.4.0 freeze). This package is the **v1.1 canary** (PR-A→E). Prefer dual-package client routing with kill-switch to v1. ## Product bars (v1.1) | Slice | Shipped | Neural | Latency | |-------|---------|--------|---------| | Writing daily | **100%** | **100.0%** | p50 **184 ms** | | Computer daily | **100%** | — | mostly fast-path | | Multi-step | **100%** | — | mostly fast-path | | **Daily-Mac overall (n=69)** | **100%** | — | — | | Skill invoke (n=19) | **100%** | — | deterministic store | | IR honesty (n=112, no FP) | — | **46.4%** | honesty lineage | Holds loudink-v1 0.4 bars; writing neural improved on expanded suite (~92% vs ~86%). ## Bundle layout ``` writer/ # optional promoted_core_100.safetensors seed adapter writer_unified/ # production writer LoRA ir/ # skill-aware IR LoRA ir_honesty_fallback/ # v0.4 honesty IR (optional rollback) skill_store/ # example seed skills (not user data) router.json manifest.json inference_config.json ``` **Bases are not vendored** (size). Pull 4-bit bases: - Writer: `mlx-community/LFM2.5-1.2B-Instruct-4bit` - IR: `mlx-community/functiongemma-270m-it-4bit` ## Skills (record → replay) ```python from huggingface_hub import snapshot_download from gemmaflow_tune.skills.store import SkillStore from gemmaflow_tune.skills.invoke import try_skill_invoke_plan bundle = snapshot_download("nsalerni/loudink-v1.1") store = SkillStore(f"{bundle}/skill_store") plan = try_skill_invoke_plan("run my invoice chase for Acme", skill_store=store) ``` Client should point `skill_store_path` at a **user-writable** directory and merge or replace example seeds. Private recordings stay local; do not train cloud models on them by default. ### IR extension ```json {"intent": "run_skill", "skill_id": "invoice_chase", "slots": {"company": "Acme"}, "confidence": 0.92} ``` Unknown `skill_id` → null plan (never invent). Freeform (`open gmail`) never hijacks skills. ### Vision (PR-E) `skills/vision.py` scaffold is in the training repo; default **disabled**. Client injects a resolver when ready. ## Integration ```python # runner_kind: loudink_v1 # skill_store_path: {bundle}/skill_store # or user path # ir_adapter_path: {bundle}/ir # writer_unified_adapter_path: {bundle}/writer_unified ``` See `inference_config.json` and `client_contract.md`. ## Methods (v1.1) - PR-A: Skill schema, store, recorder compiler, null-safe `run_skill` - PR-B: Paraphrase invoke + skill_invoke bench + light IR SFT - PR-C: Deterministic slot fill (`for` / `about` / named) - PR-D: Expanded daily-Mac computer + writing cases - PR-E: Vision fallback scaffold (noop until client wires resolver) ## License Apache-2.0 (adapters + example skills). Base model licenses apply to community 4-bit bases. **User-recorded skills are user data.**