DeepThinking AI

21 articles

AI Engineering

Most LLM applications are bottlenecked by engineering rather than intelligence. This cluster covers retrieval design, caching economics, latency budgets and evaluation harnesses, with numbers you can reproduce.

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.

Articles in this cluster

AI Engineering

When should you use OpenAI Decisions instead of Responses?

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

AI Engineering

Which GPT-6 model should you use for AI engineering workflows?

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

AI Engineering

How does OpenAI computer use work in the Agents API?

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

AI Engineering

Should you use OpenAI background mode or the Batch API?

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

AI Engineering

How do you debug Claude prompt cache misses?

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

AI Engineering

Which Jev use cases actually work at production scale?

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

AI Engineering

Which OpenAI sessions can misalignment monitoring stop?

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

AI Engineering

How does Google ADK skill lifecycle actually work?

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

AI Engineering

Can you add or remove tools mid-conversation with Claude?

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

AI Engineering

What does OpenAI's Agents API actually manage?

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

AI Engineering

How do you stop Claude Code from expanding untrusted prompt text?

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

AI Engineering

Which Claude Opus 5.5 changes break your code without an error?

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

AI Engineering

Why does vLLM 0.30.0 cut some models' max context length?

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

AI Engineering

How does OpenAI's Responses API prompt-cache prewarming work?

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

AI Engineering

Why does Claude Code ignore an updated system prompt on resume?

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

AI Engineering

How do you model a classification problem with Jev?

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

AI Engineering

Which Claude sessions does the Compliance API actually capture?

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

AI Engineering

Which Claude compaction mode should you use, threshold or on-demand?

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

AI Engineering

How do cloud agents run in production?

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

AI Engineering

Do robots.txt and llms.txt stop AI agents from writing?

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

AI EngineeringUpdated Sep 16, 2026

When does prompt caching actually save money?

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