diff --git a/examples/run_ppio.py b/examples/run_ppio.py new file mode 100644 index 0000000..23c6734 --- /dev/null +++ b/examples/run_ppio.py @@ -0,0 +1,120 @@ +# ========= Copyright 2023-2024 @ 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-2024 @ CAMEL-AI.org. All Rights Reserved. ========= + + +# To run this file, you need to configure the PPIO API key +# You can obtain your API key from PPIO platform: https://ppinfra.com/settings/key-management?utm_source=github_owl +# Set it as PPIO_API_KEY="your-api-key" in your .env file or add it to your environment variables + +import sys +from dotenv import load_dotenv + +from camel.models import ModelFactory +from camel.toolkits import ( + ExcelToolkit, + SearchToolkit, + FileWriteToolkit, + CodeExecutionToolkit, +) +from camel.types import ModelPlatformType, ModelType +from camel.societies import RolePlaying +from camel.logger import set_log_level + +from owl.utils import run_society + +import pathlib + +set_log_level(level="DEBUG") + +base_dir = pathlib.Path(__file__).parent.parent +env_path = base_dir / "owl" / ".env" +load_dotenv(dotenv_path=str(env_path)) + + +def construct_society(question: str) -> RolePlaying: + 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: + RolePlaying: A configured society of agents ready to address the question. + """ + + # Create models for different components + models = { + "user": ModelFactory.create( + model_platform=ModelPlatformType.PPIO, + model_type=ModelType.PPIO_DEEPSEEK_V3_COMMUNITY, + model_config_dict={"temperature": 0}, + ), + "assistant": ModelFactory.create( + model_platform=ModelPlatformType.PPIO, + model_type=ModelType.PPIO_DEEPSEEK_V3_COMMUNITY, + model_config_dict={"temperature": 0}, + ), + } + + # Configure toolkits + tools = [ + *CodeExecutionToolkit(sandbox="subprocess", verbose=True).get_tools(), + SearchToolkit().search_duckduckgo, + SearchToolkit().search_wiki, + SearchToolkit().search_baidu, + *ExcelToolkit().get_tools(), + *FileWriteToolkit(output_dir="./").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 = RolePlaying( + **task_kwargs, + user_role_name="user", + user_agent_kwargs=user_agent_kwargs, + assistant_role_name="assistant", + assistant_agent_kwargs=assistant_agent_kwargs, + output_language="Chinese", + ) + + return society + + +def main(): + r"""Main function to run the OWL system with an example question.""" + # Example research question + default_task = "使用百度整理2023年1月1日到2023年12月31日,中国股市的涨跌情况。" + + # 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) + + answer, chat_history, token_count = run_society(society) + + # Output the result + print(f"\033[94mAnswer: {answer}\033[0m") + + +if __name__ == "__main__": + main() diff --git a/owl/.env_template b/owl/.env_template index 2565a75..24c428e 100644 --- a/owl/.env_template +++ b/owl/.env_template @@ -16,6 +16,9 @@ OPENAI_API_KEY='Your_Key' # DEEPSEEK_API_KEY='Your_Key' # DEEPSEEK_API_BASE_URL="" +# PPIO API (https://ppinfra.com/settings/key-management?utm_source=github_owl) +# PPIO_API_KEY="Your_Key" + # GROQ API (https://console.groq.com/) # GROQ_API_KEY='Your_Key' # GROQ_API_BASE_URL="" diff --git a/owl/webapp.py b/owl/webapp.py index 54687ec..1385f23 100644 --- a/owl/webapp.py +++ b/owl/webapp.py @@ -251,6 +251,7 @@ MODULE_DESCRIPTIONS = { "run_qwen_zh": "Using qwen model to process tasks", "run_azure_openai": "Using azure openai model to process tasks", "run_groq": "Using groq model to process tasks", + "run_ppio": "Using ppio model to process tasks", } @@ -626,6 +627,8 @@ def get_api_guide(key: str) -> str: return "https://help.aliyun.com/zh/model-studio/developer-reference/get-api-key" elif "deepseek" in key_lower: return "https://platform.deepseek.com/api_keys" + elif "ppio" in key_lower: + return "https://ppinfra.com/settings/key-management?utm_source=github_owl" elif "google" in key_lower: return "https://coda.io/@jon-dallas/google-image-search-pack-example/search-engine-id-and-google-api-key-3" elif "search_engine_id" in key_lower: diff --git a/owl/webapp_zh.py b/owl/webapp_zh.py index f3c72cc..5d82d51 100644 --- a/owl/webapp_zh.py +++ b/owl/webapp_zh.py @@ -251,6 +251,7 @@ MODULE_DESCRIPTIONS = { "run_qwen_zh": "使用qwen模型处理任务", "run_azure_openai": "使用azure openai模型处理任务", "run_groq": "使用groq模型处理任务", + "run_ppio": "使用ppio模型处理任务", } @@ -610,6 +611,8 @@ def get_api_guide(key: str) -> str: return "https://help.aliyun.com/zh/model-studio/developer-reference/get-api-key" elif "deepseek" in key_lower: return "https://platform.deepseek.com/api_keys" + elif "ppio" in key_lower: + return "https://ppinfra.com/settings/key-management?utm_source=github_owl" elif "google" in key_lower: return "https://coda.io/@jon-dallas/google-image-search-pack-example/search-engine-id-and-google-api-key-3" elif "search_engine_id" in key_lower: