From f9c62ea530e141e2dacfc4de586fc2a105983364 Mon Sep 17 00:00:00 2001 From: sayan1101 Date: Tue, 12 Sep 2023 17:50:25 +0530 Subject: [PATCH 01/10] entity fixes for dev --- superagi/apm/knowledge_handler.py | 18 +++++- superagi/apm/tools_handler.py | 66 +++++++++++++++++----- tests/unit_tests/apm/test_tools_handler.py | 4 +- tools.json | 7 ++- 4 files changed, 75 insertions(+), 20 deletions(-) diff --git a/superagi/apm/knowledge_handler.py b/superagi/apm/knowledge_handler.py index 098791d4c..39905dc97 100644 --- a/superagi/apm/knowledge_handler.py +++ b/superagi/apm/knowledge_handler.py @@ -7,6 +7,7 @@ from sqlalchemy.sql import func from sqlalchemy.orm import aliased from superagi.models.agent_config import AgentConfiguration +from superagi.models.agent_execution_config import AgentExecutionConfiguration import pytz from datetime import datetime @@ -43,7 +44,10 @@ def get_knowledge_usage_by_name(self, knowledge_name: str) -> Dict[str, Dict[str 'knowledge_calls': self.session.query( EventAlias ).filter( - EventAlias.event_property['tool_name'].astext == 'knowledgesearch', + or_( + EventAlias.event_property['tool_name'].astext == 'knowledgesearch', + EventAlias.event_property['tool_name'].astext == 'Knowledge Search' + ), EventAlias.event_name == 'tool_used', EventAlias.org_id == self.organisation_id, EventAlias.agent_id.in_(self.session.query(Event.agent_id).filter( @@ -89,6 +93,16 @@ def get_knowledge_events_by_name(self, knowledge_name: str) -> List[Dict[str, Un event_run = next((er for er in event_runs if er.agent_id == knowledge_event.agent_id and er.event_property['agent_execution_id'] == agent_execution_id), None) agent_created_event = next((ace for ace in agent_created_events if ace.agent_id == knowledge_event.agent_id), None) + + model_query = self.session.query(AgentExecutionConfiguration).filter( + AgentExecutionConfiguration.agent_execution_id == agent_execution_id, + AgentExecutionConfiguration.key == 'model' + ).first() + + if model_query and model_query.value != 'None': + model_value = model_query.value + else: + model_value = None try: user_timezone = AgentConfiguration.get_agent_config_by_key_and_agent_id(session=self.session, key='user_timezone', agent_id=knowledge_event.agent_id) if user_timezone and user_timezone.value != 'None': @@ -108,7 +122,7 @@ def get_knowledge_events_by_name(self, knowledge_name: str) -> List[Dict[str, Un 'calls': event_run.event_property['calls'], 'agent_execution_name': event_run.event_property['name'], 'agent_name': agent_created_event.event_property['agent_name'], - 'model': agent_created_event.event_property['model'] + 'model': model_value if model_value else agent_created_event.event_property['model'] } if agent_execution_id not in [i['agent_execution_id'] for i in results]: results.append(result_dict) diff --git a/superagi/apm/tools_handler.py b/superagi/apm/tools_handler.py index 082b8062d..8d5e95aa2 100644 --- a/superagi/apm/tools_handler.py +++ b/superagi/apm/tools_handler.py @@ -1,7 +1,7 @@ from typing import List, Dict, Union from sqlalchemy import func, distinct, and_ from sqlalchemy.orm import Session -from sqlalchemy import Integer +from sqlalchemy import Integer, String from fastapi import HTTPException from superagi.models.events import Event from superagi.models.tool import Tool @@ -10,6 +10,7 @@ from sqlalchemy.sql import label from datetime import datetime from superagi.models.agent_config import AgentConfiguration +from superagi.models.agent_execution_config import AgentExecutionConfiguration import pytz class ToolsHandler: @@ -69,28 +70,49 @@ def get_tool_usage_by_name(self, tool_name: str) -> Dict[str, Dict[str, int]]: raise HTTPException(status_code=404, detail="Tool not found") formatted_tool_name = tool_name.lower().replace(" ", "") - tool_used_event = self.session.query( - Event.event_property['tool_name'].label('tool_name'), + tool_name_event = self.session.query( + Event.event_property['tool_name'].cast(String).label('tool_name'), func.count(Event.id).label('tool_calls'), func.count(distinct(Event.agent_id)).label('tool_unique_agents') ).filter( - Event.event_name == 'tool_used', + Event.event_name == 'tool_used', + Event.org_id == self.organisation_id, + Event.event_property['tool_name'].astext == tool_name + ).group_by( + Event.event_property['tool_name'].cast(String) + ).first() + + formatted_tool_name_event = self.session.query( + Event.event_property['tool_name'].cast(String).label('tool_name'), + func.count(Event.id).label('tool_calls'), + func.count(distinct(Event.agent_id)).label('tool_unique_agents') + ).filter( + Event.event_name == 'tool_used', Event.org_id == self.organisation_id, Event.event_property['tool_name'].astext == formatted_tool_name ).group_by( - Event.event_property['tool_name'] + Event.event_property['tool_name'].cast(String) ).first() - if tool_used_event is None: - return {} + tool_data = {} + tool_calls = 0 + tool_unique_agents = 0 + + if tool_name_event: + tool_calls += tool_name_event.tool_calls + tool_unique_agents += tool_name_event.tool_unique_agents + + if formatted_tool_name_event: + tool_calls += formatted_tool_name_event.tool_calls + tool_unique_agents += formatted_tool_name_event.tool_unique_agents tool_data = { - 'tool_calls': tool_used_event.tool_calls, - 'tool_unique_agents': tool_used_event.tool_unique_agents - } + 'tool_calls': tool_calls, + 'tool_unique_agents': tool_unique_agents + } return tool_data - + def get_tool_events_by_name(self, tool_name: str) -> List[Dict[str, Union[str, int, List[str]]]]: is_tool_name_valid = self.session.query(Tool).filter_by(name=tool_name).first() @@ -103,7 +125,10 @@ def get_tool_events_by_name(self, tool_name: str) -> List[Dict[str, Union[str, i tool_events = self.session.query(Event).filter( Event.org_id == self.organisation_id, Event.event_name == 'tool_used', - Event.event_property['tool_name'].astext == formatted_tool_name + or_( + Event.event_property['tool_name'].astext == formatted_tool_name, + Event.event_property['tool_name'].astext == tool_name + ) ).all() tool_events = [te for te in tool_events if 'agent_execution_id' in te.event_property] @@ -125,6 +150,16 @@ def get_tool_events_by_name(self, tool_name: str) -> List[Dict[str, Union[str, i event_run = next((er for er in event_runs if er.agent_id == tool_event.agent_id and er.event_property['agent_execution_id'] == agent_execution_id), None) agent_created_event = next((ace for ace in agent_created_events if ace.agent_id == tool_event.agent_id), None) + + model_query = self.session.query(AgentExecutionConfiguration).filter( + AgentExecutionConfiguration.agent_execution_id == agent_execution_id, + AgentExecutionConfiguration.key == 'model' + ).first() + + if model_query and model_query.value != 'None': + model_value = model_query.value + else: + model_value = None try: user_timezone = AgentConfiguration.get_agent_config_by_key_and_agent_id(session=self.session, key='user_timezone', agent_id=tool_event.agent_id) if user_timezone and user_timezone.value != 'None': @@ -141,7 +176,10 @@ def get_tool_events_by_name(self, tool_name: str) -> List[Dict[str, Union[str, i ).filter( Event.org_id == self.organisation_id, Event.event_name == 'tool_used', - Event.event_property['tool_name'].astext != formatted_tool_name, + and_( + Event.event_property['tool_name'].astext != tool_name, + Event.event_property['tool_name'].astext != formatted_tool_name + ), Event.agent_id == tool_event.agent_id, Event.id.between(tool_event.id, event_run.id) ).all() @@ -156,7 +194,7 @@ def get_tool_events_by_name(self, tool_name: str) -> List[Dict[str, Union[str, i 'agent_execution_name': event_run.event_property['name'], 'other_tools': other_tools, 'agent_name': agent_created_event.event_property['agent_name'], - 'model': agent_created_event.event_property['model'] + 'model': model_value if model_value else agent_created_event.event_property['model'] } if agent_execution_id not in [i['agent_execution_id'] for i in results]: diff --git a/tests/unit_tests/apm/test_tools_handler.py b/tests/unit_tests/apm/test_tools_handler.py index da13bca1e..93a2f75a3 100644 --- a/tests/unit_tests/apm/test_tools_handler.py +++ b/tests/unit_tests/apm/test_tools_handler.py @@ -84,8 +84,8 @@ def test_get_tool_usage_by_name(tools_handler, mock_session): assert isinstance(result, dict) assert result == { - 'tool_calls': 10, - 'tool_unique_agents': 5 + 'tool_calls': 20, + 'tool_unique_agents': 10 } mock_session.query.return_value.filter_by.return_value.first.return_value = None diff --git a/tools.json b/tools.json index 94de16ccc..956fc7a25 100644 --- a/tools.json +++ b/tools.json @@ -1,4 +1,7 @@ { - "tools": { - } + "tools": { + "duck_duck_go": "https://github.com/TransformerOptimus/SuperAGI-Tools/tree/main/duck_duck_go", + "google_analytics": "https://github.com/TransformerOptimus/SuperAGI-Tools/tree/main/google_analytics", + "notion": "https://github.com/TransformerOptimus/SuperAGI-Tools/tree/main/notion" + } } \ No newline at end of file From fae891ac64a0e9e7ba17c4522a4b58701bff497a Mon Sep 17 00:00:00 2001 From: sayan1101 Date: Wed, 13 Sep 2023 11:40:06 +0530 Subject: [PATCH 02/10] entity fix for dev --- superagi/apm/knowledge_handler.py | 5 +---- superagi/apm/tools_handler.py | 29 ++--------------------------- 2 files changed, 3 insertions(+), 31 deletions(-) diff --git a/superagi/apm/knowledge_handler.py b/superagi/apm/knowledge_handler.py index 39905dc97..30347b01b 100644 --- a/superagi/apm/knowledge_handler.py +++ b/superagi/apm/knowledge_handler.py @@ -44,10 +44,7 @@ def get_knowledge_usage_by_name(self, knowledge_name: str) -> Dict[str, Dict[str 'knowledge_calls': self.session.query( EventAlias ).filter( - or_( - EventAlias.event_property['tool_name'].astext == 'knowledgesearch', - EventAlias.event_property['tool_name'].astext == 'Knowledge Search' - ), + EventAlias.event_property['tool_name'].astext == 'Knowledge Search', EventAlias.event_name == 'tool_used', EventAlias.org_id == self.organisation_id, EventAlias.agent_id.in_(self.session.query(Event.agent_id).filter( diff --git a/superagi/apm/tools_handler.py b/superagi/apm/tools_handler.py index 8d5e95aa2..0e583548d 100644 --- a/superagi/apm/tools_handler.py +++ b/superagi/apm/tools_handler.py @@ -68,7 +68,6 @@ def get_tool_usage_by_name(self, tool_name: str) -> Dict[str, Dict[str, int]]: if not is_tool_name_valid: raise HTTPException(status_code=404, detail="Tool not found") - formatted_tool_name = tool_name.lower().replace(" ", "") tool_name_event = self.session.query( Event.event_property['tool_name'].cast(String).label('tool_name'), @@ -82,18 +81,6 @@ def get_tool_usage_by_name(self, tool_name: str) -> Dict[str, Dict[str, int]]: Event.event_property['tool_name'].cast(String) ).first() - formatted_tool_name_event = self.session.query( - Event.event_property['tool_name'].cast(String).label('tool_name'), - func.count(Event.id).label('tool_calls'), - func.count(distinct(Event.agent_id)).label('tool_unique_agents') - ).filter( - Event.event_name == 'tool_used', - Event.org_id == self.organisation_id, - Event.event_property['tool_name'].astext == formatted_tool_name - ).group_by( - Event.event_property['tool_name'].cast(String) - ).first() - tool_data = {} tool_calls = 0 tool_unique_agents = 0 @@ -102,10 +89,6 @@ def get_tool_usage_by_name(self, tool_name: str) -> Dict[str, Dict[str, int]]: tool_calls += tool_name_event.tool_calls tool_unique_agents += tool_name_event.tool_unique_agents - if formatted_tool_name_event: - tool_calls += formatted_tool_name_event.tool_calls - tool_unique_agents += formatted_tool_name_event.tool_unique_agents - tool_data = { 'tool_calls': tool_calls, 'tool_unique_agents': tool_unique_agents @@ -120,15 +103,10 @@ def get_tool_events_by_name(self, tool_name: str) -> List[Dict[str, Union[str, i if not is_tool_name_valid: raise HTTPException(status_code=404, detail="Tool not found") - formatted_tool_name = tool_name.lower().replace(" ", "") - tool_events = self.session.query(Event).filter( Event.org_id == self.organisation_id, Event.event_name == 'tool_used', - or_( - Event.event_property['tool_name'].astext == formatted_tool_name, - Event.event_property['tool_name'].astext == tool_name - ) + Event.event_property['tool_name'].astext == tool_name ).all() tool_events = [te for te in tool_events if 'agent_execution_id' in te.event_property] @@ -176,10 +154,7 @@ def get_tool_events_by_name(self, tool_name: str) -> List[Dict[str, Union[str, i ).filter( Event.org_id == self.organisation_id, Event.event_name == 'tool_used', - and_( - Event.event_property['tool_name'].astext != tool_name, - Event.event_property['tool_name'].astext != formatted_tool_name - ), + Event.event_property['tool_name'].astext != tool_name, Event.agent_id == tool_event.agent_id, Event.id.between(tool_event.id, event_run.id) ).all() From c0b9177aa4a9fa57ec989012d61772bdf26460ae Mon Sep 17 00:00:00 2001 From: sayan1101 Date: Wed, 13 Sep 2023 11:44:54 +0530 Subject: [PATCH 03/10] fix test_tools_handler --- tests/unit_tests/apm/test_tools_handler.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/unit_tests/apm/test_tools_handler.py b/tests/unit_tests/apm/test_tools_handler.py index 93a2f75a3..da13bca1e 100644 --- a/tests/unit_tests/apm/test_tools_handler.py +++ b/tests/unit_tests/apm/test_tools_handler.py @@ -84,8 +84,8 @@ def test_get_tool_usage_by_name(tools_handler, mock_session): assert isinstance(result, dict) assert result == { - 'tool_calls': 20, - 'tool_unique_agents': 10 + 'tool_calls': 10, + 'tool_unique_agents': 5 } mock_session.query.return_value.filter_by.return_value.first.return_value = None From ae255db656ce561ab65087892e5cc3493de19e7a Mon Sep 17 00:00:00 2001 From: sayan1101 Date: Wed, 13 Sep 2023 11:46:53 +0530 Subject: [PATCH 04/10] tools.json revert --- tools.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/tools.json b/tools.json index 956fc7a25..d1df44b0e 100644 --- a/tools.json +++ b/tools.json @@ -1,7 +1,4 @@ { "tools": { - "duck_duck_go": "https://github.com/TransformerOptimus/SuperAGI-Tools/tree/main/duck_duck_go", - "google_analytics": "https://github.com/TransformerOptimus/SuperAGI-Tools/tree/main/google_analytics", - "notion": "https://github.com/TransformerOptimus/SuperAGI-Tools/tree/main/notion" } } \ No newline at end of file From 43a11f0ce612937bf8bd140315fc40e8d03a7140 Mon Sep 17 00:00:00 2001 From: Sayan Samanta <139119661+sayan1101@users.noreply.github.com> Date: Wed, 13 Sep 2023 13:28:00 +0530 Subject: [PATCH 05/10] Update tools.json --- tools.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools.json b/tools.json index d1df44b0e..27b7793b4 100644 --- a/tools.json +++ b/tools.json @@ -1,4 +1,4 @@ { - "tools": { - } -} \ No newline at end of file +"tools": { +} +} From cff199f260cc1106f862e4366f548dec1c4fd6c1 Mon Sep 17 00:00:00 2001 From: Sayan Samanta <139119661+sayan1101@users.noreply.github.com> Date: Wed, 13 Sep 2023 13:28:34 +0530 Subject: [PATCH 06/10] Update tools.json --- tools.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools.json b/tools.json index 27b7793b4..9091ede76 100644 --- a/tools.json +++ b/tools.json @@ -1,4 +1,4 @@ { -"tools": { -} + "tools": { + } } From 7da927df681d82cd687d42e565d61aff89830622 Mon Sep 17 00:00:00 2001 From: Kalki <97698934+jedan2506@users.noreply.github.com> Date: Wed, 13 Sep 2023 13:38:48 +0530 Subject: [PATCH 07/10] Update tools.json --- tools.json | 1 + 1 file changed, 1 insertion(+) diff --git a/tools.json b/tools.json index 9091ede76..886a21d84 100644 --- a/tools.json +++ b/tools.json @@ -2,3 +2,4 @@ "tools": { } } + From 7c6f380d47845f7fd02a227f8780e451183d19fe Mon Sep 17 00:00:00 2001 From: Kalki <97698934+jedan2506@users.noreply.github.com> Date: Wed, 13 Sep 2023 13:39:20 +0530 Subject: [PATCH 08/10] Update tools.json --- tools.json | 1 - 1 file changed, 1 deletion(-) diff --git a/tools.json b/tools.json index 886a21d84..9091ede76 100644 --- a/tools.json +++ b/tools.json @@ -2,4 +2,3 @@ "tools": { } } - From 4e64122677aa5e9aa7761aacdc11d98f10dbb43c Mon Sep 17 00:00:00 2001 From: Kalki <97698934+jedan2506@users.noreply.github.com> Date: Wed, 13 Sep 2023 13:41:30 +0530 Subject: [PATCH 09/10] Update tools.json From 9d835e5728d25a7e9f2bc8055faeb1cb096bc548 Mon Sep 17 00:00:00 2001 From: sayan1101 Date: Thu, 14 Sep 2023 15:25:12 +0530 Subject: [PATCH 10/10] apollo tool bug fix --- superagi/tools/apollo/apollo_search.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/superagi/tools/apollo/apollo_search.py b/superagi/tools/apollo/apollo_search.py index d9951a4e5..974638cc7 100644 --- a/superagi/tools/apollo/apollo_search.py +++ b/superagi/tools/apollo/apollo_search.py @@ -73,7 +73,7 @@ def _execute(self, person_titles: list[str], page: int = 1, per_page: int = 25, num_of_employees, person_location, organization_domains) logger.info(people_data) people_list = [] - if 'people' in people_data and len(people_data['people']) > 0: + if people_data and 'people' in people_data and len(people_data['people']) > 0: for person in people_data['people']: people_list.append({'first_name': person['first_name'], 'last_name': person['last_name'], @@ -130,3 +130,4 @@ def apollo_search_results(self, page, per_page, person_titles, num_of_employees return response.json() else: return None +