From fe8122e514553d0888117ec5bc88760355a2412a Mon Sep 17 00:00:00 2001 From: Michael Bolin Date: Wed, 8 Oct 2025 09:53:35 -0700 Subject: [PATCH] fix: change log_sse_event() so it no longer takes a closure (#4953) Unlikely fix for https://github.com/openai/codex/issues/4381, but worth a shot given that https://github.com/openai/codex/pull/2103 changed around the same time. --- codex-rs/core/src/chat_completions.rs | 10 ++++++---- codex-rs/core/src/client.rs | 10 ++++++---- codex-rs/otel/src/otel_event_manager.rs | 20 ++++++-------------- 3 files changed, 18 insertions(+), 22 deletions(-) diff --git a/codex-rs/core/src/chat_completions.rs b/codex-rs/core/src/chat_completions.rs index feedf3c4..d6f394fb 100644 --- a/codex-rs/core/src/chat_completions.rs +++ b/codex-rs/core/src/chat_completions.rs @@ -389,10 +389,12 @@ async fn process_chat_sse( let mut reasoning_text = String::new(); loop { - let sse = match otel_event_manager - .log_sse_event(|| timeout(idle_timeout, stream.next())) - .await - { + let start = std::time::Instant::now(); + let response = timeout(idle_timeout, stream.next()).await; + let duration = start.elapsed(); + otel_event_manager.log_sse_event(&response, duration); + + let sse = match response { Ok(Some(Ok(ev))) => ev, Ok(Some(Err(e))) => { let _ = tx_event diff --git a/codex-rs/core/src/client.rs b/codex-rs/core/src/client.rs index 3c21552d..3ea2ca79 100644 --- a/codex-rs/core/src/client.rs +++ b/codex-rs/core/src/client.rs @@ -649,10 +649,12 @@ async fn process_sse( let mut response_error: Option = None; loop { - let sse = match otel_event_manager - .log_sse_event(|| timeout(idle_timeout, stream.next())) - .await - { + let start = std::time::Instant::now(); + let response = timeout(idle_timeout, stream.next()).await; + let duration = start.elapsed(); + otel_event_manager.log_sse_event(&response, duration); + + let sse = match response { Ok(Some(Ok(sse))) => sse, Ok(Some(Err(e))) => { debug!("SSE Error: {e:#}"); diff --git a/codex-rs/otel/src/otel_event_manager.rs b/codex-rs/otel/src/otel_event_manager.rs index bda23433..2d6f278a 100644 --- a/codex-rs/otel/src/otel_event_manager.rs +++ b/codex-rs/otel/src/otel_event_manager.rs @@ -148,21 +148,15 @@ impl OtelEventManager { response } - pub async fn log_sse_event( + pub fn log_sse_event( &self, - next: Next, - ) -> Result>>, Elapsed> - where - Next: FnOnce() -> Fut, - Fut: Future>>, Elapsed>>, + response: &Result>>, Elapsed>, + duration: Duration, + ) where E: Display, { - let start = std::time::Instant::now(); - let response = next().await; - let duration = start.elapsed(); - match response { - Ok(Some(Ok(ref sse))) => { + Ok(Some(Ok(sse))) => { if sse.data.trim() == "[DONE]" { self.sse_event(&sse.event, duration); } else { @@ -191,7 +185,7 @@ impl OtelEventManager { } } } - Ok(Some(Err(ref error))) => { + Ok(Some(Err(error))) => { self.sse_event_failed(None, duration, error); } Ok(None) => {} @@ -199,8 +193,6 @@ impl OtelEventManager { self.sse_event_failed(None, duration, &"idle timeout waiting for SSE"); } } - - response } fn sse_event(&self, kind: &str, duration: Duration) {