| 26 | |
| 27 | impl StreamRunWorkerState { |
| 28 | pub(super) async fn complete<E>(&self, result: std::result::Result<AgentResult, E>) |
| 29 | where |
| 30 | E: std::fmt::Display, |
| 31 | { |
| 32 | match result { |
| 33 | Ok(result) => { |
| 34 | if let Some(persistence) = &self.persistence { |
| 35 | persistence.record_result(&result); |
| 36 | self.should_auto_save |
| 37 | .store(true, std::sync::atomic::Ordering::Release); |
| 38 | } |
| 39 | } |
| 40 | Err(error) => { |
| 41 | let cancelled = self |
| 42 | .cancel_token |
| 43 | .lock() |
| 44 | .await |
| 45 | .as_ref() |
| 46 | .map(|t| t.is_cancelled()) |
| 47 | .unwrap_or(false); |
| 48 | if cancelled { |
| 49 | let _ = self.run_store.mark_cancelled(&self.run_id).await; |
| 50 | } else { |
| 51 | let error_message = error.to_string(); |
| 52 | let _ = self |
| 53 | .run_store |
| 54 | .mark_failed(&self.run_id, error_message) |
| 55 | .await; |
| 56 | } |
| 57 | } |
| 58 | } |
| 59 | } |
| 60 | } |
| 61 | |
| 62 | #[derive(Clone)] |