from dotenv import load_dotenv load_dotenv() from camel.models import ModelFactory from camel.toolkits import ( AudioAnalysisToolkit, CodeExecutionToolkit, DocumentProcessingToolkit, ExcelToolkit, ImageAnalysisToolkit, SearchToolkit, VideoAnalysisToolkit, WebToolkit, ) from camel.types import ModelPlatformType, ModelType from utils import OwlRolePlaying, run_society def construct_society(question: str) -> OwlRolePlaying: r"""Construct a society of agents based on the given question. Args: question (str): The task or question to be addressed by the society. Returns: OwlRolePlaying: A configured society of agents ready to address the question. """ # Create models for different components models = { "user": ModelFactory.create( model_platform=ModelPlatformType.OPENAI, model_type=ModelType.GPT_4O, model_config_dict={"temperature": 0}, ), "assistant": ModelFactory.create( model_platform=ModelPlatformType.OPENAI, model_type=ModelType.GPT_4O, model_config_dict={"temperature": 0}, ), "web": ModelFactory.create( model_platform=ModelPlatformType.OPENAI, model_type=ModelType.GPT_4O, model_config_dict={"temperature": 0}, ), "planning": ModelFactory.create( model_platform=ModelPlatformType.OPENAI, model_type=ModelType.GPT_4O, model_config_dict={"temperature": 0}, ), "video": ModelFactory.create( model_platform=ModelPlatformType.OPENAI, model_type=ModelType.GPT_4O, model_config_dict={"temperature": 0}, ), "image": ModelFactory.create( model_platform=ModelPlatformType.OPENAI, model_type=ModelType.GPT_4O, model_config_dict={"temperature": 0}, ), "search": ModelFactory.create( model_platform=ModelPlatformType.OPENAI, model_type=ModelType.GPT_4O, model_config_dict={"temperature": 0}, ), } # Configure toolkits tools = [ *WebToolkit( headless=False, # Set to True for headless mode (e.g., on remote servers) web_agent_model=models["web"], planning_agent_model=models["planning"], ).get_tools(), *DocumentProcessingToolkit().get_tools(), *VideoAnalysisToolkit(model=models["video"]).get_tools(), # This requires OpenAI Key *AudioAnalysisToolkit().get_tools(), # This requires OpenAI Key *CodeExecutionToolkit(sandbox="subprocess", verbose=True).get_tools(), *ImageAnalysisToolkit(model=models["image"]).get_tools(), *SearchToolkit(model=models["search"]).get_tools(), *ExcelToolkit().get_tools(), ] # Configure agent roles and parameters user_agent_kwargs = {"model": models["user"]} assistant_agent_kwargs = {"model": models["assistant"], "tools": tools} # Configure task parameters task_kwargs = { "task_prompt": question, "with_task_specify": False, } # Create and return the society society = OwlRolePlaying( **task_kwargs, user_role_name="user", user_agent_kwargs=user_agent_kwargs, assistant_role_name="assistant", assistant_agent_kwargs=assistant_agent_kwargs, ) return society def main(): r"""Main function to run the OWL system with an example question.""" # Example research question question = ( "What was the volume in m^3 of the fish bag that was calculated in " "the University of Leicester paper `Can Hiccup Supply Enough Fish " "to Maintain a Dragon's Diet?`" ) # Construct and run the society society = construct_society(question) answer, chat_history, token_count = run_society(society) # Output the result print(f"Answer: {answer}") if __name__ == "__main__": main()