@mmerterden/multi-agent-pipeline 20.7.0 → 20.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/LICENSE +0 -10
- package/docs/facts.json +1 -1
- package/manifest.json +266 -267
- package/package.json +2 -2
- package/pipeline/scripts/_notices.mjs +1 -1
- package/pipeline/skills/.skill-manifest.json +68 -68
- package/pipeline/skills/shared/README.md +70 -70
- package/pipeline/skills/shared/external/alarmkit/SKILL.md +373 -381
- package/pipeline/skills/shared/external/alarmkit/evals/evals.json +23 -18
- package/pipeline/skills/shared/external/alarmkit/references/alarmkit-patterns.md +328 -378
- package/pipeline/skills/shared/external/app-clips/SKILL.md +260 -160
- package/pipeline/skills/shared/external/app-clips/evals/evals.json +27 -27
- package/pipeline/skills/shared/external/app-clips/references/data-handoff-notifications-location.md +150 -83
- package/pipeline/skills/shared/external/app-clips/references/routing-and-experiences.md +135 -83
- package/pipeline/skills/shared/external/app-clips/references/size-capabilities-and-promotion.md +143 -85
- package/pipeline/skills/shared/external/app-intents/SKILL.md +302 -304
- package/pipeline/skills/shared/external/app-intents/evals/evals.json +21 -21
- package/pipeline/skills/shared/external/app-intents/references/appintents-advanced.md +594 -894
- package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +339 -277
- package/pipeline/skills/shared/external/app-store-optimization/evals/evals.json +27 -23
- package/pipeline/skills/shared/external/app-store-optimization/references/keyword-research-methodology.md +105 -122
- package/pipeline/skills/shared/external/app-store-optimization/references/product-page-variants.md +143 -166
- package/pipeline/skills/shared/external/app-store-review/SKILL.md +307 -326
- package/pipeline/skills/shared/external/app-store-review/evals/evals.json +21 -21
- package/pipeline/skills/shared/external/app-store-review/references/privacy-manifest.md +105 -67
- package/pipeline/skills/shared/external/app-store-review/references/review-checklists.md +114 -101
- package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +333 -360
- package/pipeline/skills/shared/external/apple-on-device-ai/evals/evals.json +24 -27
- package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-conversion.md +215 -322
- package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-optimization.md +161 -256
- package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models.md +277 -387
- package/pipeline/skills/shared/external/apple-on-device-ai/references/mlx-swift.md +196 -210
- package/pipeline/skills/shared/external/authentication/SKILL.md +265 -381
- package/pipeline/skills/shared/external/authentication/evals/evals.json +25 -25
- package/pipeline/skills/shared/external/authentication/references/keychain-biometric.md +133 -178
- package/pipeline/skills/shared/external/authentication/references/passkeys.md +111 -147
- package/pipeline/skills/shared/external/avkit/SKILL.md +267 -364
- package/pipeline/skills/shared/external/avkit/evals/evals.json +26 -26
- package/pipeline/skills/shared/external/avkit/references/avkit-patterns.md +375 -493
- package/pipeline/skills/shared/external/background-processing/SKILL.md +270 -382
- package/pipeline/skills/shared/external/background-processing/evals/evals.json +22 -22
- package/pipeline/skills/shared/external/background-processing/references/background-task-patterns.md +169 -317
- package/pipeline/skills/shared/external/callkit-voip/SKILL.md +290 -371
- package/pipeline/skills/shared/external/callkit-voip/evals/evals.json +24 -24
- package/pipeline/skills/shared/external/callkit-voip/references/callkit-patterns.md +175 -343
- package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +292 -381
- package/pipeline/skills/shared/external/cloudkit-sync/evals/evals.json +33 -30
- package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-patterns.md +227 -355
- package/pipeline/skills/shared/external/contacts-framework/SKILL.md +197 -346
- package/pipeline/skills/shared/external/contacts-framework/evals/evals.json +19 -21
- package/pipeline/skills/shared/external/contacts-framework/references/contacts-patterns.md +169 -308
- package/pipeline/skills/shared/external/core-bluetooth/SKILL.md +226 -376
- package/pipeline/skills/shared/external/core-bluetooth/evals/evals.json +25 -22
- package/pipeline/skills/shared/external/core-bluetooth/references/ble-patterns.md +257 -337
- package/pipeline/skills/shared/external/core-data/SKILL.md +292 -368
- package/pipeline/skills/shared/external/core-data/evals/evals.json +30 -27
- package/pipeline/skills/shared/external/core-motion/SKILL.md +235 -324
- package/pipeline/skills/shared/external/core-motion/evals/evals.json +31 -27
- package/pipeline/skills/shared/external/core-motion/references/motion-patterns.md +210 -310
- package/pipeline/skills/shared/external/core-nfc/SKILL.md +292 -366
- package/pipeline/skills/shared/external/core-nfc/evals/evals.json +22 -24
- package/pipeline/skills/shared/external/core-nfc/references/nfc-patterns.md +233 -329
- package/pipeline/skills/shared/external/coreml/SKILL.md +323 -367
- package/pipeline/skills/shared/external/coreml/evals/evals.json +24 -21
- package/pipeline/skills/shared/external/coreml/references/coreml-swift-integration.md +562 -565
- package/pipeline/skills/shared/external/cryptokit/SKILL.md +253 -394
- package/pipeline/skills/shared/external/cryptokit/evals/evals.json +20 -18
- package/pipeline/skills/shared/external/cryptokit/references/cryptokit-patterns.md +299 -488
- package/pipeline/skills/shared/external/debugging-instruments/SKILL.md +270 -323
- package/pipeline/skills/shared/external/debugging-instruments/evals/evals.json +27 -30
- package/pipeline/skills/shared/external/debugging-instruments/references/instruments-guide.md +167 -315
- package/pipeline/skills/shared/external/debugging-instruments/references/lldb-patterns.md +140 -193
- package/pipeline/skills/shared/external/device-integrity/SKILL.md +230 -353
- package/pipeline/skills/shared/external/device-integrity/evals/evals.json +25 -21
- package/pipeline/skills/shared/external/device-integrity/references/device-integrity-patterns.md +159 -197
- package/pipeline/skills/shared/external/energykit/SKILL.md +225 -392
- package/pipeline/skills/shared/external/energykit/evals/evals.json +29 -28
- package/pipeline/skills/shared/external/energykit/references/energykit-patterns.md +174 -470
- package/pipeline/skills/shared/external/eventkit-calendar/SKILL.md +261 -383
- package/pipeline/skills/shared/external/eventkit-calendar/evals/evals.json +25 -22
- package/pipeline/skills/shared/external/eventkit-calendar/references/eventkit-patterns.md +165 -268
- package/pipeline/skills/shared/external/healthkit/SKILL.md +252 -303
- package/pipeline/skills/shared/external/healthkit/evals/evals.json +24 -23
- package/pipeline/skills/shared/external/healthkit/references/healthkit-patterns.md +369 -523
- package/pipeline/skills/shared/external/homekit-matter/SKILL.md +233 -348
- package/pipeline/skills/shared/external/homekit-matter/evals/evals.json +27 -22
- package/pipeline/skills/shared/external/homekit-matter/references/matter-commissioning.md +199 -305
- package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +368 -340
- package/pipeline/skills/shared/external/ios-accessibility/evals/evals.json +28 -27
- package/pipeline/skills/shared/external/ios-accessibility/references/a11y-patterns.md +314 -260
- package/pipeline/skills/shared/external/ios-accessibility/references/media-accessibility.md +97 -67
- package/pipeline/skills/shared/external/ios-accessibility/references/nutrition-labels.md +165 -101
- package/pipeline/skills/shared/external/ios-localization/SKILL.md +258 -371
- package/pipeline/skills/shared/external/ios-localization/evals/evals.json +23 -23
- package/pipeline/skills/shared/external/ios-localization/references/formatstyle-locale.md +283 -491
- package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +313 -440
- package/pipeline/skills/shared/external/ios-networking/SKILL.md +265 -341
- package/pipeline/skills/shared/external/ios-networking/evals/evals.json +24 -24
- package/pipeline/skills/shared/external/ios-networking/references/background-websocket.md +425 -652
- package/pipeline/skills/shared/external/ios-networking/references/file-storage-patterns.md +143 -285
- package/pipeline/skills/shared/external/ios-networking/references/lightweight-clients.md +93 -53
- package/pipeline/skills/shared/external/ios-networking/references/network-framework.md +231 -456
- package/pipeline/skills/shared/external/ios-networking/references/urlsession-patterns.md +517 -784
- package/pipeline/skills/shared/external/ios-simulator/SKILL.md +265 -393
- package/pipeline/skills/shared/external/ios-simulator/evals/evals.json +21 -21
- package/pipeline/skills/shared/external/ios-simulator/references/simctl-commands.md +177 -270
- package/pipeline/skills/shared/external/live-activities/SKILL.md +318 -360
- package/pipeline/skills/shared/external/live-activities/evals/evals.json +21 -21
- package/pipeline/skills/shared/external/live-activities/references/activitykit-patterns.md +478 -710
- package/pipeline/skills/shared/external/mapkit-location/SKILL.md +295 -267
- package/pipeline/skills/shared/external/mapkit-location/evals/evals.json +28 -24
- package/pipeline/skills/shared/external/mapkit-location/references/mapkit-corelocation-patterns.md +378 -532
- package/pipeline/skills/shared/external/mapkit-location/references/mapkit-patterns.md +397 -499
- package/pipeline/skills/shared/external/metrickit-diagnostics/SKILL.md +165 -348
- package/pipeline/skills/shared/external/metrickit-diagnostics/evals/evals.json +26 -23
- package/pipeline/skills/shared/external/metrickit-diagnostics/references/metrickit-patterns.md +123 -130
- package/pipeline/skills/shared/external/musickit-audio/SKILL.md +189 -315
- package/pipeline/skills/shared/external/musickit-audio/evals/evals.json +22 -21
- package/pipeline/skills/shared/external/musickit-audio/references/musickit-patterns.md +181 -270
- package/pipeline/skills/shared/external/natural-language/SKILL.md +188 -340
- package/pipeline/skills/shared/external/natural-language/evals/evals.json +21 -21
- package/pipeline/skills/shared/external/natural-language/references/translation-patterns.md +171 -225
- package/pipeline/skills/shared/external/passkit-wallet/SKILL.md +258 -392
- package/pipeline/skills/shared/external/passkit-wallet/evals/evals.json +30 -29
- package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +164 -231
- package/pipeline/skills/shared/external/pdfkit/SKILL.md +312 -344
- package/pipeline/skills/shared/external/pdfkit/evals/evals.json +19 -19
- package/pipeline/skills/shared/external/pdfkit/references/pdfkit-patterns.md +413 -624
- package/pipeline/skills/shared/external/pencilkit-drawing/SKILL.md +242 -358
- package/pipeline/skills/shared/external/pencilkit-drawing/evals/evals.json +25 -21
- package/pipeline/skills/shared/external/pencilkit-drawing/references/pencilkit-patterns.md +161 -226
- package/pipeline/skills/shared/external/permissionkit/SKILL.md +282 -400
- package/pipeline/skills/shared/external/permissionkit/evals/evals.json +27 -30
- package/pipeline/skills/shared/external/permissionkit/references/permissionkit-patterns.md +237 -350
- package/pipeline/skills/shared/external/photos-camera-media/SKILL.md +276 -325
- package/pipeline/skills/shared/external/photos-camera-media/references/av-playback.md +299 -545
- package/pipeline/skills/shared/external/photos-camera-media/references/camera-capture.md +344 -588
- package/pipeline/skills/shared/external/photos-camera-media/references/image-loading-caching.md +316 -660
- package/pipeline/skills/shared/external/photos-camera-media/references/photokit-patterns.md +270 -416
- package/pipeline/skills/shared/external/push-notifications/SKILL.md +312 -340
- package/pipeline/skills/shared/external/push-notifications/evals/evals.json +27 -26
- package/pipeline/skills/shared/external/push-notifications/references/notification-patterns.md +328 -485
- package/pipeline/skills/shared/external/push-notifications/references/rich-notifications.md +327 -560
- package/pipeline/skills/shared/external/realitykit-ar/SKILL.md +218 -410
- package/pipeline/skills/shared/external/realitykit-ar/evals/evals.json +24 -27
- package/pipeline/skills/shared/external/realitykit-ar/references/realitykit-patterns.md +221 -348
- package/pipeline/skills/shared/external/shareplay-activities/SKILL.md +222 -393
- package/pipeline/skills/shared/external/shareplay-activities/evals/evals.json +23 -24
- package/pipeline/skills/shared/external/shareplay-activities/references/shareplay-patterns.md +280 -420
- package/pipeline/skills/shared/external/speech-recognition/SKILL.md +217 -421
- package/pipeline/skills/shared/external/speech-recognition/evals/evals.json +23 -26
- package/pipeline/skills/shared/external/speech-recognition/references/speechanalyzer-patterns.md +133 -125
- package/pipeline/skills/shared/external/storekit/SKILL.md +228 -204
- package/pipeline/skills/shared/external/storekit/evals/evals.json +27 -24
- package/pipeline/skills/shared/external/storekit/references/app-review-guidelines.md +98 -109
- package/pipeline/skills/shared/external/storekit/references/core-patterns.md +298 -242
- package/pipeline/skills/shared/external/storekit/references/storekit-advanced.md +356 -649
- package/pipeline/skills/shared/external/swift-api-design-guidelines/SKILL.md +274 -399
- package/pipeline/skills/shared/external/swift-api-design-guidelines/evals/evals.json +22 -24
- package/pipeline/skills/shared/external/swift-api-design-guidelines/references/argument-labels-and-parameters.md +107 -108
- package/pipeline/skills/shared/external/swift-api-design-guidelines/references/conventions-and-special-rules.md +93 -165
- package/pipeline/skills/shared/external/swift-api-design-guidelines/references/naming-and-clarity.md +99 -137
- package/pipeline/skills/shared/external/swift-api-design-guidelines/references/side-effects-and-mutating-pairs.md +77 -120
- package/pipeline/skills/shared/external/swift-architecture/SKILL.md +334 -350
- package/pipeline/skills/shared/external/swift-architecture/evals/evals.json +22 -22
- package/pipeline/skills/shared/external/swift-charts/SKILL.md +208 -394
- package/pipeline/skills/shared/external/swift-charts/evals/evals.json +27 -30
- package/pipeline/skills/shared/external/swift-charts/references/charts-patterns.md +351 -762
- package/pipeline/skills/shared/external/swift-codable/SKILL.md +339 -343
- package/pipeline/skills/shared/external/swift-codable/evals/evals.json +20 -20
- package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +303 -351
- package/pipeline/skills/shared/external/swift-concurrency/evals/evals.json +27 -24
- package/pipeline/skills/shared/external/swift-concurrency/references/approachable-concurrency.md +65 -80
- package/pipeline/skills/shared/external/swift-concurrency/references/async-algorithms.md +48 -84
- package/pipeline/skills/shared/external/swift-concurrency/references/bridging-interop.md +134 -79
- package/pipeline/skills/shared/external/swift-concurrency/references/concurrency-patterns.md +145 -167
- package/pipeline/skills/shared/external/swift-concurrency/references/diagnostics.md +62 -50
- package/pipeline/skills/shared/external/swift-concurrency/references/swiftui-concurrency.md +92 -121
- package/pipeline/skills/shared/external/swift-concurrency/references/synchronization-primitives.md +177 -241
- package/pipeline/skills/shared/external/swift-formatstyle/SKILL.md +258 -234
- package/pipeline/skills/shared/external/swift-language/SKILL.md +342 -382
- package/pipeline/skills/shared/external/swift-language/evals/evals.json +24 -27
- package/pipeline/skills/shared/external/swift-language/references/swift-attributes-interop.md +79 -56
- package/pipeline/skills/shared/external/swift-language/references/swift-patterns-extended.md +297 -340
- package/pipeline/skills/shared/external/swift-security/SKILL.md +180 -161
- package/pipeline/skills/shared/external/swift-security/evals/evals.json +25 -25
- package/pipeline/skills/shared/external/swift-security/references/biometric-authentication.md +314 -469
- package/pipeline/skills/shared/external/swift-security/references/certificate-trust.md +408 -476
- package/pipeline/skills/shared/external/swift-security/references/common-anti-patterns.md +260 -530
- package/pipeline/skills/shared/external/swift-security/references/compliance-owasp-mapping.md +270 -477
- package/pipeline/skills/shared/external/swift-security/references/credential-storage-patterns.md +573 -571
- package/pipeline/skills/shared/external/swift-security/references/cryptokit-public-key.md +370 -441
- package/pipeline/skills/shared/external/swift-security/references/cryptokit-symmetric.md +332 -433
- package/pipeline/skills/shared/external/swift-security/references/keychain-access-control.md +346 -468
- package/pipeline/skills/shared/external/swift-security/references/keychain-fundamentals.md +352 -472
- package/pipeline/skills/shared/external/swift-security/references/keychain-item-classes.md +431 -432
- package/pipeline/skills/shared/external/swift-security/references/keychain-sharing.md +328 -425
- package/pipeline/skills/shared/external/swift-security/references/migration-legacy-stores.md +341 -579
- package/pipeline/skills/shared/external/swift-security/references/secure-enclave.md +396 -457
- package/pipeline/skills/shared/external/swift-security/references/testing-security-code.md +354 -614
- package/pipeline/skills/shared/external/swift-testing/SKILL.md +188 -175
- package/pipeline/skills/shared/external/swift-testing/evals/evals.json +26 -24
- package/pipeline/skills/shared/external/swift-testing/references/testing-advanced.md +80 -84
- package/pipeline/skills/shared/external/swift-testing/references/testing-patterns.md +317 -433
- package/pipeline/skills/shared/external/swiftdata/SKILL.md +392 -256
- package/pipeline/skills/shared/external/swiftdata/evals/evals.json +24 -24
- package/pipeline/skills/shared/external/swiftdata/references/core-data-coexistence.md +206 -402
- package/pipeline/skills/shared/external/swiftdata/references/indexing.md +59 -52
- package/pipeline/skills/shared/external/swiftdata/references/predicate-pitfalls.md +57 -33
- package/pipeline/skills/shared/external/swiftdata/references/swiftdata-advanced.md +354 -747
- package/pipeline/skills/shared/external/swiftdata/references/swiftdata-queries.md +300 -508
- package/pipeline/skills/shared/external/swiftlint/SKILL.md +175 -226
- package/pipeline/skills/shared/external/swiftlint/references/adoption-and-configuration.md +141 -208
- package/pipeline/skills/shared/external/swiftlint/references/custom-rules-and-analyze.md +100 -109
- package/pipeline/skills/shared/external/swiftlint/references/plugins-run-scripts-and-integrations.md +159 -179
- package/pipeline/skills/shared/external/swiftlint/references/rule-reference.md +383 -18
- package/pipeline/skills/shared/external/swiftlint/references/rules-suppressions-and-baselines.md +143 -229
- package/pipeline/skills/shared/external/swiftui-animation/SKILL.md +283 -366
- package/pipeline/skills/shared/external/swiftui-animation/references/animation-advanced.md +396 -608
- package/pipeline/skills/shared/external/swiftui-animation/references/core-animation-bridge.md +336 -385
- package/pipeline/skills/shared/external/swiftui-gestures/SKILL.md +239 -349
- package/pipeline/skills/shared/external/swiftui-gestures/references/gesture-patterns.md +228 -310
- package/pipeline/skills/shared/external/swiftui-layout-components/SKILL.md +260 -249
- package/pipeline/skills/shared/external/swiftui-layout-components/references/form.md +92 -74
- package/pipeline/skills/shared/external/swiftui-layout-components/references/grids.md +112 -177
- package/pipeline/skills/shared/external/swiftui-layout-components/references/list.md +61 -64
- package/pipeline/skills/shared/external/swiftui-layout-components/references/scrollview.md +94 -134
- package/pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md +193 -225
- package/pipeline/skills/shared/external/swiftui-liquid-glass/references/liquid-glass.md +173 -327
- package/pipeline/skills/shared/external/swiftui-navigation/SKILL.md +193 -168
- package/pipeline/skills/shared/external/swiftui-navigation/references/deeplinks.md +127 -150
- package/pipeline/skills/shared/external/swiftui-navigation/references/navigationstack.md +132 -133
- package/pipeline/skills/shared/external/swiftui-navigation/references/sheets.md +152 -117
- package/pipeline/skills/shared/external/swiftui-navigation/references/tabview.md +106 -140
- package/pipeline/skills/shared/external/swiftui-patterns/SKILL.md +316 -252
- package/pipeline/skills/shared/external/swiftui-patterns/references/architecture-patterns.md +341 -332
- package/pipeline/skills/shared/external/swiftui-patterns/references/deprecated-migration.md +547 -854
- package/pipeline/skills/shared/external/swiftui-patterns/references/design-polish.md +485 -537
- package/pipeline/skills/shared/external/swiftui-patterns/references/platform-and-sharing.md +417 -499
- package/pipeline/skills/shared/external/swiftui-performance/SKILL.md +213 -376
- package/pipeline/skills/shared/external/swiftui-performance/references/demystify-swiftui-performance-wwdc23.md +86 -175
- package/pipeline/skills/shared/external/swiftui-performance/references/optimizing-swiftui-performance-instruments.md +89 -195
- package/pipeline/skills/shared/external/swiftui-performance/references/understanding-hangs-in-your-app.md +95 -182
- package/pipeline/skills/shared/external/swiftui-performance/references/understanding-improving-swiftui-performance.md +71 -149
- package/pipeline/skills/shared/external/swiftui-performance/references/wwdc-session-sources.md +21 -27
- package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +303 -295
- package/pipeline/skills/shared/external/swiftui-uikit-interop/references/hosting-migration.md +204 -387
- package/pipeline/skills/shared/external/swiftui-uikit-interop/references/representable-recipes.md +469 -683
- package/pipeline/skills/shared/external/swiftui-webkit/SKILL.md +140 -186
- package/pipeline/skills/shared/external/swiftui-webkit/references/loading-and-observation.md +75 -86
- package/pipeline/skills/shared/external/swiftui-webkit/references/local-content-and-custom-schemes.md +63 -60
- package/pipeline/skills/shared/external/swiftui-webkit/references/migration-and-fallbacks.md +69 -137
- package/pipeline/skills/shared/external/swiftui-webkit/references/navigation-and-javascript.md +95 -67
- package/pipeline/skills/shared/external/tipkit/SKILL.md +220 -335
- package/pipeline/skills/shared/external/tipkit/references/tipkit-patterns.md +356 -494
- package/pipeline/skills/shared/external/vision-framework/SKILL.md +260 -375
- package/pipeline/skills/shared/external/vision-framework/references/vision-requests.md +393 -515
- package/pipeline/skills/shared/external/vision-framework/references/visionkit-scanner.md +363 -539
- package/pipeline/skills/shared/external/weatherkit/SKILL.md +152 -310
- package/pipeline/skills/shared/external/weatherkit/references/weatherkit-patterns.md +288 -407
- package/pipeline/skills/shared/external/widgetkit/SKILL.md +216 -288
- package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +414 -719
- package/pipeline/skills/shared/external/NOTICE-swift-ios-skills.md +0 -39
|
@@ -1,289 +1,275 @@
|
|
|
1
|
-
# MLX Swift
|
|
2
|
-
|
|
3
|
-
Complete reference for running open-source LLMs on Apple platforms using
|
|
4
|
-
MLX Swift and llama.cpp.
|
|
1
|
+
# MLX Swift, llama.cpp and routing between backends
|
|
5
2
|
|
|
6
3
|
## Contents
|
|
7
4
|
|
|
8
|
-
- [MLX
|
|
5
|
+
- [How MLX works](#how-mlx-works)
|
|
6
|
+
- [Loading and generating](#loading-and-generating)
|
|
7
|
+
- [Model sizes by device](#model-sizes-by-device)
|
|
8
|
+
- [Memory rules](#memory-rules)
|
|
9
|
+
- [Owning the model lifecycle](#owning-the-model-lifecycle)
|
|
10
|
+
- [Going to the background](#going-to-the-background)
|
|
9
11
|
- [llama.cpp](#llamacpp)
|
|
10
|
-
- [
|
|
11
|
-
- [
|
|
12
|
-
- [
|
|
13
|
-
- [
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
Apple's ML framework for Swift. Highest sustained generation throughput on
|
|
18
|
-
Apple Silicon via unified memory architecture.
|
|
12
|
+
- [GGUF quant types](#gguf-quant-types)
|
|
13
|
+
- [llama.cpp or MLX Swift](#llamacpp-or-mlx-swift)
|
|
14
|
+
- [Routing across backends](#routing-across-backends)
|
|
15
|
+
- [Built-in frameworks first](#built-in-frameworks-first)
|
|
16
|
+
- [Performance habits](#performance-habits)
|
|
17
|
+
- [Checklist](#checklist)
|
|
19
18
|
|
|
20
|
-
|
|
19
|
+
## How MLX works
|
|
21
20
|
|
|
22
|
-
-
|
|
23
|
-
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
|
|
21
|
+
- CPU and GPU share unified memory, so an array can move between them without
|
|
22
|
+
a copy.
|
|
23
|
+
- Evaluation is lazy; values are computed only when something needs them.
|
|
24
|
+
- It has automatic differentiation for training and runs on the GPU through
|
|
25
|
+
Metal.
|
|
26
|
+
- It started as a research tool and is used more and more in shipping apps.
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
## Loading and generating
|
|
29
29
|
|
|
30
30
|
```swift
|
|
31
|
-
import MLX
|
|
32
|
-
import MLXLLM
|
|
33
|
-
import MLXLMCommon
|
|
34
|
-
import MLXLMHFAPI
|
|
35
31
|
import MLXLMTokenizers
|
|
32
|
+
import MLXLMHFAPI
|
|
33
|
+
import MLXLMCommon
|
|
34
|
+
import MLXLLM
|
|
35
|
+
import MLX
|
|
36
36
|
|
|
37
|
+
let llama = ModelConfiguration(id: "mlx-community/Llama-3.2-3B-Instruct-4bit")
|
|
37
38
|
let container = try await LLMModelFactory.shared.loadContainer(
|
|
38
39
|
from: HubClient.default,
|
|
39
40
|
using: TokenizersLoader(),
|
|
40
|
-
configuration:
|
|
41
|
+
configuration: llama
|
|
41
42
|
)
|
|
43
|
+
```
|
|
42
44
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
+
`ChatSession(container)` is the simple path. For control over streaming and
|
|
46
|
+
sampling, drive the container directly:
|
|
45
47
|
|
|
46
|
-
|
|
47
|
-
let
|
|
48
|
-
let
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
print(text, terminator: "")
|
|
55
|
-
}
|
|
48
|
+
```swift
|
|
49
|
+
let question = UserInput(prompt: "Name three knots for climbing.")
|
|
50
|
+
let prepared = try await container.prepare(input: question)
|
|
51
|
+
let greedy = GenerateParameters(temperature: 0)
|
|
52
|
+
let events = try await container.generate(input: prepared, parameters: greedy)
|
|
53
|
+
for await item in events {
|
|
54
|
+
guard case .chunk(let piece) = item else { continue }
|
|
55
|
+
transcript += piece
|
|
56
56
|
}
|
|
57
57
|
```
|
|
58
58
|
|
|
59
|
-
|
|
59
|
+
## Model sizes by device
|
|
60
|
+
|
|
61
|
+
| Device | Download size | Resident memory | Suggested model |
|
|
62
|
+
|---|---|---|---|
|
|
63
|
+
| iPhone 12 to 14 | about 278 MB | about 0.3 GB | SmolLM2-135M, or Qwen 2.5 at 0.5B |
|
|
64
|
+
| iPhone 15 Pro or newer | about 2.7 GB | about 3.5 GB | Gemma 3n E4B at 4 bits |
|
|
65
|
+
| Mac, 8 GB | about 1.8 GB | about 3 GB | Llama 3.2 3B at 4 bits |
|
|
66
|
+
| Mac, 16 GB or more | about 4 GB | about 6 GB | Mistral 7B at 4 bits |
|
|
60
67
|
|
|
61
|
-
|
|
62
|
-
|---|---|---|---|---|
|
|
63
|
-
| iPhone 12-14 | 4-6 GB | SmolLM2-135M or Qwen 2.5 0.5B | ~278 MB | ~0.3 GB |
|
|
64
|
-
| iPhone 15 Pro+ | 8 GB | Gemma 3n E4B 4-bit | ~2.7 GB | ~3.5 GB |
|
|
65
|
-
| Mac 8 GB | 8 GB | Llama 3.2 3B 4-bit | ~1.8 GB | ~3 GB |
|
|
66
|
-
| Mac 16 GB+ | 16 GB+ | Mistral 7B 4-bit | ~4 GB | ~6 GB |
|
|
68
|
+
## Memory rules
|
|
67
69
|
|
|
68
|
-
|
|
70
|
+
- On iOS keep total use under 60% of device RAM.
|
|
71
|
+
- Cap the buffer cache: `Memory.cacheLimit = 512 * 1024 * 1024`.
|
|
72
|
+
- Read `Memory.snapshot()` to watch usage, and lower the cache limit when the
|
|
73
|
+
system reports pressure.
|
|
74
|
+
- Before loading a model, check that the free memory can hold it.
|
|
75
|
+
- For larger models on iOS, add the Increased Memory Limit entitlement.
|
|
69
76
|
|
|
70
|
-
|
|
71
|
-
2. Set MLX cache limits:
|
|
72
|
-
```swift
|
|
73
|
-
Memory.cacheLimit = 512 * 1024 * 1024 // 512 MB
|
|
74
|
-
```
|
|
75
|
-
3. Monitor memory pressure with `Memory.snapshot()` and reduce cache under pressure
|
|
76
|
-
4. Unload MLX and llama.cpp models on backgrounding or memory pressure; for MLX,
|
|
77
|
-
also call `Memory.clearCache()` after generation-heavy phases
|
|
78
|
-
5. Use "Increased Memory Limit" entitlement for larger models on iOS
|
|
79
|
-
6. Pre-flight memory checks before loading models
|
|
80
|
-
7. Validate MLX Swift and llama.cpp on physical Apple Silicon; Simulator cannot
|
|
81
|
-
exercise Metal-dependent inference, memory, or performance
|
|
77
|
+
## Owning the model lifecycle
|
|
82
78
|
|
|
83
|
-
|
|
79
|
+
Keep the loaded model in one object that knows whether it is loaded, whether it
|
|
80
|
+
is generating, and how to let go of it.
|
|
84
81
|
|
|
85
82
|
```swift
|
|
83
|
+
import Observation
|
|
84
|
+
|
|
85
|
+
@MainActor
|
|
86
86
|
@Observable
|
|
87
|
-
class
|
|
88
|
-
private var
|
|
89
|
-
private var
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
87
|
+
final class LocalModelHost {
|
|
88
|
+
private(set) var container: ModelContainer?
|
|
89
|
+
private(set) var runningGenerations = 0
|
|
90
|
+
private var generationTask: Task<Void, Never>?
|
|
91
|
+
|
|
92
|
+
var isBusy: Bool { runningGenerations > 0 }
|
|
93
|
+
|
|
94
|
+
func load(_ configuration: ModelConfiguration) async throws {
|
|
95
|
+
guard container == nil else { return }
|
|
96
|
+
let factory = LLMModelFactory.shared
|
|
97
|
+
container = try await factory.loadContainer(
|
|
98
|
+
from: HubClient.default, using: TokenizersLoader(), configuration: configuration)
|
|
97
99
|
}
|
|
98
100
|
|
|
99
|
-
func
|
|
100
|
-
|
|
101
|
+
func cancelGeneration() { generationTask?.cancel() }
|
|
102
|
+
|
|
103
|
+
func unload() {
|
|
104
|
+
generationTask?.cancel()
|
|
105
|
+
container = nil
|
|
101
106
|
Memory.clearCache()
|
|
102
107
|
}
|
|
108
|
+
|
|
109
|
+
func track(_ task: Task<Void, Never>) {
|
|
110
|
+
generationTask = task
|
|
111
|
+
runningGenerations += 1
|
|
112
|
+
Task { await task.value; runningGenerations -= 1 }
|
|
113
|
+
}
|
|
103
114
|
}
|
|
104
115
|
```
|
|
105
116
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
-
|
|
111
|
-
|
|
117
|
+
- Count active generations so "loaded but idle" is distinguishable from
|
|
118
|
+
"working".
|
|
119
|
+
- When the app goes to the background, cancel generation every time, without
|
|
120
|
+
exceptions.
|
|
121
|
+
- After a short grace period in the background (five seconds works well),
|
|
122
|
+
unload the model.
|
|
123
|
+
- Memory warnings arrive differently per platform: through UIKit notifications
|
|
124
|
+
on iOS and through a `DispatchSource` memory-pressure source on macOS.
|
|
112
125
|
|
|
113
|
-
|
|
126
|
+
## Going to the background
|
|
114
127
|
|
|
115
128
|
```swift
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
129
|
+
import UIKit
|
|
130
|
+
|
|
131
|
+
@MainActor
|
|
132
|
+
func releaseModelWhenBackgrounded(_ host: LocalModelHost) async {
|
|
133
|
+
let grace = Duration.seconds(5)
|
|
134
|
+
let moves = NotificationCenter.default.notifications(
|
|
135
|
+
named: UIApplication.didEnterBackgroundNotification)
|
|
136
|
+
for await _ in moves {
|
|
137
|
+
host.cancelGeneration()
|
|
138
|
+
try? await Task.sleep(for: grace)
|
|
139
|
+
host.unload()
|
|
125
140
|
}
|
|
126
141
|
}
|
|
127
142
|
```
|
|
128
143
|
|
|
129
144
|
## llama.cpp
|
|
130
145
|
|
|
131
|
-
C
|
|
132
|
-
|
|
133
|
-
### Swift Integration (swift-llama-cpp)
|
|
146
|
+
llama.cpp is a C and C++ inference engine with the widest platform support. It
|
|
147
|
+
loads GGUF files. From Swift, the `swift-llama-cpp` package wraps it:
|
|
134
148
|
|
|
135
149
|
```swift
|
|
150
|
+
import Foundation
|
|
136
151
|
import SwiftLlamaCpp
|
|
137
152
|
|
|
138
|
-
let
|
|
139
|
-
modelUrl:
|
|
140
|
-
config: .init(
|
|
141
|
-
batchSize: 256,
|
|
142
|
-
maxTokenCount: 4096,
|
|
143
|
-
useGPU: true
|
|
144
|
-
)
|
|
153
|
+
let engine = LlamaService(
|
|
154
|
+
modelUrl: ggufURL,
|
|
155
|
+
config: .init(batchSize: 512, maxTokenCount: 2048, useGPU: true)
|
|
145
156
|
)
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
LlamaChatMessage(role: .
|
|
149
|
-
LlamaChatMessage(role: .user, content: "Hello")
|
|
157
|
+
let conversation = [
|
|
158
|
+
LlamaChatMessage(role: .system, content: "Answer as a hiking guide."),
|
|
159
|
+
LlamaChatMessage(role: .user, content: "What should a day pack contain?")
|
|
150
160
|
]
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
of: messages,
|
|
161
|
+
for try await token in try await engine.streamCompletion(
|
|
162
|
+
of: conversation,
|
|
154
163
|
samplingConfig: .init(temperature: 0.8)
|
|
155
|
-
)
|
|
156
|
-
|
|
157
|
-
print(token, terminator: "")
|
|
164
|
+
) {
|
|
165
|
+
reply += token
|
|
158
166
|
}
|
|
159
167
|
```
|
|
160
168
|
|
|
161
|
-
|
|
169
|
+
## GGUF quant types
|
|
162
170
|
|
|
163
|
-
|
|
|
171
|
+
| Type | Pick it when | Output quality | File size |
|
|
164
172
|
|---|---|---|---|
|
|
165
|
-
| Q2_K |
|
|
166
|
-
| Q4_K_M |
|
|
167
|
-
| Q5_K_M |
|
|
168
|
-
| Q8_0 |
|
|
173
|
+
| Q2_K | memory is extremely tight | lowest | smallest |
|
|
174
|
+
| Q4_K_M | shipping on phones; the usual default | good | balanced |
|
|
175
|
+
| Q5_K_M | a bit more quality is worth the space | higher | larger |
|
|
176
|
+
| Q8_0 | desktops with plenty of RAM | close to the original | largest |
|
|
169
177
|
|
|
170
|
-
|
|
178
|
+
## llama.cpp or MLX Swift
|
|
171
179
|
|
|
172
|
-
|
|
|
180
|
+
| Question | MLX Swift | llama.cpp |
|
|
173
181
|
|---|---|---|
|
|
174
|
-
|
|
|
175
|
-
|
|
|
176
|
-
|
|
|
177
|
-
|
|
|
178
|
-
|
|
|
179
|
-
|
|
|
182
|
+
| Where does it run? | Apple platforms only | iOS, Android, desktop, servers |
|
|
183
|
+
| Weights it loads | MLX / Hugging Face format | GGUF files |
|
|
184
|
+
| Speed on Apple Silicon | the fastest | good |
|
|
185
|
+
| How efficient with memory? | good | excellent |
|
|
186
|
+
| How settled is it? | still changing quickly | long established |
|
|
187
|
+
| Where do models come from? | the `mlx-community` organisation | the widest range of sources |
|
|
180
188
|
|
|
181
|
-
##
|
|
189
|
+
## Routing across backends
|
|
182
190
|
|
|
183
|
-
|
|
191
|
+
Order of preference:
|
|
184
192
|
|
|
185
|
-
|
|
193
|
+
1. Foundation Models, integrated with the system.
|
|
194
|
+
2. MLX Swift, for throughput on Apple Silicon.
|
|
195
|
+
3. llama.cpp, for compatibility.
|
|
196
|
+
4. Nothing available: throw `AIError.noBackendAvailable`.
|
|
186
197
|
|
|
187
198
|
```swift
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
199
|
+
enum AIError: Error { case noBackendAvailable }
|
|
200
|
+
|
|
201
|
+
actor ModelRouter {
|
|
202
|
+
enum Backend: Sendable { case foundationModels, mlx, llamaCpp }
|
|
203
|
+
|
|
204
|
+
private(set) var activeBackend: Backend?
|
|
205
|
+
|
|
206
|
+
func resolve() async throws -> Backend {
|
|
207
|
+
if let activeBackend { return activeBackend }
|
|
208
|
+
let choice: Backend
|
|
209
|
+
if SystemLanguageModel.default.isAvailable {
|
|
210
|
+
choice = .foundationModels
|
|
211
|
+
} else if await MLXSupport.canLoad(for: DeviceTier.current) {
|
|
212
|
+
choice = .mlx
|
|
213
|
+
} else if LlamaSupport.hasBundledModel {
|
|
214
|
+
choice = .llamaCpp
|
|
215
|
+
} else {
|
|
216
|
+
throw AIError.noBackendAvailable
|
|
217
|
+
}
|
|
218
|
+
activeBackend = choice
|
|
219
|
+
return choice
|
|
192
220
|
}
|
|
193
|
-
|
|
194
|
-
// Fall back to MLX Swift (best throughput)
|
|
195
|
-
if canLoadMLXModel() {
|
|
196
|
-
return try await mlxRespond(prompt)
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
// Fall back to llama.cpp (broadest compatibility)
|
|
200
|
-
if llamaModelAvailable() {
|
|
201
|
-
return try await llamaRespond(prompt)
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
throw AIError.noBackendAvailable
|
|
205
221
|
}
|
|
206
222
|
```
|
|
207
223
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
1. Create a router that checks Foundation Models availability first
|
|
211
|
-
2. Fall back to MLX or llama.cpp when Foundation Models is unavailable
|
|
212
|
-
3. Define model tiers based on device capabilities
|
|
213
|
-
4. Serialize all model access through a coordinator actor to prevent contention
|
|
214
|
-
5. Ensure tool systems work across backends (schema translation may be needed)
|
|
215
|
-
|
|
216
|
-
### Coordinator Actor
|
|
217
|
-
|
|
218
|
-
```swift
|
|
219
|
-
actor ModelCoordinator {
|
|
220
|
-
private var activeBackend: Backend?
|
|
221
|
-
|
|
222
|
-
func withExclusiveAccess<T>(
|
|
223
|
-
_ work: () async throws -> T
|
|
224
|
-
) async rethrows -> T {
|
|
225
|
-
try await work()
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
enum Backend {
|
|
229
|
-
case foundationModels
|
|
230
|
-
case mlx
|
|
231
|
-
case llamaCpp
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
```
|
|
235
|
-
|
|
236
|
-
## Built-in Apple Frameworks
|
|
237
|
-
|
|
238
|
-
Before reaching for custom models, consider built-in frameworks:
|
|
239
|
-
|
|
240
|
-
### Natural Language Framework
|
|
224
|
+
Guidelines:
|
|
241
225
|
|
|
242
|
-
|
|
226
|
+
- Ask the system model first; only when it is missing try MLX, then llama.cpp.
|
|
227
|
+
- Define model tiers per device class so each device gets a model it can hold.
|
|
228
|
+
- Serialise every model call through one coordinator actor (see SKILL.md for a
|
|
229
|
+
gate that actually queues requests).
|
|
230
|
+
- Tools may need translating: a Foundation Models `Tool` schema is not the
|
|
231
|
+
format an open model expects, so map tool definitions per backend.
|
|
243
232
|
|
|
244
|
-
-
|
|
245
|
-
- `NLTokenizer` -- Word, sentence, paragraph tokenization
|
|
246
|
-
- `NLTagger` -- Parts of speech, named entity recognition, sentiment
|
|
247
|
-
- `NLEmbedding` -- Word and sentence vectors, similarity search
|
|
233
|
+
## Built-in frameworks first
|
|
248
234
|
|
|
249
|
-
|
|
235
|
+
Before shipping a custom model, check whether the system already does the job.
|
|
250
236
|
|
|
251
|
-
|
|
237
|
+
Natural Language, with nothing to download:
|
|
252
238
|
|
|
253
|
-
-
|
|
254
|
-
-
|
|
255
|
-
-
|
|
256
|
-
-
|
|
239
|
+
- Which language is this? `NLLanguageRecognizer`.
|
|
240
|
+
- Where are the word, sentence or paragraph boundaries? `NLTokenizer`.
|
|
241
|
+
- Tagging for sentiment, named entities or parts of speech: `NLTagger`.
|
|
242
|
+
- Vectors for words and sentences, and how close two are: `NLEmbedding`.
|
|
257
243
|
|
|
258
|
-
|
|
244
|
+
Vision (legacy `VN` names shown; from iOS 18 prefer the Swift request types
|
|
245
|
+
such as `RecognizeTextRequest`):
|
|
259
246
|
|
|
260
|
-
|
|
247
|
+
- Reading text: `VNRecognizeTextRequest`.
|
|
248
|
+
- Labelling a whole image: `VNClassifyImageRequest`.
|
|
249
|
+
- Finding faces: `VNDetectFaceRectanglesRequest`.
|
|
250
|
+
- Human body pose: `VNDetectHumanBodyPoseRequest`.
|
|
261
251
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
- Tabular data models
|
|
265
|
-
- Sound classification
|
|
252
|
+
Create ML trains image, text, tabular and sound classifiers on a Mac or on
|
|
253
|
+
device.
|
|
266
254
|
|
|
267
|
-
## Performance
|
|
255
|
+
## Performance habits
|
|
268
256
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
6. For MLX Swift, monitor token generation speed and adjust model size if
|
|
276
|
-
below acceptable thresholds
|
|
257
|
+
- Send several Vision requests in one `perform()` call.
|
|
258
|
+
- Use the `.fast` recognition level for live camera text.
|
|
259
|
+
- Core ML on the Neural Engine is the most energy-efficient option for the ops
|
|
260
|
+
it supports.
|
|
261
|
+
- With MLX, track tokens per second; if it falls below what the feature needs,
|
|
262
|
+
move to a smaller model.
|
|
277
263
|
|
|
278
|
-
##
|
|
264
|
+
## Checklist
|
|
279
265
|
|
|
280
|
-
- [ ]
|
|
281
|
-
- [ ] Memory pressure
|
|
282
|
-
- [ ] Models
|
|
283
|
-
- [ ] MLX cache
|
|
284
|
-
- [ ]
|
|
285
|
-
- [ ]
|
|
286
|
-
- [ ] All model access
|
|
287
|
-
- [ ]
|
|
288
|
-
- [ ] Energy
|
|
289
|
-
- [ ]
|
|
266
|
+
- [ ] The model fits the device's RAM.
|
|
267
|
+
- [ ] Memory pressure is monitored.
|
|
268
|
+
- [ ] Models unload when the app goes to the background.
|
|
269
|
+
- [ ] MLX cache limit is set.
|
|
270
|
+
- [ ] A memory check runs before loading a large model.
|
|
271
|
+
- [ ] There is a fallback when no model is available.
|
|
272
|
+
- [ ] All model access goes through one coordinator.
|
|
273
|
+
- [ ] The quantization level matches the quality and size trade-off.
|
|
274
|
+
- [ ] Energy use was considered (Neural Engine versus GPU).
|
|
275
|
+
- [ ] Metal inference was tested on physical devices.
|