Skip to content

Commit

Permalink
Add description metadata to agents Fixes wise-agents#327
Browse files Browse the repository at this point in the history
  • Loading branch information
maeste committed Sep 26, 2024
1 parent 9d00df1 commit 47291be
Show file tree
Hide file tree
Showing 30 changed files with 284 additions and 311 deletions.
5 changes: 3 additions & 2 deletions examples/memory_agentic_chatbot/intelligent-agent.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
!wiseagents.agents.ChatWiseAgent
description: This is another test agent
!wiseagents.agents.ChatWiseAgent
metadata: !wiseagents.WiseAgentMetaData
description: This is another test agent
llm: !wiseagents.llm.OpenaiAPIWiseAgentLLM
model_name: llama3.1
remote_address: http://localhost:11434/v1
Expand Down
3 changes: 2 additions & 1 deletion examples/memory_agentic_chatbot/web-interface.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
!wiseagents.agents.AssistantAgent
description: This is a test agent
metadata: !wiseagents.WiseAgentMetaData
description: This is a test agent
name: AssistantAgent
destination_agent_name: WiseIntelligentAgent
transport: !wiseagents.transports.StompWiseAgentTransport
Expand Down
3 changes: 2 additions & 1 deletion examples/memory_agentic_chatbot_groq/intelligent-agent.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
!wiseagents.agents.ChatWiseAgent
description: This is another test agent
metadata: !wiseagents.WiseAgentMetaData
description: This is another test agent
llm: !wiseagents.llm.OpenaiAPIWiseAgentLLM
model_name: llama-3.1-70b-versatile
remote_address: https://api.groq.com/openai/v1
Expand Down
3 changes: 2 additions & 1 deletion examples/memory_agentic_chatbot_groq/web-interface.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
!wiseagents.agents.AssistantAgent
description: This is a test agent
metadata: !wiseagents.WiseAgentMetaData
description: This is a test agent
name: AssistantAgent
destination_agent_name: WiseIntelligentAgent
transport: !wiseagents.transports.StompWiseAgentTransport
Expand Down
10 changes: 5 additions & 5 deletions examples/perceive_and_act/custom_agents.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import time
from openai.types.chat import ChatCompletionToolParam, ChatCompletionMessageParam
from typing import List, Optional
from wiseagents import WiseAgent, WiseAgentEvent, WiseAgentMessage, WiseAgentTransport
from wiseagents import WiseAgent, WiseAgentEvent, WiseAgentMessage, WiseAgentMetaData, WiseAgentTransport
from wiseagents.yaml import WiseAgentsLoader

class PerceivingAgent(WiseAgent):
Expand All @@ -12,11 +12,11 @@ class PerceivingAgent(WiseAgent):

stop_event = threading.Event()

def __init__(self, name: str, description: str, transport: WiseAgentTransport, file_path: str, check_interval: float, destination_agent_name: str):
def __init__(self, name: str, metadata: WiseAgentMetaData, transport: WiseAgentTransport, file_path: str, check_interval: float, destination_agent_name: str):
self._file_path = file_path
self._check_interval = check_interval
self._destination_agent_name = destination_agent_name
super().__init__(name=name, description=description, transport=transport)
super().__init__(name=name, metadata=metadata, transport=transport)

def start_agent(self):
super().start_agent()
Expand Down Expand Up @@ -86,9 +86,9 @@ class ActionAgent(WiseAgent):
yaml_tag = u'!custom_agents.ActionAgent'
yaml_loader = WiseAgentsLoader

def __init__(self, name: str, description: str, transport: WiseAgentTransport, destination_file_path: str):
def __init__(self, name: str, metadata: WiseAgentMetaData, transport: WiseAgentTransport, destination_file_path: str):
self._destination_file_path = destination_file_path
super().__init__(name=name, description=description, transport=transport)
super().__init__(name=name, metadata=metadata, transport=transport)

