# BaseWorkflow

The `BaseWorkflow` class serves as a foundational structure for defining and managing workflows. It allows users to add, remove, update, and manage tasks and agents within a workflow, offering flexibility and extensibility for various applications.

### Key Concepts

- **Agents**: Entities participating in the workflow.
- **Tasks**: Units of work to be executed within the workflow.
- **Models**: Computational models used within the workflow.
- **Workflow State**: The state of the workflow, which can be saved and restored.

## Attributes

### Arguments

| Argument | Type | Default | Description |
|----------|------|---------|-------------|
| `agents` | `List[Agent]` | `None` | A list of agents participating in the workflow. |
| `task_pool` | `List[Task]` | `None` | A list of tasks in the workflow. |
| `models` | `List[Any]` | `None` | A list of models used in the workflow. |
| `*args` | | | Variable length argument list. |
| `**kwargs` | | | Arbitrary keyword arguments. |

### Attributes

| Attribute | Type | Description |
|-----------|------|-------------|
| `agents` | `List[Agent]` | A list of agents participating in the workflow. |
| `task_pool` | `List[Task]` | A list of tasks in the workflow. |
| `models` | `List[Any]` | A list of models used in the workflow. |

## Methods

### add_task

Adds a task or a list of tasks to the task pool.

**Arguments:**

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `task` | `Task` | `None` | A single task to add. |
| `tasks` | `List[Task]` | `None` | A list of tasks to add. |

**Raises:**

- `ValueError`: If neither task nor tasks are provided.

**Examples:**

```python
workflow = BaseWorkflow()
task1 = Task(description="Task 1")
task2 = Task(description="Task 2")

# Adding a single task
workflow.add_task(task=task1)

# Adding multiple tasks
workflow.add_task(tasks=[task1, task2])
```

### add_agent

Adds an agent to the workflow.

**Arguments:**

| Parameter | Type | Description |
|-----------|------|-------------|
| `agent` | `Agent` | The agent to add to the workflow. |

**Examples:**

```python
workflow = BaseWorkflow()
agent = Agent(name="Agent 1")

# Adding an agent to the workflow
workflow.add_agent(agent=agent)
```

### run

Abstract method to run the workflow.

### __sequential_loop

Abstract method for the sequential loop.

### __log

Logs a message if verbose mode is enabled.

**Arguments:**

| Parameter | Type | Description |
|-----------|------|-------------|
| `message` | `str` | The message to log. |

### __str__

Returns a string representation of the workflow.

### __repr__

Returns a string representation of the workflow for debugging.

### reset

Resets the workflow by clearing the results of each task.

**Examples:**

```python
workflow = BaseWorkflow()
workflow.reset()
```

### get_task_results

Returns the results of each task in the workflow.

**Returns:**

| Return Type | Description |
|-------------|-------------|
| `Dict[str, Any]` | The results of each task in the workflow. |

**Examples:**

```python
workflow = BaseWorkflow()
results = workflow.get_task_results()
```

### remove_task

Removes a task from the workflow.

**Arguments:**

| Parameter | Type | Description |
|-----------|------|-------------|
| `task` | `str` | The description of the task to remove. |

**Examples:**

```python
workflow = BaseWorkflow()
workflow.remove_task(task="Task 1")
```

### update_task

Updates the arguments of a task in the workflow.

**Arguments:**

| Parameter | Type | Description |
|-----------|------|-------------|
| `task` | `str` | The description of the task to update. |
| `**updates` | | The updates to apply to the task. |

**Raises:**

- `ValueError`: If the task is not found in the workflow.

**Examples:**

```python
workflow = BaseWorkflow()
task = Task(description="Task 1", kwargs={"param": 1})

# Adding a task to the workflow
workflow.add_task(task=task)

# Updating the task
workflow.update_task("Task 1", param=2)
```

### delete_task

Deletes a task from the workflow.

**Arguments:**

| Parameter | Type | Description |
|-----------|------|-------------|
| `task` | `str` | The description of the task to delete. |

**Raises:**

- `ValueError`: If the task is not found in the workflow.

**Examples:**

```python
workflow = BaseWorkflow()
task = Task(description="Task 1")

# Adding a task to the workflow
workflow.add_task(task=task)

# Deleting the task
workflow.delete_task("Task 1")
```

### save_workflow_state

Saves the workflow state to a json file.

**Arguments:**

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `filepath` | `Optional[str]` | `"sequential_workflow_state.json"` | The path to save the workflow state to. |

**Examples:**

```python
workflow = BaseWorkflow()
workflow.save_workflow_state(filepath="workflow_state.json")
```

### add_objective_to_workflow

Adds an objective to the workflow.

**Arguments:**

| Parameter | Type | Description |
|-----------|------|-------------|
| `task` | `str` | The description of the task. |
| `**kwargs` | | Additional keyword arguments for the task. |

**Examples:**

```python
workflow = BaseWorkflow()
workflow.add_objective_to_workflow(task="New Objective", agent=agent, args=[], kwargs={})
```

### load_workflow_state

Loads the workflow state from a json file and restores the workflow state.

**Arguments:**

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `filepath` | `str` | `None` | The path to load the workflow state from. |

**Examples:**

```python
workflow = BaseWorkflow()
workflow.load_workflow_state(filepath="workflow_state.json")
```

### workflow_dashboard

Displays a dashboard for the workflow.

**Arguments:**

| Parameter | Type | Description |
|-----------|------|-------------|
| `**kwargs` | | Additional keyword arguments to pass to the dashboard. |

**Examples:**

```python
workflow = BaseWorkflow()
workflow.workflow_dashboard()
```

### workflow_bootup

Initializes the workflow.

**Examples:**

```python
workflow = BaseWorkflow()
workflow.workflow_bootup()
```
