30 lines
1.1 KiB
Swift
30 lines
1.1 KiB
Swift
import XCTest
|
|
@testable import MarkBase
|
|
|
|
final class EmbeddingGemmaTest: XCTestCase {
|
|
func testLoadAndEmbed() throws {
|
|
let modelDir = "/Users/accusys/MarkBaseEngine/models/embeddinggemma-300m"
|
|
guard FileManager.default.fileExists(atPath: modelDir + "/model.safetensors") else {
|
|
XCTFail("Model not found"); return
|
|
}
|
|
let engine = try MarkBaseEngine(autoCompile: true)
|
|
let model = try EmbeddingGemmaModel(modelDir: modelDir, engine: engine)
|
|
XCTAssertEqual(model.config.numHiddenLayers, 24)
|
|
XCTAssertEqual(model.config.hiddenSize, 768)
|
|
|
|
let emb = try model.embed(text: "Hello world")
|
|
XCTAssertEqual(emb.count, 768)
|
|
|
|
// Check L2 norm is 1.0
|
|
var norm: Float = 0
|
|
for v in emb { norm += v * v }
|
|
norm = sqrt(norm)
|
|
XCTAssertEqual(norm, 1.0, accuracy: 0.001, "L2 norm should be 1.0")
|
|
|
|
// Check no NaN
|
|
XCTAssertFalse(emb.contains { $0.isNaN }, "No NaN values")
|
|
|
|
print("✓ Embedding dim=\(emb.count), norm=\(String(format: "%.4f", norm))")
|
|
}
|
|
}
|