Orkun Soylu

Methodology

The same scripts, the same prompts and the same frozen answers across models — and every grader result checked against the answers before it is published.

Principles

Speed

Measure What it is How
Decode / generation tokens produced per second after the first token the engine’s own counters (eval_count/eval_duration in Ollama, server timings elsewhere), never wall time divided by tokens
Prefill / prompt processing prompt tokens consumed per second before the first output token same counters, on fixed prompts of known length (1K, 7.5K, 8K, 20K, 31K, up to 168K tokens)
Seconds per answer end-to-end wall time a user waits measured at the client

Decode is usually memory-bandwidth-bound and prefill compute-bound, which is why quantization and GPU choice move them differently. With speculative decoding, decode speed depends heavily on content (code accepts far more draft tokens than prose), so I report per-prompt numbers where it matters.

Thinkbench

Five prompts that look like daily use: two coding tasks (a Python function, a bash backup script), a Turkish knowledge question, a Turkish creative-writing task and a short logic puzzle. Each runs 3 times with thinking on, at the model’s sampling (temperature 1, top_p 0.95, top_k 20, min_p 0), capped at 4,096 tokens. I record total tokens, thinking tokens, seconds per answer and tokens per second.

It measures how much a model talks and thinks for ordinary requests — not correctness.

Hardbench

Ten AIME-style problems with verified integer answers, 2 runs each, 32,768-token cap. Answers are checked by script. It catches runaway thinking (runs that hit the cap) and gross accuracy differences. At this model size it is close to saturated — most models score 19–20 of 20 — so it rarely separates good models.

CVE evaluation

The test that decided most model choices. It reproduces how I actually use a model for security work.

Setup. 15 questions, asked in Turkish, each answered 3 times, through calivi (an open-source chat UI) with tool use enabled. The tools come from a CVE-triage MCP server that queries NVD, FIRST EPSS, CISA KEV, OSV and package registries, plus web search. Every model gets the same system prompt: answer in the user’s language, take CVE IDs, versions and scores only from tool output, never write a CVE ID that no tool returned, and end with a fixed machine-readable summary block.

Question types.

Truth. The expected answers are generated independently from the same public sources and frozen before each run (time-dependent questions are graded against each run’s own UTC start time). Models compared on one page share one truth snapshot.

What is scored. Newest clean version recommended; fix versions correct / wrong / not stated; KEV status; prioritisation; handling of the non-existent CVE. Each question scores 0–1, and the overall score is the mean. Recorded alongside but not scored: invented CVE IDs (not in NVD at all), CVEs written from memory (real, but in no tool result — a grounding failure), answers in the wrong language, tool errors, tool calls and seconds per answer.

Answer checks. Every answer the grader penalises is read. Grader errors are corrected and listed on the test page; genuine errors are kept and described.

Power

Wall power comes from a plug-in meter on the whole host, read as a range. GPU power, clocks and temperature come from nvidia-smi or rocm-smi/sysfs. Energy per token = wall power ÷ generation speed.

What I publish and what I do not

Each page lists the date, the hardware, the runtime and its version, the model files (with their source) and the settings. Internal host names, addresses and the raw logs of my infrastructure are not published; the hardware is identified by its configuration instead.