File size: 3,055 Bytes
d8e0712 27d2cd5 d8e0712 27d2cd5 d8e0712 27d2cd5 d8e0712 27d2cd5 d8e0712 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
from crewai import Agent, Crew, Process, Task, LLM
from crewai.project import CrewBase, agent, crew, task
from .tools_loader import get_tools
@CrewBase
class RadiologyCrew:
"""Multi-agent radiology report generation crew"""
def __init__(self):
# Load tools once
self.tools = get_tools()
# Initialize LLMs with optimal settings
self.vision_llm = LLM(model="groq/meta-llama/llama-4-scout-17b-16e-instruct", temperature=0.2)
self.text_llm = LLM(model="groq/llama-3.3-70b-versatile", temperature=0.1)
self.text_llm2 = LLM(model="groq/llama3-70b-8192", temperature=0.1)
self.text_llm3 = LLM(model="groq/meta-llama/llama-4-maverick-17b-128e-instruct", temperature=0.1)
self.draft_llm = LLM(model="groq/deepseek-r1-distill-llama-70b", temperature=0.3)
self.critic_llm = LLM(model="groq/meta-llama/llama-4-scout-17b-16e-instruct", temperature=0.3)
@agent
def vision_agent(self) -> Agent:
return Agent(
config=self.agents_config['vision_agent'],
tools=[self.tools["vision_tool"]],
llm=self.vision_llm,
allow_delegation=False,
verbose=False
)
@agent
def pubmed_agent(self) -> Agent:
return Agent(
config=self.agents_config['pubmed_agent'],
tools=[self.tools["pubmed_tool"]],
llm=self.text_llm2,
verbose=False
)
@agent
def iu_agent(self) -> Agent:
return Agent(
config=self.agents_config['iu_agent'],
tools=[self.tools["iu_tool"]],
llm=self.text_llm3,
verbose=False
)
@agent
def draft_agent(self) -> Agent:
return Agent(
config=self.agents_config['draft_agent'],
llm=self.draft_llm,
verbose=False
)
@agent
def critic_agent(self) -> Agent:
return Agent(
config=self.agents_config['critic_agent'],
llm=self.critic_llm,
verbose=True
)
@task
def caption_task(self) -> Task:
return Task(config=self.tasks_config['caption_task'])
@task
def pubmed_task(self) -> Task:
return Task(
config=self.tasks_config['pubmed_task'],
context=[self.caption_task()]
)
@task
def iu_task(self) -> Task:
return Task(config=self.tasks_config['iu_task'])
@task
def draft_task(self) -> Task:
return Task(
config=self.tasks_config['draft_task'],
context=[self.caption_task(), self.iu_task(), self.pubmed_task()]
)
@task
def critic_task(self) -> Task:
return Task(
config=self.tasks_config['critic_task'],
context=[self.caption_task(), self.iu_task(), self.draft_task()]
)
@crew
def crew(self) -> Crew:
return Crew(
agents=self.agents,
tasks=self.tasks,
process=Process.sequential,
verbose=False
) |