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

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.

Fonti