Skip to content

Commit

Permalink
fix: All crews working
Browse files Browse the repository at this point in the history
  • Loading branch information
Luisotee committed Nov 14, 2024
1 parent 6fe21c3 commit df0f359
Show file tree
Hide file tree
Showing 5 changed files with 105 additions and 94 deletions.
3 changes: 2 additions & 1 deletion apps/ai_api/eda_ai_api/api/routes/supervisor.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ async def supervisor_route(request: SupervisorRequest) -> SupervisorResponse:
print(f" DECISION: {decision} ")
print("==================================================\n")

if decision.lower() == "discovery":
# Convert CrewOutput to string and then compare
if str(decision).lower() == "discovery":
topics = ["AI", "Technology"] # Extract topics from message
result = (
OpportunityFinderCrew().crew().kickoff(inputs={"topics": ", ".join(topics)})
Expand Down
2 changes: 0 additions & 2 deletions apps/ai_api/tests/conftest.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@


import pytest
from starlette.config import environ
from starlette.testclient import TestClient
Expand Down
3 changes: 3 additions & 0 deletions plugins/grant_plugin/opportunity_finder/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,6 @@ test = "opportunity_finder.main:test"
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[tool.setuptools]
package-dir = {"" = "src"}
129 changes: 60 additions & 69 deletions plugins/grant_plugin/opportunity_finder/src/opportunity_finder/crew.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,86 +4,77 @@
from crewai.project import CrewBase, agent, crew, task
from crewai_tools import ScrapeWebsiteTool, SerperDevTool
from langchain_openai import ChatOpenAI

search_tool = SerperDevTool()
scrape_tool = ScrapeWebsiteTool()
cerebras_llm = LLM(
model="sambanova/Meta-Llama-3.1-70B-Instruct", # Replace with your chosen Cerebras model name, e.g., "cerebras/llama3.1-8b"
api_key=os.environ.get("SAMBANOVA_API_KEY"), # Your Cerebras API key
model="sambanova/Meta-Llama-3.1-70B-Instruct", # Replace with your chosen Cerebras model name, e.g., "cerebras/llama3.1-8b"
api_key=os.environ.get("SAMBANOVA_API_KEY"), # Your Cerebras API key
temperature=0.5,
# Optional parameters:
# top_p=1,
# max_completion_tokens=8192, # Max tokens for the response
# response_format={"type": "json_object"} # Ensures the response is in JSON format
)

# Uncomment the following line to use an example of a custom tool
# from opportunity_finder.tools.custom_tool import MyCustomTool

# Check our tools documentations for more information on how to use them
# from crewai_tools import SerperDevTool

# manager_llm = ChatOpenAI(model_name="gpt-4o-mini")
manager_llm = cerebras_llm
@CrewBase
class OpportunityFinderCrew():
"""OpportunityFinder crew"""
@agent
def search_specialist(self) -> Agent:
return Agent(
config=self.agents_config['search_specialist'],
verbose=True,
allow_delegation=True,
tools=[search_tool, scrape_tool],
# llm=cerebras_llm
)
class OpportunityFinderCrew:
"""OpportunityFinder crew"""

@agent
def search_specialist(self) -> Agent:
return Agent(
config=self.agents_config["search_specialist"],
verbose=True,
allow_delegation=True,
tools=[search_tool, scrape_tool],
llm=cerebras_llm,
)

@agent
def researcher(self) -> Agent:
return Agent(
config=self.agents_config['researcher'],
tools=[search_tool, scrape_tool],
verbose=True,
allow_delegation=True,
# llm=cerebras_llm
)
@agent
def researcher(self) -> Agent:
return Agent(
config=self.agents_config["researcher"],
tools=[search_tool, scrape_tool],
verbose=True,
allow_delegation=True,
llm=cerebras_llm,
)

@agent
def reporting_analyst(self) -> Agent:
return Agent(
config=self.agents_config['reporting_analyst'],
tools=[search_tool, scrape_tool],
verbose=True,
# llm=cerebras_llm
)
@agent
def reporting_analyst(self) -> Agent:
return Agent(
config=self.agents_config["reporting_analyst"],
tools=[search_tool, scrape_tool],
verbose=True,
llm=cerebras_llm,
)

@task
def search_terms_task(self) -> Task:
return Task(
config=self.tasks_config['search_terms_task'],
)
@task
def search_terms_task(self) -> Task:
return Task(
config=self.tasks_config["search_terms_task"],
)

@task
def research_task(self) -> Task:
return Task(
config=self.tasks_config['research_task'],
)
@task
def research_task(self) -> Task:
return Task(
config=self.tasks_config["research_task"],
)

@task
def reporting_task(self) -> Task:
timestamp = datetime.datetime.now().strftime('%Y%m%d_%H%M%S')
return Task(
config=self.tasks_config['reporting_task'],
output_file=f'report_{timestamp}.csv'
)
@task
def reporting_task(self) -> Task:
timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
return Task(
config=self.tasks_config["reporting_task"],
output_file=f"report_{timestamp}.csv",
)

@crew
def crew(self) -> Crew:
"""Creates the OpportunityFinder crew"""
return Crew(
agents=self.agents,
tasks=self.tasks,
process=Process.hierarchical,
manager_llm=manager_llm,
verbose=True,
output_log_file=f'OpportunityFinderCrew_{datetime.datetime.now().strftime("%Y%m%d_%H%M%S")}.log'
)
@crew
def crew(self) -> Crew:
"""Creates the OpportunityFinder crew"""
return Crew(
agents=self.agents,
tasks=self.tasks,
process=Process.hierarchical,
manager_llm=cerebras_llm,
verbose=True,
output_log_file=f'OpportunityFinderCrew_{datetime.datetime.now().strftime("%Y%m%d_%H%M%S")}.log',
)
62 changes: 40 additions & 22 deletions plugins/grant_plugin/proposal_writer/src/proposal_writer/crew.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,19 @@
import datetime
import os
from typing import List
from crewai import Agent, Crew, Process, Task
from crewai import LLM, Agent, Crew, Process, Task
from crewai.project import CrewBase, agent, crew, task

# Initialize LLM
cerebras_llm = LLM(
model="sambanova/Meta-Llama-3.1-70B-Instruct",
api_key=os.environ.get("SAMBANOVA_API_KEY"),
temperature=0.7,
)


@CrewBase
class ProposalWriterCrew():
class ProposalWriterCrew:
"""ProposalWriter crew with managed workflow for grant proposal development"""

def __init__(self, community_project: str, grant_call: str):
Expand All @@ -15,77 +24,86 @@ def __init__(self, community_project: str, grant_call: str):
@agent
def manager(self) -> Agent:
return Agent(
config=self.agents_config['manager'],
config=self.agents_config["manager"],
verbose=True,
allow_delegation=True
allow_delegation=True,
llm=cerebras_llm,
)

@agent
def outliner(self) -> Agent:
return Agent(
config=self.agents_config['outliner'],
config=self.agents_config["outliner"],
verbose=True,
allow_delegation=True
allow_delegation=True,
llm=cerebras_llm,
)

@agent
def writer(self) -> Agent:
return Agent(
config=self.agents_config['writer'],
config=self.agents_config["writer"],
verbose=True,
allow_delegation=True,
human_input_mode="ALWAYS"
human_input_mode="ALWAYS",
llm=cerebras_llm,
)

@agent
def quality_assurance(self) -> Agent:
return Agent(
config=self.agents_config['quality_assurance'],
config=self.agents_config["quality_assurance"],
verbose=True,
allow_delegation=True,
human_input_mode="ALWAYS"
human_input_mode="ALWAYS",
llm=cerebras_llm,
)

@task
def create_outline_task(self) -> Task:
return Task(
config=self.tasks_config['create_outline_task'],
config=self.tasks_config["create_outline_task"],
context={
"community_project": self.community_project,
"grant_call": self.grant_call
}
"grant_call": self.grant_call,
},
)

