Traduzione automatica · Originale inglese
Clef-flash: decisioni locali in Swift
Anteprima dello sviluppo. Il supporto del testo locale è in fase di sviluppo e non è stato rilasciato in speech-swift.
Clef-flash legge uno stato e una serie di domande, poi segna le risposte consentite insieme. Swift il modulo funziona 9B modello localmente su Apple Silicon con MLX e 4- pesi a bit. Python processo o ospitato API viene utilizzato durante l'inferenza.
Utilizzare da 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)
Scelta domande restituire le probabilità per ogni opzione. A noul domanda restituisce la probabilità di vero. Una domanda di punteggio prende un elenco ordinato come .score(["normal", "urgent"]) e restituisce l'indice zero-based previsto. Il modulo non esegue i comandi.
Linea di comando
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
Il modello predefinito è aufklarer/ Clef-flash-9B-MLX-4bit . Il primo comando lo scarica se necessario. Utilizzare una directory locale o la bandiera offline per evitare un download.
Comando 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"}}
]}
L'output include probabilità, conteggio dei token di input e tempo di decisione, esclusi il carico del modello. Il comando accetta un array di domande ordinato; non è un endpoint HTTP SystemOne.
Come funziona
A Qwen3.5 backbone legge il testo e lo schema. La testa di decisione congiunta partecipa a tale contesto, permette di interagire con le domande e combina i punteggi contestuali con un precedente delle embedding di uscita del modello.
Requisiti e limiti
- Apple Silicon, macOS 15+, e MLX. L'esportazione a 4 bit a 4 bit supportata è di circa 5.3 GB; la memoria runtime è supplementare.
- Immagini, video, il modello 27B Clef e altri formati di peso non sono supportati.
- Utilizzare ogni istanza serialmente. Il limite predefinito è 4096 token codificati, configurabile a 16384; le richieste oversize non riescono invece di troncare silenziosamente lo stato.
- Le probabilità non sono garanzie calibrate. Mantenere l'esecuzione dei comandi e la conferma separata dal punteggio del modello.
- La latenza ospitata non è una misura di questa implementazione locale Swift.
Validazione locale
Ottobre 3 aggiornamento: Due nuove piste di venti ripetizioni calde ciascuna media di 276 ms per lo stesso 303-token, richiesta a tre campi (intervallo osservato 274-284 ms), escludendo il carico del modello. I primi 291 ms funzionano di seguito hanno fornito le misurazioni di RSS separate e di impronte fisiche.
Su una M5 Pro con 48 GB memoria unificata, venti corse riscaldate di uno 303-token, richiesta a tre campi mediamente 0.291 secondi (media) 0.290; gamma 0.280–0.299), escluso il carico del modello. Nativo GPU operazioni e 512-token chunks ridotto l'originale 0.921-secondo significa circa 68%, con pesi invariati e risposte selezionate. Processo di picco RSS è stato 5.11 GiB; picco macOS l'impronta di memoria era 6.81 GiB. RSS da solo non cattura tutto l'uso unificato-memoria. Ingressi più lunghi possono avere bisogno di più memoria. 462–897 ms mentre altre applicazioni erano attive, quindi il 291 ms mean non è una garanzia di latenza fissa, queste sono misure di sviluppo su una richiesta ripetuta, non un benchmark di alta qualità. 303 riferimento ID token corrispondono, e la differenza di probabilità massima da Python riferimento è circa 0.00266.