| 201 | } |
| 202 | |
| 203 | async fn complete_streaming( |
| 204 | &self, |
| 205 | _messages: &[Message], |
| 206 | _system: Option<&str>, |
| 207 | _tools: &[crate::llm::ToolDefinition], |
| 208 | _cancel_token: tokio_util::sync::CancellationToken, |
| 209 | ) -> anyhow::Result<mpsc::Receiver<StreamEvent>> { |
| 210 | let (tx, rx) = mpsc::channel(8); |
| 211 | let text = self.text.clone(); |
| 212 | let response = self.response(); |
| 213 | tokio::spawn(async move { |
| 214 | let _ = tx.send(StreamEvent::TextDelta(text)).await; |
| 215 | let _ = tx.send(StreamEvent::Done(response)).await; |
| 216 | }); |
| 217 | Ok(rx) |
| 218 | } |
| 219 | } |
| 220 | |
| 221 | #[async_trait::async_trait] |