From 8ce09ae7436053cc4f632d1a797ba503c3ee0fa3 Mon Sep 17 00:00:00 2001 From: KRATOS <84986124+gnanam1990@users.noreply.github.com> Date: Fri, 3 Apr 2026 20:23:14 +0530 Subject: [PATCH] fix: disable cache_control injection for third-party providers (#276) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit getPromptCachingEnabled() returned true for all providers including Azure Foundry, OpenAI, Gemini, and GitHub. This caused cache_control blocks to be injected into every request sent to 3P endpoints. Azure Foundry's strict Responsible AI content filter treats unexpected Anthropic-specific fields (cache_control: { type: "ephemeral" }) as a jailbreak signal and rejects the request with a 400 error — even for a simple prompt like "hi". Fix: return false early when provider is not firstParty, bedrock, or vertex — the only providers that understand and support prompt caching. Fixes #273 Related: #267 (Finding 1) Co-authored-by: Claude Sonnet 4.6 --- src/services/api/claude.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/services/api/claude.ts b/src/services/api/claude.ts index b5e55c37..32416683 100644 --- a/src/services/api/claude.ts +++ b/src/services/api/claude.ts @@ -331,6 +331,14 @@ export function getExtraBodyParams(betaHeaders?: string[]): JsonObject { } export function getPromptCachingEnabled(model: string): boolean { + // Prompt caching is an Anthropic-specific feature. Third-party providers + // do not understand cache_control blocks and strict backends (e.g. Azure + // Foundry) reject or flag requests that contain them. + const provider = getAPIProvider() + if (provider !== 'firstParty' && provider !== 'bedrock' && provider !== 'vertex') { + return false + } + // Global disable takes precedence if (isEnvTruthy(process.env.DISABLE_PROMPT_CACHING)) return false