





















@@ -44,6 +44,7 @@ const providerRuntimeDeps = {
4444};
45454646let preparedExtraParamsCache = new WeakMap<OpenClawConfig, Map<string, Record<string, unknown>>>();
47+const REQUEST_SCOPED_EXTRA_PARAM_KEYS = new Set(["response_format", "responseFormat"]);
47484849export const __testing = {
4950setProviderRuntimeDepsForTest(
@@ -112,6 +113,16 @@ export function resolveExtraParams(params: {
112113delete merged.textVerbosity;
113114}
114115116+const resolvedResponseFormat = resolveAliasedParamValue(
117+[defaultParams, globalParams, agentParams],
118+"response_format",
119+"responseFormat",
120+);
121+if (resolvedResponseFormat !== undefined) {
122+merged.response_format = resolvedResponseFormat;
123+delete merged.responseFormat;
124+}
125+115126const resolvedCachedContent = resolveAliasedParamValue(
116127[defaultParams, globalParams, agentParams],
117128"cached_content",
@@ -194,7 +205,8 @@ function resolvePreparedExtraParamsCacheKey(params: {
194205workspaceDir: params.workspaceDir ?? "",
195206thinkingLevel: params.thinkingLevel ?? "",
196207resolvedTransport: params.resolvedTransport ?? "",
197-extraParamsOverride: params.extraParamsOverride ?? null,
208+extraParamsOverride:
209+stripRequestScopedExtraParams(sanitizeExtraParamsRecord(params.extraParamsOverride)) ?? null,
198210resolvedExtraParams: params.resolvedExtraParams ?? null,
199211model: fingerprintPreparedExtraParamsModel(params.model),
200212});
@@ -224,9 +236,11 @@ export function resolvePreparedExtraParams(params: {
224236});
225237const override =
226238params.extraParamsOverride && Object.keys(params.extraParamsOverride).length > 0
227- ? sanitizeExtraParamsRecord(
228-Object.fromEntries(
229-Object.entries(params.extraParamsOverride).filter(([, value]) => value !== undefined),
239+ ? stripRequestScopedExtraParams(
240+sanitizeExtraParamsRecord(
241+Object.fromEntries(
242+Object.entries(params.extraParamsOverride).filter(([, value]) => value !== undefined),
243+),
230244),
231245)
232246 : undefined;
@@ -312,6 +326,24 @@ function sanitizeExtraParamsRecord(
312326);
313327}
314328329+function stripRequestScopedExtraParams(
330+value: Record<string, unknown> | undefined,
331+): Record<string, unknown> | undefined {
332+if (!value) {
333+return undefined;
334+}
335+const filtered = Object.fromEntries(
336+Object.entries(value).filter(([key]) => !REQUEST_SCOPED_EXTRA_PARAM_KEYS.has(key)),
337+);
338+return Object.keys(filtered).length > 0 ? filtered : undefined;
339+}
340+341+function hasRequestScopedExtraParams(value: Record<string, unknown> | undefined): boolean {
342+if (!value) {
343+return false;
344+}
345+return [...REQUEST_SCOPED_EXTRA_PARAM_KEYS].some((key) => Object.hasOwn(value, key));
346+}
315347function shouldApplyDefaultOpenAIGptRuntimeParams(params: {
316348provider: string;
317349modelId: string;
@@ -674,9 +706,14 @@ type ApplyExtraParamsContext = {
674706};
675707676708function applyPrePluginStreamWrappers(ctx: ApplyExtraParamsContext): void {
709+const baseExtraParams =
710+ctx.override && hasRequestScopedExtraParams(ctx.override)
711+ ? stripRequestScopedExtraParams(ctx.effectiveExtraParams)
712+ : ctx.effectiveExtraParams;
713+const streamParams = ctx.override ? { ...baseExtraParams, ...ctx.override } : baseExtraParams;
677714const wrappedStreamFn = createStreamFnWithExtraParams(
678715ctx.agent.streamFn,
679-ctx.effectiveExtraParams,
716+streamParams,
680717ctx.provider,
681718ctx.model,
682719);
@@ -822,8 +859,10 @@ export function applyExtraParamsToAgent(
822859});
823860const override =
824861extraParamsOverride && Object.keys(extraParamsOverride).length > 0
825- ? Object.fromEntries(
826-Object.entries(extraParamsOverride).filter(([, value]) => value !== undefined),
862+ ? sanitizeExtraParamsRecord(
863+Object.fromEntries(
864+Object.entries(extraParamsOverride).filter(([, value]) => value !== undefined),
865+),
827866)
828867 : undefined;
829868const effectiveExtraParams =
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。