diff --git a/examples/multi_agent/board_of_directors/board_of_directors_example.py b/examples/multi_agent/board_of_directors/board_of_directors_example.py index 425d460b..bc043733 100644 --- a/examples/multi_agent/board_of_directors/board_of_directors_example.py +++ b/examples/multi_agent/board_of_directors/board_of_directors_example.py @@ -5,19 +5,25 @@ This example demonstrates how to use the Board of Directors swarm feature in the Swarms Framework. It shows how to create a board, configure it, and use it to orchestrate tasks across multiple agents. -The example includes: -1. Basic Board of Directors setup and usage -2. Custom board member configuration -3. Task execution and feedback -4. Configuration management +To run this example: +1. Make sure you're in the root directory of the swarms project +2. Run: python examples/multi_agent/board_of_directors/board_of_directors_example.py """ import os import sys -from typing import List, Optional - -# Add the parent directory to the path to import swarms -sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))) +from typing import List + +# Add the root directory to the Python path if running from examples directory +current_dir = os.path.dirname(os.path.abspath(__file__)) +if 'examples' in current_dir: + root_dir = current_dir + while os.path.basename(root_dir) != 'examples' and root_dir != os.path.dirname(root_dir): + root_dir = os.path.dirname(root_dir) + if os.path.basename(root_dir) == 'examples': + root_dir = os.path.dirname(root_dir) + if root_dir not in sys.path: + sys.path.insert(0, root_dir) from swarms.structs.board_of_directors_swarm import ( BoardOfDirectorsSwarm, @@ -25,413 +31,167 @@ from swarms.structs.board_of_directors_swarm import ( BoardMemberRole, ) from swarms.structs.agent import Agent -from swarms.config.board_config import ( - enable_board_feature, - disable_board_feature, - is_board_feature_enabled, - create_default_config_file, - set_board_size, - set_decision_threshold, - set_board_model, - enable_verbose_logging, - disable_verbose_logging, -) - - -def enable_board_directors_feature() -> None: - """ - Enable the Board of Directors feature. - - This function demonstrates how to enable the Board of Directors feature - globally and create a default configuration file. - """ - print("šŸ”§ Enabling Board of Directors feature...") - - try: - # Create a default configuration file - create_default_config_file("swarms_board_config.yaml") - - # Enable the feature - enable_board_feature("swarms_board_config.yaml") - - # Configure some default settings - set_board_size(3) - set_decision_threshold(0.6) - set_board_model("gpt-4o-mini") - enable_verbose_logging("swarms_board_config.yaml") - - print("āœ… Board of Directors feature enabled successfully!") - print("šŸ“ Configuration file created: swarms_board_config.yaml") - - except Exception as e: - print(f"āŒ Failed to enable Board of Directors feature: {e}") - raise -def create_custom_board_members() -> List[BoardMember]: - """ - Create custom board members with specific roles and expertise. - - This function demonstrates how to create a custom board with - specialized roles and expertise areas. +def create_board_members() -> List[BoardMember]: + """Create board members with specific roles.""" - Returns: - List[BoardMember]: List of custom board members - """ - print("šŸ‘„ Creating custom board members...") - - # Create specialized board members chairman = Agent( - agent_name="Executive_Chairman", - agent_description="Executive Chairman with strategic vision and leadership expertise", + agent_name="Chairman", + agent_description="Executive Chairman with strategic vision", model_name="gpt-4o-mini", max_loops=1, - system_prompt="""You are the Executive Chairman of the Board. Your role is to: -1. Provide strategic leadership and vision -2. Facilitate high-level decision-making -3. Ensure board effectiveness and governance -4. Represent the organization's interests -5. Guide long-term strategic planning - -You should be visionary, strategic, and focused on organizational success.""", + system_prompt="You are the Executive Chairman. Provide strategic leadership and facilitate decision-making.", ) cto = Agent( agent_name="CTO", - agent_description="Chief Technology Officer with deep technical expertise", + agent_description="Chief Technology Officer with technical expertise", model_name="gpt-4o-mini", max_loops=1, - system_prompt="""You are the Chief Technology Officer. Your role is to: -1. Provide technical leadership and strategy -2. Evaluate technology solutions and architectures -3. Ensure technical feasibility of proposed solutions -4. Guide technology-related decisions -5. Maintain technical standards and best practices - -You should be technically proficient, innovative, and focused on technical excellence.""", + system_prompt="You are the CTO. Provide technical leadership and evaluate technology solutions.", ) cfo = Agent( agent_name="CFO", - agent_description="Chief Financial Officer with financial and risk management expertise", + agent_description="Chief Financial Officer with financial expertise", model_name="gpt-4o-mini", max_loops=1, - system_prompt="""You are the Chief Financial Officer. Your role is to: -1. Provide financial analysis and insights -2. Evaluate financial implications of decisions -3. Ensure financial sustainability and risk management -4. Guide resource allocation and budgeting -5. Maintain financial controls and compliance - -You should be financially astute, risk-aware, and focused on financial health.""", + system_prompt="You are the CFO. Provide financial analysis and ensure fiscal responsibility.", ) - # Create BoardMember objects with roles and expertise - board_members = [ + return [ BoardMember( agent=chairman, role=BoardMemberRole.CHAIRMAN, voting_weight=2.0, - expertise_areas=["strategic_planning", "leadership", "governance", "business_strategy"] + expertise_areas=["leadership", "strategy"] ), BoardMember( agent=cto, role=BoardMemberRole.EXECUTIVE_DIRECTOR, voting_weight=1.5, - expertise_areas=["technology", "architecture", "innovation", "technical_strategy"] + expertise_areas=["technology", "innovation"] ), BoardMember( agent=cfo, role=BoardMemberRole.EXECUTIVE_DIRECTOR, voting_weight=1.5, - expertise_areas=["finance", "risk_management", "budgeting", "financial_analysis"] + expertise_areas=["finance", "risk_management"] ), ] - - print(f"āœ… Created {len(board_members)} custom board members") - for member in board_members: - print(f" - {member.agent.agent_name} ({member.role.value})") - - return board_members def create_worker_agents() -> List[Agent]: - """ - Create worker agents for the swarm. - - This function creates specialized worker agents that will be - managed by the Board of Directors. + """Create worker agents for the swarm.""" - Returns: - List[Agent]: List of worker agents - """ - print("šŸ› ļø Creating worker agents...") - - # Create specialized worker agents researcher = Agent( - agent_name="Research_Analyst", - agent_description="Research analyst specializing in market research and data analysis", + agent_name="Researcher", + agent_description="Research analyst for data analysis", model_name="gpt-4o-mini", max_loops=1, - system_prompt="""You are a Research Analyst. Your responsibilities include: -1. Conducting thorough research on assigned topics -2. Analyzing data and market trends -3. Preparing comprehensive research reports -4. Providing data-driven insights and recommendations -5. Maintaining high standards of research quality - -You should be analytical, thorough, and evidence-based in your work.""", + system_prompt="You are a Research Analyst. Conduct thorough research and provide data-driven insights.", ) developer = Agent( - agent_name="Software_Developer", - agent_description="Software developer with expertise in system design and implementation", + agent_name="Developer", + agent_description="Software developer for implementation", model_name="gpt-4o-mini", max_loops=1, - system_prompt="""You are a Software Developer. Your responsibilities include: -1. Designing and implementing software solutions -2. Writing clean, maintainable code -3. Conducting code reviews and testing -4. Collaborating with team members -5. Following best practices and coding standards - -You should be technically skilled, detail-oriented, and focused on quality.""", + system_prompt="You are a Software Developer. Design and implement software solutions.", ) marketer = Agent( - agent_name="Marketing_Specialist", - agent_description="Marketing specialist with expertise in digital marketing and brand strategy", + agent_name="Marketer", + agent_description="Marketing specialist for strategy", model_name="gpt-4o-mini", max_loops=1, - system_prompt="""You are a Marketing Specialist. Your responsibilities include: -1. Developing marketing strategies and campaigns -2. Creating compelling content and messaging -3. Analyzing market trends and customer behavior -4. Managing brand presence and reputation -5. Measuring and optimizing marketing performance - -You should be creative, strategic, and customer-focused in your approach.""", + system_prompt="You are a Marketing Specialist. Develop marketing strategies and campaigns.", ) - agents = [researcher, developer, marketer] - - print(f"āœ… Created {len(agents)} worker agents") - for agent in agents: - print(f" - {agent.agent_name}: {agent.agent_description}") - - return agents + return [researcher, developer, marketer] -def run_board_of_directors_example() -> None: - """ - Run a comprehensive Board of Directors example. +def run_board_example() -> None: + """Run a Board of Directors example.""" - This function demonstrates the complete workflow of using - the Board of Directors swarm to orchestrate tasks. - """ - print("\n" + "="*60) - print("šŸ›ļø BOARD OF DIRECTORS SWARM EXAMPLE") - print("="*60) + # Create board members and worker agents + board_members = create_board_members() + worker_agents = create_worker_agents() - try: - # Check if Board of Directors feature is enabled - if not is_board_feature_enabled(): - print("āš ļø Board of Directors feature is not enabled. Enabling now...") - enable_board_directors_feature() - - # Create custom board members - board_members = create_custom_board_members() - - # Create worker agents - worker_agents = create_worker_agents() - - # Create the Board of Directors swarm - print("\nšŸ›ļø Creating Board of Directors swarm...") - board_swarm = BoardOfDirectorsSwarm( - name="Executive_Board_Swarm", - description="Executive board with specialized roles for strategic decision-making", - board_members=board_members, - agents=worker_agents, - max_loops=2, - verbose=True, - decision_threshold=0.6, - enable_voting=True, - enable_consensus=True, - ) - - print("āœ… Board of Directors swarm created successfully!") - - # Display board summary - summary = board_swarm.get_board_summary() - print(f"\nšŸ“Š Board Summary:") - print(f" Board Name: {summary['board_name']}") - print(f" Total Members: {summary['total_members']}") - print(f" Total Agents: {summary['total_agents']}") - print(f" Max Loops: {summary['max_loops']}") - print(f" Decision Threshold: {summary['decision_threshold']}") - - print(f"\nšŸ‘„ Board Members:") - for member in summary['members']: - print(f" - {member['name']} ({member['role']}) - Weight: {member['voting_weight']}") - print(f" Expertise: {', '.join(member['expertise_areas'])}") - - # Define a complex task for the board to handle - task = """ - Develop a comprehensive strategy for launching a new AI-powered product in the market. - - The task involves: - 1. Market research and competitive analysis - 2. Technical architecture and development planning - 3. Marketing strategy and go-to-market plan - 4. Financial projections and risk assessment - - Please coordinate the efforts of all team members to create a cohesive strategy. - """ - - print(f"\nšŸ“‹ Executing task: {task.strip()[:100]}...") - - # Execute the task using the Board of Directors swarm - result = board_swarm.run(task=task) - - print("\nāœ… Task completed successfully!") - print(f"šŸ“„ Result type: {type(result)}") - - # Display conversation history - if hasattr(result, 'get') and callable(result.get): - conversation_history = result.get('conversation_history', []) - print(f"\nšŸ’¬ Conversation History ({len(conversation_history)} messages):") - for i, message in enumerate(conversation_history[-5:], 1): # Show last 5 messages - role = message.get('role', 'Unknown') - content = message.get('content', '')[:100] + "..." if len(message.get('content', '')) > 100 else message.get('content', '') - print(f" {i}. {role}: {content}") - else: - print(f"\nšŸ“ Result: {str(result)[:200]}...") - - print("\nšŸŽ‰ Board of Directors example completed successfully!") - - except Exception as e: - print(f"āŒ Error in Board of Directors example: {e}") - import traceback - traceback.print_exc() - - -def run_simple_board_example() -> None: - """ - Run a simple Board of Directors example with default settings. + # Create the Board of Directors swarm + board_swarm = BoardOfDirectorsSwarm( + name="Executive_Board", + board_members=board_members, + agents=worker_agents, + max_loops=2, + verbose=True, + decision_threshold=0.6, + ) - This function demonstrates a basic usage of the Board of Directors - swarm with minimal configuration. + # Define task + task = """ + Develop a strategy for launching a new AI-powered product in the market. + Include market research, technical planning, marketing strategy, and financial projections. """ - print("\n" + "="*60) - print("šŸ›ļø SIMPLE BOARD OF DIRECTORS EXAMPLE") - print("="*60) - try: - # Create simple worker agents - print("šŸ› ļø Creating simple worker agents...") - - analyst = Agent( - agent_name="Data_Analyst", - agent_description="Data analyst for processing and analyzing information", - model_name="gpt-4o-mini", - max_loops=1, - ) - - writer = Agent( - agent_name="Content_Writer", - agent_description="Content writer for creating reports and documentation", - model_name="gpt-4o-mini", - max_loops=1, - ) - - agents = [analyst, writer] - - # Create Board of Directors swarm with default settings - print("šŸ›ļø Creating Board of Directors swarm with default settings...") - board_swarm = BoardOfDirectorsSwarm( - name="Simple_Board_Swarm", - agents=agents, - verbose=True, - ) - - print("āœ… Simple Board of Directors swarm created!") - - # Simple task - task = "Analyze the current market trends and create a summary report with recommendations." - - print(f"\nšŸ“‹ Executing simple task: {task}") - - # Execute the task - result = board_swarm.run(task=task) - - print("\nāœ… Simple task completed successfully!") - print(f"šŸ“„ Result type: {type(result)}") - - if hasattr(result, 'get') and callable(result.get): - conversation_history = result.get('conversation_history', []) - print(f"\nšŸ’¬ Conversation History ({len(conversation_history)} messages):") - for i, message in enumerate(conversation_history[-3:], 1): # Show last 3 messages - role = message.get('role', 'Unknown') - content = message.get('content', '')[:80] + "..." if len(message.get('content', '')) > 80 else message.get('content', '') - print(f" {i}. {role}: {content}") - else: - print(f"\nšŸ“ Result: {str(result)[:150]}...") - - print("\nšŸŽ‰ Simple Board of Directors example completed!") - - except Exception as e: - print(f"āŒ Error in simple Board of Directors example: {e}") - import traceback - traceback.print_exc() + # Execute the task + result = board_swarm.run(task=task) + + print("Task completed successfully!") + print(f"Result: {result}") -def check_environment() -> bool: - """ - Check if the environment is properly set up for the example. +def run_simple_example() -> None: + """Run a simple Board of Directors example.""" - Returns: - bool: True if environment is ready, False otherwise - """ - # Check for OpenAI API key - if not os.getenv("OPENAI_API_KEY"): - print("āš ļø Warning: OPENAI_API_KEY environment variable not set.") - print(" The example may not work without a valid API key.") - print(" Please set your OpenAI API key: export OPENAI_API_KEY='your-key-here'") - return False + # Create simple agents + analyst = Agent( + agent_name="Analyst", + agent_description="Data analyst", + model_name="gpt-4o-mini", + max_loops=1, + ) - return True + writer = Agent( + agent_name="Writer", + agent_description="Content writer", + model_name="gpt-4o-mini", + max_loops=1, + ) + + # Create swarm with default settings + board_swarm = BoardOfDirectorsSwarm( + name="Simple_Board", + agents=[analyst, writer], + verbose=True, + ) + + # Execute simple task + task = "Analyze current market trends and create a summary report." + result = board_swarm.run(task=task) + + print("Simple example completed!") + print(f"Result: {result}") def main() -> None: - """ - Main function to run the Board of Directors examples. - """ - print("šŸš€ Board of Directors Swarm Examples") - print("="*50) + """Main function to run the examples.""" - # Check environment - if not check_environment(): - print("\nāš ļø Environment check failed. Please set up your environment properly.") + if not os.getenv("OPENAI_API_KEY"): + print("Warning: OPENAI_API_KEY not set. Example may not work.") return try: - # Run simple example first - run_simple_board_example() - - # Run comprehensive example - run_board_of_directors_example() + print("Running simple Board of Directors example...") + run_simple_example() - print("\n" + "="*60) - print("šŸŽ‰ All Board of Directors examples completed successfully!") - print("="*60) + print("\nRunning comprehensive Board of Directors example...") + run_board_example() - except KeyboardInterrupt: - print("\nāš ļø Examples interrupted by user.") except Exception as e: - print(f"\nāŒ Unexpected error: {e}") - import traceback - traceback.print_exc() + print(f"Error: {e}") if __name__ == "__main__": - main() \ No newline at end of file + main()