# <Your platform's name> — capstone report

<!--
Purpose: the deliverable of Capstone 6, and the thing the whole course was building
         towards. One document in which somebody who was not there can see what you built,
         judge every number in it, reproduce the parts they care about, and find out what
         you did not measure.
Platform: all
Minimum memory: not applicable; this is a document
Assumes: the five deliverables before it, labbook.md, and the tables that
         collect-capstone-evidence.py assembled from it. Every table below is filled from
         that script's output or typed from a notebook record, never from memory.

Two rules for the whole document:
  1. Every number sits in a table that carries the machine, the operating system, the
     engine and version, the model, the quantisation, the context length and the date.
     No figure appears in a sentence on its own.
  2. Every sentence claiming that something is faster, better or sufficient names a
     measurement label that exists in the notebook. A sentence that cannot is marked as
     arithmetic, or as a vendor figure with its source, or it is deleted.

Delete every comment block, including this one. Fill in every angle-bracket field; write
"not recorded" where you cannot, because the gap is information.
No key, address, hostname or personal path belongs in a document you will show anybody.
-->

**Author:** <you> · **Date:** <YYYY-MM-DD> · **Tracks:** <S, X, M, N> ·
**Period this covers:** <YYYY-MM-DD to YYYY-MM-DD>

---

## 1. What this platform is and who uses it

<Three or four sentences. What it serves, to whom, how often, and what it replaced. Then
the requirement from Capstone 1, restated unchanged: concurrent users, prompt and answer
lengths, and the latency budget.>

**Did it meet the requirement?** <yes, no, or partly, with the measurement label. This is
the only conclusion the document has, and it belongs at the top.>

## 2. The architecture

### 2.1 The machines and the links

<A diagram or a table of machines with their roles, and every link with what it carries.
Every box exists and nothing running is missing from it.>

| Machine | Track | Chip | Memory | Roles | What runs on it |
| --- | --- | --- | --- | --- | --- |
| <name> | | | | | |

| From | To | Class | Measured throughput | Carries |
| --- | --- | --- | --- | --- |
| <machine> | <machine> | | | <per-token / per-request / load-time / client> |

### 2.2 The request path

<From a client to an answer, in numbered steps: what authenticates it, what routes it,
which engine serves it, what is cached, what is logged. Six to ten steps.>

### 2.3 The model estate

| Alias | Model | Quantisation | Context configured | Where it runs | Licence | Provenance recorded |
| --- | --- | --- | --- | --- | --- | --- |
| <name clients use> | <exact id> | | | | | <hash beside the file> |

## 3. The measurements

<Assembled by collect-capstone-evidence.py from labbook.md. Every table below carries its
own context; a table whose context has a gap says so in the row beneath it rather than
leaving the reader to assume.>

### 3.1 Single-model throughput

| Model | Quantisation | Test | Backend | Tokens per second | Spread | File size |
| --- | --- | --- | --- | --- | --- | --- |
| | | | | | | |

*Context:* machine <name>; operating system <version>; engine <name and version>; context
length <n>; date <YYYY-MM-DD>.

### 3.2 The service under load

| Configuration | Concurrency | Completed | Failed | Output tokens per second | Requests per second | Time to first token, median | Time per output token, median |
| --- | --- | --- | --- | --- | --- | --- | --- |
| | | | | | | | |

*Context:* <as above> · *Load generator and prompt set:* <name and settings>

### 3.3 Baseline against the chosen deployment

| Configuration | Concurrency | Output tokens per second | Time to first token, median | What differed besides the architecture |
| --- | --- | --- | --- | --- |
| Baseline, one machine | | | | reference |
| <the chosen architecture> | | | | <list, or nothing> |

**What the architecture bought:** <capacity, speed, both or neither, in one sentence with
the two labels named.>

### 3.4 The improved model

| Model | Quantisation | Metric | Runs | Mean | Range | Noise floor |
| --- | --- | --- | --- | --- | --- | --- |
| Base | | | | | | |
| Improved | | | | | | |

**Held or not:** <the claim from Capstone 4, and whether the difference exceeded the noise
floor.>

### 3.5 The agents

| Configuration | Repeats | Success rate | Mean steps | Mean tokens | Spread |
| --- | --- | --- | --- | --- | --- |
| | | | | | |

## 4. Cost and power

| Input | Value | How obtained |
| --- | --- | --- |
| Idle power, whole platform | <watts at the wall> | <meter, and where it was placed> |
| Power under load | <watts at the wall> | <same meter, during which measurement> |
| Price of electricity | <per unit> | <your bill, and the date> |
| Aggregate output rate | <tokens per second across the platform> | <measurement label> |
| Generating hours per year | <n> | <assumption, and what it is based on> |
| Powered-on hours per year | <n> | <assumption> |
| Purchase price of the machines | <total> | <what you actually paid> |
| Amortisation period | <years> | <assumption> |

| Figure | Value |
| --- | --- |
| Energy cost per million tokens | |
| Marginal energy cost per million tokens | |
| Capital cost per million tokens | |
| Idle energy carried by the work | |
| **Total cost per million tokens** | |

**What this comparison does and does not say:** <the utilisation assumption is doing most
of the work in that total, and a machine that is powered on all day for an hour of
generation carries the rest of the day on that hour. Say what your assumption was and what
the figure becomes at half and at double it.>

## 5. What did not work

<At least three, each with what you tried, what the evidence was, and what you did
instead. This is not a confession section; it is the part of the report another person
will find most useful, because it is the only part they cannot reconstruct from the
tables.>

**1. <what>** — <what you expected, what happened, what the evidence was, what you did.>

**2. <what>** — <as above.>

**3. <what>** — <as above.>

## 6. What changed in your understanding

<One or two paragraphs. Something you believed early in the course and no longer believe,
with the measurement that changed it. The most common candidates: what makes decode fast,
what a second machine buys, how much a quantisation actually costs on your own tasks,
whether a fine-tune helped, how far a small model can drive an agent.>

<A sentence that begins "I expected" and ends with a measurement label is the shape this
section wants.>

## 7. The maintenance plan

| Task | How often | What it involves | Where the state lives | Last done |
| --- | --- | --- | --- | --- |
| Restore a backup into a scratch location and compare | <quarterly> | | | <YYYY-MM-DD> |
| Re-verify model file hashes | | | | |
| Update engines, one at a time, with a rollback ready | | | | |
| Re-run the evaluation set after any model change | | | | |
| Re-check the sandbox boundary test | | | | |
| Review keys: what exists, what is unused, what expired | | | | |
| Re-measure the baseline | <after any upgrade> | | | |

**What breaks first if nobody does any of this:** <one sentence, and it is usually the
certificate or the disk.>

## 8. Reproducing this

| Field | Value |
| --- | --- |
| Operating systems and versions | |
| Driver, toolkit or framework versions | |
| Engine versions, exact | |
| Container image digests, not tags | |
| Model repositories and revisions | |
| Configuration files | <where they are, and what has to be replaced> |
| Scripts | <the ones you actually ran> |
| What cannot be reproduced without your hardware | |

## 9. What is not true here

<What you did not measure. What is arithmetic rather than measurement. What you took from
a vendor page or a project's documentation without verifying on your own machine. Where
two configurations were not strictly comparable. Where a single run cannot distinguish a
difference from a wobble. Which tracks you could not test.>

<Write this last, write it honestly, and make it long enough to be useful. Every "no"
answer from the capstone rubric belongs here as one sentence. A document that says what it
does not know is a document whose other claims are worth reading, and that, rather than
any number in section 3, is what the course has been teaching.>
