mirror of
https://github.com/openai/codex.git
synced 2026-10-31 19:28:49 +00:00
Track code-mode cell lifecycle and result buffering time (#55653)
## What changed - Add `CodeModeCellTiming` notifications for yielded executions, terminal waits, and unavailable cells, with thread, call, and cell identifiers. - Measure how long completed results remain buffered before retrieval and carry `result_buffered_for` through the runtime, stdio protocol, and gRPC response metadata. Immediate delivery reports zero; waits without a completed result report no buffering measurement. - Default missing buffering data to zero for compatibility with older hosts. ## Testing Extend runtime tests to verify buffering duration with a paused clock and retrieval through termination. Add gRPC conversion tests for nanosecond precision, optional metadata, and the distinction between immediate delivery and no completed result. GitOrigin-RevId: 60c0c5a3affa69ac3779bf1812fca50f5748af76
This commit is contained in:
committed by
copyberry
parent
801bd4d773
commit
87f3c3284e
@@ -43,6 +43,18 @@ pub enum WaitOutcome {
|
||||
}
|
||||
|
||||
impl WaitOutcome {
|
||||
/// How long a completed result waited for retrieval. Zero if it was delivered immediately,
|
||||
/// or `None` if this wait did not retrieve a completed result.
|
||||
pub fn result_buffered_for(&self) -> Option<Duration> {
|
||||
match self {
|
||||
Self::LiveCell(RuntimeResponse::Result {
|
||||
result_buffered_for,
|
||||
..
|
||||
}) => Some(*result_buffered_for),
|
||||
Self::LiveCell(_) | Self::MissingCell(_) => None,
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns timing for this wait or termination request, when supplied by its host.
|
||||
pub fn code_mode_host_duration(&self) -> Option<Duration> {
|
||||
match self {
|
||||
@@ -113,6 +125,9 @@ pub enum RuntimeResponse {
|
||||
cell_id: CellId,
|
||||
content_items: Vec<FunctionCallOutputContentItem>,
|
||||
error_text: Option<String>,
|
||||
/// Time between completion and retrieval when the result was buffered.
|
||||
#[serde(default, skip_serializing_if = "Duration::is_zero")]
|
||||
result_buffered_for: Duration,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
code_mode_host_duration: Option<Duration>,
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user