IN THIS BREAKDOWN · 10 SECTIONS
You can read 20% of this breakdown.
The paper in one minute
LLM applications rarely make one call. A document summarizer maps over chunks and reduces; a chat search rewrites the query, retrieves, checks safety and answers; a multi-agent coder runs architect, coders and reviewers in rounds. Each step is a separate completion request to a public LLM service, which knows nothing about how they connect.
The authors identify three costs of that blindness. Round trips: for dependent steps the client must receive one output, build the next prompt and send it, paying network latency and a fresh place in the queue each time; in one production chain application, 30% to 50% of call latency was outside the GPU. Wrong objectives: the service minimizes each request's latency, but a map stage should be batched for throughput because only the final answer's latency matters. Missed sharing: long system prompts and growing conversation histories repeat across requests (94% of tokens in a production chat search), but finding shared prefixes by token matching across a cluster is too expensive.
Parrot adds one abstraction. A Semantic Variable is a marked region of a prompt template, an input or an output, such as input:task or output:code (written between double braces in Parrot's templates). Applications submit all their templated requests up front and fetch final outputs with a goal (latency or throughput). From the variables the service builds a request graph and can: run dependent requests itself as soon as inputs are ready; deduce objectives, marking parallel steps that feed a latency-critical output as a task group to batch together; and hash prompts at variable boundaries to find shared prefixes, co-locate those requests and use a kernel that reads the shared KV once.
With LLaMA 7B and 13B against vLLM-based baselines, Parrot was 11.7x faster on a MetaGPT coding workflow, sustained 12x the request rate for four apps sharing prompts, and was 2.37x faster on map-reduce summaries.
Research notes: the problem, approach and results
faster multi-agent coding workflow (MetaGPT) than a latency-tuned vLLM baseline; 2.45x against a throughput-tuned one
of prompt text repeated across requests in a production LLM chat-search application
of a production chain application's call latency spent outside the GPU, in network and queueing
LLM applications such as agents, chained summaries and map-reduce analytics make many calls per task, but a completion API sees each call alone. The client must wait for each result, rebuild the next prompt and queue again; the service optimizes each call's latency even when the application only cares about the last one; and shared prompt text goes undetected across thousands of requests.
Let applications write prompts as templates whose placeholders are Semantic Variables, marked as inputs or outputs, and state the performance goal for final outputs. The service builds a request graph from the variables, executes dependent requests itself, deduces which parallel steps can trade latency for throughput, hashes prompts at variable boundaries to find shared prefixes, and schedules with all three in mind.
On LLaMA 7B and 13B with vLLM-based baselines, Parrot sped up a MetaGPT coding workflow 11.7x (2.45x against a throughput-tuned baseline), sustained 12x the request rate for four apps with shared prompts, and ran map-reduce summaries 2.37x faster.
Why it matters to an FDE
Customers building agents often see slow end-to-end times and blame the model. Parrot's measurements say much of the time can sit between calls: client round trips, re-queuing behind other tenants and per-request scheduling that ignores the workflow.
Measure time outside the model first. Log, per workflow, the time each step spends waiting to be sent, in transit and in the provider's queue. If it's a large share, moving orchestration next to the model or batching steps helps more than a faster model.
Self-hosted stacks can exploit the workflow. With an open model on your own engine, you control the API: submit a whole stage at once, keep dependent steps server-side and group parallel calls. Prefix-sharing engines (SGLang, vLLM's prefix caching) do part of this already.
Templates matter for caching. Prompt structure (static role, quasi-static examples, dynamic input) decides how much KV can be shared. Putting the stable parts first and keeping them byte-identical lets any prefix cache work.
Understand the mechanism. Try it on a real problem.
Unlock this breakdown and 149 more papers.
Premium opens every paper in full, plus every answer, concept, course and guide on the site. One payment for six months of access.
6 months · One payment · No auto-renewal
- ◇1 architecture diagram
- </>1 runnable code experiment
- ▦2 results tables
- ?5 interview questions with answers
- 03Key takeaways
The abstraction, the optimizations, what drove each result and three misreadings
Free account - 04How it works
The API, graph analysis, objective deduction, prefix hashing and the scheduler
Premium - 05The numbers that matter
Setup, document analytics, popular apps, multi-agent and mixed workloads
Premium - 06Try it yourself
Recheck the paper's figures, model chaining, map-reduce capacity and shared-prefix memory
Premium - 07Where it breaks
Requires a new API, client-side code, emulated networks, small models, and slips
Premium - 08Using it on a deployment
Measuring orchestration overhead, restructuring calls, and choosing a serving stack for agents
Premium - 09Interview angles
Five questions this paper prepares you for, with answer hints
Premium - 10Read next
Where to go from here on this site
Premium
