{"schemaVersion":1,"id":"https://lucioduran.com/projects/llm-serving-bench","url":"https://lucioduran.com/projects/llm-serving-bench","title":"LLM Serving Bench","description":"CPU inference measured over HTTP/SSE: per-token arrivals, TTFT, TPOT, latency and memory. Eight SmolLM2 configurations with raw evidence and offline replay.","language":"en","datePublished":"2026-10-21","dateModified":"2026-10-21","contentFormat":"text/markdown","content":"[Projects](<https://lucioduran.com/projects>) / LLM Serving Bench\n\n# LLM Serving Bench\n\nCPU inference measured over HTTP/SSE: per-token arrivals, TTFT, TPOT, latency and memory. Eight SmolLM2 configurations with raw evidence and offline replay.\n\nAuthor: [Lucio Durán](<https://lucioduran.com/>) · Python 3.11.13 · License: [MIT](<https://github.com/lucioduran/llm-serving-bench/blob/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/LICENSE>)\n\nPage published: 2026-10-21 · Page updated: 2026-10-21\n\n[Repository](<https://github.com/lucioduran/llm-serving-bench>) · [Original evidence](<https://raw.githubusercontent.com/lucioduran/llm-serving-bench/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/results/reference/report.json>) · [Release v0.1.0](<https://github.com/lucioduran/llm-serving-bench/releases/tag/v0.1.0>)\n\n## Problem and relevance to agents\n\nA tokens-per-second counter does not explain user waiting time or queue formation. This benchmark records each generated and received token to separate time to first token, decoding and total latency.\n\nIt supports agent latency budgets with measurements from a real server. Results identify the model, precision, hardware, concurrency and input length needed to interpret a performance number.\n\n## Architecture\n\n1. **Measured server.** SmolLM2-135M-Instruct in FP32 on CPU, with one generation slot and one SSE event per token ID. Clients connect through loopback HTTP.\n2. **Controlled matrix.** One or two CPU threads, one or two concurrent clients, and exactly 64 or 256 input tokens. Each configuration processes six recorded prompts after an excluded warmup.\n3. **Replayable evidence.** Requests, IDs, arrival times, errors, RSS samples and model hashes are retained. A dependency-free verifier recomputes report metrics.\n\n- [Design and methodology](<https://github.com/lucioduran/llm-serving-bench/blob/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/docs/design.md>)\n- [HTTP/SSE protocol](<https://github.com/lucioduran/llm-serving-bench/blob/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/docs/protocol.md>)\n\n## What this demonstrates\n\n- Token-level instrumentation with explicit metric boundaries.\n- Configuration comparisons with recorded requests and controlled concurrency.\n- Separation of observed resource use, assumed costs and unmeasured variables.\n\n## Published results\n\nPublished measurement on Intel Xeon W-3223, macOS, Python 3.11.13 and PyTorch 2.2.2. All 48 requests succeeded and generated 1,152 output tokens. Eight warmups are excluded.\n\nTTFT includes connection setup, tokenization, queueing and prefill. TPOT divides the first-to-last token interval by the number of generation intervals. Percentiles interpolate six requests per configuration; throughput uses the complete configuration duration.\n\n### Eight measured configurations\n\n| Threads / input / concurrency | TTFT p50 (s) | TPOT p50 (ms) | Latency p95 (s) | Output tokens/s |\n| --- | --- | --- | --- | --- |\n| 1 / 64 / 1 | 0.196 | 62.92 | 1.704 | 14.49 |\n| 1 / 64 / 2 | 1.871 | 63.74 | 3.355 | 14.35 |\n| 1 / 256 / 1 | 0.654 | 72.02 | 2.415 | 10.28 |\n| 1 / 256 / 2 | 3.002 | 72.84 | 4.691 | 10.24 |\n| 2 / 64 / 1 | 0.128 | 42.89 | 1.143 | 21.50 |\n| 2 / 64 / 2 | 1.256 | 43.24 | 2.460 | 20.80 |\n| 2 / 256 / 1 | 0.414 | 48.94 | 1.601 | 15.51 |\n| 2 / 256 / 2 | 2.041 | 50.61 | 3.234 | 14.93 |\n\nTwo threads produced higher throughput in this sample. Doubling clients mostly added waiting because the server retains one generation slot. Six requests per configuration do not establish an SLA or a general server ranking.\n\nSampled peak RSS ranged from 838.7 to 1,023.5 MiB. Energy is unmeasured. Reported cost uses an illustrative USD 0.10 per machine-hour allocation; it is not a bill or observed expenditure. [Original evidence](<https://raw.githubusercontent.com/lucioduran/llm-serving-bench/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/results/reference/report.json>).\n\n## Reproduce\n\nReplay requires Python 3.11 and the standard library. Repeating inference requires model dependencies and downloading public weights; subsequent execution uses local files.\n\nEnvironment commands use a POSIX shell. Choose a new output directory and run only one compute-intensive measurement at a time. The published lock describes Intel macOS; other systems may need different PyTorch wheels.\n\n### Replay saved evidence\n\n```\ngit clone https://github.com/lucioduran/llm-serving-bench.git\ncd llm-serving-bench\ngit checkout f291bbe0e3fbd377438b56f4cbf4a7a808720d98\npython -m serving_bench verify results/reference/report.json\n```\n\n### Repeat the local measurement\n\n```\npython -m venv .venv\n. .venv/bin/activate\npython -m pip install -r requirements-models.txt\npython -m serving_bench download\npython -m serving_bench run --output work/reproduction --hourly-usd 0.10\npython -m serving_bench verify work/reproduction/report.json\n```\n\n## Scope and limitations\n\n- One model, host and fixed execution order. Client and server share CPU resources.\n- Closed-loop load without continuous batching, GPU, arrival-rate saturation or answer-quality evaluation.\n- Sampled RSS can miss peaks. Replay checks consistency; it neither measures timings again nor authenticates hardware.\n\n- [Inference optimization: KV-cache, PagedAttention and measurement](<https://lucioduran.com/blog/llm-inference-optimization-kv-cache-paged-attention>)\n\n## Sources and revision\n\nValues on this page come from the linked report. They are not live measurements. The report records the executed revision; the reviewed revision includes the subsequent publication of that report.\n\n- Reviewed revision: [` f291bbe0e3fbd377438b56f4cbf4a7a808720d98 `](<https://github.com/lucioduran/llm-serving-bench/commit/f291bbe0e3fbd377438b56f4cbf4a7a808720d98>)\n- Revision recorded by the experiment: [` 1f78bb2b7926840bbec088c289d56285daac807c `](<https://github.com/lucioduran/llm-serving-bench/commit/1f78bb2b7926840bbec088c289d56285daac807c>)\n- Report timestamp (UTC): 2026-10-21T21:52:58.127518+00:00\n- Release published: [v0.1.0](<https://github.com/lucioduran/llm-serving-bench/releases/tag/v0.1.0>) · 2026-10-21T21:57:30Z\n- Corpus SHA-256: ` 39e2b0383320350aef0ae9fbde0f4c81ff9c35991c36148808c834fb34466e5a `\n\n- [README and usage](<https://github.com/lucioduran/llm-serving-bench/blob/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/README.md>)\n- [Original evidence](<https://raw.githubusercontent.com/lucioduran/llm-serving-bench/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/results/reference/report.json>)\n- [Results and analysis](<https://github.com/lucioduran/llm-serving-bench/blob/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/docs/results.md>)\n- [Design and methodology](<https://github.com/lucioduran/llm-serving-bench/blob/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/docs/design.md>)\n- [HTTP/SSE protocol](<https://github.com/lucioduran/llm-serving-bench/blob/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/docs/protocol.md>)\n- [Models, revisions and licenses](<https://github.com/lucioduran/llm-serving-bench/blob/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/docs/model-notices.md>)\n- [Measured environment dependencies](<https://github.com/lucioduran/llm-serving-bench/blob/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/requirements-local.lock>)\n- [MIT license](<https://github.com/lucioduran/llm-serving-bench/blob/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/LICENSE>)","headings":[{"level":1,"text":"LLM Serving Bench","url":"https://lucioduran.com/projects/llm-serving-bench#title"},{"level":2,"text":"Problem and relevance to agents","url":"https://lucioduran.com/projects/llm-serving-bench#problem"},{"level":2,"text":"Architecture","url":"https://lucioduran.com/projects/llm-serving-bench#architecture"},{"level":2,"text":"What this demonstrates","url":"https://lucioduran.com/projects/llm-serving-bench#demonstrates"},{"level":2,"text":"Published results","url":"https://lucioduran.com/projects/llm-serving-bench#results"},{"level":3,"text":"Eight measured configurations","url":"https://lucioduran.com/projects/llm-serving-bench#results-timing"},{"level":2,"text":"Reproduce","url":"https://lucioduran.com/projects/llm-serving-bench#reproduce"},{"level":3,"text":"Replay saved evidence","url":"https://lucioduran.com/projects/llm-serving-bench#reproduce-replay"},{"level":3,"text":"Repeat the local measurement","url":"https://lucioduran.com/projects/llm-serving-bench#reproduce-inference"},{"level":2,"text":"Scope and limitations","url":"https://lucioduran.com/projects/llm-serving-bench#scope"},{"level":2,"text":"Sources and revision","url":"https://lucioduran.com/projects/llm-serving-bench#sources"}],"sections":[{"heading":"LLM Serving Bench","level":1,"url":"https://lucioduran.com/projects/llm-serving-bench","content":"[Projects](<https://lucioduran.com/projects>) / LLM Serving Bench"},{"heading":"LLM Serving Bench","level":1,"url":"https://lucioduran.com/projects/llm-serving-bench#title","content":"CPU inference measured over HTTP/SSE: per-token arrivals, TTFT, TPOT, latency and memory. Eight SmolLM2 configurations with raw evidence and offline replay.\n\nAuthor: [Lucio Durán](<https://lucioduran.com/>) · Python 3.11.13 · License: [MIT](<https://github.com/lucioduran/llm-serving-bench/blob/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/LICENSE>)\n\nPage published: 2026-10-21 · Page updated: 2026-10-21\n\n[Repository](<https://github.com/lucioduran/llm-serving-bench>) · [Original evidence](<https://raw.githubusercontent.com/lucioduran/llm-serving-bench/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/results/reference/report.json>) · [Release v0.1.0](<https://github.com/lucioduran/llm-serving-bench/releases/tag/v0.1.0>)"},{"heading":"Problem and relevance to agents","level":2,"url":"https://lucioduran.com/projects/llm-serving-bench#problem","content":"A tokens-per-second counter does not explain user waiting time or queue formation. This benchmark records each generated and received token to separate time to first token, decoding and total latency.\n\nIt supports agent latency budgets with measurements from a real server. Results identify the model, precision, hardware, concurrency and input length needed to interpret a performance number."},{"heading":"Architecture","level":2,"url":"https://lucioduran.com/projects/llm-serving-bench#architecture","content":"1. **Measured server.** SmolLM2-135M-Instruct in FP32 on CPU, with one generation slot and one SSE event per token ID. Clients connect through loopback HTTP.\n2. **Controlled matrix.** One or two CPU threads, one or two concurrent clients, and exactly 64 or 256 input tokens. Each configuration processes six recorded prompts after an excluded warmup.\n3. **Replayable evidence.** Requests, IDs, arrival times, errors, RSS samples and model hashes are retained. A dependency-free verifier recomputes report metrics.\n\n- [Design and methodology](<https://github.com/lucioduran/llm-serving-bench/blob/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/docs/design.md>)\n- [HTTP/SSE protocol](<https://github.com/lucioduran/llm-serving-bench/blob/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/docs/protocol.md>)"},{"heading":"What this demonstrates","level":2,"url":"https://lucioduran.com/projects/llm-serving-bench#demonstrates","content":"- Token-level instrumentation with explicit metric boundaries.\n- Configuration comparisons with recorded requests and controlled concurrency.\n- Separation of observed resource use, assumed costs and unmeasured variables."},{"heading":"Published results","level":2,"url":"https://lucioduran.com/projects/llm-serving-bench#results","content":"Published measurement on Intel Xeon W-3223, macOS, Python 3.11.13 and PyTorch 2.2.2. All 48 requests succeeded and generated 1,152 output tokens. Eight warmups are excluded.\n\nTTFT includes connection setup, tokenization, queueing and prefill. TPOT divides the first-to-last token interval by the number of generation intervals. Percentiles interpolate six requests per configuration; throughput uses the complete configuration duration."},{"heading":"Eight measured configurations","level":3,"url":"https://lucioduran.com/projects/llm-serving-bench#results-timing","content":"| Threads / input / concurrency | TTFT p50 (s) | TPOT p50 (ms) | Latency p95 (s) | Output tokens/s |\n| --- | --- | --- | --- | --- |\n| 1 / 64 / 1 | 0.196 | 62.92 | 1.704 | 14.49 |\n| 1 / 64 / 2 | 1.871 | 63.74 | 3.355 | 14.35 |\n| 1 / 256 / 1 | 0.654 | 72.02 | 2.415 | 10.28 |\n| 1 / 256 / 2 | 3.002 | 72.84 | 4.691 | 10.24 |\n| 2 / 64 / 1 | 0.128 | 42.89 | 1.143 | 21.50 |\n| 2 / 64 / 2 | 1.256 | 43.24 | 2.460 | 20.80 |\n| 2 / 256 / 1 | 0.414 | 48.94 | 1.601 | 15.51 |\n| 2 / 256 / 2 | 2.041 | 50.61 | 3.234 | 14.93 |\n\nTwo threads produced higher throughput in this sample. Doubling clients mostly added waiting because the server retains one generation slot. Six requests per configuration do not establish an SLA or a general server ranking.\n\nSampled peak RSS ranged from 838.7 to 1,023.5 MiB. Energy is unmeasured. Reported cost uses an illustrative USD 0.10 per machine-hour allocation; it is not a bill or observed expenditure. [Original evidence](<https://raw.githubusercontent.com/lucioduran/llm-serving-bench/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/results/reference/report.json>)."},{"heading":"Reproduce","level":2,"url":"https://lucioduran.com/projects/llm-serving-bench#reproduce","content":"Replay requires Python 3.11 and the standard library. Repeating inference requires model dependencies and downloading public weights; subsequent execution uses local files.\n\nEnvironment commands use a POSIX shell. Choose a new output directory and run only one compute-intensive measurement at a time. The published lock describes Intel macOS; other systems may need different PyTorch wheels."},{"heading":"Replay saved evidence","level":3,"url":"https://lucioduran.com/projects/llm-serving-bench#reproduce-replay","content":"```\ngit clone https://github.com/lucioduran/llm-serving-bench.git\ncd llm-serving-bench\ngit checkout f291bbe0e3fbd377438b56f4cbf4a7a808720d98\npython -m serving_bench verify results/reference/report.json\n```"},{"heading":"Repeat the local measurement","level":3,"url":"https://lucioduran.com/projects/llm-serving-bench#reproduce-inference","content":"```\npython -m venv .venv\n. .venv/bin/activate\npython -m pip install -r requirements-models.txt\npython -m serving_bench download\npython -m serving_bench run --output work/reproduction --hourly-usd 0.10\npython -m serving_bench verify work/reproduction/report.json\n```"},{"heading":"Scope and limitations","level":2,"url":"https://lucioduran.com/projects/llm-serving-bench#scope","content":"- One model, host and fixed execution order. Client and server share CPU resources.\n- Closed-loop load without continuous batching, GPU, arrival-rate saturation or answer-quality evaluation.\n- Sampled RSS can miss peaks. Replay checks consistency; it neither measures timings again nor authenticates hardware.\n\n- [Inference optimization: KV-cache, PagedAttention and measurement](<https://lucioduran.com/blog/llm-inference-optimization-kv-cache-paged-attention>)"},{"heading":"Sources and revision","level":2,"url":"https://lucioduran.com/projects/llm-serving-bench#sources","content":"Values on this page come from the linked report. They are not live measurements. The report records the executed revision; the reviewed revision includes the subsequent publication of that report.\n\n- Reviewed revision: [` f291bbe0e3fbd377438b56f4cbf4a7a808720d98 `](<https://github.com/lucioduran/llm-serving-bench/commit/f291bbe0e3fbd377438b56f4cbf4a7a808720d98>)\n- Revision recorded by the experiment: [` 1f78bb2b7926840bbec088c289d56285daac807c `](<https://github.com/lucioduran/llm-serving-bench/commit/1f78bb2b7926840bbec088c289d56285daac807c>)\n- Report timestamp (UTC): 2026-10-21T21:52:58.127518+00:00\n- Release published: [v0.1.0](<https://github.com/lucioduran/llm-serving-bench/releases/tag/v0.1.0>) · 2026-10-21T21:57:30Z\n- Corpus SHA-256: ` 39e2b0383320350aef0ae9fbde0f4c81ff9c35991c36148808c834fb34466e5a `\n\n- [README and usage](<https://github.com/lucioduran/llm-serving-bench/blob/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/README.md>)\n- [Original evidence](<https://raw.githubusercontent.com/lucioduran/llm-serving-bench/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/results/reference/report.json>)\n- [Results and analysis](<https://github.com/lucioduran/llm-serving-bench/blob/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/docs/results.md>)\n- [Design and methodology](<https://github.com/lucioduran/llm-serving-bench/blob/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/docs/design.md>)\n- [HTTP/SSE protocol](<https://github.com/lucioduran/llm-serving-bench/blob/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/docs/protocol.md>)\n- [Models, revisions and licenses](<https://github.com/lucioduran/llm-serving-bench/blob/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/docs/model-notices.md>)\n- [Measured environment dependencies](<https://github.com/lucioduran/llm-serving-bench/blob/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/requirements-local.lock>)\n- [MIT license](<https://github.com/lucioduran/llm-serving-bench/blob/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/LICENSE>)"}],"links":[{"text":"Projects","url":"https://lucioduran.com/projects"},{"text":"Lucio Durán","url":"https://lucioduran.com/"},{"text":"MIT","url":"https://github.com/lucioduran/llm-serving-bench/blob/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/LICENSE"},{"text":"Repository","url":"https://github.com/lucioduran/llm-serving-bench"},{"text":"Original evidence","url":"https://raw.githubusercontent.com/lucioduran/llm-serving-bench/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/results/reference/report.json"},{"text":"Release v0.1.0","url":"https://github.com/lucioduran/llm-serving-bench/releases/tag/v0.1.0"},{"text":"Design and methodology","url":"https://github.com/lucioduran/llm-serving-bench/blob/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/docs/design.md"},{"text":"HTTP/SSE protocol","url":"https://github.com/lucioduran/llm-serving-bench/blob/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/docs/protocol.md"},{"text":"Results and analysis","url":"https://github.com/lucioduran/llm-serving-bench/blob/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/docs/results.md"},{"text":"Inference optimization: KV-cache, PagedAttention and measurement","url":"https://lucioduran.com/blog/llm-inference-optimization-kv-cache-paged-attention"},{"text":"f291bbe0e3fbd377438b56f4cbf4a7a808720d98","url":"https://github.com/lucioduran/llm-serving-bench/commit/f291bbe0e3fbd377438b56f4cbf4a7a808720d98"},{"text":"1f78bb2b7926840bbec088c289d56285daac807c","url":"https://github.com/lucioduran/llm-serving-bench/commit/1f78bb2b7926840bbec088c289d56285daac807c"},{"text":"v0.1.0","url":"https://github.com/lucioduran/llm-serving-bench/releases/tag/v0.1.0"},{"text":"README and usage","url":"https://github.com/lucioduran/llm-serving-bench/blob/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/README.md"},{"text":"Models, revisions and licenses","url":"https://github.com/lucioduran/llm-serving-bench/blob/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/docs/model-notices.md"},{"text":"Measured environment dependencies","url":"https://github.com/lucioduran/llm-serving-bench/blob/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/requirements-local.lock"},{"text":"MIT license","url":"https://github.com/lucioduran/llm-serving-bench/blob/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/LICENSE"}],"structuredData":[{"@context":"https://schema.org","@graph":[{"@type":"WebPage","@id":"https://lucioduran.com/projects/llm-serving-bench#page","url":"https://lucioduran.com/projects/llm-serving-bench","name":"LLM Serving Bench","description":"CPU inference measured over HTTP/SSE: per-token arrivals, TTFT, TPOT, latency and memory. Eight SmolLM2 configurations with raw evidence and offline replay.","inLanguage":"en","datePublished":"2026-10-21","dateModified":"2026-10-21","author":{"@id":"https://lucioduran.com/#person"},"mainEntity":{"@id":"https://lucioduran.com/projects/llm-serving-bench#software"}},{"@type":"SoftwareSourceCode","@id":"https://lucioduran.com/projects/llm-serving-bench#software","name":"LLM Serving Bench","description":"CPU inference measured over HTTP/SSE: per-token arrivals, TTFT, TPOT, latency and memory. Eight SmolLM2 configurations with raw evidence and offline replay.","url":"https://lucioduran.com/projects/llm-serving-bench","codeRepository":"https://github.com/lucioduran/llm-serving-bench","programmingLanguage":"Python","runtimePlatform":"Python 3.11.13","license":"https://github.com/lucioduran/llm-serving-bench/blob/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/LICENSE","version":"v0.1.0","identifier":{"@type":"PropertyValue","propertyID":"git-commit","value":"f291bbe0e3fbd377438b56f4cbf4a7a808720d98"},"author":{"@type":"Person","@id":"https://lucioduran.com/#person","name":"Lucio Durán","url":"https://lucioduran.com"},"isAccessibleForFree":true,"citation":["https://github.com/lucioduran/llm-serving-bench/blob/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/README.md","https://raw.githubusercontent.com/lucioduran/llm-serving-bench/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/results/reference/report.json","https://github.com/lucioduran/llm-serving-bench/blob/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/docs/results.md","https://github.com/lucioduran/llm-serving-bench/blob/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/docs/design.md","https://github.com/lucioduran/llm-serving-bench/blob/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/docs/protocol.md","https://github.com/lucioduran/llm-serving-bench/blob/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/docs/model-notices.md","https://github.com/lucioduran/llm-serving-bench/blob/f291bbe0e3fbd377438b56f4cbf4a7a808720d98/requirements-local.lock","https://github.com/lucioduran/llm-serving-bench/releases/tag/v0.1.0"]},{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Projects","item":"https://lucioduran.com/projects"},{"@type":"ListItem","position":2,"name":"LLM Serving Bench","item":"https://lucioduran.com/projects/llm-serving-bench"}]}]}],"contentHash":"c8c3bee374f2cfe6fc1ab8099aff1fba1fe10104684f5f7a0f9e1663ba8ab444","provenance":{"method":"Deterministic serialization of the server-rendered main element","source":"https://lucioduran.com/projects/llm-serving-bench","hashAlgorithm":"sha256","hashScope":"JSON document fields before contentHash and provenance","sourceHTMLBytes":44506,"contentBytes":7293}}
