diff --git a/open-sse/services/combo.ts b/open-sse/services/combo.ts
index 8dc2e99668..a8963b1a4d 100644
--- a/open-sse/services/combo.ts
+++ b/open-sse/services/combo.ts
@@ -472,7 +472,7 @@ export async function handleComboChat({
// SDKs close the connection on finish_reason, so anything sent after
// that marker is silently dropped.
if (!res.body) return res;
- const tagContent = `\n${modelStr}\n`;
+ const tagContent = `\\n${modelStr}\\n`;
const encoder = new TextEncoder();
const decoder = new TextDecoder();
let tagInjected = false;
diff --git a/open-sse/translator/helpers/responsesApiHelper.ts b/open-sse/translator/helpers/responsesApiHelper.ts
index 0d65111ebf..01967f6fd0 100644
--- a/open-sse/translator/helpers/responsesApiHelper.ts
+++ b/open-sse/translator/helpers/responsesApiHelper.ts
@@ -93,10 +93,11 @@ export function convertResponsesApiFormat(body) {
}
// Cleanup Responses API specific fields
+ // Note: prompt_cache_key is intentionally preserved — it is used by Codex and other
+ // providers as a cache-affinity signal. Stripping it breaks prompt caching (#517).
delete result.input;
delete result.instructions;
delete result.include;
- delete result.prompt_cache_key;
delete result.store;
delete result.reasoning;
diff --git a/open-sse/translator/request/openai-responses.ts b/open-sse/translator/request/openai-responses.ts
index 239c547562..11fcbe86aa 100644
--- a/open-sse/translator/request/openai-responses.ts
+++ b/open-sse/translator/request/openai-responses.ts
@@ -227,10 +227,11 @@ export function openaiResponsesToOpenAIRequest(
});
// Cleanup Responses API specific fields
+ // Note: prompt_cache_key is intentionally preserved — it is used by Codex and other
+ // providers as a cache-affinity signal. Stripping it breaks prompt caching (#517).
delete result.input;
delete result.instructions;
delete result.include;
- delete result.prompt_cache_key;
delete result.store;
delete result.reasoning;