What actually limits an LLM application?
Rarely the model. In most production systems the binding constraints are
retrieval quality, latency budget, and cost per request. All three are
engineering problems with measurable answers, and none of which improve when
you swap in a stronger model.
That is the working assumption behind this cluster. When a system gives bad
answers, the first question is not “is the model good enough” but “did the
model receive the right material, in a position it could use, within a budget
the product can afford”.
Where do the real costs sit?
Three places, in roughly this order of impact:
- Tokens you did not need to send. Input is processed before the first
output token appears, so an oversized prompt costs money and
time-to-first-token on every request. Prompt caching
(Anthropic,
OpenAI) changes this
dramatically for stable prefixes, and does nothing for traffic that does not
reuse them.
- Retrieval you cannot measure. A pipeline without a labelled evaluation
set is a pipeline where quality changes are invisible. Chunking strategy,
reranking and passage ordering all move accuracy, and none of it is
observable without measurement.
- Work done twice. Re-embedding unchanged documents, re-processing static
context, and re-running deterministic steps inside a loop are the quiet
majority of avoidable spend. Each one is small on its own, so none of them gets
owned until somebody totals them up.
Why do these systems regress silently?
Because most of their failure modes are not exceptions. A cache prefix that
stops matching, a retriever returning subtly worse passages, a prompt that
grew past the model’s effective window. None of these throw. They surface as a
slow drift in answer quality, or as a cost increase nobody attributes to the
change that caused it.
The defence is instrumentation that treats these as first-class signals: cache
hit ratio bucketed by deploy, retrieval quality against a fixed set, and token
counts per request path. If a regression can only be detected by reading
outputs, it will be detected late.
What does a healthy system look like in production?
Four signals, all cheap to instrument and all leading rather than lagging:
- Token counts per request path, split into cached reads, cache writes and
uncached input. A change in the ratio points at a prefix that stopped
matching long before the invoice does.
- Retrieval quality against a fixed set, re-run on every pipeline change.
Without it, chunking and reranking changes are unfalsifiable.
- Time-to-first-token at the 95th percentile, measured at the tail. Input
processing dominates it, and the tail is what users describe as “slow”.
- Answer quality bucketed by deploy version, so a regression names the
change that caused it.
None of these require a vendor platform. All of them are numbers your own code
already has access to. Systems drift because nobody wrote these down, which is
a different problem from them being hard to obtain.
How should you read this cluster?
Every article here is written to be reproducible. Where a number appears, the
method that produced it is described so you can re-run it against your own
workload rather than take it on trust. Measurement beats intuition here, and that
applies to what you read on this site as much as to anything you ship.
OpenAI's 6 October 2026 Decisions API is a narrower surface than Responses: it only answers predicate, choice, and score questions on `/v1/decisions`, bills input tokens only, and returns probabilities instead of generated text. Use it for routing and triage. Keep Responses for extraction, explanations, and tool calls.
4 min read
OpenAI's GPT-6 docs split the family on an operational boundary before quality even enters the picture: GPT-6 Astra and GPT-6.1 Sol do not support `none` reasoning effort, while GPT-6 Luna does. Start with Luna for bounded, high-volume work, move to GPT-6.1 Sol for complex tool-driven flows, and use Astra only when measured task quality still misses the bar.
5 min read
OpenAI computer use runs the browser in an OpenAI-hosted environment, but the docs say your application still handles origin approvals, sign-in, and turn verification. Even public websites need explicit origin approval, and credential submission stays outside model input, so the real integration job is approval handling rather than browser scripting.
4 min read
Because OpenAI Batch can target `/v1/responses`, the real choice is the job control plane. Use `background: true` when one long-running job must stay pollable, streamable or cancellable inside your app. Use Batch when 50% lower cost, higher rate limits and a 24 hour file workflow matter more than immediacy.
4 min read
Claude cache diagnostics compares the current request with the response `id` of the previous diagnosed turn and reports the first divergence across model, system, tools, or messages. Since 23 September 2026 the `diagnostics` field is always present, so reliable debugging means reading that field together with `usage.cache_read_input_tokens`.
4 min read
TypeSafe publishes four use cases for Jev and two rate limits: 250,000 tokens per second and 1,200 requests a minute. Below 12,500 tokens per request the request limit binds first, so a small-state workload reaches a fraction of the token ceiling. Map-reducing a petabyte stays out of reach.
4 min read
OpenAI's misalignment monitoring can automatically stop only Responses API conversations that preserve context through persisted reasoning, WebSocket continuation, or server-side compaction. Other Responses requests are still monitored but only emit alerts, and Chat Completions sits outside the system. Treat it as a backstop. It is not a permission control.
4 min read
Google ADK v2.10.0 adds `persistent`, `bounded` and `ephemeral` skill lifecycles behind `ADK_ENABLE_SKILL_LIFECYCLE=1`, but the source code is clear that only `bounded` skills count against `max_active_skills`. `ephemeral` skills expire at turn end, except under `run_live`, where they stay active for the full stream.
4 min read
Anthropic's mid-conversation-tool-changes-2026-07-01 beta lets a system-role message add or remove already-declared tools partway through a conversation without invalidating the cached prefix above it. LangChain wired this into ChatAnthropic on 23 September 2026, and its wrapper silently drops any other content type from that message with only a logged warning.
5 min read
OpenAI's Agents API, released in public beta on 10 September 2026, says OpenAI manages the hosted Codex harness, orchestration, context compaction, recovery, and durable session state. The same docs say your application still owns tool integrations and the choice of execution environment, so a managed runtime removes control-plane work more than security responsibility.
4 min read
Anthropic added `verbatim_prompts` to the Python Agent SDK on 23 September 2026. It marks each user message `client_composed: true`, which Claude Code 2.1.248 and later delivers as written, so `@/path` tokens do not expand into file contents and slash commands do not dispatch. For apps that inline untrusted text, this closes a pre-permission local-read gap.
4 min read
Claude Opus 5.5 launched September 22, 2026 with four breaking changes that return a 400 error: disabled thinking, forced tool_choice, computer_20251124 on the API and Google Cloud, and replayed thinking blocks on newer accounts. A fifth change returns 200: tool-call progress text goes quiet by default, and the effort parameter's default silently drops from high to medium.
5 min read
vLLM 0.30.0, released September 22, 2026, fixed a bug where vendor YaRN aliases like deepseek_yarn and telechat3-yarn double-applied the scaling factor, PR #56446. TeleChat3-36B-Thinking's derived max_model_len drops from 131072 to 32768, sarvam-105b's from 5242880 to 131072, both exactly 4x and 40x, and the old, larger figures risked indexing past the cache.
3 min read
openai-python v3.15.0 adds a prewarm field to the Responses API's prompt cache options. Setting it true forces generate to false, writing the cache with no output, at a TTL fixed to 30 minutes. Claude has offered the same effect since launch via a max_tokens=0 request, with a 5 minute default or a paid 1 hour TTL.
4 min read
Claude Code and the Agent SDK record a session's system prompt on its first request and keep reusing that copy after resume, so a changed append or custom prompt has no effect until the session compacts or you start a new one. The snapshot field controls this, and it defaults to off in bare mode.
5 min read
Jev answers noul, choice and score questions. Choice caps at 255 options and score at 10 levels, and both return a confidence derived from their probability distribution. Noul returns no confidence field at all, because the probability it hands back already describes the uncertainty. Modelling the problem means picking among those three.
4 min read
Anthropic's Compliance API added beta coverage of Claude in Chrome sessions on 18 September 2026, but its own docs show it never captures sessions under zero data retention or HIPAA readiness, Claude Code run through a Console key or Bedrock, or cloud Claude Code sessions, and a naive polling loop can permanently drop a session still being written.
6 min read
Claude now has two compaction features with the same name. Threshold compaction, beta compact_20260112, leaves its summary block after the messages it summarises. On-demand compaction, beta compact-2026-09-04, returns a signed block that replaces them and must be sent first, or the request returns a 400.
6 min read
A cloud agent is a service that loops over goals, model calls and tools inside infrastructure you control. Treat it like a worker, with scoped identity, a queue, a sandbox and full traces. Manual deployment means packaging the agent, setting secrets, proving a dry run, then promoting one controlled replica.
4 min read
robots.txt, llms.txt, Content-Signal and AIPREF all describe what an agent may fetch. The 2,000 packages uploaded to RubyGems in May went through a signup form and a publish endpoint, which none of those files govern. Read controls are advisory. Write paths need identity and rate limits.
3 min read
Prompt caching stores a prefix of your prompt so later requests reuse it instead of reprocessing it. Reads are far cheaper than base input tokens, but writing the cache costs a premium and entries expire. It pays whenever a large stable prefix is reused several times inside the TTL, and loses on one-shot traffic.
6 min read