make flow kickoff sync

This commit is contained in:
Brandon Hancock
2024-10-21 17:09:59 -04:00
parent 70fdfa1d8d
commit 056a8e734b
3 changed files with 21 additions and 17 deletions

View File

@@ -1,40 +1,47 @@
#!/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")
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
@listen(generate_poem)
def save_poem(self):
print("Saving poem")
with open("poem.txt", "w") as f:
f.write(self.state.poem)
async def kickoff():
def kickoff():
poem_flow = PoemFlow()
await poem_flow.kickoff()
poem_flow.kickoff()
def plot():
@@ -42,9 +49,5 @@ def plot():
poem_flow.plot()
def main():
asyncio.run(kickoff())
if __name__ == "__main__":
main()
kickoff()

View File

@@ -6,12 +6,10 @@ 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"
kickoff = "{{folder_name}}.main:main"
kickoff = "{{folder_name}}.main:kickoff"
plot = "{{folder_name}}.main:plot"
[build-system]

View File

@@ -190,7 +190,10 @@ class Flow(Generic[T], metaclass=FlowMeta):
"""Returns the list of all outputs from executed methods."""
return self._method_outputs
async def kickoff(self) -> Any:
def kickoff(self) -> Any:
return asyncio.run(self.kickoff_async())
async def kickoff_async(self) -> Any:
if not self._start_methods:
raise ValueError("No start method defined")