diff --git a/.flake8 b/.flake8 new file mode 100644 index 0000000..901ab7c --- /dev/null +++ b/.flake8 @@ -0,0 +1,9 @@ +[flake8] +max-line-length = 95 +exclude = + .git, + __pycache__, + docs, + old, + build, + dist diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..c42d06e --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,10 @@ +repos: + - repo: local + hooks: + - id: flake8 + name: Run flake8 + entry: bash -c "flake8" + language: python + pass_filenames: false + files: ^.py/ + types: [python] diff --git a/__init__.py b/__init__.py index 7b61518..09294da 100644 --- a/__init__.py +++ b/__init__.py @@ -1,4 +1,4 @@ -# from .nodes.textview_node import TextViewNode +from .nodes.textview_node import TextViewNode from .nodes.agent_node import AgentNode from .nodes.task_node import TaskNode from .nodes.crew_node import CrewNode @@ -11,7 +11,7 @@ NODE_CLASS_MAPPINGS = { "📎CrewAI Crew": CrewNode, "📎CrewAI Task List": TaskList, "📎CrewAI Agent List": AgentList, - # "📎CrewAI View Text": TextViewNode, (WIP) + "📎CrewAI View Text": TextViewNode, } WEB_DIRECTORY = "./js" diff --git a/nodes/agent_node.py b/nodes/agent_node.py index ea86c82..46e8230 100644 --- a/nodes/agent_node.py +++ b/nodes/agent_node.py @@ -1,5 +1,6 @@ from crewai import Agent + class AgentNode: def __init__(self): pass @@ -8,13 +9,19 @@ class AgentNode: def INPUT_TYPES(s): return { "required": { - "role": ("STRING", {"forceInput": True, "multiline": True, "default": ""}), - "goal": ("STRING", {"forceInput": True, "multiline": True, "default": ""}), - "backstory": ("STRING", {"forceInput": True, "multiline": True, "default": ""}), + "role": ("STRING", { + "forceInput": True, "multiline": True, "default": "" + }), + "goal": ("STRING", { + "forceInput": True, "multiline": True, "default": "" + }), + "backstory": ("STRING", { + "forceInput": True, "multiline": True, "default": "" + }), }, "optional": { "verbose": ("BOOL", {"default": False}), - "allow_delegation": ("BOOL", { "default": True}), + "allow_delegation": ("BOOL", {"default": True}), }, } @@ -24,7 +31,6 @@ class AgentNode: CATEGORY = "📎CrewAi" def create_agent(self, role, goal, backstory, verbose=False, allow_delegation=True): - agent = Agent( role=role, goal=goal, diff --git a/nodes/crew_node.py b/nodes/crew_node.py index 290ec41..a455d4e 100644 --- a/nodes/crew_node.py +++ b/nodes/crew_node.py @@ -1,6 +1,7 @@ from .base_node import BaseNode from crewai import Crew, Process + class CrewNode(BaseNode): def __init__(self): pass @@ -12,9 +13,14 @@ class CrewNode(BaseNode): "tasks": ("TASK", {"default": []}), }, "optional": { - "topic": ("STRING", {"forceInput": False, "multiline": True,"default": ""}), + "topic": ("STRING", { + "forceInput": False, "multiline": True, "default": "" + }), "agents": ("AGENT", {"forceInput": False, "default": []}), - "process": ("STRING", {"default": "sequential", "choices": ["sequential", "hierarchical"]}), + "process": ("STRING", { + "default": "sequential", + "choices": ["sequential", "hierarchical"] + }), }, } INPUT_IS_LIST = (True, True, False, False) @@ -23,7 +29,8 @@ class CrewNode(BaseNode): def create_crew(self, tasks, process, topic="", agents=[]): # Determine the process type - process_type = Process.sequential if process[0] == "sequential" else Process.hierarchical + isSequential: bool = process[0] == "sequential" + process_type = Process.sequential if isSequential else Process.hierarchical # Create the Crew instance crew = Crew( @@ -32,11 +39,7 @@ class CrewNode(BaseNode): process=process_type, topic=topic, ) - # Kick off the process and capture the result result = crew.kickoff(inputs={'topic': topic}) print("\n\n📎Crew AI - result", result) - return (result, crew.usage_metrics) - - - + return (result, crew.usage_metrics) \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 2c8b413..d7af545 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,80 @@ -crewai==0.30.11 -crewai-tools==0.2.6 \ No newline at end of file +# This file may be used to create an environment using: +# $ conda create --name --file +# platform: linux-64 +_libgcc_mutex=0.1=main +_openmp_mutex=5.1=1_gnu +aiohttp=3.9.5=pypi_0 +aiosignal=1.3.1=pypi_0 +annotated-types=0.7.0=pypi_0 +anyio=4.4.0=pypi_0 +async-timeout=4.0.3=pypi_0 +attrs=23.2.0=pypi_0 +ca-certificates=2024.3.11=h06a4308_0 +certifi=2024.6.2=pypi_0 +cfgv=3.4.0=pypi_0 +charset-normalizer=3.3.2=pypi_0 +crewai=0.5.0=pypi_0 +dataclasses-json=0.6.6=pypi_0 +distlib=0.3.8=pypi_0 +distro=1.9.0=pypi_0 +exceptiongroup=1.2.1=pypi_0 +filelock=3.14.0=pypi_0 +flake8=7.0.0=pypi_0 +frozenlist=1.4.1=pypi_0 +greenlet=3.0.3=pypi_0 +h11=0.14.0=pypi_0 +httpcore=1.0.5=pypi_0 +httpx=0.27.0=pypi_0 +identify=2.5.36=pypi_0 +idna=3.7=pypi_0 +jsonpatch=1.33=pypi_0 +jsonpointer=2.4=pypi_0 +langchain=0.1.0=pypi_0 +langchain-community=0.0.20=pypi_0 +langchain-core=0.1.23=pypi_0 +langchain-openai=0.0.2.post1=pypi_0 +langsmith=0.0.87=pypi_0 +ld_impl_linux-64=2.38=h1181459_1 +libffi=3.4.4=h6a678d5_1 +libgcc-ng=11.2.0=h1234567_1 +libgomp=11.2.0=h1234567_1 +libstdcxx-ng=11.2.0=h1234567_1 +marshmallow=3.21.2=pypi_0 +mccabe=0.7.0=pypi_0 +multidict=6.0.5=pypi_0 +mypy-extensions=1.0.0=pypi_0 +ncurses=6.4=h6a678d5_0 +nodeenv=1.9.1=pypi_0 +numpy=1.26.4=pypi_0 +openai=1.31.0=pypi_0 +openssl=3.0.13=h7f8727e_2 +packaging=23.2=pypi_0 +pip=24.0=py39h06a4308_0 +platformdirs=4.2.2=pypi_0 +pre-commit=3.7.1=pypi_0 +pycodestyle=2.11.1=pypi_0 +pydantic=2.7.3=pypi_0 +pydantic-core=2.18.4=pypi_0 +pyflakes=3.2.0=pypi_0 +python=3.9.19=h955ad1f_1 +pyyaml=6.0.1=pypi_0 +readline=8.2=h5eee18b_0 +regex=2024.5.15=pypi_0 +requests=2.32.3=pypi_0 +setuptools=69.5.1=py39h06a4308_0 +sniffio=1.3.1=pypi_0 +sqlalchemy=2.0.30=pypi_0 +sqlite=3.45.3=h5eee18b_0 +tenacity=8.3.0=pypi_0 +tiktoken=0.5.2=pypi_0 +tk=8.6.14=h39e8969_0 +tqdm=4.66.4=pypi_0 +typing-extensions=4.12.1=pypi_0 +typing-inspect=0.9.0=pypi_0 +tzdata=2024a=h04d1e81_0 +urllib3=2.2.1=pypi_0 +virtualenv=20.26.2=pypi_0 +wheel=0.43.0=py39h06a4308_0 +xz=5.4.6=h5eee18b_1 +yarl=1.9.4=pypi_0 +zlib=1.2.13=h5eee18b_1