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
        )