feat: read model_provider and model_providers from config.toml (#853)

This is the first step in supporting other model providers in the Rust
CLI. Specifically, this PR adds support for the new entries in `Config`
and `ConfigOverrides` to specify a `ModelProviderInfo`, which is the
basic config needed for an LLM provider. This PR does not get us all the
way there yet because `client.rs` still categorically appends
`/responses` to the URL and expects the endpoint to support the OpenAI
Responses API. Will fix that next!
This commit is contained in:
Michael Bolin
2025-05-07 17:38:28 -07:00
committed by GitHub
parent cfe50c7107
commit 86022f097e
12 changed files with 208 additions and 30 deletions

View File

@@ -80,6 +80,7 @@ impl Codex {
let (tx_sub, rx_sub) = async_channel::bounded(64);
let (tx_event, rx_event) = async_channel::bounded(64);
let configure_session = Op::ConfigureSession {
provider: config.model_provider.clone(),
model: config.model.clone(),
instructions: config.instructions.clone(),
approval_policy: config.approval_policy,
@@ -504,6 +505,7 @@ async fn submission_loop(
sess.abort();
}
Op::ConfigureSession {
provider,
model,
instructions,
approval_policy,
@@ -512,7 +514,7 @@ async fn submission_loop(
notify,
cwd,
} => {
info!(model, "Configuring session");
info!("Configuring session: model={model}; provider={provider:?}");
if !cwd.is_absolute() {
let message = format!("cwd is not absolute: {cwd:?}");
error!(message);
@@ -526,7 +528,7 @@ async fn submission_loop(
return;
}
let client = ModelClient::new(model.clone());
let client = ModelClient::new(model.clone(), provider.clone());
// abort any current running session and clone its state
let state = match sess.take() {