def start_agent(self):
super().start_agent()
Expand Down
12 changes: 8 additions & 4 deletions examples/perceive_and_act/intelligent-agents.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
!wiseagents.agents.LLMOnlyWiseAgent
description: This is an agent that can give suggestion on what to read next
metadata: !wiseagents.WiseAgentMetaData
description: This is an agent that can give suggestion on what to read next
llm: !wiseagents.llm.OpenaiAPIWiseAgentLLM
model_name: llama3.1
remote_address: http://localhost:11434/v1
Expand All @@ -12,7 +13,8 @@ transport: !wiseagents.transports.StompWiseAgentTransport
agent_name: LiterateAgent
---
!custom_agents.PerceivingAgent
description: This is an agent that can perceive file changes
metadata: !wiseagents.WiseAgentMetaData
description: This is an agent that can perceive file changes
name: PerceivingAgent
file_path: ./books_read.txt
check_interval: 5
Expand All @@ -23,7 +25,8 @@ transport: !wiseagents.transports.StompWiseAgentTransport
agent_name: PerceivingAgent
---
!custom_agents.ActionAgent
description: This is an agent that can write a file
metadata: !wiseagents.WiseAgentMetaData
description: This is an agent that can write a file
name: ActionAgent
destination_file_path: ./books_suggested.txt
transport: !wiseagents.transports.StompWiseAgentTransport
Expand All @@ -32,7 +35,8 @@ transport: !wiseagents.transports.StompWiseAgentTransport
agent_name: ActionAgent
---
!wiseagents.agents.SequentialCoordinatorWiseAgent
description: This is a coordinator agent
metadata: !wiseagents.WiseAgentMetaData
description: This is a coordinator agent
name: SequentialCoordinator
agents: ["LiterateAgent", "ActionAgent"]
transport: !wiseagents.transports.StompWiseAgentTransport
Expand Down
9 changes: 6 additions & 3 deletions examples/sequential_coordinator/intelligent-agents.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
!wiseagents.agents.ChatWiseAgent
description: This is an agent that can answer questions about english literature
metadata: !wiseagents.WiseAgentMetaData
description: This is an agent that can answer questions about english literature
llm: !wiseagents.llm.OpenaiAPIWiseAgentLLM
model_name: llama3.1
remote_address: http://localhost:11434/v1
Expand All @@ -12,7 +13,8 @@ transport: !wiseagents.transports.StompWiseAgentTransport
agent_name: LiterateAgent
---
!wiseagents.agents.ChatWiseAgent
description: This is an agent that can translate from english to italian
metadata: !wiseagents.WiseAgentMetaData
description: This is an agent that can translate from english to italian
llm: !wiseagents.llm.OpenaiAPIWiseAgentLLM
model_name: llama3.1
remote_address: http://localhost:11434/v1
Expand All @@ -24,7 +26,8 @@ transport: !wiseagents.transports.StompWiseAgentTransport
agent_name: TranslatorAgent
---
!wiseagents.agents.SequentialCoordinatorWiseAgent
description: This is a coordinator agent
metadata: !wiseagents.WiseAgentMetaData
description: This is a coordinator agent
name: SequentialCoordinator
agents: ["LiterateAgent", "TranslatorAgent"]
transport: !wiseagents.transports.StompWiseAgentTransport
Expand Down
3 changes: 2 additions & 1 deletion examples/sequential_coordinator/web-interface.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
!wiseagents.agents.AssistantAgent
description: This is a test agent
metadata: !wiseagents.WiseAgentMetaData
description: This is a test agent
name: AssistantAgent
destination_agent_name: SequentialCoordinator
transport: !wiseagents.transports.StompWiseAgentTransport
Expand Down
3 changes: 2 additions & 1 deletion src/wiseagents/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from wiseagents.core import WiseAgentContext
from wiseagents.core import WiseAgentRegistry
from wiseagents.core import WiseAgentTool
from wiseagents.core import WiseAgentMetaData
from wiseagents.wise_agent_messaging import WiseAgentEvent
from wiseagents.wise_agent_messaging import WiseAgentMessage
from wiseagents.wise_agent_messaging import WiseAgentMessageType
Expand All @@ -17,7 +18,7 @@

