Use model catalog default for reasoning summary fallback (#12873)

## Summary
- make `Config.model_reasoning_summary` optional so unset means use
model default
- resolve the optional config value to a concrete summary when building
`TurnContext`
- add protocol support for `default_reasoning_summary` in model metadata

## Validation
- `cargo test -p codex-core --lib client::tests -- --nocapture`

---------

Co-authored-by: Codex <noreply@openai.com>
This commit is contained in:
pakrym-oai
2026-02-26 09:31:13 -08:00
committed by GitHub
parent f0a85ded18
commit ba41e84a50
24 changed files with 175 additions and 40 deletions

View File

@@ -111,7 +111,14 @@ async fn responses_stream_includes_subagent_header_on_review() {
}];
let mut stream = client_session
.stream(&prompt, &model_info, &otel_manager, effort, summary, None)
.stream(
&prompt,
&model_info,
&otel_manager,
effort,
summary.unwrap_or(model_info.default_reasoning_summary),
None,
)
.await
.expect("stream failed");
while let Some(event) = stream.next().await {
@@ -216,7 +223,14 @@ async fn responses_stream_includes_subagent_header_on_other() {
}];
let mut stream = client_session
.stream(&prompt, &model_info, &otel_manager, effort, summary, None)
.stream(
&prompt,
&model_info,
&otel_manager,
effort,
summary.unwrap_or(model_info.default_reasoning_summary),
None,
)
.await
.expect("stream failed");
while let Some(event) = stream.next().await {
@@ -267,7 +281,7 @@ async fn responses_respects_model_info_overrides_from_config() {
config.model_provider_id = provider.name.clone();
config.model_provider = provider.clone();
config.model_supports_reasoning_summaries = Some(true);
config.model_reasoning_summary = ReasoningSummary::Detailed;
config.model_reasoning_summary = Some(ReasoningSummary::Detailed);
let effort = config.model_reasoning_effort;
let summary = config.model_reasoning_summary;
let model = config.model.clone().expect("model configured");
@@ -320,7 +334,14 @@ async fn responses_respects_model_info_overrides_from_config() {
}];
let mut stream = client_session
.stream(&prompt, &model_info, &otel_manager, effort, summary, None)
.stream(
&prompt,
&model_info,
&otel_manager,
effort,
summary.unwrap_or(model_info.default_reasoning_summary),
None,
)
.await
.expect("stream failed");
while let Some(event) = stream.next().await {