feat(tui): implement streaming support for LLM responses and update transcript handling
This commit is contained in:
@@ -128,13 +128,27 @@ fn run_turn(
|
||||
|
||||
debug!("agent turn iteration {iteration}");
|
||||
|
||||
// Blocking LLM call (reqwest::blocking::Client is sync)
|
||||
let result = client.chat_with_tools_non_streaming(
|
||||
// Stream the LLM response
|
||||
push_event(turn_events, TurnEvent::StreamStart);
|
||||
|
||||
let result = client.chat_with_tools_streaming(
|
||||
messages,
|
||||
Some(defs.clone()),
|
||||
Some(4096),
|
||||
Some(0.7),
|
||||
None, // no atomic abort flag for the sync API
|
||||
Some(4096),
|
||||
|event| {
|
||||
if abort.load(Ordering::SeqCst) {
|
||||
return false;
|
||||
}
|
||||
match event {
|
||||
zesdex_domain::core::StreamEvent::Token(s) | zesdex_domain::core::StreamEvent::Reasoning(s) => {
|
||||
push_event(turn_events, TurnEvent::StreamToken(s.clone()));
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
true
|
||||
},
|
||||
Some(&abort),
|
||||
);
|
||||
|
||||
match result {
|
||||
@@ -142,6 +156,8 @@ fn run_turn(
|
||||
let content = assistant_msg.content.clone().unwrap_or_default();
|
||||
let tool_calls = assistant_msg.tool_calls.clone().unwrap_or_default();
|
||||
|
||||
push_event(turn_events, TurnEvent::StreamDone(assistant_msg.clone()));
|
||||
|
||||
if let Some((tokens_in, tokens_out)) = usage {
|
||||
push_event(turn_events, TurnEvent::Usage {
|
||||
tokens_in,
|
||||
@@ -149,10 +165,6 @@ fn run_turn(
|
||||
});
|
||||
}
|
||||
|
||||
if !content.is_empty() {
|
||||
push_event(turn_events, TurnEvent::AssistantMessage(assistant_msg.clone()));
|
||||
}
|
||||
|
||||
if tool_calls.is_empty() {
|
||||
messages.push(ChatMessage::assistant(Some(content)));
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user