Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 84 additions & 0 deletions Tests/MLXLMIntegrationTests/IntegrationTestModels.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,28 @@ import MLXVLM
enum IntegrationTestModelIDs {
static let llmModelId = "mlx-community/Qwen3-4B-Instruct-2507-4bit"
static let vlmModelId = "mlx-community/Qwen3-VL-4B-Instruct-4bit"

static let lfm2ModelId = "mlx-community/LFM2-2.6B-Exp-4bit"
static let glm4ModelId = "mlx-community/GLM-4-9B-0414-4bit"
static let mistral3ModelId = "mlx-community/Ministral-3-3B-Instruct-2512-4bit"
static let nemotronModelId = "mlx-community/NVIDIA-Nemotron-3-Nano-30B-A3B-4bit"
static let qwen35ModelId = "mlx-community/Qwen3.5-2B-4bit"
}

actor IntegrationTestModels {
static let shared = IntegrationTestModels()

private init() {}

private var llmTask: Task<ModelContainer, Error>?
private var vlmTask: Task<ModelContainer, Error>?

private var lfm2Task: Task<ModelContainer, Error>?
private var glm4Task: Task<ModelContainer, Error>?
private var mistral3Task: Task<ModelContainer, Error>?
private var nemotronTask: Task<ModelContainer, Error>?
private var qwen35Task: Task<ModelContainer, Error>?

func llmContainer() async throws -> ModelContainer {
if let task = llmTask {
return try await task.value
Expand Down Expand Up @@ -43,4 +57,74 @@ actor IntegrationTestModels {
vlmTask = task
return try await task.value
}

func lfm2Container() async throws -> ModelContainer {
if let task = lfm2Task {
return try await task.value
}

let task = Task {
try await LLMModelFactory.shared.loadContainer(
configuration: .init(id: IntegrationTestModelIDs.lfm2ModelId)
)
}
lfm2Task = task
return try await task.value
}

func glm4Container() async throws -> ModelContainer {
if let task = glm4Task {
return try await task.value
}

let task = Task {
try await LLMModelFactory.shared.loadContainer(
configuration: .init(id: IntegrationTestModelIDs.glm4ModelId)
)
}
glm4Task = task
return try await task.value
}

func mistral3Container() async throws -> ModelContainer {
if let task = mistral3Task {
return try await task.value
}

let task = Task {
try await LLMModelFactory.shared.loadContainer(
configuration: .init(id: IntegrationTestModelIDs.mistral3ModelId)
)
}
mistral3Task = task
return try await task.value
}

func nemotronContainer() async throws -> ModelContainer {
if let task = nemotronTask {
return try await task.value
}

let task = Task {
try await LLMModelFactory.shared.loadContainer(
configuration: .init(id: IntegrationTestModelIDs.nemotronModelId)
)
}
nemotronTask = task
return try await task.value
}

func qwen35Container() async throws -> ModelContainer {
if let task = qwen35Task {
return try await task.value
}

let task = Task {
try await LLMModelFactory.shared.loadContainer(
configuration: .init(id: IntegrationTestModelIDs.qwen35ModelId)
)
}
qwen35Task = task
return try await task.value
}
}
Loading
Loading