diff --git a/codex-rs/app-server-protocol/src/protocol.rs b/codex-rs/app-server-protocol/src/protocol.rs index 98b16a26e5..74e9b6f9e2 100644 --- a/codex-rs/app-server-protocol/src/protocol.rs +++ b/codex-rs/app-server-protocol/src/protocol.rs @@ -266,6 +266,10 @@ pub struct NewConversationParams { #[serde(skip_serializing_if = "Option::is_none")] pub model: Option, + /// Override the model provider to use for this session. + #[serde(skip_serializing_if = "Option::is_none")] + pub model_provider: Option, + /// Configuration profile from config.toml to specify default options. #[serde(skip_serializing_if = "Option::is_none")] pub profile: Option, @@ -1032,6 +1036,7 @@ mod tests { request_id: RequestId::Integer(42), params: NewConversationParams { model: Some("gpt-5-codex".to_string()), + model_provider: None, profile: None, cwd: None, approval_policy: Some(AskForApproval::OnRequest), diff --git a/codex-rs/app-server/src/codex_message_processor.rs b/codex-rs/app-server/src/codex_message_processor.rs index f6f81173b2..9b66322047 100644 --- a/codex-rs/app-server/src/codex_message_processor.rs +++ b/codex-rs/app-server/src/codex_message_processor.rs @@ -1610,6 +1610,7 @@ async fn derive_config_from_params( ) -> std::io::Result { let NewConversationParams { model, + model_provider, profile, cwd, approval_policy, @@ -1625,7 +1626,7 @@ async fn derive_config_from_params( cwd: cwd.map(PathBuf::from), approval_policy, sandbox_mode, - model_provider: None, + model_provider, codex_linux_sandbox_exe, base_instructions, include_apply_patch_tool,