0.7.3 — deploys to macOS 26 / iOS 26; Apple's foundation model as a decision backend; measured catalog sizes
LatestA patch, additive. The package deploys to macOS 26 / iOS 26 (was 27): an app or package with a 26 floor can depend on the kit and use Core AI behind #available(macOS 27, iOS 27, *); models still run on 27 only (#56, Mattt Zmuda). Apple's on-device foundation model is a decision backend (FoundationModelDecisions, systemone serve --backend fm). Catalog sizes are measured decimal MB, and the MinerU, GLM-OCR and Nemotron loaders download their pinned revision. exact: "0.7.2" resolvers move to 0.7.3; from: resolvers pick it up.
Start here: installation and smallest working example · System One, on device · Examples/Decide
brew upgrade systemone # from 0.7.2.package(url: "https://github.com/john-rocky/coreai-kit", exact: "0.7.3")Added
-
Deploys to macOS 26 / iOS 26. The package floor is macOS 26 / iOS 26 (was 27), so an
app or package with a 26 floor can depend on the kit and use Core AI behind
#available(macOS 27, iOS 27, *). Everything that touches Core AI, plusSystemTranscriber,
FoundationModelDecisions,TranscriptRendererandVLPromptRenderer(27-only Speech and
Foundation Models APIs), is@available(macOS 27, iOS 27, *);CoreAIKitCore, theDecision
types,SystemOneServerandCoreAI.Opstay at 26.systemoneandcoreai-doctorexit with
a message below 27. On x86_64 macOS the Float16 paths are compiled out, the same guard as
coreai-models 0.2.8-zoo. Models still run on 27 only. (#56, Mattt Zmuda) -
Apple's on-device foundation model as a decision backend.
FoundationModelDecisions
(Sources/CoreAIKit/Decide) answers typed questions on the FoundationModels framework's
SystemLanguageModel.defaultby guided generation: a choice is an enumeration of its option
ids, a noul a Bool, a score an Int within its levels, sampled greedily, so the model can only
answer with a listed value. Nothing is scored — the framework exposes no logits — so an answer's
probabilities are one-hot (1 on the generated value), its confidence 1, and aSystemOne.Response
from it carriesmetadata(probabilities: one-hot,calibration: none). The state goes into
the session's instructions once; consecutive questions on the same state continue one
transcript (Configuration.shareSession, the analogue ofsharePrefix), or each starts a new
session. A guardrail violation, a model refusal and a prompt past the context window are
DecisionError.refused, a server's 422.initthrows with the reason when Apple Intelligence
is unavailable.DecisionBackendis the protocol both it andTypedDecisionssatisfy;
SystemOneServertakes either (init(backend:);decideris now optional), and
decide-cli ask | bench | filter | serve --backend fmanswer on it (the model id is
apple-foundation-model). No catalog model's path changes.
Fixed
- Download sizes are in one unit, and measured.
systemone modelsshowed
apus-decision-v1-4bas a 5.5 GB download. It is 5,770,814,420 bytes: 5.8 GB. Everything that
readssizeMBcounts decimal megabytes:capability(), the residency estimate,systemone models, the docs. 34 of the catalog's 111 variant sizes were MiB instead (bytes / 1,048,576),
4.9% low. Another 21 were more than 2% off for other reasons, among them round-number
estimates, subtrees a loader downloads left out (VibeVoice's glue, voices and embedding table,
369 MB), and iOS figures above what the iOS subtree holds (VoxCPM2: 5,658 MB declared, 4,727 MB
downloaded).scripts/measure-catalog-sizes.pynow measures all 111 at the pinned revision and
writescatalog.jsonand the built-in copy together. CI runs its--check, which fails on a
size more than 2% off.systemone modelsand apps that load the live catalog already show the
new sizes;capability(), the residency estimate and the MCPmodelstool read the built-in
copy, which carries them from this release. Docs and examples that quoted an old size quote the
new one. KitMineruReader(catalog:),KitGlmOcrReader(catalog:)andKitNemotronModel(catalog:)
downloaded the model repo'smain, not the revision the catalog entry pins. An upload to one
of those repos would have reached apps without a reviewed pin bump. They now download the
pinned revision, as every othercatalog:initializer does;CoreAI.readreaches the first
two. On 2026-09-24mainheld the same files as the pins under the paths they fetch. A copy
cached frommainis not reused while online: the first load after updating downloads the
pinned revision again (2.6 GB for MinerU, 1.7 GB for GLM-OCR, 1.3 GB for Nemotron).
Docs
docs/SYSTEM_ONE.md"Which model": JevBench's public items on eight catalog models on a Mac
and five of them on an iPhone 17 Pro (2026-09-24), with accuracy, time per question, download
size and option limit per model, and when to nameapus-decision-v1-4binstead of the
default. The default staysminicpm5-2bon every platform.docs/SYSTEM_ONE.md,TypedDecisions: the iPhone's 1,024-token limit is the pipelined engine's,
which chat generation runs on. A decision runs on the sequential engine, whereminicpm5-2b
read prompts up to 3,789 tokens on an iPhone 17 Pro with the Mac's answer on all 111 JevBench
hard items (kit 0.7.1). The docs had told decisions to stay under 1,024 tokens.docs/SYSTEM_ONE.md"What it costs",Examples/Decide/README.md: the iPhone's time per
decision on kit 0.7.1, where a recurrent hybrid reuses the checkpointed state: 263 ms on
openthai-systemone, 517 ms ondecider-0.8b, 1,040 ms onqwen3.5-2b-decision(101 ms on
minicpm5-2b). The pages had the figures from before the checkpoint and said the phone had
not been measured with it.
Verified environment
- Mac: M4 Max, macOS 27.0
26A428, Xcode 2727A266a. CI on the release commit:build-testandexample-app-releasepass. The ChatDemoentry-checkon this release's tree, from an empty cache:chatandfm(ORCHID recall on the second turn) on the built-in Qwen3 0.6B pin, andhybrid(twoChatSessionturns onqwen3.5-0.8b, the first turn recalled) pass. - A minimal package with a macOS 26 floor that adds CoreAIKit by URL at
exact: "0.7.3"builds in Release for arm64 and x86_64 in one binary, and reads the catalog behind#available(macOS 27, iOS 27, *). CoreAIOps also builds for iOS at the 26 floor (generic iOS destination), with no availability errors. systemone-0.7.3-macos-arm64.zip: Developer ID signed and notarized, and the notary ticket names this binary's cdhash. From the tap,brew upgrade systemonemoves 0.7.2 to 0.7.3 in 7 s, andbrew testpasses.systemone serveanswers/healthwith 200 3.7 s after launch (the weights were already in the file cache).