Traducere automată · Originalul în engleză

Clef-flash: decizii locale în Swift

Previzualizare dezvoltare. Suportul text local este în curs de dezvoltare și nu a fost lansat în speech-swift.

Clef-flash citește o stare și un set de întrebări, apoi înscrie răspunsurile permise împreună. Modulul Swift rulează modelul 9B local pe Apple Silicon cu MLX și greutățile de 4 biți. Nr. Python proces sau găzduit API este utilizat în timpul conferinței.

Utilizarea de la 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)

Întrebările de alegere returnează probabilități pentru fiecare opțiune. A noul întrebare returnează probabilitatea de a fi adevărat. O întrebare punctaj ia o listă ordonată, cum ar fi .score(["normal", "urgent"]) și returnează indexul zero așteptat. Modulul nu execută comenzi.

Linia de comandă

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

Modelul implicit este aufklater/Clef-flash-9B-MLX-4bit . Prima comandă îl descarcă dacă este necesar. Utilizați un director local sau steagul offline pentru a evita o descărcare.

Comandă independentă

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

Ieșirea include probabilități, număr de jetoane de intrare, și timp de decizie, cu excepția sarcinii model. Comanda acceptă un array de întrebări comandate; acesta nu este un obiectiv SystemOne HTTP.

Cum funcționează

A Qwen3.5 coloana vertebrală citește textul și schema. Şeful de decizie comun participă la acest context, permite întrebări interacţionează, şi combină scoruri contextuale cu un precedent de la încrucișările de ieșire ale modelului. Acesta înscrie opţiunile direct în loc de a genera un răspuns JSON token prin jeton.

Cerințe și limite

Validarea locală

Octombrie 3 actualizare: Două noi tururi de douăzeci de repetări calde, fiecare în medie cu aproximativ 276 ms pentru aceeași cerere de 303-token, cu trei câmpuri (interval observat 274 de ore/284 ms), cu excepția sarcinii de model. Mai devreme 291 ms rula de mai jos a furnizat separat RSS și măsurători fizico-de picior. Aceasta este o cerere de text repetată; recunoașterea vorbirii, producția vorbirii și inferința vizuală nu au fost măsurate.

Pe o M5 Pro cu 48 GB memorie unificată, douăzeci de runde încălzite de unul 303-Token, cerere în trei domenii medie 0.291 secunde (mediană 0.290; interval 0.280–0.299), cu excepția sarcinii de model. GPU operațiuni și 512- Bucăţi de hârtie au redus originalul 0.921-a doua medie de aproximativ 68%, cu greutăți nemodificate și răspunsuri selectate. Procesul de vârf RSS a fost 5.11 GiB; vârf macOS Amprenta memoriei a fost 6.81 GiB. RSS singur nu surprinde toate uz unificat-memorie. intrări mai lungi pot avea nevoie de mai mult memorie. O corectitudine mai târziu a alerga măsurate 462–897 ms în timp ce alte aplicații au fost active, astfel încât 291 ms medie nu este o garanție fixă latență. Acestea sunt măsurători de dezvoltare pe o cerere repetată, nu un criteriu de calitate largă. Toate 303 se potrivește ID-urile de referință și diferența de probabilitate maximă față de Python se referă la 0.00266.

Surse