From f024bba2ef7bec23d297513a1ade0590c4314fa0 Mon Sep 17 00:00:00 2001 From: Fan Date: Mon, 1 Sep 2025 22:02:46 +0800 Subject: [PATCH] chore: add configurable cache control (#498) * chore: add configurable cache control * fix: ci/cd --- packages/cli/src/config/settingsSchema.ts | 35 +++++++++++++++++++ packages/core/src/config/config.ts | 6 ++++ .../core/src/core/contentGenerator.test.ts | 1 + packages/core/src/core/contentGenerator.ts | 3 ++ .../core/src/core/openaiContentGenerator.ts | 13 ++++++- 5 files changed, 57 insertions(+), 1 deletion(-) diff --git a/packages/cli/src/config/settingsSchema.ts b/packages/cli/src/config/settingsSchema.ts index 803bee5e..f16b0714 100644 --- a/packages/cli/src/config/settingsSchema.ts +++ b/packages/cli/src/config/settingsSchema.ts @@ -523,6 +523,41 @@ export const SETTINGS_SCHEMA = { default: undefined as Record | undefined, description: 'Content generator settings.', showInDialog: false, + properties: { + timeout: { + type: 'number', + label: 'Timeout', + category: 'Content Generator', + requiresRestart: false, + default: undefined as number | undefined, + description: 'Request timeout in milliseconds.', + parentKey: 'contentGenerator', + childKey: 'timeout', + showInDialog: true, + }, + maxRetries: { + type: 'number', + label: 'Max Retries', + category: 'Content Generator', + requiresRestart: false, + default: undefined as number | undefined, + description: 'Maximum number of retries for failed requests.', + parentKey: 'contentGenerator', + childKey: 'maxRetries', + showInDialog: true, + }, + disableCacheControl: { + type: 'boolean', + label: 'Disable Cache Control', + category: 'Content Generator', + requiresRestart: false, + default: false, + description: 'Disable cache control for DashScope providers.', + parentKey: 'contentGenerator', + childKey: 'disableCacheControl', + showInDialog: true, + }, + }, }, enableOpenAILogging: { type: 'boolean', diff --git a/packages/core/src/config/config.ts b/packages/core/src/config/config.ts index f16298cc..0b04c875 100644 --- a/packages/core/src/config/config.ts +++ b/packages/core/src/config/config.ts @@ -217,6 +217,7 @@ export interface ConfigParameters { contentGenerator?: { timeout?: number; maxRetries?: number; + disableCacheControl?: boolean; samplingParams?: { [key: string]: unknown; }; @@ -302,6 +303,7 @@ export class Config { private readonly contentGenerator?: { timeout?: number; maxRetries?: number; + disableCacheControl?: boolean; samplingParams?: Record; }; private readonly cliVersion?: string; @@ -801,6 +803,10 @@ export class Config { return this.contentGenerator?.maxRetries; } + getContentGeneratorDisableCacheControl(): boolean | undefined { + return this.contentGenerator?.disableCacheControl; + } + getContentGeneratorSamplingParams(): ContentGeneratorConfig['samplingParams'] { return this.contentGenerator?.samplingParams as | ContentGeneratorConfig['samplingParams'] diff --git a/packages/core/src/core/contentGenerator.test.ts b/packages/core/src/core/contentGenerator.test.ts index 3b563851..04aac012 100644 --- a/packages/core/src/core/contentGenerator.test.ts +++ b/packages/core/src/core/contentGenerator.test.ts @@ -121,6 +121,7 @@ describe('createContentGeneratorConfig', () => { getSamplingParams: vi.fn().mockReturnValue(undefined), getContentGeneratorTimeout: vi.fn().mockReturnValue(undefined), getContentGeneratorMaxRetries: vi.fn().mockReturnValue(undefined), + getContentGeneratorDisableCacheControl: vi.fn().mockReturnValue(undefined), getContentGeneratorSamplingParams: vi.fn().mockReturnValue(undefined), getCliVersion: vi.fn().mockReturnValue('1.0.0'), } as unknown as Config; diff --git a/packages/core/src/core/contentGenerator.ts b/packages/core/src/core/contentGenerator.ts index c2635f95..476ebfe0 100644 --- a/packages/core/src/core/contentGenerator.ts +++ b/packages/core/src/core/contentGenerator.ts @@ -62,6 +62,8 @@ export type ContentGeneratorConfig = { timeout?: number; // Maximum retries for failed requests maxRetries?: number; + // Disable cache control for DashScope providers + disableCacheControl?: boolean; samplingParams?: { top_p?: number; top_k?: number; @@ -99,6 +101,7 @@ export function createContentGeneratorConfig( enableOpenAILogging: config.getEnableOpenAILogging(), timeout: config.getContentGeneratorTimeout(), maxRetries: config.getContentGeneratorMaxRetries(), + disableCacheControl: config.getContentGeneratorDisableCacheControl(), samplingParams: config.getContentGeneratorSamplingParams(), }; diff --git a/packages/core/src/core/openaiContentGenerator.ts b/packages/core/src/core/openaiContentGenerator.ts index 85d1071c..670cb07b 100644 --- a/packages/core/src/core/openaiContentGenerator.ts +++ b/packages/core/src/core/openaiContentGenerator.ts @@ -212,6 +212,17 @@ export class OpenAIContentGenerator implements ContentGenerator { ); } + /** + * Check if cache control should be disabled based on configuration. + * + * @returns true if cache control should be disabled, false otherwise + */ + private shouldDisableCacheControl(): boolean { + return ( + this.config.getContentGeneratorConfig()?.disableCacheControl === true + ); + } + /** * Build metadata object for OpenAI API requests. * @@ -242,7 +253,7 @@ export class OpenAIContentGenerator implements ContentGenerator { // Add cache control to system and last messages for DashScope providers // Only add cache control to system message for non-streaming requests - if (this.isDashScopeProvider()) { + if (this.isDashScopeProvider() && !this.shouldDisableCacheControl()) { messages = this.addDashScopeCacheControl( messages, streaming ? 'both' : 'system',