# Optionally, you can define __all__ to specify the public interface of the package
# __all__ = ['module1', 'module2', 'subpackage']
__all__ = ['WiseAgentRegistry', 'WiseAgentContext', 'WiseAgent', 'WiseAgentTool',
__all__ = ['WiseAgentRegistry', 'WiseAgentContext', 'WiseAgent', 'WiseAgentTool', 'WiseAgentMetaData',
'WiseAgentMessage', 'WiseAgentMessageType', 'WiseAgentTransport', 'WiseAgentEvent',
'WiseAgentCollaborationType',
'AbstractClassError', 'enforce_no_abstract_class_instances']
10 changes: 5 additions & 5 deletions src/wiseagents/agents/assistant.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import uuid

from openai.types.chat import ChatCompletionMessageParam
from wiseagents import WiseAgent, WiseAgentCollaborationType, WiseAgentRegistry, WiseAgentTransport
from wiseagents import WiseAgent, WiseAgentCollaborationType, WiseAgentMetaData, WiseAgentRegistry, WiseAgentTransport
from wiseagents.wise_agent_messaging import WiseAgentMessage
import gradio

Expand All @@ -28,25 +28,25 @@ def __new__(cls, *args, **kwargs):
obj = super().__new__(cls)
return obj

def __init__(self, name: str, description: str , transport: WiseAgentTransport,
def __init__(self, name: str, metadata: WiseAgentMetaData , transport: WiseAgentTransport,
destination_agent_name: str):
"""
Initialize the agent.
Args:
name (str): the name of the agent
description (str): a description of the agent
metadata (WiseAgentMetaData): the metadata for the agent
transport (WiseAgentTransport): the transport to use for communication
destination_agent_name (str): the name of the agent to send requests to
"""
self._name = name
self._destination_agent_name = destination_agent_name
super().__init__(name=name, description=description, transport=transport, llm=None)
super().__init__(name=name, metadata=metadata, transport=transport, llm=None)

def __repr__(self):
"""Return a string representation of the agent."""
return f"{self.__class__.__name__}(name={self.name}, \
description={self.description}, transport={self.transport}, \
metadat={self.metadata}, transport={self.transport}, \
destination_agent_name={self.destination_agent_name},\
response_delivery={self.response_delivery}"

Expand Down
28 changes: 12 additions & 16 deletions src/wiseagents/agents/coordinator_wise_agents.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import uuid
from typing import Callable, List, Optional

from wiseagents import WiseAgent, WiseAgentCollaborationType, WiseAgentMessage, WiseAgentMessageType, WiseAgentRegistry, WiseAgentTransport
from wiseagents import WiseAgent, WiseAgentCollaborationType, WiseAgentMessage, WiseAgentMessageType, WiseAgentMetaData, WiseAgentRegistry, WiseAgentTransport
from wiseagents.llm import WiseAgentLLM

CONFIDENCE_SCORE_THRESHOLD = 85
Expand All @@ -16,23 +16,23 @@ class SequentialCoordinatorWiseAgent(WiseAgent):
"""
yaml_tag = u'!wiseagents.agents.SequentialCoordinatorWiseAgent'

def __init__(self, name: str, description: str, transport: WiseAgentTransport, agents: List[str]):
def __init__(self, name: str, metadata: WiseAgentMetaData, transport: WiseAgentTransport, agents: List[str]):
"""
Initialize the agent.
Args:
name (str): the name of the agent
description (str): a description of the agent
metadata (WiseAgentMetaData): the metadata for the agent
transport (WiseAgentTransport): the transport to use for communication
agents (List[str]): the list of agents to coordinate
"""
self._name = name
self._agents = agents
super().__init__(name=name, description=description, transport=transport, llm=None)
super().__init__(name=name, metadata=metadata, transport=transport, llm=None)

def __repr__(self):
"""Return a string representation of the agent."""
return f"{self.__class__.__name__}(name={self.name}, description={self.description}, agents={self.agents})"
return f"{self.__class__.__name__}(name={self.name}, metadata={self.metadata}, agents={self.agents})"

def handle_request(self, request):
"""
Expand Down Expand Up @@ -117,38 +117,34 @@ def __new__(cls, *args, **kwargs):
obj._phases = ["Data Collection", "Data Analysis"]
obj._max_iterations = MAX_ITERATIONS_FOR_COORDINATOR
obj._confidence_score_threshold = CONFIDENCE_SCORE_THRESHOLD
obj._system_message = None
return obj

def __init__(self, name: str, description: str, transport: WiseAgentTransport, llm: WiseAgentLLM,
def __init__(self, name: str, metadata: WiseAgentMetaData, transport: WiseAgentTransport, llm: WiseAgentLLM,
phases: Optional[List[str]] = None, max_iterations: Optional[int] = MAX_ITERATIONS_FOR_COORDINATOR,
confidence_score_threshold: Optional[int] = CONFIDENCE_SCORE_THRESHOLD, system_message: Optional[str] = None):
confidence_score_threshold: Optional[int] = CONFIDENCE_SCORE_THRESHOLD):
"""
Initialize the agent.
Args:
name (str): the name of the agent
description (str): a description of the agent
metadata (WiseAgentMetaData): the metadata for the agent
transport (WiseAgentTransport): the transport to use for communication
llm (WiseAgentLLM): the LLM to use for coordinating the collaboration
phases (Optional[List[str]]): the optional list of phase names, defaults to "Data Collection" and "Data Analysis"
max_iterations (Optional[int]): the maximum number of iterations to run the phases, defaults to 5
confidence_score_threshold (Optional[int]): the confidence score threshold to determine if the final answer
is acceptable, defaults to 85
system_message (Optional[str]): the optional system message to be used by the coordinator when processing
chat completions using its LLM
"""
self._name = name
self._phases = phases if phases is not None else ["Data Collection", "Data Analysis"]
self._max_iterations = max_iterations
self._confidence_score_threshold = confidence_score_threshold
self._system_message = system_message
super().__init__(name=name, description=description, transport=transport, llm=llm, system_message=system_message)
super().__init__(name=name, metadata=metadata, transport=transport, llm=llm)

def __repr__(self):
"""Return a string representation of the agent."""
return (f"{self.__class__.__name__}(name={self.name}, description={self.description}, transport={self.transport},"
f"llm={self.llm}, phases={self.phases},max_iterations={self.max_iterations}, system_message={self.system_message}")
return (f"{self.__class__.__name__}(name={self.name}, metadata={self.metadata}, transport={self.transport},"
f"llm={self.llm}, phases={self.phases},max_iterations={self.max_iterations}")

@property
def phases(self) -> List[str]:
Expand Down Expand Up @@ -188,7 +184,7 @@ def handle_request(self, request):
" anything else in the response.\n" +
" Query: " + request.message + "\n" + "Available agents:\n" +
"\n".join(WiseAgentRegistry.get_agent_names_and_descriptions()) + "\n")
ctx.append_chat_completion(chat_uuid=chat_id, messages={"role": "system", "content": self.system_message or self.llm.system_message})
ctx.append_chat_completion(chat_uuid=chat_id, messages={"role": "system", "content": self.metadata.system_message or self.llm.system_message})
ctx.append_chat_completion(chat_uuid=chat_id, messages={"role": "user", "content": agent_selection_prompt})

logging.debug(f"messages: {ctx.llm_chat_completion[chat_id]}")
Expand Down
Loading

0 comments on commit 47291be

Please sign in to comment.