DeepBoner / src /agents /magentic_agents.py
VibecoderMcSwaggins's picture
refactor(prompts): Unify prompt storage in src/prompts/ (Priority 5) (#127)
f295ef3 unverified
raw
history blame
4.25 kB
"""Magentic-compatible agents using ChatAgent pattern."""
from agent_framework import ChatAgent
from src.agents.tools import (
get_bibliography,
search_clinical_trials,
search_preprints,
search_pubmed,
)
from src.clients.base import BaseChatClient
from src.clients.factory import get_chat_client
from src.config.domain import ResearchDomain, get_domain_config
from src.prompts.hypothesis import get_system_prompt as get_hypothesis_prompt
from src.prompts.judge import get_system_prompt as get_judge_prompt
from src.prompts.report import get_system_prompt as get_report_prompt
from src.prompts.search import get_system_prompt as get_search_prompt
def create_search_agent(
chat_client: BaseChatClient | None = None,
domain: ResearchDomain | str | None = None,
api_key: str | None = None,
) -> ChatAgent:
"""Create a search agent with internal LLM and search tools.
Args:
chat_client: Optional custom chat client. If None, uses default.
domain: Research domain for customization.
api_key: Optional BYOK key (auto-detects provider from prefix).
Returns:
ChatAgent configured for biomedical search
"""
client = chat_client or get_chat_client(api_key=api_key)
config = get_domain_config(domain)
return ChatAgent(
name="SearchAgent",
description=config.search_agent_description,
instructions=get_search_prompt(domain),
chat_client=client,
tools=[search_pubmed, search_clinical_trials, search_preprints],
temperature=1.0, # Explicitly set for reasoning model compatibility (o1/o3)
)
def create_judge_agent(
chat_client: BaseChatClient | None = None,
domain: ResearchDomain | str | None = None,
api_key: str | None = None,
) -> ChatAgent:
"""Create a judge agent that evaluates evidence quality.
Args:
chat_client: Optional custom chat client. If None, uses default.
domain: Research domain for customization.
api_key: Optional BYOK key (auto-detects provider from prefix).
Returns:
ChatAgent configured for evidence assessment
"""
client = chat_client or get_chat_client(api_key=api_key)
return ChatAgent(
name="JudgeAgent",
description="Evaluates evidence quality and determines if sufficient for synthesis",
instructions=get_judge_prompt(domain),
chat_client=client,
temperature=1.0, # Explicitly set for reasoning model compatibility
)
def create_hypothesis_agent(
chat_client: BaseChatClient | None = None,
domain: ResearchDomain | str | None = None,
api_key: str | None = None,
) -> ChatAgent:
"""Create a hypothesis generation agent.
Args:
chat_client: Optional custom chat client. If None, uses default.
domain: Research domain for customization.
api_key: Optional BYOK key (auto-detects provider from prefix).
Returns:
ChatAgent configured for hypothesis generation
"""
client = chat_client or get_chat_client(api_key=api_key)
config = get_domain_config(domain)
return ChatAgent(
name="HypothesisAgent",
description=config.hypothesis_agent_description,
instructions=get_hypothesis_prompt(domain),
chat_client=client,
temperature=1.0, # Explicitly set for reasoning model compatibility
)
def create_report_agent(
chat_client: BaseChatClient | None = None,
domain: ResearchDomain | str | None = None,
api_key: str | None = None,
) -> ChatAgent:
"""Create a report synthesis agent.
Args:
chat_client: Optional custom chat client. If None, uses default.
domain: Research domain for customization.
api_key: Optional BYOK key (auto-detects provider from prefix).
Returns:
ChatAgent configured for report generation
"""
client = chat_client or get_chat_client(api_key=api_key)
return ChatAgent(
name="ReportAgent",
description="Synthesizes research findings into structured reports",
instructions=get_report_prompt(domain),
chat_client=client,
tools=[get_bibliography],
temperature=1.0, # Explicitly set for reasoning model compatibility
)