aboutsummaryrefslogtreecommitdiff
path: root/autogpts/autogpt/autogpt/core/planning/schema.py
diff options
context:
space:
mode:
Diffstat (limited to 'autogpts/autogpt/autogpt/core/planning/schema.py')
-rw-r--r--autogpts/autogpt/autogpt/core/planning/schema.py48
1 files changed, 48 insertions, 0 deletions
diff --git a/autogpts/autogpt/autogpt/core/planning/schema.py b/autogpts/autogpt/autogpt/core/planning/schema.py
new file mode 100644
index 000000000..b9ba81827
--- /dev/null
+++ b/autogpts/autogpt/autogpt/core/planning/schema.py
@@ -0,0 +1,48 @@
+import enum
+from typing import Optional
+
+from pydantic import BaseModel, Field
+
+from autogpt.core.ability.schema import AbilityResult
+
+
+class TaskType(str, enum.Enum):
+ RESEARCH = "research"
+ WRITE = "write"
+ EDIT = "edit"
+ CODE = "code"
+ DESIGN = "design"
+ TEST = "test"
+ PLAN = "plan"
+
+
+class TaskStatus(str, enum.Enum):
+ BACKLOG = "backlog"
+ READY = "ready"
+ IN_PROGRESS = "in_progress"
+ DONE = "done"
+
+
+class TaskContext(BaseModel):
+ cycle_count: int = 0
+ status: TaskStatus = TaskStatus.BACKLOG
+ parent: Optional["Task"] = None
+ prior_actions: list[AbilityResult] = Field(default_factory=list)
+ memories: list = Field(default_factory=list)
+ user_input: list[str] = Field(default_factory=list)
+ supplementary_info: list[str] = Field(default_factory=list)
+ enough_info: bool = False
+
+
+class Task(BaseModel):
+ objective: str
+ type: str # TaskType FIXME: gpt does not obey the enum parameter in its schema
+ priority: int
+ ready_criteria: list[str]
+ acceptance_criteria: list[str]
+ context: TaskContext = Field(default_factory=TaskContext)
+
+
+# Need to resolve the circular dependency between Task and TaskContext
+# once both models are defined.
+TaskContext.update_forward_refs()