Automatische vertaling · Engels origineel

Clef-flash: lokale beslissingen in Swift

Ontwikkelingsvoorbeeld. Lokale tekstondersteuning is in ontwikkeling en is niet vrijgegeven in speech-swift.

Clef-flash leest een status en een reeks vragen, scoort vervolgens de toegestane antwoorden samen. De module Swift draait het 9B-model lokaal op Apple Silicon met MLX en 4-bitsgewichten. Nr. Python proces of gehost API wordt gebruikt tijdens de gevolgtrekking.

Gebruik van 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)

Keuzevragen geven waarschijnlijkheden terug voor elke optie. Een noul vraag geeft de waarschijnlijkheid van waar terug. Een scorevraag neemt een geordende lijst zoals .score(["normal", "urgent"]) en geeft de verwachte nul-gebaseerde index terug. De module voert geen commando's uit.

Commandoregel

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

Het standaardmodel is aufklarer/Clef-flash-9B-MLX-4bit. Het eerste commando downloadt het indien nodig. Gebruik een lokale map of de offline vlag om een download te vermijden.

Opdracht Standalone

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"}}
]}

De uitvoer bevat waarschijnlijkheden, input token aantal, en beslissingstijd exclusief modelbelasting. Het commando accepteert een bestelde vraagreeks; het is geen SystemOne HTTP eindpunt.

Hoe het werkt

Een Qwen3.5 backbone leest de tekst en het schema. De gezamenlijke beslissingskop volgt die context, laat vragen interageren, en combineert contextuele scores met een voorafgaande versie van de output-inbeddingen van het model. Het scoort de opties direct in plaats van een JSON-antwoord token te genereren door token.

Eisen en beperkingen

Lokale validatie

Oktober 3 update: Twee verse runs van twintig warme herhalingen elk gemiddeld ongeveer 276 ms voor hetzelfde 303-token, drie-veld verzoek (observed range 274–284 ms), exclusief modelbelasting. 291 Ms run hieronder leverde de afzonderlijke RSS en fysieke voetafdruk metingen. Dit is een herhaalde tekst verzoek; spraakherkenning, spraak output, en visuele gevolgtrekking werden niet gemeten.

Op een M5 Pro met 48 GB verenigd geheugen, twintig verwarmde runs van één 303-token, drie-veld verzoek gemiddeld 0.291 seconden (mediaan 0.290; bereik 0.280–0.299), exclusief modelbelasting. GPU activiteiten en 512-token brokken verminderden het origineel 0.921- tweede gemiddelde met ongeveer 68%, met ongewijzigde gewichten en geselecteerde antwoorden. 5.11 GiB;piek macOS geheugen voetafdruk was 6.81 GiB. RSS alleen bevat niet alle unified-memory gebruik. Langere ingangen kunnen meer geheugen nodig hebben. Een latere correctheid run gemeten 462–897 ms terwijl andere toepassingen actief waren, zodat de 291 ms gemiddelde is geen vaste latency garantie. Dit zijn ontwikkeling metingen op één herhaalde aanvraag, niet een brede kwaliteit benchmark. 303 referentie token ID's overeenkomen, en het maximale waarschijnlijkheid verschil van de Python verwijzing gaat over 0.00266.

Bronnen