| 350 | } |
| 351 | |
| 352 | async fn complete_streaming( |
| 353 | &self, |
| 354 | _messages: &[Message], |
| 355 | _system: Option<&str>, |
| 356 | _tools: &[ToolDefinition], |
| 357 | _cancel_token: tokio_util::sync::CancellationToken, |
| 358 | ) -> Result<mpsc::Receiver<StreamEvent>> { |
| 359 | self.call_count.fetch_add(1, Ordering::SeqCst); |
| 360 | let mut responses = self.responses.lock().unwrap(); |
| 361 | if responses.is_empty() { |
| 362 | anyhow::bail!("No more mock responses available"); |
| 363 | } |
| 364 | let response = responses.remove(0); |
| 365 | |
| 366 | let (tx, rx) = mpsc::channel(10); |
| 367 | tokio::spawn(async move { |
| 368 | // Send text deltas if any |
| 369 | for block in &response.message.content { |
| 370 | if let ContentBlock::Text { text } = block { |
| 371 | tx.send(StreamEvent::TextDelta(text.clone())).await.ok(); |
| 372 | } |
| 373 | } |
| 374 | tx.send(StreamEvent::Done(response)).await.ok(); |
| 375 | }); |
| 376 | |
| 377 | Ok(rx) |
| 378 | } |
| 379 | } |
| 380 | |
| 381 | // ======================================================================== |