@task
def writing_task(self) -> Task:
timestamp = datetime.datetime.now().strftime('%Y%m%d_%H%M%S')
timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
return Task(
config=self.tasks_config['writing_task'],
config=self.tasks_config["writing_task"],
context={
"community_project": self.community_project,
"grant_call": self.grant_call
"grant_call": self.grant_call,
},
output_file=f'proposal_{timestamp}.md'
output_file=f"proposal_{timestamp}.md",
)

@task
def qa_review_task(self) -> Task:
return Task(
config=self.tasks_config['qa_review_task'],
config=self.tasks_config["qa_review_task"],
context={
"community_project": self.community_project,
"grant_call": self.grant_call
}
"grant_call": self.grant_call,
},
)

@crew
def crew(self) -> Crew:
"""Creates the ProposalWriter crew with hierarchical process managed by the manager agent"""
return Crew(
agents=[self.manager, self.outliner, self.writer, self.quality_assurance],
tasks=[self.create_outline_task(), self.writing_task(), self.qa_review_task()],
tasks=[
self.create_outline_task(),
self.writing_task(),
self.qa_review_task(),
],
manager=self.manager,
process=Process.hierarchical,
verbose=True,
memory=True
memory=True,
manager_llm=cerebras_llm,
)

0 comments on commit df0f359

Please sign in to comment.