























@@ -37,7 +37,7 @@ describe("openai transport stream", () => {
3737cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
3838contextWindow: 128000,
3939maxTokens: 4096,
40-} satisfies Model<"openai-completions">,
40+} as unknown as Model<"openai-completions">,
4141{ systemPrompt: "", messages: [] } as never,
4242);
4343@@ -1374,7 +1374,7 @@ describe("openai transport stream", () => {
13741374cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
13751375contextWindow: 200000,
13761376maxTokens: 8192,
1377-} satisfies Model<"openai-completions">,
1377+} as unknown as Model<"openai-completions">,
13781378{
13791379systemPrompt: "system",
13801380messages: [],
@@ -1560,7 +1560,7 @@ describe("openai transport stream", () => {
15601560cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
15611561contextWindow: 32768,
15621562maxTokens: 8192,
1563-} satisfies Model<"openai-completions">,
1563+} as unknown as Model<"openai-completions">,
15641564{
15651565systemPrompt: "system",
15661566messages: [],
@@ -1601,6 +1601,67 @@ describe("openai transport stream", () => {
16011601expect(params.stream_options).toEqual({ include_usage: true });
16021602});
160316031604+it("forwards prompt_cache_key for opted-in OpenAI-compatible completions providers", () => {
1605+const params = buildOpenAICompletionsParams(
1606+{
1607+id: "custom-model",
1608+name: "Custom Model",
1609+api: "openai-completions",
1610+provider: "custom-cpa",
1611+baseUrl: "https://proxy.example.com/v1",
1612+compat: { supportsPromptCacheKey: true },
1613+reasoning: false,
1614+input: ["text"],
1615+cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
1616+contextWindow: 32768,
1617+maxTokens: 8192,
1618+} as unknown as Model<"openai-completions">,
1619+{
1620+systemPrompt: "system",
1621+messages: [],
1622+tools: [],
1623+} as never,
1624+{ sessionId: "session-123" },
1625+) as { prompt_cache_key?: string };
1626+1627+expect(params.prompt_cache_key).toBe("session-123");
1628+});
1629+1630+it("omits prompt_cache_key for completions when caching is disabled or not opted in", () => {
1631+const baseModel = {
1632+id: "custom-model",
1633+name: "Custom Model",
1634+api: "openai-completions",
1635+provider: "custom-cpa",
1636+baseUrl: "https://proxy.example.com/v1",
1637+reasoning: false,
1638+input: ["text"],
1639+cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
1640+contextWindow: 32768,
1641+maxTokens: 8192,
1642+} satisfies Model<"openai-completions">;
1643+const context = {
1644+systemPrompt: "system",
1645+messages: [],
1646+tools: [],
1647+} as never;
1648+1649+const disabled = buildOpenAICompletionsParams(
1650+{
1651+ ...baseModel,
1652+compat: { supportsPromptCacheKey: true },
1653+} as unknown as Model<"openai-completions">,
1654+context,
1655+{ sessionId: "session-123", cacheRetention: "none" },
1656+) as { prompt_cache_key?: string };
1657+const notOptedIn = buildOpenAICompletionsParams(baseModel, context, {
1658+sessionId: "session-123",
1659+}) as { prompt_cache_key?: string };
1660+1661+expect(disabled.prompt_cache_key).toBeUndefined();
1662+expect(notOptedIn.prompt_cache_key).toBeUndefined();
1663+});
1664+16041665it("disables developer-role-only compat defaults for configured custom proxy completions providers", () => {
16051666const params = buildOpenAICompletionsParams(
16061667{
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。