CS2680 Modern AI Systems: Agents and System Optimizations
Final Exam
Overview
Bring the agentic system you built in Assignment 4. At the start of the exam you are handed a
task it has never seen. You have the session to make it work — accurately and fast — and everyone
in the room is doing the same thing on the same hardware.
This is not a written exam. There is nothing to memorise and nothing to recite. It is a three-hour
engineering sprint against a live leaderboard, and the only thing it can measure is whether you can actually
drive the stack you spent a semester taking apart: profile something unfamiliar under time pressure, decide
which knob matters, turn it, and know whether you helped.
Worth 20% of the course grade. In person, closed room, roughly three hours, during the
registrar's December final exam period. Individual — no teams.
Date: to be scheduled by the registrar in the December exam period. The date will be posted
here and announced in class as soon as it is set. If you have a
conflict, a religious observance, or an accommodation, contact the instructor as early as you can — see
the exam policy.
What happens in the room
You arrive with your Assignment 4 system, already running on the exam machine image. You are given a task
suite you have not seen and a harness contract you have: same interface, same submission path, same metrics
as the practice runs.
| Time |
What happens |
| 0:00 |
Task suite released — a public dev split you can run against freely, and a description of what
the held-out split looks like. |
| 0:00 – 0:30 |
Baseline run, required. Your system, unmodified, on the new task. This is your own
starting number and it is worth credit on its own; you cannot claim an improvement without it. |
| 0:30 – 2:30 |
Adapt and optimize. Submit to the dev leaderboard as often as you like; it updates live. |
| 2:30 |
Submissions lock. Your last submission is scored on the held-out split, which
decides the standings. |
| 2:30 – 3:00 |
Write-up, submitted in the room: what you changed, why you expected it to help, what the measurements
said, and what you would do with another three hours. |
The new task
You will not see it beforehand. What is fixed, and what you can therefore prepare for, is the
shape: an agentic loop over a suite of tasks, scored by an automatic checker, with a tool interface
your harness has to call. What changes is everything a real deployment changes underneath you — a
different tool set, a different context profile, a different mix of easy and hard cases, and a different
balance between how much the model has to think and how much it has to fetch.
That is the point. A system tuned to exactly one workload is not an optimized system, it is a fitted one, and
the exam is designed to tell those apart in about twenty minutes.
What is being tested
Not recall, and not how good your Assignment 4 was. Whether you can take an unfamiliar workload, find where
it actually spends its tokens and its seconds, and move the right thing first. Everything in Part II of this
course was preparation for that decision.
Accuracy and speed
Two numbers are reported for every submission, and both are on the leaderboard from the first run:
- Accuracy — the fraction of held-out tasks your system solves, as judged by the
staff checker. The checker is the same one you can run against the dev split, so there are no surprises in
how it grades, only in what it grades.
- Speed — mean end-to-end wall-clock time per task, measured by the harness on the
exam GPU, from the first request of the agent loop to the final answer. Tool time counts. Retries count.
Everything you actually spend counts.
How they combine
Standings are ranked by tasks solved per minute — accuracy divided by mean
wall-clock time per task — behind an accuracy gate:
The gate: a submission scoring below 70% of the staff reference system's
accuracy does not rank, however fast it is. Below that line you have not made the system faster,
you have replaced it with a different and worse one.
Why this metric
Throughput of correct answers is what an operator is buying, and it is the only combination of these
two numbers that cannot be gamed from one side alone: strip quality to go fast and the gate stops you; buy
accuracy with an enormous think budget and the divisor stops you. The leaderboard also plots both raw numbers
so the Pareto front is visible — a submission that is the most accurate in the room is worth seeing
even if it is not the fastest.
Cost in dollars is not scored here, because everyone is running on the same allocation of the same
hardware; wall-clock on a fixed GPU is the cost, expressed in the unit you can actually feel during a
three-hour session.
Rules
- Bring your own system. Your Assignment 4 repository, your notes, your profiling scripts,
your model weights cached on disk — all of it, prepared in advance. Preparation is not cheating here,
it is the exam.
- Serve your own agent. The graded agent loop must run entirely on the exam machine and
the GPU allocated to you. No commercial inference APIs inside the loop — not OpenAI, Anthropic,
Gemini, or a hosted open-weights endpoint. A speed contest where some contestants can buy a bigger
datacenter is not a speed contest, and Assignment 3 was entirely about owning this layer.
- AI coding assistants are allowed for writing and debugging your code, under the usual
disclosure requirement — state in your write-up what you used.
This is a course about agents; banning them from the room would be an odd way to end it. They may not,
however, appear inside the graded loop: the thing being measured is the system you serve, not the API you
call.
- Individual work. No collaboration with other students during the session, in any
channel. You may use any static resource: documentation, papers, your own code, public repositories,
anything on disk or on the open web.
- No fitting to the held-out split. Detecting which split or which task instance is
running and branching on it is disqualifying, as is hardcoding answers the checker expects. The held-out
split exists to make this pointless; the staff will read the diff of anything near the top.
- Submit something that runs. A submission that crashes, hangs, or exceeds the per-task
time limit scores as a failure on those tasks. Keep a working version checked in at all times and know how
to roll back — the most common way to lose points here is a clever change made at 2:25.
- Measure before you claim. The write-up asks what your changes did. Numbers from the
harness, not impressions.
If your Assignment 4 system will not start. A staff reference stack — a plain agent
harness on a self-served model, deliberately unoptimized — is on the exam image and you may fall back to
it at any point without penalty. You are graded on the adaptation you make during the session, not on which
stack you started from. Tell the staff when you switch, and say so in the write-up.
How the 20% is earned
Most of the credit is for engineering the problem well under time pressure. Winning is worth the least of
it — a careful, honestly measured mid-table run scores well, and a top-of-the-leaderboard run with a
write-up that cannot explain itself does not.
| Component |
Weight |
| A working adapted system: your baseline run plus a final submission that completes the held-out split |
8% |
| Measured improvement over your own baseline, on accuracy, speed, or a defended trade between them |
6% |
| Write-up: what you changed, why, and what the numbers said — including the changes that lost |
4% |
| Leaderboard standing on the held-out split |
2% |
An honest negative result scores. If you profiled the new task, formed a reasonable theory,
changed the right layer, and it made things worse — say so and show the measurement. That is a real
outcome and it earns nearly full credit on the last two rows. Silently reporting a run you did not take is
the one thing that does not.
How to prepare
You cannot study for the task. You can make your system easy to change, which is most of the difference on
the day — and doing it well is also just how the Assignment 4 write-up gets better.
- Make the task a parameter, not an assumption. Tools, prompts, stopping conditions, and
the answer format should be configuration your harness reads, not constants scattered through it. Every
hour you spend on this in November is ten minutes you do not lose in December.
- Keep the profiler in the loop. Per-step tokens, latency, tool time, and retries, on by
default, printable in one command. You will be reading it cold on a workload you have never seen.
- Know your knobs and their costs. Batch size, quantization level, cache configuration,
context budget, parallel tool calls, model size. Know which ones you can change in two minutes and which
need twenty — on the day, that ordering matters more than which is theoretically best.
- Have a rollback. A tagged commit that runs, and a one-line command to get back to it.
- Rehearse on a task you have not used. Point your Assignment 4 system at a workload it was
never tuned for and give yourself two hours. Whatever breaks in that rehearsal is what would have broken in
the exam.
A practice task suite on the exam harness will be posted after Assignment 4 is due, along with the
machine image, so you can check that your system starts on it well before the day.