@@ -1373,7 +1373,7 @@ async fn run_compact_task(
|
|||||||
let mut retries = 0;
|
let mut retries = 0;
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
let attempt_result = drain_to_completed(&sess, &prompt).await;
|
let attempt_result = drain_to_completed(&sess, &sub_id, &prompt).await;
|
||||||
|
|
||||||
match attempt_result {
|
match attempt_result {
|
||||||
Ok(()) => break,
|
Ok(()) => break,
|
||||||
@@ -2001,7 +2001,7 @@ fn get_last_assistant_message_from_turn(responses: &[ResponseItem]) -> Option<St
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn drain_to_completed(sess: &Session, prompt: &Prompt) -> CodexResult<()> {
|
async fn drain_to_completed(sess: &Session, sub_id: &str, prompt: &Prompt) -> CodexResult<()> {
|
||||||
let mut stream = sess.client.clone().stream(prompt).await?;
|
let mut stream = sess.client.clone().stream(prompt).await?;
|
||||||
loop {
|
loop {
|
||||||
let maybe_event = stream.next().await;
|
let maybe_event = stream.next().await;
|
||||||
@@ -2011,7 +2011,32 @@ async fn drain_to_completed(sess: &Session, prompt: &Prompt) -> CodexResult<()>
|
|||||||
));
|
));
|
||||||
};
|
};
|
||||||
match event {
|
match event {
|
||||||
Ok(ResponseEvent::Completed { .. }) => return Ok(()),
|
Ok(ResponseEvent::OutputItemDone(item)) => {
|
||||||
|
// Record only to in-memory conversation history; avoid state snapshot.
|
||||||
|
let mut state = sess.state.lock().unwrap();
|
||||||
|
state.history.record_items(std::slice::from_ref(&item));
|
||||||
|
}
|
||||||
|
Ok(ResponseEvent::Completed {
|
||||||
|
response_id: _,
|
||||||
|
token_usage,
|
||||||
|
}) => {
|
||||||
|
let token_usage = match token_usage {
|
||||||
|
Some(usage) => usage,
|
||||||
|
None => {
|
||||||
|
return Err(CodexErr::Stream(
|
||||||
|
"token_usage was None in ResponseEvent::Completed".into(),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
sess.tx_event
|
||||||
|
.send(Event {
|
||||||
|
id: sub_id.to_string(),
|
||||||
|
msg: EventMsg::TokenCount(token_usage),
|
||||||
|
})
|
||||||
|
.await
|
||||||
|
.ok();
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
Ok(_) => continue,
|
Ok(_) => continue,
|
||||||
Err(e) => return Err(e),
|
Err(e) => return Err(e),
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user