potato_agent/agents/
task.rs1use crate::agents::types::ChatResponse;
2use potato_prompt::Prompt;
3use potato_util::PyHelperFuncs;
4use pyo3::prelude::*;
5use serde::{Deserialize, Serialize};
6use std::sync::Arc;
7
8#[pyclass]
9#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
10pub enum TaskStatus {
11 Pending,
12 Running,
13 Completed,
14 Failed,
15}
16
17#[pyclass]
18#[derive(Debug, Serialize)]
19pub struct PyTask {
20 #[pyo3(get)]
21 pub id: String,
22 #[pyo3(get, set)]
23 pub prompt: Prompt,
24 #[pyo3(get, set)]
25 pub dependencies: Vec<String>,
26 #[pyo3(get)]
27 pub status: TaskStatus,
28 #[pyo3(get)]
29 pub agent_id: String,
30 pub result: Option<ChatResponse>,
31 #[pyo3(get)]
32 pub max_retries: u32,
33 pub retry_count: u32,
34
35 #[serde(skip)]
36 pub response_type: Option<Arc<PyObject>>,
37}
38
39#[pyclass]
40#[derive(Debug, Serialize, Deserialize, Clone)]
41pub struct Task {
42 #[pyo3(get)]
43 pub id: String,
44 #[pyo3(get, set)]
45 pub prompt: Prompt,
46 #[pyo3(get, set)]
47 pub dependencies: Vec<String>,
48 #[pyo3(get)]
49 pub status: TaskStatus,
50 #[pyo3(get)]
51 pub agent_id: String,
52 pub result: Option<ChatResponse>,
53 #[pyo3(get)]
54 pub max_retries: u32,
55 pub retry_count: u32,
56}
57
58#[pymethods]
59impl Task {
60 #[new]
61 #[pyo3(signature = (agent_id, prompt, id, dependencies = None, max_retries=None))]
62 pub fn new(
63 agent_id: &str,
64 prompt: Prompt,
65 id: &str,
66 dependencies: Option<Vec<String>>,
67 max_retries: Option<u32>,
68 ) -> Self {
69 Self {
70 prompt,
71 dependencies: dependencies.unwrap_or_default(),
72 status: TaskStatus::Pending,
73 result: None,
74 id: id.to_string(),
75 agent_id: agent_id.to_string(),
76 max_retries: max_retries.unwrap_or(3),
77 retry_count: 0,
78 }
79 }
80
81 pub fn add_dependency(&mut self, dependency: String) {
82 self.dependencies.push(dependency);
83 }
84
85 pub fn set_status(&mut self, status: TaskStatus) {
86 self.status = status;
87 }
88
89 pub fn set_result(&mut self, result: ChatResponse) {
90 self.result = Some(result);
91 }
92
93 #[getter]
94 pub fn result<'py>(&self, py: Python<'py>) -> PyResult<Option<Bound<'py, PyAny>>> {
95 match &self.result {
96 Some(resp) => Ok(resp.to_python(py).map(Some)?),
97 None => Ok(None),
98 }
99 }
100
101 pub fn __str__(&self) -> String {
102 PyHelperFuncs::__str__(self)
103 }
104}
105
106impl Task {
107 pub fn increment_retry(&mut self) {
108 self.retry_count += 1;
109 }
110}