mirror of
https://github.com/openai/codex.git
synced 2026-11-07 20:30:33 +00:00
Filter saved reasoning overrides from requests when disabled (#46291)
## Why Resuming a thread after disabling reasoning effort overrides still sent saved `configuration_update` items until compaction. Disabling the feature should also apply to requests built from existing history. ## What changed Pass the `ReasoningEffortOverride` feature state into `ModelClient` and filter `configuration_update` items from request input when disabled. Preserve persisted history and other input items while using the request-level reasoning effort. ## Testing Add regression coverage for resumed threads, compaction, and WebSocket warmup and turn requests. Verify that saved updates remain in history and `agent_message` items remain in request input. GitOrigin-RevId: aac3257da1ca38a0744807c4f7cb12565bd7fe53
This commit is contained in:
@@ -203,6 +203,7 @@ struct ModelClientState {
|
||||
originator: String,
|
||||
model_verbosity: Option<VerbosityConfig>,
|
||||
content_item_kinds_enabled: bool,
|
||||
reasoning_effort_override_enabled: bool,
|
||||
enable_request_compression: bool,
|
||||
include_timing_metrics: bool,
|
||||
beta_features_header: Option<String>,
|
||||
@@ -476,6 +477,7 @@ impl ModelClient {
|
||||
originator: String,
|
||||
model_verbosity: Option<VerbosityConfig>,
|
||||
content_item_kinds_enabled: bool,
|
||||
reasoning_effort_override_enabled: bool,
|
||||
enable_request_compression: bool,
|
||||
include_timing_metrics: bool,
|
||||
beta_features_header: Option<String>,
|
||||
@@ -502,6 +504,7 @@ impl ModelClient {
|
||||
originator,
|
||||
model_verbosity,
|
||||
content_item_kinds_enabled,
|
||||
reasoning_effort_override_enabled,
|
||||
enable_request_compression,
|
||||
include_timing_metrics,
|
||||
beta_features_header,
|
||||
@@ -856,6 +859,11 @@ impl ModelClient {
|
||||
responses_metadata: &CodexResponsesMetadata,
|
||||
) -> Result<ResponsesApiRequest> {
|
||||
let mut input = prompt.get_formatted_input_for_request(model_info);
|
||||
if !self.state.reasoning_effort_override_enabled {
|
||||
// Disabling overrides must also recover threads with saved updates.
|
||||
// Filter only the request copy; persisted history remains unchanged.
|
||||
input.retain(|item| !matches!(item, ResponseItem::ConfigurationUpdate { .. }));
|
||||
}
|
||||
let is_openai = self.state.provider.info().is_openai();
|
||||
let (instructions, tools) = if model_info.use_responses_lite {
|
||||
// These prompt-only items are rebuilt on every request. Hash their visible payloads
|
||||
|
||||
@@ -115,6 +115,7 @@ fn test_model_client_with_thread_id(
|
||||
"test_originator".to_string(),
|
||||
/*model_verbosity*/ None,
|
||||
/*content_item_kinds_enabled*/ true,
|
||||
/*reasoning_effort_override_enabled*/ false,
|
||||
/*enable_request_compression*/ false,
|
||||
/*include_timing_metrics*/ false,
|
||||
/*beta_features_header*/ None,
|
||||
@@ -1631,6 +1632,7 @@ fn model_client_with_counting_attestation(
|
||||
"test_originator".to_string(),
|
||||
/*model_verbosity*/ None,
|
||||
/*content_item_kinds_enabled*/ true,
|
||||
/*reasoning_effort_override_enabled*/ false,
|
||||
/*enable_request_compression*/ false,
|
||||
/*include_timing_metrics*/ false,
|
||||
/*beta_features_header*/ None,
|
||||
|
||||
@@ -1677,6 +1677,7 @@ impl Session {
|
||||
session_configuration.originator.clone(),
|
||||
config.model_verbosity,
|
||||
config.features.enabled(Feature::ContentItemKinds),
|
||||
config.features.enabled(Feature::ReasoningEffortOverride),
|
||||
config.features.enabled(Feature::EnableRequestCompression),
|
||||
config.features.enabled(Feature::RuntimeMetrics),
|
||||
Self::build_model_client_beta_features_header(config.as_ref()),
|
||||
|
||||
@@ -794,6 +794,7 @@ fn test_model_client_session() -> crate::client::ModelClientSession {
|
||||
"test_originator".to_string(),
|
||||
/*model_verbosity*/ None,
|
||||
/*content_item_kinds_enabled*/ true,
|
||||
/*reasoning_effort_override_enabled*/ false,
|
||||
/*enable_request_compression*/ false,
|
||||
/*include_timing_metrics*/ false,
|
||||
/*beta_features_header*/ None,
|
||||
@@ -6177,6 +6178,7 @@ pub(crate) async fn make_session_and_context() -> (Session, TurnContext) {
|
||||
session_configuration.originator.clone(),
|
||||
config.model_verbosity,
|
||||
config.features.enabled(Feature::ContentItemKinds),
|
||||
config.features.enabled(Feature::ReasoningEffortOverride),
|
||||
config.features.enabled(Feature::EnableRequestCompression),
|
||||
config.features.enabled(Feature::RuntimeMetrics),
|
||||
Session::build_model_client_beta_features_header(config.as_ref()),
|
||||
@@ -8363,6 +8365,7 @@ where
|
||||
session_configuration.originator.clone(),
|
||||
config.model_verbosity,
|
||||
config.features.enabled(Feature::ContentItemKinds),
|
||||
config.features.enabled(Feature::ReasoningEffortOverride),
|
||||
config.features.enabled(Feature::EnableRequestCompression),
|
||||
config.features.enabled(Feature::RuntimeMetrics),
|
||||
Session::build_model_client_beta_features_header(config.as_ref()),
|
||||
|
||||
Reference in New Issue
Block a user