Spaces:
Runtime error
Runtime error
# =========== 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() |