AI_Agent_Service/CustomAIAgent.py (43 lines of code) (raw):
from azure.ai.projects import AIProjectClient
from azure.identity import DefaultAzureCredential
from typing import Any, Callable, Set, Dict, List, Optional
from azure.ai.projects.models import FunctionTool, ToolSet
import os
class CustomAIServiceAgent:
_project_client : AIProjectClient
_agent_instance: Any
_model: str
_agent_name: str
_agent_instructions: str
_tool_set : ToolSet
_thread_id : str
def __init__(self, agent_name: str, agent_instructions: str, tool_set: ToolSet, model: str = "gpt-4o-mini"):
self._agent_name = agent_name
self._project_client = AIProjectClient.from_connection_string(
credential=DefaultAzureCredential(), conn_str=os.environ["PROJECT_CONNECTION_STRING"]
)
self._agent_instance = self._project_client.agents.create_agent(
model=model,
name=agent_name,
instructions=agent_instructions,
toolset=tool_set
)
#thread = self._project_client.agents.create_thread()
#self._thread_id = thread.id
def post_message(self, message: str):
message = self._project_client.agents.create_message(
thread_id=self._thread_id,
role="user",
content=message,
)
#print("post_message: Agent Threadid: ", self._thread_id)
run = self._project_client.agents.create_and_process_run(thread_id=self._thread_id,
assistant_id=self._agent_instance.id,
max_completion_tokens=200,
max_prompt_tokens=4000
)
if run.status == "failed":
# Check if you got "Rate limit is exceeded.", then you want to get more quota
print(f"Run failed: {run.last_error}")
messages = self._project_client.agents.list_messages(thread_id=self._thread_id)
last_msg = messages.get_last_text_message_by_role("assistant")
if last_msg:
#print(f"Agent id:{self._agent_instance.id} - Last Message: {last_msg.text.value}")
return last_msg.text.value
else:
return None