Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 5 additions & 7 deletions codex-rs/core/src/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -655,13 +655,11 @@ fn build_responses_headers(
let mut headers = experimental_feature_headers(config);
headers.insert(
WEB_SEARCH_ELIGIBLE_HEADER,
HeaderValue::from_static(
if matches!(config.web_search_mode, Some(WebSearchMode::Disabled)) {
"false"
} else {
"true"
},
),
HeaderValue::from_static(if config.web_search_mode == WebSearchMode::Disabled {
"false"
} else {
"true"
}),
);
if let Some(turn_state) = turn_state
&& let Some(state) = turn_state.get()
Expand Down
4 changes: 2 additions & 2 deletions codex-rs/core/src/codex.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2824,7 +2824,7 @@ async fn spawn_review_thread(
let tools_config = ToolsConfig::new(&ToolsConfigParams {
model_info: &review_model_info,
features: &review_features,
web_search_mode: Some(review_web_search_mode),
web_search_mode: review_web_search_mode,
});

let review_prompt = resolved.prompt.clone();
Expand All @@ -2836,7 +2836,7 @@ async fn spawn_review_thread(
let mut per_turn_config = (*config).clone();
per_turn_config.model = Some(model.clone());
per_turn_config.features = review_features.clone();
per_turn_config.web_search_mode = Some(review_web_search_mode);
per_turn_config.web_search_mode = review_web_search_mode;

let otel_manager = parent_turn_context
.client
Expand Down
33 changes: 18 additions & 15 deletions codex-rs/core/src/config/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -304,8 +304,8 @@ pub struct Config {
/// model info's default preference.
pub include_apply_patch_tool: bool,

/// Explicit or feature-derived web search mode.
pub web_search_mode: Option<WebSearchMode>,
/// Explicit or feature-derived web search mode. Defaults to cached.
pub web_search_mode: WebSearchMode,

/// If set to `true`, used only the experimental unified exec tool.
pub use_experimental_unified_exec_tool: bool,
Expand Down Expand Up @@ -1205,17 +1205,17 @@ fn resolve_web_search_mode(
config_toml: &ConfigToml,
config_profile: &ConfigProfile,
features: &Features,
) -> Option<WebSearchMode> {
) -> WebSearchMode {
if let Some(mode) = config_profile.web_search.or(config_toml.web_search) {
return Some(mode);
return mode;
}
if features.enabled(Feature::WebSearchCached) {
return Some(WebSearchMode::Cached);
return WebSearchMode::Cached;
}
if features.enabled(Feature::WebSearchRequest) {
return Some(WebSearchMode::Live);
return WebSearchMode::Live;
}
None
WebSearchMode::Cached
}

impl Config {
Expand Down Expand Up @@ -2264,12 +2264,15 @@ trust_level = "trusted"
}

#[test]
fn web_search_mode_uses_none_if_unset() {
fn web_search_mode_defaults_to_cached_if_unset() {
let cfg = ConfigToml::default();
let profile = ConfigProfile::default();
let features = Features::with_defaults();

assert_eq!(resolve_web_search_mode(&cfg, &profile, &features), None);
assert_eq!(
resolve_web_search_mode(&cfg, &profile, &features),
WebSearchMode::Cached
);
}

#[test]
Expand All @@ -2284,7 +2287,7 @@ trust_level = "trusted"

assert_eq!(
resolve_web_search_mode(&cfg, &profile, &features),
Some(WebSearchMode::Live)
WebSearchMode::Live
);
}

Expand All @@ -2300,7 +2303,7 @@ trust_level = "trusted"

assert_eq!(
resolve_web_search_mode(&cfg, &profile, &features),
Some(WebSearchMode::Disabled)
WebSearchMode::Disabled
);
}

Expand Down Expand Up @@ -3737,7 +3740,7 @@ model_verbosity = "high"
forced_chatgpt_workspace_id: None,
forced_login_method: None,
include_apply_patch_tool: false,
web_search_mode: None,
web_search_mode: WebSearchMode::Cached,
use_experimental_unified_exec_tool: false,
ghost_snapshot: GhostSnapshotConfig::default(),
features: Features::with_defaults(),
Expand Down Expand Up @@ -3820,7 +3823,7 @@ model_verbosity = "high"
forced_chatgpt_workspace_id: None,
forced_login_method: None,
include_apply_patch_tool: false,
web_search_mode: None,
web_search_mode: WebSearchMode::Cached,
use_experimental_unified_exec_tool: false,
ghost_snapshot: GhostSnapshotConfig::default(),
features: Features::with_defaults(),
Expand Down Expand Up @@ -3918,7 +3921,7 @@ model_verbosity = "high"
forced_chatgpt_workspace_id: None,
forced_login_method: None,
include_apply_patch_tool: false,
web_search_mode: None,
web_search_mode: WebSearchMode::Cached,
use_experimental_unified_exec_tool: false,
ghost_snapshot: GhostSnapshotConfig::default(),
features: Features::with_defaults(),
Expand Down Expand Up @@ -4002,7 +4005,7 @@ model_verbosity = "high"
forced_chatgpt_workspace_id: None,
forced_login_method: None,
include_apply_patch_tool: false,
web_search_mode: None,
web_search_mode: WebSearchMode::Cached,
use_experimental_unified_exec_tool: false,
ghost_snapshot: GhostSnapshotConfig::default(),
features: Features::with_defaults(),
Expand Down
2 changes: 1 addition & 1 deletion codex-rs/core/src/tasks/review.rs
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ async fn start_review_conversation(
let mut sub_agent_config = config.as_ref().clone();
// Carry over review-only feature restrictions so the delegate cannot
// re-enable blocked tools (web search, view image).
sub_agent_config.web_search_mode = Some(WebSearchMode::Disabled);
sub_agent_config.web_search_mode = WebSearchMode::Disabled;

// Set explicit review rubric for the sub-agent
sub_agent_config.base_instructions = Some(crate::REVIEW_PROMPT.to_string());
Expand Down
Loading
Loading