simplify flow (#1482)

* simplify flow

* propogate changes

* Update docs and scripts

* Template fix

* make flow kickoff sync

* Clean up docs
This commit is contained in:
Brandon Hancock (bhancock_ai)
2024-10-21 19:32:55 -04:00
committed by GitHub
parent 6bcb3d1080
commit 093259389e
6 changed files with 111 additions and 160 deletions

View File

@@ -14,11 +14,11 @@ from .authentication.main import AuthenticationCommand
from .deploy.main import DeployCommand
from .evaluate_crew import evaluate_crew
from .install_crew import install_crew
from .kickoff_flow import kickoff_flow
from .plot_flow import plot_flow
from .replay_from_task import replay_task_command
from .reset_memories_command import reset_memories_command
from .run_crew import run_crew
from .run_flow import run_flow
from .tools.main import ToolCommand
from .train_crew import train_crew
from .update_crew import update_crew
@@ -304,11 +304,11 @@ def flow():
pass
@flow.command(name="run")
@flow.command(name="kickoff")
def flow_run():
"""Run the Flow."""
"""Kickoff the Flow."""
click.echo("Running the Flow")
run_flow()
kickoff_flow()
@flow.command(name="plot")

View File

@@ -3,11 +3,11 @@ import subprocess
import click
def run_flow() -> None:
def kickoff_flow() -> None:
"""
Run the flow by running a command in the UV environment.
Kickoff the flow by running a command in the UV environment.
"""
command = ["uv", "run", "run_flow"]
command = ["uv", "run", "kickoff"]
try:
result = subprocess.run(command, capture_output=False, text=True, check=True)

View File

@@ -1,65 +1,53 @@
#!/usr/bin/env python
import asyncio
from random import randint
from pydantic import BaseModel
from crewai.flow.flow import Flow, listen, start
from .crews.poem_crew.poem_crew import PoemCrew
class PoemState(BaseModel):
sentence_count: int = 1
poem: str = ""
class PoemFlow(Flow[PoemState]):
@start()
def generate_sentence_count(self):
print("Generating sentence count")
# Generate a number between 1 and 5
self.state.sentence_count = randint(1, 5)
self.state.sentence_count = randint(1, 5)
@listen(generate_sentence_count)
def generate_poem(self):
print("Generating poem")
print(f"State before poem: {self.state}")
result = PoemCrew().crew().kickoff(inputs={"sentence_count": self.state.sentence_count})
result = (
PoemCrew()
.crew()
.kickoff(inputs={"sentence_count": self.state.sentence_count})
)
print("Poem generated", result.raw)
self.state.poem = result.raw
print(f"State after generate_poem: {self.state}")
@listen(generate_poem)
def save_poem(self):
print("Saving poem")
print(f"State before save_poem: {self.state}")
with open("poem.txt", "w") as f:
f.write(self.state.poem)
print(f"State after save_poem: {self.state}")
async def run_flow():
"""
Run the flow.
"""
def kickoff():
poem_flow = PoemFlow()
await poem_flow.kickoff()
poem_flow.kickoff()
async def plot_flow():
"""
Plot the flow.
"""
def plot():
poem_flow = PoemFlow()
poem_flow.plot()
def main():
asyncio.run(run_flow())
def plot():
asyncio.run(plot_flow())
if __name__ == "__main__":
main()
kickoff()

View File

@@ -6,13 +6,11 @@ authors = [{ name = "Your Name", email = "you@example.com" }]
requires-python = ">=3.10,<=3.13"
dependencies = [
"crewai[tools]>=0.74.2,<1.0.0",
"asyncio"
]
[project.scripts]
{{folder_name}} = "{{folder_name}}.main:main"
run_flow = "{{folder_name}}.main:main"
plot_flow = "{{folder_name}}.main:plot"
kickoff = "{{folder_name}}.main:kickoff"
plot = "{{folder_name}}.main:plot"
[build-system]
requires = ["hatchling"]