# =========== Copyright 2023 @ CAMEL-AI.org. All Rights Reserved. =========== # Licensed under the Apache License, Version 2.0 (the “License”); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an “AS IS” BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # =========== Copyright 2023 @ CAMEL-AI.org. All Rights Reserved. =========== import argparse import logging import os import sys from camel.typing import ModelType root = os.path.dirname(__file__) sys.path.append(root) from chatdev.chat_chain import ChatChain def get_config(company): """ return configuration json files for ChatChain user can customize only parts of configuration json files, other files will be left for default Args: company: customized configuration name under CompanyConfig/ Returns: path to three configuration jsons: [config_path, config_phase_path, config_role_path] """ config_dir = os.path.join(root, "CompanyConfig", company) default_config_dir = os.path.join(root, "CompanyConfig", "Default") config_files = [ "ChatChainConfig.json", "PhaseConfig.json", "RoleConfig.json" ] config_paths = [] for config_file in config_files: company_config_path = os.path.join(config_dir, config_file) default_config_path = os.path.join(default_config_dir, config_file) if os.path.exists(company_config_path): config_paths.append(company_config_path) else: config_paths.append(default_config_path) return tuple(config_paths) def runchatdev(task, config): parser = argparse.ArgumentParser(description='argparse') parser.add_argument('--config', type=str, default="Default", help="Name of config, which is used to load configuration under CompanyConfig/") parser.add_argument('--org', type=str, default="Company", help="Name of organization, your software will be generated in WareHouse/name_org_timestamp") parser.add_argument('--task', type=str, default="Develop a basic Gomoku game.", help="Prompt of software") parser.add_argument('--name', type=str, default="Game", help="Name of software, your software will be generated in WareHouse/name_org_timestamp") parser.add_argument('--model', type=str, default="GPT_3_5_TURBO", help="GPT Model, choose from {'GPT_3_5_TURBO','GPT_4','GPT_4_32K'}") args = parser.parse_args() args.config = config args.task = task # Start ChatDev # ---------------------------------------- # Init ChatChain # ---------------------------------------- config_path, config_phase_path, config_role_path = get_config(args.config) args2type = {'GPT_3_5_TURBO': ModelType.GPT_3_5_TURBO, 'GPT_4': ModelType.GPT_4, 'GPT_4_32K': ModelType.GPT_4_32k} chat_chain = ChatChain(config_path=config_path, config_phase_path=config_phase_path, config_role_path=config_role_path, task_prompt=args.task, project_name=args.name, org_name=args.org, model_type=args2type[args.model]) # ---------------------------------------- # Init Log # ---------------------------------------- logging.basicConfig(filename=chat_chain.log_filepath, level=logging.DEBUG, format='[%(asctime)s %(levelname)s] %(message)s', datefmt='%Y-%d-%m %H:%M:%S', encoding="utf-8") # ---------------------------------------- # Pre Processing # ---------------------------------------- chat_chain.pre_processing() # ---------------------------------------- # Personnel Recruitment # ---------------------------------------- chat_chain.make_recruitment() # ---------------------------------------- # Chat Chain # ---------------------------------------- chat_chain.execute_chain() # ---------------------------------------- # Post Processing # ---------------------------------------- chat_chain.post_processing() if __name__ == "__main__": runchatdev()