{
  "publisher": "Quiet Local AI Desk",
  "url": "https://abhishekrhl.github.io/benchmarks.json",
  "license": "CC BY 4.0",
  "measured_at": "2026-11-02T12:15:23+05:30/2026-11-02T12:17:49+05:30",
  "hardware": {
    "machine": "Mac mini (2024)",
    "chip": "Apple M4",
    "unified_memory_gb": 16,
    "memory_bandwidth_gb_s": 120,
    "bandwidth_source": "https://support.apple.com/en-us/121555"
  },
  "runtime": "ollama version is 0.40.7",
  "method": {
    "prompt_tokens": 35,
    "num_predict": 256,
    "temperature": 0.2,
    "think": false,
    "runs_per_cell": 3,
    "speed_metric": "eval_count / eval_duration from Ollama /api/generate",
    "memory_metric": "size from Ollama /api/ps",
    "notes": "Prompt-processing speed omitted (cached prompt). First 4B run is a cold start. Long-prompt runs are in long_results; multi-model runs not measured."
  },
  "results": [
    {
      "model": "qwen3.5:4b",
      "num_ctx": 4096,
      "gen_tok_s_runs": [
        18.35,
        22.44,
        22.54
      ],
      "gen_tok_s_median": 22.44,
      "resident_gb_max": 4.25
    },
    {
      "model": "qwen3.5:4b",
      "num_ctx": 8192,
      "gen_tok_s_runs": [
        21.06,
        23.18,
        23.45
      ],
      "gen_tok_s_median": 23.18,
      "resident_gb_max": 4.37
    },
    {
      "model": "qwen3.5:9b",
      "num_ctx": 4096,
      "gen_tok_s_runs": [
        19.38,
        19.4,
        19.15
      ],
      "gen_tok_s_median": 19.38,
      "resident_gb_max": 7.93
    },
    {
      "model": "qwen3.5:9b",
      "num_ctx": 8192,
      "gen_tok_s_runs": [
        19.19,
        19.28,
        17.78
      ],
      "gen_tok_s_median": 19.19,
      "resident_gb_max": 8.11
    }
  ],
  "article": "https://abhishekrhl.github.io/posts/2026-10-30-apple-silicon-m4-llm-memory-speed-matrix/",
  "long_results": [
    {
      "model": "qwen3.5:4b",
      "num_ctx": 8192,
      "prompt_tokens": 1976,
      "num_predict": 1024,
      "prompt_tok_s_runs": [
        376.1,
        385.5
      ],
      "gen_tok_s_runs": [
        22.98,
        23.29
      ],
      "resident_gb_max": 4.41,
      "wall_s_runs": [
        56.5,
        49.2
      ]
    },
    {
      "model": "qwen3.5:4b",
      "num_ctx": 16384,
      "prompt_tokens": 7796,
      "num_predict": 1024,
      "prompt_tok_s_runs": [
        357.2,
        345.8
      ],
      "gen_tok_s_runs": [
        21.71,
        21.81
      ],
      "resident_gb_max": 5.3,
      "wall_s_runs": [
        69.1,
        69.6
      ]
    },
    {
      "model": "qwen3.5:9b",
      "num_ctx": 8192,
      "prompt_tokens": 1977,
      "num_predict": 1024,
      "prompt_tok_s_runs": [
        200.3,
        189.8
      ],
      "gen_tok_s_runs": [
        22.7,
        23.63
      ],
      "resident_gb_max": 8.11,
      "wall_s_runs": [
        65.4,
        53.8
      ]
    },
    {
      "model": "qwen3.5:9b",
      "num_ctx": 16384,
      "prompt_tokens": 7797,
      "num_predict": 1024,
      "prompt_tok_s_runs": [
        179.9,
        179.2
      ],
      "gen_tok_s_runs": [
        22.4,
        21.35
      ],
      "resident_gb_max": 9.07,
      "wall_s_runs": [
        89.1,
        91.5
      ]
    }
  ],
  "long_method": {
    "measured_at": "2026-11-02T12:31:09+05:30/2026-11-02T12:39:16+05:30",
    "prompt": "unique prompt per run (about 1,100 or 4,500 words)",
    "num_predict": 1024,
    "runs_per_cell": 2,
    "speed_metric": "prompt_eval_count/prompt_eval_duration and eval_count/eval_duration from Ollama /api/generate",
    "memory_metric": "size from Ollama /api/ps",
    "guard": "run skipped if free memory below 25% (none skipped)"
  }
}