Maskinöversättning · Engelskt original

Clef-flash: lokala beslut i Swift

Utvecklingsförhandsgranskning. Lokalt textstöd är under utveckling och har inte släppts i speech-swift.

Clef-flash läser ett tillstånd och en uppsättning frågor, gör sedan de tillåtna svaren tillsammans. Swift modulen kör 9B-modellen lokalt på Apple Silicon med MLX och 4-bitars vikter. No Python process eller värd API används under inferens.

Använd från Swift

import Clef
let model = try await Clef.fromPretrained()
let result = try model.decide(
    state: "Please turn the kitchen lights on.",
    questions: [
        ClefQuestion(id: "action", instructions: "Which action?",
            kind: .choice(["on": "Lights on", "off": "Lights off", "other": "Other"])),
        ClefQuestion(id: "urgent", instructions: "Is this urgent?", kind: .noul())
    ])
print(result.decisions[0].probabilities)

Valfrågor returnerar sannolikheter för varje alternativ. En noul fråga returnerar sann sannolikheten för sant. En poängfråga tar en beställd lista som .score(["normal", "urgent"]) och returnerar det förväntade nollbaserat indexet. Modulen utför inte kommandon.

Command line

speech clef decide request.json
speech clef decide request.json --model-dir /path/to/Clef-flash-9B-MLX-4bit
speech clef decide request.json --offline --max-tokens 4096

Standardmodellen är aufklarer/Clef-flash-9B-MLX-4bit . Det första kommandot laddar ner det om det behövs. Använd en lokal katalog eller offline flaggan för att undvika en nedladdning.

Standalone kommandot

swift build -c release --product clef-decide --disable-sandbox
scripts/build_mlx_metallib.sh release
.build/release/clef-decide /path/to/clef-flash-mlx-4bit request.json
{"state":"Turn the lights on.","questions":[
  {"id":"action","type":"choice","instructions":"Which action?",
   "choices":{"on":"Lights on","off":"Lights off","other":"Other"}}
]}

Utgången inkluderar sannolikheter, ingångstokenräkning och beslutstid exklusive modellbelastning. Kommandot accepterar en beställd fråga array; det är inte en SystemOne HTTP-slutpunkt.

Hur det fungerar

En Qwen3.5 ryggrad läser texten och schemat. Det gemensamma beslutet huvudet deltar i det sammanhanget, låter frågor interagera och kombinerar kontextuella poäng med en tidigare från modellens output inbäddningar. Det gör valen direkt istället för att generera en JSON svarstoken av token.

Krav och gränser

Lokal validering

October 3 uppdatering: Två färska körningar av tjugo varma upprepar varje genomsnitt cirka 276 ms för samma 303-token, tre-fälts begäran (observerad intervall 274-284 ms), exklusive modellbelastning. De tidigare 291 ms körs under levererade de separata RSS och fysisk-fotavtryck mätningar. Detta är en upprepad textförfrågan; tal, talutgång och visuell inferens mättes inte.

På en M5 Pro med 48 GB enhetligt minne, tjugo värmda körningar av en 303-token, trefältsförfrågan i genomsnitt 0.291 sekunder (median) 0.290; Räckvidd 0.280–0.299), exklusive modellbelastning. Native GPU drift och 512-token chunks minskade originalet 0.921-andra medel med omkring 68%, med oförändrade vikter och utvalda svar. Peak process RSS var 5.11 GiB; topp macOS Minnesfotavtryck var 6.81 GiB. RSS ensam fångar inte all unified-memory användning. Längre ingångar kan behöva mer minne. En senare korrekthet kör mätt 462–897 ms medan andra applikationer var aktiva, så 291 ms betyder inte en fast latensgaranti. Dessa är utvecklingsmätningar på en upprepad begäran, inte ett brett kvalitetsriktmärke. 303 referenstoken IDs match, och den maximala sannolikhetsskillnaden från Python referens handlar om 0.00266.

Källor