3-ai-native-e2e-sample/backend/agents/trials/multi_agent/agents.py (49 lines of code) (raw):
"""
This module implements the specialized agents for clinical trial event analysis.
Each agent is responsible for a specific task in the workflow:
- VitalsAgent: Processes patient vital signs.
- AdverseEventAgent: Assesses adverse events.
- DataSummaryAgent: Summarizes overall trial data.
These agents are coordinated by the TrialAgentCoordinator.
"""
from typing import Dict, Any
from opentelemetry import trace
from azure.ai.projects import AIProjectClient
tracer = trace.get_tracer(__name__)
class SpecializedAgent:
"""Base class for specialized trial analysis agents."""
def __init__(self, project_client: AIProjectClient, model: str, instructions: str):
self.project_client = project_client
self.model = model
self.instructions = instructions
self._agent = None
async def initialize(self) -> None:
"""Initialize the agent with Azure AI Foundry."""
self._agent = await self.project_client.agents.create_agent(
model=self.model,
instructions=self.instructions
)
async def process_message(self, message: str) -> Dict[str, Any]:
"""Process a message using the agent.
Args:
message: The message to process
Returns:
The agent's response.
"""
with tracer.start_as_current_span("process_agent_message") as span:
try:
if not self._agent:
await self.initialize()
if not self._agent:
raise RuntimeError("Failed to initialize agent")
response = await self._agent.process_message(message)
return {"response": response, "agent_type": self.__class__.__name__}
except Exception as e:
span.set_status(trace.Status(trace.StatusCode.ERROR))
span.record_exception(e)
raise
class VitalsAgent(SpecializedAgent):
"""Agent specialized in analyzing patient vital signs."""
def __init__(self, project_client: AIProjectClient, model: str):
super().__init__(
project_client=project_client,
model=model,
instructions="""You are a medical expert specialized in analyzing patient vital signs.
Assess vital sign measurements and identify any concerning patterns or anomalies."""
)
class AdverseEventAgent(SpecializedAgent):
"""Agent specialized in assessing adverse events."""
def __init__(self, project_client: AIProjectClient, model: str):
super().__init__(
project_client=project_client,
model=model,
instructions="""You are a medical expert specialized in analyzing adverse events in clinical trials.
Assess the severity and potential implications of reported adverse events."""
)
class DataSummaryAgent(SpecializedAgent):
"""Agent specialized in summarizing trial data."""
def __init__(self, project_client: AIProjectClient, model: str):
super().__init__(
project_client=project_client,
model=model,
instructions="""You are a clinical trial data analyst specialized in summarizing trial events.
Generate concise summaries of trial data and identify key patterns or trends."""
)