bamboo_engine/runtime/stream/
handler.rs1use tokio::sync::mpsc;
2use tokio_util::sync::CancellationToken;
3
4use bamboo_agent_core::tools::ToolCall;
5use bamboo_agent_core::{AgentError, AgentEvent};
6use bamboo_llm::LLMStream;
7
8mod chunk_handling;
9mod consume;
10mod stream_state;
11
12pub struct StreamHandlingOutput {
13 pub response_id: Option<String>,
14 pub content: String,
15 pub reasoning_content: String,
16 pub token_count: usize,
17 pub tool_calls: Vec<ToolCall>,
18 pub output_tokens: u64,
19 pub thinking_tokens: u64,
20 pub cache_creation_input_tokens: u64,
21 pub cache_read_input_tokens: u64,
22 pub input_tokens: u64,
23}
24
25pub async fn consume_llm_stream(
26 stream: LLMStream,
27 event_tx: &mpsc::Sender<AgentEvent>,
28 cancel_token: &CancellationToken,
29 session_id: &str,
30) -> Result<StreamHandlingOutput, AgentError> {
31 consume::consume_llm_stream_internal(stream, Some(event_tx), cancel_token, session_id).await
32}
33
34pub async fn consume_llm_stream_silent(
35 stream: LLMStream,
36 cancel_token: &CancellationToken,
37 session_id: &str,
38) -> Result<StreamHandlingOutput, AgentError> {
39 consume::consume_llm_stream_internal(stream, None, cancel_token, session_id).await
40}
41
42#[cfg(test)]
43mod tests;