diff --git a/main.py b/main.py index 75473b6..17ea6a1 100644 --- a/main.py +++ b/main.py @@ -1,69 +1,51 @@ -# ./main.py import os import sys from dotenv import load_dotenv -from autogen import GroupChat, GroupChatManager -from autogen.agentchat.contrib.gpt_assistant_agent import GPTAssistantAgent -from src.mappers.team import teamMappers -from src.agentics.agentcreate import agentCreator import autogen -from autogen.util import load_config, get_openai_keys +from autogen.util import load_config, get_openai_keys, config_list_from_json +from src.mappers.team import teamMappers +from src.agentics.teams import TeamManager # Append the config directory to sys.path for importing config functionalities sys.path.append(os.path.join(os.path.dirname(__file__), 'src', 'config')) -# Load environment variables +# Load environment variables for system messages and assistants dotenv_system_messages_path = os.path.join(os.path.dirname(__file__), 'src', 'promptburo', 'system_messages.env') dotenv_assistants_env_path = os.path.join(os.path.dirname(__file__), 'src', 'config', 'assistants.env') load_dotenv(dotenv_system_messages_path) load_dotenv(dotenv_assistants_env_path) + +# Load OpenAI API key from config config_path = os.path.join(os.path.dirname(__file__), '..', 'config', 'OAI_CONFIG.json') config = load_config(config_path) openai_keys = get_openai_keys(config) if openai_keys: openai_key = openai_keys[0] - print(f"Using OpenAI key: {openai_key}") else: raise ValueError("No OpenAI API keys found in the configuration.") -# Initialize TeamMapper and AgentCreator with API key -team_mapper = teamMappers(openai_key) -agent_creator = agentCreator(openai_key) - # Load configuration list for Autogen config_list = config_list_from_json(os.path.join(os.path.dirname(__file__), '..', 'config', 'OAI_CONFIG_LIST_sample.json')) -# Function to create a GPT agent on-the-fly based on input criteria -def create_dynamic_agent(name, role): - assistant_id = agent_creator.create_agent(name=name, role=role) - return GPTAssistantAgent(name=name, llm_config={"config_list": config_list, "assistant_id": assistant_id}) +# Initialize the TeamMapper with the OpenAI API key +team_mapper = teamMappers(openai_key) -# Function to manage team composition and interaction -def manage_teams(user_input): +# Function to route the user input and manage the interaction based on the mapped team +def route_user_input(user_input): + # Map user input to a specific team team = team_mapper.map_team(user_input) - print(f"Selected Team: {team}") - - # Example Teams and their corresponding actions - teams_functions = { - "DefaultTeam": lambda: [ - create_dynamic_agent("Default Assistant", "Handling default tasks") - ], - # Add more teams and their corresponding dynamic agents creation logic - } - - if team not in teams_functions: - print("No specific team mapped, using DefaultTeam.") - team = "DefaultTeam" - - # Create Autogen GroupChat with the dynamically created agent(s) - agents = teams_functions[team]() - groupchat = GroupChat(agents=agents, messages=[], max_round=15) - group_chat_manager = GroupChatManager(groupchat=groupchat, llm_config={"config_list": config_list}) - group_chat_manager.start() + print(f"User input routed to the following team: {team}") + + # Initialize TeamManager with configuration and API key + team_manager = TeamManager(openai_key) + + # Manage teams and interactions based on the mapped team + team_manager.manage_teams(team, user_input) def main(): + # Example user input user_input = "I need help understanding Autogen library." - manage_teams(user_input) + route_user_input(user_input) if __name__ == "__main__": main() \ No newline at end of file diff --git a/src/agentics/teams.py b/src/agentics/teams.py index e69de29..b77c2cb 100644 --- a/src/agentics/teams.py +++ b/src/agentics/teams.py @@ -0,0 +1,62 @@ +# File: ./src/agentics/teams.py +import os +from dotenv import load_dotenv +from autogen import GroupChat, GroupChatManager +from autogen.agentchat.contrib.gpt_assistant_agent import GPTAssistantAgent +from autogen.util import config_list_from_json +from src.agentics.agentcreate import agentCreator + +class TeamManager: + def __init__(self, openai_key): + # Load environment variables for assistant IDs, system messages, and teams + dotenv_path_system_messages = os.path.join(os.getcwd(), 'src', 'promptburo', 'system_messages.env') + dotenv_path_assistants = os.path.join(os.getcwd(), 'src', 'config', 'assistants.env') + dotenv_path_teams = os.path.join(os.getcwd(), 'src', 'promptburo', 'teams.env') + + load_dotenv(dotenv_path_system_messages) + load_dotenv(dotenv_path_assistants) + load_dotenv(dotenv_path_teams) + + self.agent_creator = agentCreator(openai_key) + self.config_list = config_list_from_json(os.path.join(os.getcwd(), '..', 'config', 'OAI_CONFIG_LIST_sample.json')) + + self.team_agents = self._load_teams_config() + + def _load_teams_config(self): + teams_config = {} + for key in os.environ: + if key in ["DefaultTeam", "SalesIntelligence", "FinanceTeam", "CodingTeam", "MarketingIntelligenceTeam", "ConsultingTeam"]: + teams_config[key] = os.getenv(key).split(',') + return teams_config + + def create_agent(self, role): + assistant_id = os.getenv(f"{role.upper()}_ASSISTANT_ID") + system_message = os.getenv(f"{role.upper()}_MESSAGE") + if not assistant_id: + raise ValueError(f"Assistant ID not found for role: {role}") + return GPTAssistantAgent(name=role, llm_config={"config_list": self.config_list, "assistant_id": assistant_id}, initial_msg=system_message) + + def manage_teams(self, team, user_input): + agents = [] + + # Dynamically create agents based on the team's roles + if team in self.team_agents: + for role in self.team_agents[team]: + agents.append(self.create_agent(role)) + else: + print(f"No specific team mapped or team not recognized: {team}, using DefaultTeam.") + for role in self.team_agents.get("DefaultTeam", []): + agents.append(self.create_agent(role)) + + # Create Autogen GroupChat with the created agents + groupchat = GroupChat(agents=agents, messages=[], max_round=15, user_initiated_content=user_input) + group_chat_manager = GroupChatManager(groupchat=groupchat, llm_config={"config_list": self.config_list}) + group_chat_manager.start() + + return group_chat_manager +# # Example usage (Note: adjust the paths and configuration as needed) +# if __name__ == "__main__": +# team_manager = TeamManager("your_openai_key_here") +# team_chosen = "CodingTeam" # Example team chosen +# user_input = "I need help with a Python project." +# team_manager.manage_teams(team_chosen, user_input) \ No newline at end of file diff --git a/src/promptburo/teams.env b/src/promptburo/teams.env new file mode 100644 index 0000000..27027be --- /dev/null +++ b/src/promptburo/teams.env @@ -0,0 +1,7 @@ +# File: ./src/promptburo/teams.env +DefaultTeam=PROJECT_MANAGER,CODER,REVIEWER +SalesIntelligence=MARKETING_EXPERT +FinanceTeam=FINANCE_EXPERT,FINANCE_ANALYST +CodingTeam=CODER +MarketingIntelligenceTeam=MARKETING_EXPERT +ConsultingTeam=CONSULTING_PRO \ No newline at end of file