AI_Agent_Service/AgentHandler.py (41 lines of code) (raw):
import json
from azure.ai.projects import AIProjectClient
from CustomAIAgent import CustomAIServiceAgent
from typing import Dict, Optional
from azure.identity import DefaultAzureCredential
from pydantic import BaseModel
import os
class CustomAIAgentResponse(BaseModel):
agent_name: str
agent_response: str
class AgentHandler:
_project_client : AIProjectClient
_agents: Dict[str, CustomAIServiceAgent] = {}
_thread_id : str
_last_agent_response: str
_agent_handler_instructions: str = """
You are a Transify Support Agent Manager. Transify is an online payment platform.
You can help users with their Transify related queries.
You need to respond only to queries related to Transify and nothing else.
You need to answer end user questions using the agents provided below.
Each agent has a specific area of expertise and tools to help you answer questions.
Based on the user question you need to idenfity the correct agent who can help answer the question.
Team Members:
1. GetAccountInfoAgent: If the question is about account details such as account info and balance.
2. GetTransactionDetailsAgent: If the question is about transaction details such as latest transaction.
3. UnknownAgent: If the question is not related to Transify.
Respond in the json format below: Dont add ```json or ``` in the response or .
{
"agent_name" : "AgentName",
"agent_response" : "Determine the input needed for the agent based on previous conversation."
}
"""
def __init__(self):
self._project_client = AIProjectClient.from_connection_string(
credential=DefaultAzureCredential(), conn_str=os.environ["PROJECT_CONNECTION_STRING"]
)
thread = self._project_client.agents.create_thread()
self._thread_id = thread.id
def add_agent(self, agent_instance: CustomAIServiceAgent):
agent_instance._thread_id = self._thread_id
#print("add_agent: AgentHandler Threadid: ", self._thread_id)
self._agents[agent_instance._agent_name] = agent_instance
def identify_agent(self, message: str) -> Optional[CustomAIServiceAgent]:
handler_agent = CustomAIServiceAgent("AgentHandler", self._agent_handler_instructions, None, model="gpt-4o")
handler_agent._thread_id = self._thread_id
next_agent_name = handler_agent.post_message(message)
parsed_json = json.loads(next_agent_name)
agent_response = CustomAIAgentResponse(**parsed_json)
#print(f"Next Agent is : {agent_response.agent_name}")
for agent_name, agent_instance in self._agents.items():
#print(f"Agent Name in list: {agent_name}")
if agent_name.lower() == agent_response.agent_name.lower():
return agent_instance
return None
def answer_user_question(self, message:str):
agent_instance = self.identify_agent(message)
if agent_instance:
#print(f"Agent identified: {agent_instance._agent_name}")
return agent_instance.post_message(message)
else:
return "I can only answer questions about Transify account and transaction details."