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.
This commit is contained in:
Michael Bolin
2025-10-08 09:53:35 -07:00
committed by GitHub
parent 876d4f450a
commit fe8122e514
3 changed files with 18 additions and 22 deletions

View File

@@ -389,10 +389,12 @@ async fn process_chat_sse<S>(
let mut reasoning_text = String::new(); let mut reasoning_text = String::new();
loop { loop {
let sse = match otel_event_manager let start = std::time::Instant::now();
.log_sse_event(|| timeout(idle_timeout, stream.next())) let response = timeout(idle_timeout, stream.next()).await;
.await let duration = start.elapsed();
{ otel_event_manager.log_sse_event(&response, duration);
let sse = match response {
Ok(Some(Ok(ev))) => ev, Ok(Some(Ok(ev))) => ev,
Ok(Some(Err(e))) => { Ok(Some(Err(e))) => {
let _ = tx_event let _ = tx_event

View File

@@ -649,10 +649,12 @@ async fn process_sse<S>(
let mut response_error: Option<CodexErr> = None; let mut response_error: Option<CodexErr> = None;
loop { loop {
let sse = match otel_event_manager let start = std::time::Instant::now();
.log_sse_event(|| timeout(idle_timeout, stream.next())) let response = timeout(idle_timeout, stream.next()).await;
.await let duration = start.elapsed();
{ otel_event_manager.log_sse_event(&response, duration);
let sse = match response {
Ok(Some(Ok(sse))) => sse, Ok(Some(Ok(sse))) => sse,
Ok(Some(Err(e))) => { Ok(Some(Err(e))) => {
debug!("SSE Error: {e:#}"); debug!("SSE Error: {e:#}");

View File

@@ -148,21 +148,15 @@ impl OtelEventManager {
response response
} }
pub async fn log_sse_event<Next, Fut, E>( pub fn log_sse_event<E>(
&self, &self,
next: Next, response: &Result<Option<Result<StreamEvent, StreamError<E>>>, Elapsed>,
) -> Result<Option<Result<StreamEvent, StreamError<E>>>, Elapsed> duration: Duration,
where ) where
Next: FnOnce() -> Fut,
Fut: Future<Output = Result<Option<Result<StreamEvent, StreamError<E>>>, Elapsed>>,
E: Display, E: Display,
{ {
let start = std::time::Instant::now();
let response = next().await;
let duration = start.elapsed();
match response { match response {
Ok(Some(Ok(ref sse))) => { Ok(Some(Ok(sse))) => {
if sse.data.trim() == "[DONE]" { if sse.data.trim() == "[DONE]" {
self.sse_event(&sse.event, duration); self.sse_event(&sse.event, duration);
} else { } else {
@@ -191,7 +185,7 @@ impl OtelEventManager {
} }
} }
} }
Ok(Some(Err(ref error))) => { Ok(Some(Err(error))) => {
self.sse_event_failed(None, duration, error); self.sse_event_failed(None, duration, error);
} }
Ok(None) => {} Ok(None) => {}
@@ -199,8 +193,6 @@ impl OtelEventManager {
self.sse_event_failed(None, duration, &"idle timeout waiting for SSE"); self.sse_event_failed(None, duration, &"idle timeout waiting for SSE");
} }
} }
response
} }
fn sse_event(&self, kind: &str, duration: Duration) { fn sse_event(&self, kind: &str, duration: Duration) {