diff --git a/Applications/LLMEval/Assets.xcassets/AccentColor.colorset/Contents.json b/Applications/LLMEval/Assets.xcassets/AccentColor.colorset/Contents.json
new file mode 100644
index 0000000..eb87897
--- /dev/null
+++ b/Applications/LLMEval/Assets.xcassets/AccentColor.colorset/Contents.json
@@ -0,0 +1,11 @@
+{
+ "colors" : [
+ {
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Applications/LLMEval/Assets.xcassets/AppIcon.appiconset/Contents.json b/Applications/LLMEval/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000..532cd72
--- /dev/null
+++ b/Applications/LLMEval/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,63 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "platform" : "ios",
+ "size" : "1024x1024"
+ },
+ {
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "16x16"
+ },
+ {
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "16x16"
+ },
+ {
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "32x32"
+ },
+ {
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "32x32"
+ },
+ {
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "128x128"
+ },
+ {
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "128x128"
+ },
+ {
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "256x256"
+ },
+ {
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "256x256"
+ },
+ {
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "512x512"
+ },
+ {
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "512x512"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Applications/LLMEval/Assets.xcassets/Contents.json b/Applications/LLMEval/Assets.xcassets/Contents.json
new file mode 100644
index 0000000..73c0059
--- /dev/null
+++ b/Applications/LLMEval/Assets.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Applications/LLMEval/ContentView.swift b/Applications/LLMEval/ContentView.swift
new file mode 100644
index 0000000..e6d59ca
--- /dev/null
+++ b/Applications/LLMEval/ContentView.swift
@@ -0,0 +1,121 @@
+// Copyright © 2024 Apple Inc.
+
+import LLM
+import MLX
+import SwiftUI
+import Tokenizers
+import Metal
+
+struct ContentView: View {
+
+ @State var prompt = "compare python and swift"
+ @State var llm = LLMEvaluator()
+
+ var body: some View {
+ VStack {
+ ScrollView(.vertical) {
+ if llm.running {
+ ProgressView()
+ }
+ Text(llm.output)
+ }
+ HStack {
+ TextField("prompt", text: $prompt)
+ .onSubmit(generate)
+ .disabled(llm.running)
+ Button("generate", action: generate)
+ .disabled(llm.running)
+ }
+ }
+ .padding()
+ .task {
+ _ = try? await llm.load()
+ }
+ }
+
+ private func generate() {
+ Task {
+ await llm.generate(prompt: prompt)
+ }
+ }
+}
+
+@Observable
+class LLMEvaluator {
+
+ @MainActor
+ var running = false
+
+ var output = ""
+
+ let modelConfiguration = ModelConfiguration.phi4bit
+ let temperature: Float = 0.0
+ let maxTokens = 100
+
+ enum LoadState {
+ case idle
+ case loaded(LLMModel, LLM.Tokenizer)
+ }
+
+ var loadState = LoadState.idle
+
+ func load() async throws -> (LLMModel, LLM.Tokenizer) {
+ switch loadState {
+ case .idle:
+ let (model, tokenizer) = try await LLM.load(configuration: modelConfiguration) { [modelConfiguration] progress in
+ DispatchQueue.main.sync {
+ self.output = "Downloading \(modelConfiguration.id): \(Int(progress.fractionCompleted * 100))%"
+ }
+ }
+ loadState = .loaded(model, tokenizer)
+ return (model, tokenizer)
+
+ case .loaded(let model, let tokenizer):
+ return (model, tokenizer)
+ }
+ }
+
+ func generate(prompt: String) async {
+ do {
+ let (model, tokenizer) = try await load()
+
+ await MainActor.run {
+ running = true
+ self.output = ""
+ }
+
+ let prompt = modelConfiguration.prepare(prompt: prompt)
+ let promptTokens = MLXArray(tokenizer.encode(text: prompt))
+
+ var outputTokens = [Int]()
+
+ for token in TokenIterator(prompt: promptTokens, model: model, temp: temperature) {
+ let tokenId = token.item(Int.self)
+
+ if tokenId == tokenizer.unknownTokenId {
+ break
+ }
+
+ outputTokens.append(tokenId)
+ let text = tokenizer.decode(tokens: outputTokens)
+ await MainActor.run {
+ self.output = text
+ }
+
+ if outputTokens.count == maxTokens {
+ break
+ }
+ }
+
+ await MainActor.run {
+ running = false
+ }
+
+ } catch {
+ await MainActor.run {
+ running = false
+ output = "Failed: \(error)"
+ }
+ }
+ }
+}
diff --git a/Applications/LLMEval/LLMEval.entitlements b/Applications/LLMEval/LLMEval.entitlements
new file mode 100644
index 0000000..0ec64e4
--- /dev/null
+++ b/Applications/LLMEval/LLMEval.entitlements
@@ -0,0 +1,16 @@
+
+
+
" + prompt.replacingOccurrences(of: "", with: " ") + " " } - static let phi4bit = ModelConfiguration(id: "mlx-community/phi-2-hf-4bit-mlx") { prompt in + public static let phi4bit = ModelConfiguration(id: "mlx-community/phi-2-hf-4bit-mlx") { prompt in "Instruct: \(prompt). Output: " } - static let gemma2bQuantized = ModelConfiguration( + public static let gemma2bQuantized = ModelConfiguration( id: "mlx-community/quantized-gemma-2b-it", overrideTokenizer: "PreTrainedTokenizer" ) { prompt in diff --git a/mlx-swift-examples.xcodeproj/project.pbxproj b/mlx-swift-examples.xcodeproj/project.pbxproj index 75d9632..ae4e689 100644 --- a/mlx-swift-examples.xcodeproj/project.pbxproj +++ b/mlx-swift-examples.xcodeproj/project.pbxproj @@ -46,6 +46,13 @@ C3A8B3D22B92A0880002EFB8 /* MLXOptimizers in Frameworks */ = {isa = PBXBuildFile; productRef = C3A8B3D12B92A0880002EFB8 /* MLXOptimizers */; }; C3A8B3D32B92A0880002EFB8 /* MNIST.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C34E490D2B69A92900FCB841 /* MNIST.framework */; }; C3A8B3D42B92A0880002EFB8 /* MNIST.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = C34E490D2B69A92900FCB841 /* MNIST.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + C3A8B3F32B92A2A90002EFB8 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C3A8B3EC2B92A2A90002EFB8 /* Assets.xcassets */; }; + C3A8B3F42B92A2A90002EFB8 /* LLMEvalApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3A8B3ED2B92A2A90002EFB8 /* LLMEvalApp.swift */; }; + C3A8B3F52B92A2A90002EFB8 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C3A8B3EF2B92A2A90002EFB8 /* Preview Assets.xcassets */; }; + C3A8B3F62B92A2A90002EFB8 /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = C3A8B3F02B92A2A90002EFB8 /* README.md */; }; + C3A8B3F72B92A2A90002EFB8 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3A8B3F22B92A2A90002EFB8 /* ContentView.swift */; }; + C3A8B3F82B92A3360002EFB8 /* LLM.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C38935C52B869C7A0037B833 /* LLM.framework */; }; + C3A8B3F92B92A3360002EFB8 /* LLM.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = C38935C52B869C7A0037B833 /* LLM.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; C3E786AB2B8D1AEC0004D037 /* Evaluate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3E786AA2B8D1AEC0004D037 /* Evaluate.swift */; }; C3E786AD2B8D4AF50004D037 /* Tokenizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3E786AC2B8D4AF50004D037 /* Tokenizer.swift */; }; C3FBCB212B8520B80007E490 /* MLX in Frameworks */ = {isa = PBXBuildFile; productRef = C3FBCB202B8520B80007E490 /* MLX */; }; @@ -80,6 +87,13 @@ remoteGlobalIDString = C34E490C2B69A92900FCB841; remoteInfo = MNIST; }; + C3A8B3FA2B92A3360002EFB8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C39273682B60697700368D5D /* Project object */; + proxyType = 1; + remoteGlobalIDString = C38935C42B869C7A0037B833; + remoteInfo = LLM; + }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -152,6 +166,17 @@ name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; }; + C3A8B3FC2B92A3360002EFB8 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + C3A8B3F92B92A3360002EFB8 /* LLM.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ @@ -190,6 +215,13 @@ C3A8B3C82B92951E0002EFB8 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = " "; }; C3A8B3C92B92951E0002EFB8 /* ContentView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = " "; }; C3A8B3D02B929F400002EFB8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; name = Info.plist; path = MNISTTrainer/Info.plist; sourceTree = " "; }; + C3A8B3DC2B92A29E0002EFB8 /* LLMEval.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = LLMEval.app; sourceTree = BUILT_PRODUCTS_DIR; }; + C3A8B3EC2B92A2A90002EFB8 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = " "; }; + C3A8B3ED2B92A2A90002EFB8 /* LLMEvalApp.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LLMEvalApp.swift; sourceTree = " "; }; + C3A8B3EF2B92A2A90002EFB8 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = " "; }; + C3A8B3F02B92A2A90002EFB8 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = " "; }; + C3A8B3F12B92A2A90002EFB8 /* LLMEval.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = LLMEval.entitlements; sourceTree = " "; }; + C3A8B3F22B92A2A90002EFB8 /* ContentView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = " "; }; C3C3240B2B6CA689007D2D9A /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = " "; }; C3C3240C2B6CA792007D2D9A /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = " "; }; C3E786AA2B8D1AEC0004D037 /* Evaluate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Evaluate.swift; sourceTree = " "; }; @@ -268,6 +300,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + C3A8B3D92B92A29D0002EFB8 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + C3A8B3F82B92A3360002EFB8 /* LLM.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -351,6 +391,7 @@ C3288D732B6D9313009FF608 /* LinearModelTraining */, C38935C52B869C7A0037B833 /* LLM.framework */, C3A8B3B22B9295090002EFB8 /* MNISTTrainer.app */, + C3A8B3DC2B92A29E0002EFB8 /* LLMEval.app */, ); name = Products; sourceTree = " "; @@ -393,6 +434,7 @@ C3A8B3AD2B9294E30002EFB8 /* Applications */ = { isa = PBXGroup; children = ( + C3A8B3EB2B92A2A90002EFB8 /* LLMEval */, C3A8B3C12B92951E0002EFB8 /* MNISTTrainer */, ); path = Applications; @@ -420,6 +462,27 @@ path = "Preview Content"; sourceTree = " "; }; + C3A8B3EB2B92A2A90002EFB8 /* LLMEval */ = { + isa = PBXGroup; + children = ( + C3A8B3EC2B92A2A90002EFB8 /* Assets.xcassets */, + C3A8B3F22B92A2A90002EFB8 /* ContentView.swift */, + C3A8B3F12B92A2A90002EFB8 /* LLMEval.entitlements */, + C3A8B3ED2B92A2A90002EFB8 /* LLMEvalApp.swift */, + C3A8B3EE2B92A2A90002EFB8 /* Preview Content */, + C3A8B3F02B92A2A90002EFB8 /* README.md */, + ); + path = LLMEval; + sourceTree = " "; + }; + C3A8B3EE2B92A2A90002EFB8 /* Preview Content */ = { + isa = PBXGroup; + children = ( + C3A8B3EF2B92A2A90002EFB8 /* Preview Assets.xcassets */, + ); + path = "Preview Content"; + sourceTree = " "; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -602,6 +665,25 @@ productReference = C3A8B3B22B9295090002EFB8 /* MNISTTrainer.app */; productType = "com.apple.product-type.application"; }; + C3A8B3DB2B92A29D0002EFB8 /* LLMEval */ = { + isa = PBXNativeTarget; + buildConfigurationList = C3A8B3E82B92A29E0002EFB8 /* Build configuration list for PBXNativeTarget "LLMEval" */; + buildPhases = ( + C3A8B3D82B92A29D0002EFB8 /* Sources */, + C3A8B3D92B92A29D0002EFB8 /* Frameworks */, + C3A8B3DA2B92A29D0002EFB8 /* Resources */, + C3A8B3FC2B92A3360002EFB8 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + C3A8B3FB2B92A3360002EFB8 /* PBXTargetDependency */, + ); + name = LLMEval; + productName = LLMEval; + productReference = C3A8B3DC2B92A29E0002EFB8 /* LLMEval.app */; + productType = "com.apple.product-type.application"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -634,6 +716,9 @@ C3A8B3B12B9295090002EFB8 = { CreatedOnToolsVersion = 15.2; }; + C3A8B3DB2B92A29D0002EFB8 = { + CreatedOnToolsVersion = 15.2; + }; }; }; buildConfigurationList = C392736B2B60697700368D5D /* Build configuration list for PBXProject "mlx-swift-examples" */; @@ -663,6 +748,7 @@ C34E490C2B69A92900FCB841 /* MNIST */, C3288D722B6D9313009FF608 /* LinearModelTraining */, C3A8B3B12B9295090002EFB8 /* MNISTTrainer */, + C3A8B3DB2B92A29D0002EFB8 /* LLMEval */, ); }; /* End PBXProject section */ @@ -693,6 +779,16 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + C3A8B3DA2B92A29D0002EFB8 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + C3A8B3F52B92A2A90002EFB8 /* Preview Assets.xcassets in Resources */, + C3A8B3F62B92A2A90002EFB8 /* README.md in Resources */, + C3A8B3F32B92A2A90002EFB8 /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -763,6 +859,15 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + C3A8B3D82B92A29D0002EFB8 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + C3A8B3F42B92A2A90002EFB8 /* LLMEvalApp.swift in Sources */, + C3A8B3F72B92A2A90002EFB8 /* ContentView.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ @@ -781,6 +886,11 @@ target = C34E490C2B69A92900FCB841 /* MNIST */; targetProxy = C3A8B3D52B92A0880002EFB8 /* PBXContainerItemProxy */; }; + C3A8B3FB2B92A3360002EFB8 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = C38935C42B869C7A0037B833 /* LLM */; + targetProxy = C3A8B3FA2B92A3360002EFB8 /* PBXContainerItemProxy */; + }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ @@ -1690,6 +1800,7 @@ CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_ASSET_PATHS = "\"Applications/MNISTTrainer/Preview Content\""; + DEVELOPMENT_TEAM = GD76UNBY73; ENABLE_PREVIEWS = YES; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; @@ -1781,6 +1892,7 @@ CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_ASSET_PATHS = "\"Applications/MNISTTrainer/Preview Content\""; + DEVELOPMENT_TEAM = GD76UNBY73; ENABLE_NS_ASSERTIONS = NO; ENABLE_PREVIEWS = YES; ENABLE_STRICT_OBJC_MSGSEND = YES; @@ -1824,6 +1936,179 @@ }; name = Release; }; + C3A8B3E92B92A29E0002EFB8 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_ENTITLEMENTS = Applications/LLMEval/LLMEval.entitlements; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_ASSET_PATHS = "\"Applications/LLMEval/Preview Content\""; + ENABLE_PREVIEWS = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GENERATE_INFOPLIST_FILE = YES; + "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]" = UIStatusBarStyleDefault; + "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 17.2; + LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MACOSX_DEPLOYMENT_TARGET = 14.2; + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = mlx.LLMEval; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = auto; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + C3A8B3EA2B92A29E0002EFB8 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_ENTITLEMENTS = Applications/LLMEval/LLMEval.entitlements; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_ASSET_PATHS = "\"Applications/LLMEval/Preview Content\""; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_PREVIEWS = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GENERATE_INFOPLIST_FILE = YES; + "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]" = UIStatusBarStyleDefault; + "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 17.2; + LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MACOSX_DEPLOYMENT_TARGET = 14.2; + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = mlx.LLMEval; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = auto; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx"; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -1899,6 +2184,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + C3A8B3E82B92A29E0002EFB8 /* Build configuration list for PBXNativeTarget "LLMEval" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C3A8B3E92B92A29E0002EFB8 /* Debug */, + C3A8B3EA2B92A29E0002EFB8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ /* Begin XCRemoteSwiftPackageReference section */ diff --git a/mlx-swift-examples.xcodeproj/xcshareddata/xcschemes/LLMEval.xcscheme b/mlx-swift-examples.xcodeproj/xcshareddata/xcschemes/LLMEval.xcscheme new file mode 100644 index 0000000..4898e4b --- /dev/null +++ b/mlx-swift-examples.xcodeproj/xcshareddata/xcschemes/LLMEval.xcscheme @@ -0,0 +1,77 @@ + + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +