fix(ai): add direct OpenAI completions prompt caching closes #3426

This commit is contained in:
Mario Zechner
2026-04-20 15:37:29 +02:00
parent 6b55d6859d
commit aa1b587b10
3 changed files with 149 additions and 0 deletions

View File

@@ -12,6 +12,7 @@ import { getEnvApiKey } from "../env-api-keys.js";
import { calculateCost, supportsXhigh } from "../models.js";
import type {
AssistantMessage,
CacheRetention,
Context,
Message,
Model,
@@ -58,6 +59,16 @@ export interface OpenAICompletionsOptions extends StreamOptions {
reasoningEffort?: "minimal" | "low" | "medium" | "high" | "xhigh";
}
function resolveCacheRetention(cacheRetention?: CacheRetention): CacheRetention {
if (cacheRetention) {
return cacheRetention;
}
if (typeof process !== "undefined" && process.env.PI_CACHE_RETENTION === "long") {
return "long";
}
return "short";
}
export const streamOpenAICompletions: StreamFunction<"openai-completions", OpenAICompletionsOptions> = (
model: Model<"openai-completions">,
context: Context,
@@ -377,10 +388,14 @@ function buildParams(model: Model<"openai-completions">, context: Context, optio
const messages = convertMessages(model, context, compat);
maybeAddOpenRouterAnthropicCacheControl(model, messages);
const cacheRetention = resolveCacheRetention(options?.cacheRetention);
const params: OpenAI.Chat.Completions.ChatCompletionCreateParamsStreaming = {
model: model.id,
messages,
stream: true,
prompt_cache_key:
model.baseUrl.includes("api.openai.com") && cacheRetention !== "none" ? options?.sessionId : undefined,
prompt_cache_retention: model.baseUrl.includes("api.openai.com") && cacheRetention === "long" ? "24h" : undefined,
};
if (compat.supportsUsageInStreaming !== false) {