// // Catalog.swift // Zyquo MLX // // Author: Simon-Pierre Boucher // Mail: contact@spboucher.ai // import Foundation /// One curated Featured entry (generated from docs/MODELS.md §2 — every repo /// live-verified 2026-07-30; single source of truth for curated data). struct CatalogEntry: Identifiable, Hashable, Sendable { var id: String // repo id var type: ModelType var params: String var quant: String var weightBytes: Int64 var blurb: String var name: String { id.split(separator: "/").last.map(String.init) ?? id } /// RAM verdict for this Mac, computed from verified weight size. var verdict: MemoryVerdict { let needed = Int64(Double(weightBytes) * 1.2) + 2_000_000_000 let ceiling = MemoryAdvisor.recommendedWorkingSet if needed <= Int64(Double(ceiling) * 0.75) { return .comfortable } if needed <= ceiling { return .tight } return .wontFit } } /// The Featured catalog (docs/MODELS.md §2, live-verified 2026-07-30). enum Catalog { static let featured: [CatalogEntry] = [ // Text LLMs — small CatalogEntry(id: "mlx-community/Qwen3-0.6B-4bit", type: .llm, params: "0.6B", quant: "4-bit", weightBytes: 365_000_000, blurb: "Tiny, instant — ideal first model and QLoRA test bed"), CatalogEntry(id: "mlx-community/Llama-3.2-1B-Instruct-4bit", type: .llm, params: "1B", quant: "4-bit", weightBytes: 752_000_000, blurb: "Meta's small instruct staple"), CatalogEntry(id: "mlx-community/Llama-3.2-3B-Instruct-4bit", type: .llm, params: "3B", quant: "4-bit", weightBytes: 1_944_000_000, blurb: "Great quality per gigabyte"), // Text LLMs — mid CatalogEntry(id: "mlx-community/Qwen3-4B-Instruct-2507-4bit", type: .llm, params: "4B", quant: "4-bit", weightBytes: 2_427_000_000, blurb: "The 2507 refresh — strong all-rounder"), CatalogEntry(id: "mlx-community/Qwen2.5-Coder-7B-Instruct-4bit", type: .llm, params: "7B", quant: "4-bit", weightBytes: 4_596_000_000, blurb: "Code-tuned workhorse"), CatalogEntry(id: "mlx-community/Qwen3-8B-4bit", type: .llm, params: "8B", quant: "4-bit", weightBytes: 4_950_000_000, blurb: "Balanced reasoning and speed"), CatalogEntry(id: "mlx-community/Qwen3.5-9B-4bit", type: .llm, params: "9B", quant: "4-bit", weightBytes: 6_389_000_000, blurb: "Current-gen Qwen3.5"), // Text LLMs — large CatalogEntry(id: "mlx-community/Qwen3-14B-4bit", type: .llm, params: "14B", quant: "4-bit", weightBytes: 8_923_000_000, blurb: "Serious quality on 16 GB+ Macs"), CatalogEntry(id: "mlx-community/gpt-oss-20b-MXFP4-Q8", type: .llm, params: "20.9B MoE", quant: "MXFP4", weightBytes: 12_970_000_000, blurb: "OpenAI's open MoE — the community favorite"), CatalogEntry(id: "mlx-community/Qwen3-30B-A3B-Instruct-2507-4bit", type: .llm, params: "30B-A3B MoE", quant: "4-bit", weightBytes: 18_446_000_000, blurb: "MoE: 30B quality at ~3B speed"), CatalogEntry(id: "mlx-community/Qwen3.6-27B-4bit", type: .llm, params: "27B", quant: "4-bit", weightBytes: 17_233_000_000, blurb: "Newest dense Qwen3.6"), // VLM CatalogEntry(id: "mlx-community/Qwen3-VL-4B-Instruct-4bit", type: .vlm, params: "4B", quant: "4-bit", weightBytes: 3_318_000_000, blurb: "Vision-language, compact and capable"), CatalogEntry(id: "mlx-community/gemma-3-12b-it-qat-4bit", type: .vlm, params: "12B", quant: "4-bit QAT", weightBytes: 8_622_000_000, blurb: "Google's QAT vision flagship"), // Embeddings CatalogEntry(id: "mlx-community/all-MiniLM-L6-v2-4bit", type: .embedding, params: "22M", quant: "4-bit", weightBytes: 15_000_000, blurb: "Instant embeddings for similarity demos"), CatalogEntry(id: "mlx-community/Qwen3-Embedding-0.6B-4bit-DWQ", type: .embedding, params: "0.6B", quant: "4-bit DWQ", weightBytes: 365_000_000, blurb: "Modern multilingual embeddings"), CatalogEntry(id: "mlx-community/bge-m3-mlx-fp16", type: .embedding, params: "568M", quant: "fp16", weightBytes: 1_224_000_000, blurb: "Dense + multi-vector retrieval standard"), ] }