import XCTest @testable import MarkBase final class Multimodal12BTest: XCTestCase { var engine: MarkBaseEngine! var multimodal: MultimodalModel! let modelDir = "/Users/accusys/MarkBaseEngine/models/gemma-4-12b-it-4bit" let maxCtx = 64 override func setUp() { super.setUp() guard FileManager.default.fileExists(atPath: modelDir + "/model.safetensors.index.json") else { return } engine = try? MarkBaseEngine(autoCompile: true) multimodal = try? MultimodalModel(modelDir: modelDir, engine: engine, maxContextLength: maxCtx) } func testModelLoads() throws { try XCTSkipIf(multimodal == nil, "12B model not found") XCTAssertEqual(multimodal!.textModel.hiddenSize, 3840) XCTAssertEqual(multimodal!.textModel.numHiddenLayers, 48) XCTAssertNotNil(multimodal!.visionTower, "VisionTower12B should load") XCTAssertNotNil(multimodal!.audioTower, "AudioTower12B should load") } func testVisionTowerForward() throws { try XCTSkipIf(multimodal?.visionTower == nil, "Vision tower not loaded") let tower = multimodal!.visionTower! let numPatches = 8 let patchDim = tower.patchDim var patches = [Float](repeating: 0, count: numPatches * patchDim) for i in 0..