Maskinoversettelse · Engelsk original

Clef-flash: lokale beslutninger i Swift

Utviklingsforhåndsvisning. Lokal tekststøtte er under utvikling og har ikke blitt utgitt i speech-swift.

Clef-flash leser en tilstand og et sett med spørsmål, så får du de tillatte svarene sammen. Swift modulen kjører 9B-modellen lokalt på Apple Silicon med MLX og 4-bits vekter. Nei Python prosess eller hostet API brukes under inferens.

Bruk fra 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)

Valgspørsmål returnerer sannsynligheten for hvert alternativ. A noul spørsel returnerer sannsynlighet for sant. Et poengspørsmål tar en bestilt liste som .score(["normal", "urgent"]) og returnerer den forventede nullbaserte indeksen. Modulen kjører ikke kommandoer.

Kommandolinje

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 er aufklarer/Clef-flash-9B-MLX-4bit. Den første kommandoen lastes ned om nødvendig. Bruk en lokal katalog eller offline-flagget for å unngå nedlasting.

Standard kommando

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

Utgangen inkluderer sannsynligheter, antall inngangssymboler og avgjørelsestid som utelukker modelllast. Kommandoen godtar en bestilt spørsmålsliste; det er ikke et SystemOne HTTP- endepunkt.

Hvordan det fungerer

A Qwen3.5 ryggrad leser tekst og skjema. Det felles beslutningshodet deltar i den sammenhengen, lar spørsmål samhandle og kombinerer kontekstmessige scorer med en tidligere fra modellens utgangsinnlegg. Det Scorer alternativene direkte i stedet for å generere et JSON-svarssymbol ved token.

Krav og grenser

Lokal validering

Oktober 3 oppdatering: To friske løp på tjue varme gjentalser hver gjennomsnittlig ca 276 ms for samme 303-token, trefeltsforespørsel (observert område 274-284 ms), ekskludert modelllast. De tidligere 291 ms kjøres nedenfor ga separate RSS- og fysisk fotavtrykksmålinger. Dette er én gjentatt tekstforespørsling; talegjenkjenning, taleutgang og visuell inferens ble ikke målt.

På en M5 Pro med 48 GB-unit minne, tjue varmede løp av én 303-token, trefeltsforespørsel i gjennomsnitt 0.291 sekunder (median) 0.290; rekkevidde 0.280–0.299), unntatt modelllast. Native GPU operasjoner og 512-token biter redusert den opprinnelige 0.921 Det andre betyr om 68%, med uendret vekt og utvalgte svar. Peak prosess RSS var 5.11 GiB; topp macOS Minnefotavtrykk var 6.81 GiB. RSS alene fanger ikke all enhetsminnebruk. Lengre innganger kan trenge mer minne. En senere korrekthet kjører målt 462–897 ms mens andre programmer var aktive, så 291 ms gjennomsnitt er ikke en fast latens garanti. Dette er utviklingsmålinger på én gjentatt forespørsel, ikke en bred kvalitet benchmark. Alle 303 referanse token IDs match, og den maksimale sannsynlighetsforskjellen fra Python referansen handler om 0.00266.

Kilder