diff --git a/examples/spo/README.md b/examples/spo/README.md index 60e029713..e00215639 100644 --- a/examples/spo/README.md +++ b/examples/spo/README.md @@ -49,8 +49,8 @@ ### 3. Implement the Optimizer 🔧 Use `metagpt/ext/spo/optimize.py` to execute: ```python -from metagpt.ext.spo.scripts.optimizer import Optimizer -from metagpt.ext.spo.scripts.utils.llm_client import SPO_LLM +from metagpt.ext.spo.components.optimizer import Optimizer +from metagpt.ext.spo.utils.llm_client import SPO_LLM if __name__ == "__main__": # Initialize LLM settings @@ -62,12 +62,12 @@ ### 3. Implement the Optimizer 🔧 # Create and run optimizer optimizer = Optimizer( - optimized_path="workspace", # Output directory - initial_round=1, # Starting round - max_rounds=10, # Maximum optimization rounds - template="Poem.yaml", # Template file - name="Poem", # Project name - iteration=True, # Enable iteration mode + optimized_path="workspace", # Output directory + initial_round=1, # Starting round + max_rounds=10, # Maximum optimization rounds + template="Poem.yaml", # Template file + name="Poem", # Project name + iteration=True, # Enable iteration mode ) optimizer.optimize() diff --git a/examples/spo/optimize.py b/examples/spo/optimize.py index 796aa988d..d7fd26395 100644 --- a/examples/spo/optimize.py +++ b/examples/spo/optimize.py @@ -1,6 +1,6 @@ import argparse -from metagpt.ext.spo.scripts.optimizer import Optimizer -from metagpt.ext.spo.scripts.utils.llm_client import SPO_LLM +from metagpt.ext.spo.components.optimizer import Optimizer +from metagpt.ext.spo.utils.llm_client import SPO_LLM def parse_args(): diff --git a/metagpt/ext/spo/__init__.py b/metagpt/ext/spo/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/metagpt/ext/spo/scripts/evaluator.py b/metagpt/ext/spo/components/evaluator.py similarity index 92% rename from metagpt/ext/spo/scripts/evaluator.py rename to metagpt/ext/spo/components/evaluator.py index fdc5311d5..cca5159c0 100644 --- a/metagpt/ext/spo/scripts/evaluator.py +++ b/metagpt/ext/spo/components/evaluator.py @@ -3,12 +3,12 @@ # @Author : all # @Desc : Evaluation for different datasets import asyncio -from typing import Dict, Literal, Tuple, List, Any +from typing import Dict, Any -from metagpt.ext.spo.scripts.utils import load +from metagpt.ext.spo.utils import load from metagpt.ext.spo.prompts.evaluate_prompt import EVALUATE_PROMPT import random -from metagpt.ext.spo.scripts.utils.llm_client import SPO_LLM, extract_content +from metagpt.ext.spo.utils.llm_client import SPO_LLM, extract_content class QuickExecute: diff --git a/metagpt/ext/spo/scripts/optimizer.py b/metagpt/ext/spo/components/optimizer.py similarity index 87% rename from metagpt/ext/spo/scripts/optimizer.py rename to metagpt/ext/spo/components/optimizer.py index 1ece720da..301b5fd54 100644 --- a/metagpt/ext/spo/scripts/optimizer.py +++ b/metagpt/ext/spo/components/optimizer.py @@ -4,14 +4,13 @@ # @Desc : optimizer for prompt import asyncio -import time -from metagpt.ext.spo.scripts.utils.data_utils import DataUtils -from metagpt.ext.spo.scripts.utils.evaluation_utils import EvaluationUtils -from metagpt.ext.spo.scripts.utils.prompt_utils import PromptUtils +from metagpt.ext.spo.utils.data_utils import DataUtils +from metagpt.ext.spo.utils.evaluation_utils import EvaluationUtils +from metagpt.ext.spo.utils.prompt_utils import PromptUtils from metagpt.ext.spo.prompts.optimize_prompt import PROMPT_OPTIMIZE_PROMPT -from metagpt.ext.spo.scripts.utils import load +from metagpt.ext.spo.utils import load from metagpt.logs import logger -from metagpt.ext.spo.scripts.utils.llm_client import extract_content, SPO_LLM +from metagpt.ext.spo.utils.llm_client import extract_content, SPO_LLM @@ -45,15 +44,15 @@ class Optimizer: for opt_round in range(self.max_rounds): loop = asyncio.new_event_loop() asyncio.set_event_loop(loop) - score = loop.run_until_complete(self._optimize_prompt()) + prompt = loop.run_until_complete(self._optimize_prompt()) self.round += 1 - logger.info(f"Score for round {self.round}: {score}") + logger.info(f"Prompt generated in round {self.round}: {prompt}") else: loop = asyncio.new_event_loop() asyncio.set_event_loop(loop) - score = loop.run_until_complete(self._test_prompt()) - logger.info(f"Score for round {self.round}: {score}") + prompt = loop.run_until_complete(self._test_prompt()) + logger.info(f"Prompt generated in round {self.round}: {prompt}") async def _optimize_prompt(self): @@ -100,6 +99,7 @@ class Optimizer: logger.info(f"Modification of this round: {modification}") prompt = extract_content(response, "prompt") + if prompt: self.prompt = prompt else: @@ -117,7 +117,6 @@ class Optimizer: self.prompt_utils.write_answers(directory, answers=answers) - logger.info(prompt) logger.info(success) logger.info(f"now is {self.round + 1}") diff --git a/metagpt/ext/spo/optimize.py b/metagpt/ext/spo/optimize.py index 777374aaa..fa6d7e792 100644 --- a/metagpt/ext/spo/optimize.py +++ b/metagpt/ext/spo/optimize.py @@ -1,5 +1,5 @@ -from metagpt.ext.spo.scripts.optimizer import Optimizer -from metagpt.ext.spo.scripts.utils.llm_client import SPO_LLM +from metagpt.ext.spo.components.optimizer import Optimizer +from metagpt.ext.spo.utils.llm_client import SPO_LLM if __name__ == "__main__": diff --git a/metagpt/ext/spo/utils/__init__.py b/metagpt/ext/spo/utils/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/metagpt/ext/spo/scripts/utils/data_utils.py b/metagpt/ext/spo/utils/data_utils.py similarity index 100% rename from metagpt/ext/spo/scripts/utils/data_utils.py rename to metagpt/ext/spo/utils/data_utils.py diff --git a/metagpt/ext/spo/scripts/utils/evaluation_utils.py b/metagpt/ext/spo/utils/evaluation_utils.py similarity index 96% rename from metagpt/ext/spo/scripts/utils/evaluation_utils.py rename to metagpt/ext/spo/utils/evaluation_utils.py index 44c6bccc4..2e2dd8016 100644 --- a/metagpt/ext/spo/scripts/utils/evaluation_utils.py +++ b/metagpt/ext/spo/utils/evaluation_utils.py @@ -1,4 +1,4 @@ -from metagpt.ext.spo.scripts.evaluator import QuickEvaluate, QuickExecute +from metagpt.ext.spo.components.evaluator import QuickEvaluate, QuickExecute from metagpt.logs import logger import tiktoken diff --git a/metagpt/ext/spo/scripts/utils/llm_client.py b/metagpt/ext/spo/utils/llm_client.py similarity index 100% rename from metagpt/ext/spo/scripts/utils/llm_client.py rename to metagpt/ext/spo/utils/llm_client.py diff --git a/metagpt/ext/spo/scripts/utils/load.py b/metagpt/ext/spo/utils/load.py similarity index 100% rename from metagpt/ext/spo/scripts/utils/load.py rename to metagpt/ext/spo/utils/load.py diff --git a/metagpt/ext/spo/scripts/utils/prompt_utils.py b/metagpt/ext/spo/utils/prompt_utils.py similarity index 100% rename from metagpt/ext/spo/scripts/utils/prompt_utils.py rename to metagpt/ext/spo/utils/prompt_utils.py