Skip to content

Commit a3651a1

Browse files
authored
ignore deltas in codex_delegate (openai#6208)
ignore legacy deltas in codex-delegate to avoid this [issue](openai#6202).
1 parent 4619397 commit a3651a1

File tree

3 files changed

+58
-5
lines changed

3 files changed

+58
-5
lines changed

codex-rs/core/src/codex_delegate.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,11 @@ async fn forward_events(
158158
) {
159159
while let Ok(event) = codex.next_event().await {
160160
match event {
161+
// ignore all legacy delta events
162+
Event {
163+
id: _,
164+
msg: EventMsg::AgentMessageDelta(_) | EventMsg::AgentReasoningDelta(_),
165+
} => continue,
161166
Event {
162167
id: _,
163168
msg: EventMsg::SessionConfigured(_),

codex-rs/core/src/tasks/review.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ use codex_protocol::protocol::Event;
1010
use codex_protocol::protocol::EventMsg;
1111
use codex_protocol::protocol::ExitedReviewModeEvent;
1212
use codex_protocol::protocol::ItemCompletedEvent;
13-
use codex_protocol::protocol::ReasoningContentDeltaEvent;
14-
use codex_protocol::protocol::ReasoningRawContentDeltaEvent;
1513
use codex_protocol::protocol::ReviewOutputEvent;
1614
use tokio_util::sync::CancellationToken;
1715

@@ -124,9 +122,7 @@ async fn process_review_events(
124122
..
125123
})
126124
| EventMsg::AgentMessageDelta(AgentMessageDeltaEvent { .. })
127-
| EventMsg::AgentMessageContentDelta(AgentMessageContentDeltaEvent { .. })
128-
| EventMsg::ReasoningContentDelta(ReasoningContentDeltaEvent { .. })
129-
| EventMsg::ReasoningRawContentDelta(ReasoningRawContentDeltaEvent { .. }) => {}
125+
| EventMsg::AgentMessageContentDelta(AgentMessageContentDeltaEvent { .. }) => {}
130126
EventMsg::TaskComplete(task_complete) => {
131127
// Parse review output from the last agent message (if present).
132128
let out = task_complete

codex-rs/core/tests/suite/codex_delegate.rs

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,16 @@ use core_test_support::responses::ev_apply_patch_function_call;
88
use core_test_support::responses::ev_assistant_message;
99
use core_test_support::responses::ev_completed;
1010
use core_test_support::responses::ev_function_call;
11+
use core_test_support::responses::ev_reasoning_item_added;
12+
use core_test_support::responses::ev_reasoning_summary_text_delta;
1113
use core_test_support::responses::ev_response_created;
1214
use core_test_support::responses::mount_sse_sequence;
1315
use core_test_support::responses::sse;
1416
use core_test_support::responses::start_mock_server;
1517
use core_test_support::skip_if_no_network;
1618
use core_test_support::test_codex::test_codex;
1719
use core_test_support::wait_for_event;
20+
use pretty_assertions::assert_eq;
1821

1922
/// Delegate should surface ExecApprovalRequest from sub-agent and proceed
2023
/// after parent submits an approval decision.
@@ -171,3 +174,52 @@ async fn codex_delegate_forwards_patch_approval_and_proceeds_on_decision() {
171174
.await;
172175
wait_for_event(&test.codex, |ev| matches!(ev, EventMsg::TaskComplete(_))).await;
173176
}
177+
178+
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
179+
async fn codex_delegate_ignores_legacy_deltas() {
180+
skip_if_no_network!();
181+
182+
// Single response with reasoning summary deltas.
183+
let sse_stream = sse(vec![
184+
ev_response_created("resp-1"),
185+
ev_reasoning_item_added("reason-1", &["initial"]),
186+
ev_reasoning_summary_text_delta("think-1"),
187+
ev_completed("resp-1"),
188+
]);
189+
190+
let server = start_mock_server().await;
191+
mount_sse_sequence(&server, vec![sse_stream]).await;
192+
193+
let mut builder = test_codex();
194+
let test = builder.build(&server).await.expect("build test codex");
195+
196+
// Kick off review (delegated).
197+
test.codex
198+
.submit(Op::Review {
199+
review_request: ReviewRequest {
200+
prompt: "Please review".to_string(),
201+
user_facing_hint: "review".to_string(),
202+
},
203+
})
204+
.await
205+
.expect("submit review");
206+
207+
let mut reasoning_delta_count = 0;
208+
let mut legacy_reasoning_delta_count = 0;
209+
210+
loop {
211+
let ev = wait_for_event(&test.codex, |_| true).await;
212+
match ev {
213+
EventMsg::ReasoningContentDelta(_) => reasoning_delta_count += 1,
214+
EventMsg::AgentReasoningDelta(_) => legacy_reasoning_delta_count += 1,
215+
EventMsg::TaskComplete(_) => break,
216+
_ => {}
217+
}
218+
}
219+
220+
assert_eq!(reasoning_delta_count, 1, "expected one new reasoning delta");
221+
assert_eq!(
222+
legacy_reasoning_delta_count, 1,
223+
"expected one legacy reasoning delta"
224+
);
225+
}

0 commit comments

Comments
 (0)