mirror of
https://github.com/openai/codex.git
synced 2026-09-10 20:26:47 +00:00
## Summary - read the request-scoped safety-buffering treatment from HTTP response headers and per-turn WebSocket metadata through one shared header parser - combine that treatment with Responses API safety-buffering signals - propagate `showBufferingUi` and nullable `fasterModel` through the existing `model/safetyBuffering/updated` app-server notification - update the app-server documentation and generated JSON and TypeScript schemas The public implementation contains no model mapping or real model identifier. Tests and protocol examples use generic `current-model` and `faster-model` placeholders only. ## Dependencies - server-side treatment evaluation: https://github.com/openai/openai/pull/1060247 - initial Responses API safety-buffering propagation: https://github.com/openai/codex/pull/29371 - Codex App UI: https://github.com/openai/openai/pull/1057789 ## Validation - Codex API tests: 129 passed - focused Codex core safety-buffering integration test passed - app-server protocol tests passed after regenerating schema fixtures - Clippy fix and repository formatting completed successfully The broader app-server run compiled all changed crates and completed with 1,269 passing tests. Its remaining failures were unrelated environment limitations: macOS sandbox application was denied, one expected test binary was unavailable, and several existing subprocess tests timed out as a result.
55 lines
1.6 KiB
Rust
55 lines
1.6 KiB
Rust
use crate::common::SafetyBufferingTreatment;
|
|
use http::HeaderMap;
|
|
|
|
pub(crate) const X_CODEX_SAFETY_BUFFERING_ENABLED_HEADER: &str = "x-codex-safety-buffering-enabled";
|
|
pub(crate) const X_CODEX_SAFETY_BUFFERING_FASTER_MODEL_HEADER: &str =
|
|
"x-codex-safety-buffering-faster-model";
|
|
|
|
pub(crate) fn treatment_from_headers(headers: &HeaderMap) -> Option<SafetyBufferingTreatment> {
|
|
let show_buffering_ui = headers
|
|
.get(X_CODEX_SAFETY_BUFFERING_ENABLED_HEADER)
|
|
.and_then(|value| value.to_str().ok())?
|
|
.eq_ignore_ascii_case("true");
|
|
let faster_model = if show_buffering_ui {
|
|
headers
|
|
.get(X_CODEX_SAFETY_BUFFERING_FASTER_MODEL_HEADER)
|
|
.and_then(|value| value.to_str().ok())
|
|
.map(str::to_string)
|
|
} else {
|
|
None
|
|
};
|
|
|
|
Some(SafetyBufferingTreatment {
|
|
show_buffering_ui,
|
|
faster_model,
|
|
})
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
use http::HeaderValue;
|
|
use pretty_assertions::assert_eq;
|
|
|
|
#[test]
|
|
fn reads_treatment_from_http_headers() {
|
|
let mut headers = HeaderMap::new();
|
|
headers.insert(
|
|
X_CODEX_SAFETY_BUFFERING_ENABLED_HEADER,
|
|
HeaderValue::from_static("true"),
|
|
);
|
|
headers.insert(
|
|
X_CODEX_SAFETY_BUFFERING_FASTER_MODEL_HEADER,
|
|
HeaderValue::from_static("faster-model"),
|
|
);
|
|
|
|
assert_eq!(
|
|
treatment_from_headers(&headers),
|
|
Some(SafetyBufferingTreatment {
|
|
show_buffering_ui: true,
|
|
faster_model: Some("faster-model".to_string()),
|
|
})
|
|
);
|
|
}
|
|
}
|