diff --git a/src/platform/configuration/common/configurationService.ts b/src/platform/configuration/common/configurationService.ts index 59af216cee..97c924930d 100644 --- a/src/platform/configuration/common/configurationService.ts +++ b/src/platform/configuration/common/configurationService.ts @@ -813,7 +813,7 @@ export namespace ConfigKey { /** Configure reasoning effort sent to Responses API */ export const ResponsesApiReasoningEffort = defineSetting<'low' | 'medium' | 'high' | 'default'>('chat.responsesApiReasoningEffort', ConfigType.ExperimentBased, 'default'); /** Configure reasoning summary style sent to Responses API */ - export const ResponsesApiReasoningSummary = defineSetting<'off' | 'detailed'>('chat.responsesApiReasoningSummary', ConfigType.ExperimentBased, 'detailed'); + export const ResponsesApiReasoningSummary = defineSetting<'off' | 'concise' | 'detailed'>('chat.responsesApiReasoningSummary', ConfigType.ExperimentBased, 'detailed'); export const EnableChatImageUpload = defineSetting('chat.imageUpload.enabled', ConfigType.ExperimentBased, true); /** Thinking token budget for Anthropic extended thinking. If set, enables extended thinking. */ export const AnthropicThinkingBudget = defineSetting('chat.anthropic.thinking.budgetTokens', ConfigType.ExperimentBased, 4000); diff --git a/src/platform/endpoint/common/chatModelCapabilities.ts b/src/platform/endpoint/common/chatModelCapabilities.ts index c2923d8ca0..bc545e6f9e 100644 --- a/src/platform/endpoint/common/chatModelCapabilities.ts +++ b/src/platform/endpoint/common/chatModelCapabilities.ts @@ -29,7 +29,8 @@ const VSC_MODEL_HASHES_A = [ const HIDDEN_MODEL_B_HASHES = [ '31a2d5282683edb3a22c565f199aa96fb9ffb3107af35aad92ee1cd567cfc25d', 'dd832404e8eeb90793f0369b96ed1702e0e22487a58eb4c1f285a4af5c4f6f21', - '131e2083b68bde4fe879efc38ed9651b1623f8735eeb42157fa3b63ef943fdc6' + '131e2083b68bde4fe879efc38ed9651b1623f8735eeb42157fa3b63ef943fdc6', + '768e03eb8c0003f009745eb72538a435874c5b52a3e4cc71714ca06ceca60d29', ]; // Currently empty, will be used in future for a different set of VSC models diff --git a/src/platform/endpoint/node/responsesApi.ts b/src/platform/endpoint/node/responsesApi.ts index 5dddec64aa..ef2d6b1bf2 100644 --- a/src/platform/endpoint/node/responsesApi.ts +++ b/src/platform/endpoint/node/responsesApi.ts @@ -23,7 +23,7 @@ import { ChatCompletion, FinishedCompletionReason, TokenLogProb } from '../../ne import { IExperimentationService } from '../../telemetry/common/nullExperimentationService'; import { ITelemetryService } from '../../telemetry/common/telemetry'; import { TelemetryData } from '../../telemetry/common/telemetryData'; -import { getVerbosityForModelSync } from '../common/chatModelCapabilities'; +import { getVerbosityForModelSync, isHiddenModelB } from '../common/chatModelCapabilities'; import { getStatefulMarkerAndIndex } from '../common/statefulMarkerContainer'; import { rawPartAsThinkingData } from '../common/thinkingDataContainer'; @@ -57,8 +57,12 @@ export function createResponsesRequestBody(accessor: ServicesAccessor, options: 'disabled'; const effortConfig = configService.getExperimentBasedConfig(ConfigKey.ResponsesApiReasoningEffort, expService); const summaryConfig = configService.getExperimentBasedConfig(ConfigKey.ResponsesApiReasoningSummary, expService); - const effort = effortConfig === 'default' ? 'medium' : effortConfig; - const summary = summaryConfig === 'off' ? undefined : summaryConfig; + let effort = effortConfig === 'default' ? 'medium' : effortConfig; + let summary = summaryConfig === 'off' ? 'detailed' : summaryConfig; + const reasoningParams = reasoningParameterValuesBasedOnModel(endpoint.family, effort, summary); + effort = reasoningParams?.effort || effort; + summary = reasoningParams?.summary || summary; + if (effort || summary) { body.reasoning = { ...(effort ? { effort } : {}), @@ -71,6 +75,20 @@ export function createResponsesRequestBody(accessor: ServicesAccessor, options: return body; } +// for gpt-5.2 + models, changing the default reasoning parameters +type ResponsesReasoningEffort = 'low' | 'medium' | 'high'; +type ResponsesReasoningSummary = 'concise' | 'detailed'; + +function reasoningParameterValuesBasedOnModel(model: string, effort: ResponsesReasoningEffort, summary: ResponsesReasoningSummary): { effort?: ResponsesReasoningEffort; summary?: ResponsesReasoningSummary } | undefined { + if (isHiddenModelB(model)) { + return { + effort, + summary: 'concise', + }; + } +} + + function rawMessagesToResponseAPI(modelId: string, messages: readonly Raw.ChatMessage[], ignoreStatefulMarker: boolean): { input: OpenAI.Responses.ResponseInputItem[]; previous_response_id?: string } { const statefulMarkerAndIndex = !ignoreStatefulMarker && getStatefulMarkerAndIndex(modelId, messages); let previousResponseId: string | undefined;