diff --git a/examples/run_gemini.py b/examples/run_gemini.py index 19042cf..b8133bc 100644 --- a/examples/run_gemini.py +++ b/examples/run_gemini.py @@ -16,12 +16,10 @@ import pathlib from dotenv import load_dotenv from camel.models import ModelFactory from camel.toolkits import ( - AudioAnalysisToolkit, CodeExecutionToolkit, ExcelToolkit, ImageAnalysisToolkit, SearchToolkit, - VideoAnalysisToolkit, BrowserToolkit, FileWriteToolkit, ) diff --git a/examples/run_qwen_mini_zh.py b/examples/run_qwen_mini_zh.py index e7c7eec..bd9f1a5 100644 --- a/examples/run_qwen_mini_zh.py +++ b/examples/run_qwen_mini_zh.py @@ -16,18 +16,22 @@ # You can obtain your API key from Bailian platform: bailian.console.aliyun.com # Set it as QWEN_API_KEY="your-api-key" in your .env file or add it to your environment variables -from dotenv import load_dotenv import sys +from dotenv import load_dotenv from camel.models import ModelFactory -from camel.toolkits import BrowserToolkit, SearchToolkit, FileWriteToolkit +from camel.toolkits import ( + SearchToolkit, + BrowserToolkit, + FileWriteToolkit, +) from camel.types import ModelPlatformType, ModelType +from camel.societies import RolePlaying from owl.utils import run_society -from camel.societies import RolePlaying - from camel.logger import set_log_level + import pathlib base_dir = pathlib.Path(__file__).parent.parent @@ -38,61 +42,83 @@ set_log_level(level="DEBUG") def construct_society(question: str) -> RolePlaying: - r"""Construct the society based on the question.""" + """ + Construct a society of agents based on the given question. - user_role_name = "user" - assistant_role_name = "assistant" + Args: + question (str): The task or question to be addressed by the society. - user_model = ModelFactory.create( - model_platform=ModelPlatformType.QWEN, - model_type=ModelType.QWEN_MAX, - model_config_dict={"temperature": 0}, - ) + Returns: + RolePlaying: A configured society of agents ready to address the question. + """ - assistant_model = ModelFactory.create( - model_platform=ModelPlatformType.QWEN, - model_type=ModelType.QWEN_MAX, - model_config_dict={"temperature": 0}, - ) + # Create models for different components + models = { + "user": ModelFactory.create( + model_platform=ModelPlatformType.QWEN, + model_type=ModelType.QWEN_MAX, + model_config_dict={"temperature": 0}, + ), + "assistant": ModelFactory.create( + model_platform=ModelPlatformType.QWEN, + model_type=ModelType.QWEN_MAX, + model_config_dict={"temperature": 0}, + ), + "browsing": ModelFactory.create( + model_platform=ModelPlatformType.QWEN, + model_type=ModelType.QWEN_VL_MAX, + model_config_dict={"temperature": 0}, + ), + "planning": ModelFactory.create( + model_platform=ModelPlatformType.QWEN, + model_type=ModelType.QWEN_MAX, + model_config_dict={"temperature": 0}, + ), + "video": ModelFactory.create( + model_platform=ModelPlatformType.QWEN, + model_type=ModelType.QWEN_VL_MAX, + model_config_dict={"temperature": 0}, + ), + "image": ModelFactory.create( + model_platform=ModelPlatformType.QWEN, + model_type=ModelType.QWEN_VL_MAX, + model_config_dict={"temperature": 0}, + ), + "document": ModelFactory.create( + model_platform=ModelPlatformType.QWEN, + model_type=ModelType.QWEN_VL_MAX, + model_config_dict={"temperature": 0}, + ), + } - planning_model = ModelFactory.create( - model_platform=ModelPlatformType.QWEN, - model_type=ModelType.QWEN_MAX, - model_config_dict={"temperature": 0}, - ) - - web_model = ModelFactory.create( - model_platform=ModelPlatformType.QWEN, - model_type=ModelType.QWEN_VL_MAX, - model_config_dict={"temperature": 0}, - ) - - tools_list = [ + # Configure toolkits + tools = [ *BrowserToolkit( - headless=False, - web_agent_model=web_model, - planning_agent_model=planning_model, + headless=False, # Set to True for headless mode (e.g., on remote servers) + web_agent_model=models["browsing"], + planning_agent_model=models["planning"], output_language="Chinese", ).get_tools(), SearchToolkit().search_baidu, *FileWriteToolkit(output_dir="./").get_tools(), ] - user_role_name = "user" - user_agent_kwargs = dict(model=user_model) - assistant_role_name = "assistant" - assistant_agent_kwargs = dict(model=assistant_model, tools=tools_list) + # 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 = RolePlaying( **task_kwargs, - user_role_name=user_role_name, + user_role_name="user", user_agent_kwargs=user_agent_kwargs, - assistant_role_name=assistant_role_name, + assistant_role_name="assistant", assistant_agent_kwargs=assistant_agent_kwargs, output_language="Chinese", ) @@ -100,15 +126,21 @@ def construct_society(question: str) -> RolePlaying: return society -# Example case -default_task = "浏览亚马逊并找出一款对程序员有吸引力的产品。请提供产品名称和价格" +def main(): + r"""Main function to run the OWL system with an example question.""" + # Example research question + default_task = "浏览亚马逊并找出一款对程序员有吸引力的产品。请提供产品名称和价格" -# Override default task if command line argument is provided -task = sys.argv[1] if len(sys.argv) > 1 else default_task + # Override default task if command line argument is provided + task = sys.argv[1] if len(sys.argv) > 1 else default_task -# Construct and run the society -society = construct_society(task) + # Construct and run the society + society = construct_society(task) + answer, chat_history, token_count = run_society(society) -answer, chat_history, token_count = run_society(society) + # Output the result + print(f"\033[94mAnswer: {answer}\033[0m") -print(f"\033[94mAnswer: {answer}\033[0m") + +if __name__ == "__main__": + main() diff --git a/owl/webapp_jp.py b/owl/webapp_jp.py index 893dd81..643fa03 100644 --- a/owl/webapp_jp.py +++ b/owl/webapp_jp.py @@ -1,14 +1,15 @@ # ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. ========= -# Apache License 2.0(「ライセンス」)に基づいてライセンスされています。 -# あなたはライセンスに準拠している場合を除き、このファイルを使用できません。 -# ライセンスのコピーは以下から入手できます。 +# 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-2024 @ CAMEL-AI.org. All Rights Reserved. ========= # 正しいモジュールパスからインポート from utils import run_society @@ -333,13 +334,13 @@ def run_owl(question: str, example_module: str) -> Tuple[str, str, str]: try: # Ensure environment variables are loaded load_dotenv(find_dotenv(), override=True) - logging.info( - f"質問を処理中: '{question}', モジュール使用: {example_module}" - ) + logging.info(f"質問を処理中: '{question}', モジュール使用: {example_module}") # Check if the module is in MODULE_DESCRIPTIONS if example_module not in MODULE_DESCRIPTIONS: - logging.error(f"ユーザーがサポートされていないモジュールを選択しました: {example_module}") + logging.error( + f"ユーザーがサポートされていないモジュールを選択しました: {example_module}" + ) return ( f"選択されたモジュール '{example_module}' はサポートされていません", "0", @@ -385,7 +386,9 @@ def run_owl(question: str, example_module: str) -> Tuple[str, str, str]: society = module.construct_society(question) except Exception as e: - logging.error(f"社会シミュレーションの構築中にエラーが発生しました: {str(e)}") + logging.error( + f"社会シミュレーションの構築中にエラーが発生しました: {str(e)}" + ) return ( f"社会シミュレーションの構築中にエラーが発生しました: {str(e)}", "0", @@ -398,7 +401,9 @@ def run_owl(question: str, example_module: str) -> Tuple[str, str, str]: answer, chat_history, token_info = run_society(society) logging.info("社会シミュレーションが完了しました") except Exception as e: - logging.error(f"社会シミュレーションの実行中にエラーが発生しました: {str(e)}") + logging.error( + f"社会シミュレーションの実行中にエラーが発生しました: {str(e)}" + ) return ( f"社会シミュレーションの実行中にエラーが発生しました: {str(e)}", "0", @@ -424,9 +429,7 @@ def run_owl(question: str, example_module: str) -> Tuple[str, str, str]: ) except Exception as e: - logging.error( - f"質問の処理中に予期しないエラーが発生しました: {str(e)}" - ) + logging.error(f"質問の処理中に予期しないエラーが発生しました: {str(e)}") return (f"エラーが発生しました: {str(e)}", "0", f"❌ エラー: {str(e)}") @@ -668,9 +671,7 @@ def save_env_table_changes(data): str: 操作ステータス情報、HTML形式のステータスメッセージを含む """ try: - logging.info( - f"環境変数テーブルデータの処理を開始します、タイプ: {type(data)}" - ) + logging.info(f"環境変数テーブルデータの処理を開始します、タイプ: {type(data)}") # Get all current environment variables current_env_vars = load_env_vars() @@ -696,9 +697,7 @@ def save_env_table_changes(data): if ( key and str(key).strip() ): # If key name is not empty, add or update - logging.info( - f"環境変数の処理: {key} = {value}" - ) + logging.info(f"環境変数の処理: {key} = {value}") add_env_var(key, str(value)) processed_keys.add(key) # Process other formats @@ -751,7 +750,9 @@ def save_env_table_changes(data): import traceback error_details = traceback.format_exc() - logging.error(f"環境変数の保存中にエラーが発生しました: {str(e)}\n{error_details}") + logging.error( + f"環境変数の保存中にエラーが発生しました: {str(e)}\n{error_details}" + ) return f"❌ 保存に失敗しました: {str(e)}"