Files
2026-07-13 12:43:34 +08:00

123 lines
4.0 KiB
Python

import json
from sqlalchemy import Column, Integer, String, Text, Boolean
from sqlalchemy.dialects.postgresql import JSONB
from superagi.models.base_model import DBBaseModel
class IterationWorkflowStep(DBBaseModel):
"""
Step of an iteration workflow
Attributes:
id (int): The unique identifier of the agent workflow step.
iteration_workflow_id (int): The ID of the agent workflow to which this step belongs.
unique_id (str): The unique identifier of the step.
prompt (str): The prompt for the step.
variables (str): The variables associated with the step.
output_type (str): The output type of the step.
step_type (str): The type of the step (TRIGGER, NORMAL).
next_step_id (int): The ID of the next step in the workflow.
history_enabled (bool): Indicates whether history is enabled for the step.
completion_prompt (str): The completion prompt for the step.
"""
__tablename__ = 'iteration_workflow_steps'
id = Column(Integer, primary_key=True)
iteration_workflow_id = Column(Integer)
unique_id = Column(String)
prompt = Column(Text)
variables = Column(Text)
output_type = Column(String)
step_type = Column(String) # TRIGGER, NORMAL
next_step_id = Column(Integer)
history_enabled = Column(Boolean)
completion_prompt = Column(Text)
def __repr__(self):
"""
Returns a string representation of the AgentWorkflowStep object.
Returns:
str: String representation of the AgentWorkflowStep.
"""
return f"AgentWorkflowStep(id={self.id}, status='{self.next_step_id}', " \
f"prompt='{self.prompt}'"
def to_dict(self):
"""
Converts the AgentWorkflowStep object to a dictionary.
Returns:
dict: Dictionary representation of the AgentWorkflowStep.
"""
return {
'id': self.id,
'next_step_id': self.next_step_id,
'agent_id': self.agent_id,
'prompt': self.prompt
}
def to_json(self):
"""
Converts the AgentWorkflowStep object to a JSON string.
Returns:
str: JSON string representation of the AgentWorkflowStep.
"""
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_data):
"""
Creates an AgentWorkflowStep object from a JSON string.
Args:
json_data (str): JSON string representing the AgentWorkflowStep.
Returns:
AgentWorkflowStep: AgentWorkflowStep object created from the JSON string.
"""
data = json.loads(json_data)
return cls(
id=data['id'],
prompt=data['prompt'],
agent_id=data['agent_id'],
next_step_id=data['next_step_id']
)
@classmethod
def find_by_id(cls, session, step_id: int):
return session.query(IterationWorkflowStep).filter(IterationWorkflowStep.id == step_id).first()
@classmethod
def find_or_create_step(self, session, iteration_workflow_id: int, unique_id: str,
prompt: str, variables: str, step_type: str, output_type: str,
completion_prompt: str = "", history_enabled: bool = False):
workflow_step = session.query(IterationWorkflowStep).filter(IterationWorkflowStep.unique_id == unique_id).first()
if workflow_step is None:
workflow_step = IterationWorkflowStep(unique_id=unique_id)
session.add(workflow_step)
session.commit()
workflow_step.prompt = prompt
workflow_step.variables = variables
workflow_step.step_type = step_type
workflow_step.output_type = output_type
workflow_step.iteration_workflow_id = iteration_workflow_id
workflow_step.next_step_id = -1
workflow_step.history_enabled = history_enabled
if completion_prompt:
workflow_step.completion_prompt = completion_prompt
session.commit()
return workflow_step