feat(agent_service, agent_builder, schemas): add agent_tools field to agent configuration and implement processing logic
This commit is contained in:
parent
b32a044cac
commit
c93fe6a8db
@ -137,6 +137,9 @@ class LLMConfig(BaseModel):
|
|||||||
custom_mcp_servers: Optional[List[CustomMCPServerConfig]] = Field(
|
custom_mcp_servers: Optional[List[CustomMCPServerConfig]] = Field(
|
||||||
default=None, description="List of custom MCP servers with URL and headers"
|
default=None, description="List of custom MCP servers with URL and headers"
|
||||||
)
|
)
|
||||||
|
agent_tools: Optional[List[UUID]] = Field(
|
||||||
|
default=None, description="List of IDs of sub-agents"
|
||||||
|
)
|
||||||
sub_agents: Optional[List[UUID]] = Field(
|
sub_agents: Optional[List[UUID]] = Field(
|
||||||
default=None, description="List of IDs of sub-agents"
|
default=None, description="List of IDs of sub-agents"
|
||||||
)
|
)
|
||||||
|
@ -2,6 +2,7 @@ from typing import List, Optional, Tuple
|
|||||||
from google.adk.agents.llm_agent import LlmAgent
|
from google.adk.agents.llm_agent import LlmAgent
|
||||||
from google.adk.agents import SequentialAgent, ParallelAgent, LoopAgent, BaseAgent
|
from google.adk.agents import SequentialAgent, ParallelAgent, LoopAgent, BaseAgent
|
||||||
from google.adk.models.lite_llm import LiteLlm
|
from google.adk.models.lite_llm import LiteLlm
|
||||||
|
from google.adk.tools.agent_tool import AgentTool
|
||||||
from src.utils.logger import setup_logger
|
from src.utils.logger import setup_logger
|
||||||
from src.core.exceptions import AgentNotFoundError
|
from src.core.exceptions import AgentNotFoundError
|
||||||
from src.services.agent_service import get_agent
|
from src.services.agent_service import get_agent
|
||||||
@ -26,6 +27,18 @@ class AgentBuilder:
|
|||||||
self.custom_tool_builder = CustomToolBuilder()
|
self.custom_tool_builder = CustomToolBuilder()
|
||||||
self.mcp_service = MCPService()
|
self.mcp_service = MCPService()
|
||||||
|
|
||||||
|
async def _agent_tools_builder(self, agent) -> List[AgentTool]:
|
||||||
|
"""Build the tools for an agent."""
|
||||||
|
agent_tools_ids = agent.config.get("agent_tools")
|
||||||
|
agent_tools = []
|
||||||
|
if agent_tools_ids and isinstance(agent_tools_ids, list):
|
||||||
|
for agent_tool_id in agent_tools_ids:
|
||||||
|
sub_agent = get_agent(self.db, agent_tool_id)
|
||||||
|
llm_agent, _ = await self.build_llm_agent(sub_agent)
|
||||||
|
if llm_agent:
|
||||||
|
agent_tools.append(AgentTool(agent=llm_agent))
|
||||||
|
return agent_tools
|
||||||
|
|
||||||
async def _create_llm_agent(
|
async def _create_llm_agent(
|
||||||
self, agent
|
self, agent
|
||||||
) -> Tuple[LlmAgent, Optional[AsyncExitStack]]:
|
) -> Tuple[LlmAgent, Optional[AsyncExitStack]]:
|
||||||
@ -42,8 +55,11 @@ class AgentBuilder:
|
|||||||
agent.config, self.db
|
agent.config, self.db
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Get agent tools
|
||||||
|
agent_tools = await self._agent_tools_builder(agent)
|
||||||
|
|
||||||
# Combine all tools
|
# Combine all tools
|
||||||
all_tools = custom_tools + mcp_tools
|
all_tools = custom_tools + mcp_tools + agent_tools
|
||||||
|
|
||||||
now = datetime.now()
|
now = datetime.now()
|
||||||
current_datetime = now.strftime("%d/%m/%Y %H:%M")
|
current_datetime = now.strftime("%d/%m/%Y %H:%M")
|
||||||
|
@ -224,6 +224,9 @@ async def create_agent(db: Session, agent: AgentCreate) -> Agent:
|
|||||||
if "custom_tools" in config:
|
if "custom_tools" in config:
|
||||||
processed_config["custom_tools"] = config["custom_tools"]
|
processed_config["custom_tools"] = config["custom_tools"]
|
||||||
|
|
||||||
|
if "agent_tools" in config:
|
||||||
|
processed_config["agent_tools"] = config["agent_tools"]
|
||||||
|
|
||||||
if "sub_agents" in config:
|
if "sub_agents" in config:
|
||||||
processed_config["sub_agents"] = config["sub_agents"]
|
processed_config["sub_agents"] = config["sub_agents"]
|
||||||
|
|
||||||
@ -236,6 +239,7 @@ async def create_agent(db: Session, agent: AgentCreate) -> Agent:
|
|||||||
"tools",
|
"tools",
|
||||||
"custom_tools",
|
"custom_tools",
|
||||||
"sub_agents",
|
"sub_agents",
|
||||||
|
"agent_tools",
|
||||||
"custom_mcp_servers",
|
"custom_mcp_servers",
|
||||||
"mcp_servers",
|
"mcp_servers",
|
||||||
]:
|
]:
|
||||||
@ -303,6 +307,12 @@ async def create_agent(db: Session, agent: AgentCreate) -> Agent:
|
|||||||
str(agent_id) for agent_id in config["sub_agents"]
|
str(agent_id) for agent_id in config["sub_agents"]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
# Process agent tools
|
||||||
|
if "agent_tools" in config and config["agent_tools"] is not None:
|
||||||
|
processed_config["agent_tools"] = [
|
||||||
|
str(agent_id) for agent_id in config["agent_tools"]
|
||||||
|
]
|
||||||
|
|
||||||
# Process tools
|
# Process tools
|
||||||
if "tools" in config and config["tools"] is not None:
|
if "tools" in config and config["tools"] is not None:
|
||||||
processed_tools = []
|
processed_tools = []
|
||||||
@ -484,6 +494,9 @@ async def update_agent(
|
|||||||
if "sub_agents" in config:
|
if "sub_agents" in config:
|
||||||
processed_config["sub_agents"] = config["sub_agents"]
|
processed_config["sub_agents"] = config["sub_agents"]
|
||||||
|
|
||||||
|
if "agent_tools" in config:
|
||||||
|
processed_config["agent_tools"] = config["agent_tools"]
|
||||||
|
|
||||||
if "custom_mcp_servers" in config:
|
if "custom_mcp_servers" in config:
|
||||||
processed_config["custom_mcp_servers"] = config["custom_mcp_servers"]
|
processed_config["custom_mcp_servers"] = config["custom_mcp_servers"]
|
||||||
|
|
||||||
@ -493,6 +506,7 @@ async def update_agent(
|
|||||||
"tools",
|
"tools",
|
||||||
"custom_tools",
|
"custom_tools",
|
||||||
"sub_agents",
|
"sub_agents",
|
||||||
|
"agent_tools",
|
||||||
"custom_mcp_servers",
|
"custom_mcp_servers",
|
||||||
"mcp_servers",
|
"mcp_servers",
|
||||||
]:
|
]:
|
||||||
@ -563,6 +577,12 @@ async def update_agent(
|
|||||||
str(agent_id) for agent_id in config["sub_agents"]
|
str(agent_id) for agent_id in config["sub_agents"]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
# Process agent tools
|
||||||
|
if "agent_tools" in config and config["agent_tools"] is not None:
|
||||||
|
processed_config["agent_tools"] = [
|
||||||
|
str(agent_id) for agent_id in config["agent_tools"]
|
||||||
|
]
|
||||||
|
|
||||||
# Process tools
|
# Process tools
|
||||||
if "tools" in config and config["tools"] is not None:
|
if "tools" in config and config["tools"] is not None:
|
||||||
processed_tools = []
|
processed_tools = []
|
||||||
|
Loading…
Reference in New Issue
Block a user