Skip to content

Commit ec2f680

Browse files
committed
Make functional on Linux (including CPU mode)
1 parent a3e1bf4 commit ec2f680

23 files changed

+3874
-3710
lines changed

Libraries/MLXLLM/LLMModelFactory.swift

Lines changed: 63 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -22,58 +22,69 @@ private func create<C: Codable, M>(
2222
public enum LLMTypeRegistry {
2323

2424
/// Shared instance with default model types.
25-
public static let shared: ModelTypeRegistry = .init(creators: [
26-
"mistral": create(LlamaConfiguration.self, LlamaModel.init),
27-
"llama": create(LlamaConfiguration.self, LlamaModel.init),
28-
"phi": create(PhiConfiguration.self, PhiModel.init),
29-
"phi3": create(Phi3Configuration.self, Phi3Model.init),
30-
"phimoe": create(PhiMoEConfiguration.self, PhiMoEModel.init),
31-
"gemma": create(GemmaConfiguration.self, GemmaModel.init),
32-
"gemma2": create(Gemma2Configuration.self, Gemma2Model.init),
33-
"gemma3": create(Gemma3TextConfiguration.self, Gemma3TextModel.init),
34-
"gemma3_text": create(Gemma3TextConfiguration.self, Gemma3TextModel.init),
35-
"gemma3n": create(Gemma3nTextConfiguration.self, Gemma3nTextModel.init),
36-
"qwen2": create(Qwen2Configuration.self, Qwen2Model.init),
37-
"qwen3": create(Qwen3Configuration.self, Qwen3Model.init),
38-
"qwen3_moe": create(Qwen3MoEConfiguration.self, Qwen3MoEModel.init),
39-
"qwen3_next": create(Qwen3NextConfiguration.self, Qwen3NextModel.init),
40-
"minicpm": create(MiniCPMConfiguration.self, MiniCPMModel.init),
41-
"starcoder2": create(Starcoder2Configuration.self, Starcoder2Model.init),
42-
"cohere": create(CohereConfiguration.self, CohereModel.init),
43-
"openelm": create(OpenElmConfiguration.self, OpenELMModel.init),
44-
"internlm2": create(InternLM2Configuration.self, InternLM2Model.init),
45-
"deepseek_v3": create(DeepseekV3Configuration.self, DeepseekV3Model.init),
46-
"granite": create(GraniteConfiguration.self, GraniteModel.init),
47-
"granitemoehybrid": create(
48-
GraniteMoeHybridConfiguration.self, GraniteMoeHybridModel.init),
49-
"mimo": create(MiMoConfiguration.self, MiMoModel.init),
50-
"mimo_v2_flash": create(MiMoV2FlashConfiguration.self, MiMoV2FlashModel.init),
51-
"minimax": create(MiniMaxConfiguration.self, MiniMaxModel.init),
52-
"glm4": create(GLM4Configuration.self, GLM4Model.init),
53-
"glm4_moe": create(GLM4MoEConfiguration.self, GLM4MoEModel.init),
54-
"glm4_moe_lite": create(GLM4MoELiteConfiguration.self, GLM4MoELiteModel.init),
55-
"acereason": create(Qwen2Configuration.self, Qwen2Model.init),
56-
"falcon_h1": create(FalconH1Configuration.self, FalconH1Model.init),
57-
"bitnet": create(BitnetConfiguration.self, BitnetModel.init),
58-
"smollm3": create(SmolLM3Configuration.self, SmolLM3Model.init),
59-
"ernie4_5": create(Ernie45Configuration.self, Ernie45Model.init),
60-
"lfm2": create(LFM2Configuration.self, LFM2Model.init),
61-
"baichuan_m1": create(BaichuanM1Configuration.self, BaichuanM1Model.init),
62-
"exaone4": create(Exaone4Configuration.self, Exaone4Model.init),
63-
"gpt_oss": create(GPTOSSConfiguration.self, GPTOSSModel.init),
64-
"lille-130m": create(Lille130mConfiguration.self, Lille130mModel.init),
65-
"olmoe": create(OlmoEConfiguration.self, OlmoEModel.init),
66-
"olmo2": create(Olmo2Configuration.self, Olmo2Model.init),
67-
"olmo3": create(Olmo3Configuration.self, Olmo3Model.init),
68-
"bailing_moe": create(BailingMoeConfiguration.self, BailingMoeModel.init),
69-
"lfm2_moe": create(LFM2MoEConfiguration.self, LFM2MoEModel.init),
70-
"nanochat": create(NanoChatConfiguration.self, NanoChatModel.init),
71-
"nemotron_h": create(NemotronHConfiguration.self, NemotronHModel.init),
72-
"afmoe": create(AfMoEConfiguration.self, AfMoEModel.init),
73-
"jamba_3b": create(JambaConfiguration.self, JambaModel.init),
74-
"mistral3": create(Mistral3TextConfiguration.self, Mistral3TextModel.init),
75-
"apertus": create(ApertusConfiguration.self, ApertusModel.init),
76-
])
25+
public static let shared: ModelTypeRegistry = .init(creators: all())
26+
27+
/// All predefined model types.
28+
private static func all() -> [String: @Sendable (Data) throws -> any LanguageModel] {
29+
var models: [String: @Sendable (Data) throws -> any LanguageModel] = [
30+
"mistral": create(LlamaConfiguration.self, LlamaModel.init),
31+
"llama": create(LlamaConfiguration.self, LlamaModel.init),
32+
"phi": create(PhiConfiguration.self, PhiModel.init),
33+
"phi3": create(Phi3Configuration.self, Phi3Model.init),
34+
"phimoe": create(PhiMoEConfiguration.self, PhiMoEModel.init),
35+
"gemma": create(GemmaConfiguration.self, GemmaModel.init),
36+
"gemma2": create(Gemma2Configuration.self, Gemma2Model.init),
37+
"gemma3": create(Gemma3TextConfiguration.self, Gemma3TextModel.init),
38+
"gemma3_text": create(Gemma3TextConfiguration.self, Gemma3TextModel.init),
39+
"gemma3n": create(Gemma3nTextConfiguration.self, Gemma3nTextModel.init),
40+
"qwen2": create(Qwen2Configuration.self, Qwen2Model.init),
41+
"qwen3": create(Qwen3Configuration.self, Qwen3Model.init),
42+
"qwen3_moe": create(Qwen3MoEConfiguration.self, Qwen3MoEModel.init),
43+
"qwen3_next": create(Qwen3NextConfiguration.self, Qwen3NextModel.init),
44+
"minicpm": create(MiniCPMConfiguration.self, MiniCPMModel.init),
45+
"starcoder2": create(Starcoder2Configuration.self, Starcoder2Model.init),
46+
"cohere": create(CohereConfiguration.self, CohereModel.init),
47+
"openelm": create(OpenElmConfiguration.self, OpenELMModel.init),
48+
"internlm2": create(InternLM2Configuration.self, InternLM2Model.init),
49+
"deepseek_v3": create(DeepseekV3Configuration.self, DeepseekV3Model.init),
50+
"granite": create(GraniteConfiguration.self, GraniteModel.init),
51+
"granitemoehybrid": create(
52+
GraniteMoeHybridConfiguration.self, GraniteMoeHybridModel.init),
53+
"mimo": create(MiMoConfiguration.self, MiMoModel.init),
54+
"mimo_v2_flash": create(MiMoV2FlashConfiguration.self, MiMoV2FlashModel.init),
55+
"minimax": create(MiniMaxConfiguration.self, MiniMaxModel.init),
56+
"glm4": create(GLM4Configuration.self, GLM4Model.init),
57+
"glm4_moe": create(GLM4MoEConfiguration.self, GLM4MoEModel.init),
58+
"glm4_moe_lite": create(GLM4MoELiteConfiguration.self, GLM4MoELiteModel.init),
59+
"acereason": create(Qwen2Configuration.self, Qwen2Model.init),
60+
"falcon_h1": create(FalconH1Configuration.self, FalconH1Model.init),
61+
"smollm3": create(SmolLM3Configuration.self, SmolLM3Model.init),
62+
"ernie4_5": create(Ernie45Configuration.self, Ernie45Model.init),
63+
"lfm2": create(LFM2Configuration.self, LFM2Model.init),
64+
"baichuan_m1": create(BaichuanM1Configuration.self, BaichuanM1Model.init),
65+
"exaone4": create(Exaone4Configuration.self, Exaone4Model.init),
66+
"gpt_oss": create(GPTOSSConfiguration.self, GPTOSSModel.init),
67+
"lille-130m": create(Lille130mConfiguration.self, Lille130mModel.init),
68+
"olmoe": create(OlmoEConfiguration.self, OlmoEModel.init),
69+
"olmo2": create(Olmo2Configuration.self, Olmo2Model.init),
70+
"olmo3": create(Olmo3Configuration.self, Olmo3Model.init),
71+
"bailing_moe": create(BailingMoeConfiguration.self, BailingMoeModel.init),
72+
"lfm2_moe": create(LFM2MoEConfiguration.self, LFM2MoEModel.init),
73+
"nanochat": create(NanoChatConfiguration.self, NanoChatModel.init),
74+
"nemotron_h": create(NemotronHConfiguration.self, NemotronHModel.init),
75+
"afmoe": create(AfMoEConfiguration.self, AfMoEModel.init),
76+
"jamba_3b": create(JambaConfiguration.self, JambaModel.init),
77+
"mistral3": create(Mistral3TextConfiguration.self, Mistral3TextModel.init),
78+
"apertus": create(ApertusConfiguration.self, ApertusModel.init),
79+
]
80+
81+
// Bitnet requires Metal custom kernels and is only available on Apple platforms
82+
#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) || os(visionOS)
83+
models["bitnet"] = create(BitnetConfiguration.self, BitnetModel.init)
84+
#endif
85+
86+
return models
87+
}
7788
}
7889

7990
/// Registry of models and any overrides that go with them, e.g. prompt augmentation.

Libraries/MLXLLM/Lora+Data.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@ enum LoRADataError: LocalizedError {
88
var errorDescription: String? {
99
switch self {
1010
case .fileNotFound(let directory, let name):
11-
return String(
12-
localized: "Could not find data file '\(name)' in directory '\(directory.path())'.")
11+
return "Could not find data file '\(name)' in directory '\(directory.path())'."
1312
}
1413
}
1514
}

Libraries/MLXLLM/Models/BaichuanM1.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import Foundation
99
import MLX
10+
import MLXFast
1011
import MLXLMCommon
1112
import MLXNN
1213

0 commit comments

Comments
 (0)