Merge pull request #557 from kyegomez/agentops

AGENTOPS FIX
structured_output
Kye Gomez 5 months ago committed by GitHub
commit 82681bee15
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -1,26 +1,85 @@
from swarms import Agent, OpenAIChat
"""
* WORKING
# Initialize the agent
agent = Agent(
agent_name="Accounting Agent",
system_prompt="Generate a financial report for the company's quarterly earnings.",
What this script does:
Multi-Agent run to test AgentOps (https://www.agentops.ai/)
Requirements:
1. Create an account on https://www.agentops.ai/ and run pip install agentops
2. Add the folowing API key(s) in your .env file:
- OPENAI_API_KEY
- AGENTOPS_API_KEY
3. Go to your agentops dashboard to observe your activity
"""
################ Adding project root to PYTHONPATH ################################
# If you are running playground examples in the project files directly, use this:
import sys
import os
sys.path.insert(0, os.getcwd())
################ Adding project root to PYTHONPATH ################################
from swarms import Agent, OpenAIChat, AgentRearrange
Treasurer = Agent(
agent_name="Treasurer",
system_prompt="Give your opinion on the cash management.",
agent_description=(
"Generate a financial report for the company's quarterly earnings."
"responsible for managing an organization's financial assets and liquidity. They oversee cash management, "
"investment strategies, and financial risk. Key duties include monitoring cash flow, managing bank relationships, "
"ensuring sufficient funds for operations, and optimizing returns on short-term investments. Treasurers also often "
"handle debt management and may be involved in capital raising activities."
),
llm=OpenAIChat(),
max_loops=1,
autosave=True,
dashboard=False,
streaming_on=True,
verbose=True,
stopping_token="<DONE>",
interactive=False,
state_save_file_type="json",
saved_state_path="accounting_agent.json",
agent_ops_on=True,
)
# Run the Agent on a task
agent.run(
"Generate a financial report for the company's quarterly earnings!"
CFO = Agent(
agent_name="CFO",
system_prompt="Give your opinion on the financial performance of the company.",
agent_description=(
"the top financial executive in an organization, overseeing all financial operations and strategy. Their role is broader than a treasurer's and includes:\n"
"Financial planning and analysis\n"
"Accounting and financial reporting\n"
"Budgeting and forecasting\n"
"Strategic financial decision-making\n"
"Compliance and risk management\n"
"Investor relations (in public companies)\n"
"Overseeing the finance and accounting departments"
),
llm=OpenAIChat(),
max_loops=1,
agent_ops_on=True,
)
swarm = AgentRearrange(
agents=[Treasurer, CFO],
flow="Treasurer -> CFO",
)
results = swarm.run("Date,Revenue,Expenses,Profit,Cash_Flow,Inventory,Customer_Acquisition_Cost,Customer_Retention_Rate,Marketing_Spend,R&D_Spend,Debt,Assets\n"
"2023-01-01,1000000,800000,200000,150000,500000,100,0.85,50000,100000,2000000,5000000\n"
"2023-02-01,1050000,820000,230000,180000,520000,95,0.87,55000,110000,1950000,5100000\n"
"2023-03-01,1100000,850000,250000,200000,530000,90,0.88,60000,120000,1900000,5200000\n"
"2023-04-01,1200000,900000,300000,250000,550000,85,0.90,70000,130000,1850000,5400000\n"
"2023-05-01,1300000,950000,350000,300000,580000,80,0.92,80000,140000,1800000,5600000\n"
"2023-06-01,1400000,1000000,400000,350000,600000,75,0.93,90000,150000,1750000,5800000\n"
"2023-07-01,1450000,1050000,400000,320000,620000,78,0.91,95000,160000,1700000,5900000\n"
"2023-08-01,1500000,1100000,400000,300000,650000,80,0.90,100000,170000,1650000,6000000\n"
"2023-09-01,1550000,1150000,400000,280000,680000,82,0.89,105000,180000,1600000,6100000\n"
"2023-10-01,1600000,1200000,400000,260000,700000,85,0.88,110000,190000,1550000,6200000\n"
"2023-11-01,1650000,1250000,400000,240000,720000,88,0.87,115000,200000,1500000,6300000\n"
"2023-12-01,1700000,1300000,400000,220000,750000,90,0.86,120000,210000,1450000,6400000\n"
"2024-01-01,1500000,1200000,300000,180000,780000,95,0.84,100000,180000,1500000,6300000\n"
"2024-02-01,1550000,1220000,330000,200000,760000,92,0.85,105000,185000,1480000,6350000\n"
"2024-03-01,1600000,1240000,360000,220000,740000,89,0.86,110000,190000,1460000,6400000\n"
"2024-04-01,1650000,1260000,390000,240000,720000,86,0.87,115000,195000,1440000,6450000\n"
"2024-05-01,1700000,1280000,420000,260000,700000,83,0.88,120000,200000,1420000,6500000\n"
"2024-06-01,1750000,1300000,450000,280000,680000,80,0.89,125000,205000,1400000,6550000"
)

@ -0,0 +1,58 @@
"""
* WORKING
What this script does:
Simple agent run to test AgentOps to record tool actions (https://www.agentops.ai/)
Requirements:
1. Create an account on https://www.agentops.ai/ and run pip install agentops
2. Add the folowing API key(s) in your .env file:
- OPENAI_API_KEY
- AGENTOPS_API_KEY
3. Go to your agentops dashboard to observe your activity
"""
################ Adding project root to PYTHONPATH ################################
# If you are running playground examples in the project files directly, use this:
import sys
import os
sys.path.insert(0, os.getcwd())
################ Adding project root to PYTHONPATH ################################
from swarms import Agent, OpenAIChat
from agentops import record_function
# Add agentops decorator on your tools
@record_function("length_checker")
def length_checker(string: str) -> int:
"""
For a given string it returns the length of the string.
Args:
string (str): string to check the length of
Returns:
int: length of the string
"""
return len(string)
agent1 = Agent(
agent_name="lengther",
system_prompt="return the length of the string",
agent_description=(
"For a given string it calls the function length_checker to return the length of the string."
),
llm=OpenAIChat(),
max_loops=1,
agent_ops_on=True,
tools=[length_checker],
execute_tool=True,
)
agent1.run("hello")

@ -14,6 +14,8 @@ from loguru import logger
from pydantic import BaseModel
from termcolor import colored
import agentops
from swarms.memory.base_vectordb import BaseVectorDatabase
from swarms.models.tiktoken_wrapper import TikTokenizer
from swarms.prompts.agent_system_prompts import AGENT_SYSTEM_PROMPT_3
@ -89,8 +91,8 @@ def step_id():
agent_output_type = Union[BaseModel, dict, str]
ToolUsageType = Union[BaseModel, Dict[str, Any]]
# [FEAT][AGENT]
@agentops.track_agent()
class Agent(BaseStructure):
"""
Agent is the backbone to connect LLMs with tools and long term memory. Agent also provides the ability to
@ -720,6 +722,7 @@ class Agent(BaseStructure):
self,
task: Optional[str] = None,
img: Optional[str] = None,
is_last: bool = True,
*args,
**kwargs,
):
@ -910,7 +913,7 @@ class Agent(BaseStructure):
# print(f"Response after output model: {response}")
# print(response)
if self.agent_ops_on is True:
if self.agent_ops_on is True and is_last is True:
self.check_end_session_agentops()
# final_response = " ".join(all_responses)
@ -2021,6 +2024,7 @@ class Agent(BaseStructure):
"Agent Ops Initializing, ensure that you have the agentops API key and the pip package installed."
)
try_import_agentops()
self.agent_ops_agent_name = self.agent_name
logger.info("Agentops successfully activated!")
except ImportError:

@ -694,9 +694,6 @@ class BaseSwarm(ABC):
def __contains__(self, value):
return value in self.agents
def __eq__(self, other):
return self.__dict__ == other.__dict__
def agent_error_handling_check(self):
try:
if self.agents is None:

@ -194,6 +194,7 @@ class AgentRearrange(BaseSwarm):
loop_count = 0
while loop_count < self.max_loops:
for task in tasks:
is_last = task == tasks[-1]
agent_names = [
name.strip() for name in task.split(",")
]
@ -222,7 +223,7 @@ class AgentRearrange(BaseSwarm):
else:
agent = self.agents[agent_name]
result = agent.run(
current_task, img, *args, **kwargs
current_task, img, is_last, *args, **kwargs
)
results.append(result)
@ -251,7 +252,7 @@ class AgentRearrange(BaseSwarm):
else:
agent = self.agents[agent_name]
current_task = agent.run(
current_task, img, *args, **kwargs
current_task, img, is_last, *args, **kwargs
)
loop_count += 1
@ -261,7 +262,7 @@ class AgentRearrange(BaseSwarm):
return e
def process_agent_or_swarm(
self, name: str, task: str, img: str, *args, **kwargs
self, name: str, task: str, img: str, is_last, *args, **kwargs
):
"""
@ -284,7 +285,7 @@ class AgentRearrange(BaseSwarm):
return self.run_sub_swarm(task, name, img, *args, **kwargs)
else:
agent = self.agents[name]
return agent.run(task, *args, **kwargs)
return agent.run(task, img, is_last, *args, **kwargs)
def human_intervention(self, task: str) -> str:
if self.human_in_the_loop and self.custom_human_in_the_loop:
@ -316,18 +317,19 @@ class AgentRearrange(BaseSwarm):
current_task = task
for sub_task in sub_tasks:
is_last = sub_task == sub_tasks[-1]
agent_names = [name.strip() for name in sub_task.split(",")]
if len(agent_names) > 1:
results = []
for agent_name in agent_names:
result = self.process_agent_or_swarm(
agent_name, current_task, img, *args, **kwargs
agent_name, current_task, img, is_last*args, **kwargs
)
results.append(result)
current_task = "; ".join(results)
else:
current_task = self.process_agent_or_swarm(
agent_names[0], current_task, img, *args, **kwargs
agent_names[0], current_task, is_last, img, *args, **kwargs
)
return current_task

@ -30,8 +30,8 @@ def parse_and_execute_json(
function_dict = {func.__name__: func for func in functions}
data = json.loads(json_string)
function_list = data.get("functions", [])
function_list = data.get("functions", []) if data.get("functions") else [data.get("function", [])]
results = {}
for function_data in function_list:
function_name = function_data.get("name")

Loading…
Cancel
Save