mesh-llm/evals
2026-07-22 22:05:39 +10:00
..
latency-benchmarking Virtual LLM engine — callback hooks from llama-server into mesh (#225) 2026-04-16 14:54:58 +10:00
moe/prompts add MoE strategy benchmarks and live controls 2026-04-03 10:19:42 +11:00
scenarios Prepare repo layout for skippy merges (#420) 2026-05-02 09:44:52 +10:00
ab-test.sh Fix split GGUF model name: strip -00001-of-00004 suffix everywhere 2026-03-14 11:12:07 +11:00
compare.sh Add router eval framework + fix Hermes tool profile 2026-03-13 11:18:18 +11:00
README.md Add router eval framework + fix Hermes tool profile 2026-03-13 11:18:18 +11:00
run-multi.sh Fix eval working dir: cd to result dir before launching pi 2026-03-13 11:52:39 +11:00
run.sh Add router eval framework + fix Hermes tool profile 2026-03-13 11:18:18 +11:00
skippy-cache-correctness-gate.py Certify additional split-serving families (#439) 2026-05-07 21:33:59 +10:00
skippy-cache-family-bench.sh Add Skippy cache, benchmark evidence, and prompt defaults (#430) 2026-05-06 14:15:13 +10:00
skippy-cache-family-report.py Add Skippy cache, benchmark evidence, and prompt defaults (#430) 2026-05-06 14:15:13 +10:00
skippy-cache-production-bench.py Add Skippy cache, benchmark evidence, and prompt defaults (#430) 2026-05-06 14:15:13 +10:00
skippy-coding-agent-loop.jsonl Pipeline MTP-anchored n-gram verify windows (#938) 2026-07-19 20:14:59 +10:00
skippy-moe-expert-smoke.py Certify additional split-serving families (#439) 2026-05-07 21:33:59 +10:00
skippy-openai-cache-matrix.py clarify skippy prompt cache reuse (#856) 2026-06-15 21:43:37 +10:00
skippy-suffix-proposer-bench.py Add Ngram Suffix Proposer (#1037) 2026-07-22 22:05:39 +10:00
skippy-usecase-corpus.json Add Skippy cache, benchmark evidence, and prompt defaults (#430) 2026-05-06 14:15:13 +10:00
test_injection_framing.py Virtual LLM engine — callback hooks from llama-server into mesh (#225) 2026-04-16 14:54:58 +10:00
virtual_llm_eval.py Virtual LLM engine — callback hooks from llama-server into mesh (#225) 2026-04-16 14:54:58 +10:00

mesh-llm Router Evals

A/B comparison of pi agent performance through mesh-llm's multi-model router vs a frontier cloud model.

Setup

Mesh (local multi-model)

# 3 models on M4 Max 52GB (~27GB total, room for KV cache)
MESH_LLM_EPHEMERAL_KEY=1 mesh-llm \
  --model Qwen2.5-32B-Instruct-Q4_K_M \
  --model Qwen2.5-Coder-7B-Instruct-Q4_K_M \
  --model Hermes-2-Pro-Mistral-7B-Q4_K_M

Router auto-classifies each request and picks the best model:

  • Qwen2.5-32B (tier 3) — reasoning, chat, complex code, tool use
  • Qwen2.5-Coder-7B (tier 2) — code generation/review, fast (85 tok/s)
  • Hermes-7B (tier 2) — fast chat, simple Q&A (87 tok/s, no tool use)

MESH_LLM_EPHEMERAL_KEY=1 uses a fresh identity so no external peers connect.

Cloud baseline

Sonnet via pi --provider anthropic --model claude-sonnet-4-20250514.

Scenarios

Multi-turn conversations that start with chat and progress to tool use:

Scenario Turns What it tests
chat-to-code 4 Chat→write code→write tests→review (router must switch models)
debug-session 4 Read files→run code→find/fix bugs→verify (tool-heavy)
edit-file 3 Analyze→multi-step edits→verify (structured editing)
html-app 3 Generate code→validate→iterate (code generation)
explore-repo 4 Bash tools→read files→summarize (repo navigation)
refactor 3 Code review→refactor→verify (code quality)

Running

# Single scenario
./evals/run-multi.sh mesh chat-to-code
./evals/run-multi.sh opus chat-to-code

# Compare results
./evals/compare.sh chat-to-code

One-shot (quick, less realistic)

./evals/run.sh mesh edit-file
./evals/run.sh opus edit-file

Results

Results go to evals/results/<provider>/<scenario>/:

  • Working files (copied from scenario, edited by agent)
  • _output.txt — full session capture
  • _screen_turnN.txt — screen state after each turn
  • _time.txt — wall clock seconds
  • _turns.txt — number of turns completed

What to look for

  1. Correctness — Did it complete all turns? Are edits right?
  2. Tool use — Did it use read/edit/bash appropriately?
  3. Routing — Check /tmp/mesh-llm-local.log for which model handled each turn
  4. Speed — Wall clock per scenario
  5. Model switching — Does quality degrade when router changes models mid-conversation?
  6. Chat quality — Are quick chat responses from Hermes comparable to 32B?

Model capabilities (from testing)

Model Tool use Code gen Chat Speed
Qwen2.5-32B works good good ~18 tok/s
Qwen2.5-Coder-7B works great ⚠️ ok ~85 tok/s
Hermes-7B broken ⚠️ basic fast ~87 tok/s
Qwen3-30B-A3B thinking format good empty content ~22 tok/s