Support response.done and add integration tests (#9129)

The agent loop using a persistent incremental web socket connection.
This commit is contained in:
pakrym-oai
2026-01-13 08:12:30 -08:00
committed by GitHub
parent 97f1f20edb
commit 2d56519ecd
7 changed files with 192 additions and 4 deletions

View File

@@ -2543,6 +2543,8 @@ pub(crate) async fn run_turn(
// many turns, from the perspective of the user, it is a single turn.
let turn_diff_tracker = Arc::new(tokio::sync::Mutex::new(TurnDiffTracker::new()));
let mut client_session = turn_context.client.new_session();
loop {
// Note that pending_input would be something like a message the user
// submitted through the UI while the model was running. Though the UI
@@ -2573,6 +2575,7 @@ pub(crate) async fn run_turn(
Arc::clone(&sess),
Arc::clone(&turn_context),
Arc::clone(&turn_diff_tracker),
&mut client_session,
turn_input,
cancellation_token.child_token(),
)
@@ -2650,6 +2653,7 @@ async fn run_model_turn(
sess: Arc<Session>,
turn_context: Arc<TurnContext>,
turn_diff_tracker: SharedTurnDiffTracker,
client_session: &mut ModelClientSession,
input: Vec<ResponseItem>,
cancellation_token: CancellationToken,
) -> CodexResult<TurnRunResult> {
@@ -2684,15 +2688,13 @@ async fn run_model_turn(
output_schema: turn_context.final_output_json_schema.clone(),
};
let mut client_session = turn_context.client.new_session();
let mut retries = 0;
loop {
let err = match try_run_turn(
Arc::clone(&router),
Arc::clone(&sess),
Arc::clone(&turn_context),
&mut client_session,
client_session,
Arc::clone(&turn_diff_tracker),
&prompt,
cancellation_token.child_token(),