From 2b3a4e06cce987e94d9687c9f22ae650de1a1489 Mon Sep 17 00:00:00 2001 From: geekan Date: Wed, 10 Jan 2024 16:24:21 +0800 Subject: [PATCH] refine code --- metagpt/actions/debug_error.py | 8 ++++---- metagpt/actions/run_code.py | 24 ++++++++++++------------ metagpt/actions/summarize_code.py | 6 +++--- metagpt/actions/write_code.py | 6 +++--- metagpt/actions/write_code_review.py | 28 ++++++++++++++-------------- metagpt/actions/write_test.py | 16 ++++++++-------- 6 files changed, 44 insertions(+), 44 deletions(-) diff --git a/metagpt/actions/debug_error.py b/metagpt/actions/debug_error.py index 3647640c0..bb57e1927 100644 --- a/metagpt/actions/debug_error.py +++ b/metagpt/actions/debug_error.py @@ -51,7 +51,7 @@ class DebugError(Action): async def run(self, *args, **kwargs) -> str: output_doc = await self.file_repo.get_file( - filename=self.context.output_filename, relative_path=TEST_OUTPUTS_FILE_REPO + filename=self.i_context.output_filename, relative_path=TEST_OUTPUTS_FILE_REPO ) if not output_doc: return "" @@ -61,14 +61,14 @@ class DebugError(Action): if matches: return "" - logger.info(f"Debug and rewrite {self.context.test_filename}") + logger.info(f"Debug and rewrite {self.i_context.test_filename}") code_doc = await self.file_repo.get_file( - filename=self.context.code_filename, relative_path=self.context.src_workspace + filename=self.i_context.code_filename, relative_path=self.i_context.src_workspace ) if not code_doc: return "" test_doc = await self.file_repo.get_file( - filename=self.context.test_filename, relative_path=TEST_CODES_FILE_REPO + filename=self.i_context.test_filename, relative_path=TEST_CODES_FILE_REPO ) if not test_doc: return "" diff --git a/metagpt/actions/run_code.py b/metagpt/actions/run_code.py index 8fdda0a0d..072ee8f22 100644 --- a/metagpt/actions/run_code.py +++ b/metagpt/actions/run_code.py @@ -117,25 +117,25 @@ class RunCode(Action): return stdout.decode("utf-8"), stderr.decode("utf-8") async def run(self, *args, **kwargs) -> RunCodeResult: - logger.info(f"Running {' '.join(self.context.command)}") - if self.context.mode == "script": + logger.info(f"Running {' '.join(self.i_context.command)}") + if self.i_context.mode == "script": outs, errs = await self.run_script( - command=self.context.command, - working_directory=self.context.working_directory, - additional_python_paths=self.context.additional_python_paths, + command=self.i_context.command, + working_directory=self.i_context.working_directory, + additional_python_paths=self.i_context.additional_python_paths, ) - elif self.context.mode == "text": - outs, errs = await self.run_text(code=self.context.code) + elif self.i_context.mode == "text": + outs, errs = await self.run_text(code=self.i_context.code) logger.info(f"{outs=}") logger.info(f"{errs=}") context = CONTEXT.format( - code=self.context.code, - code_file_name=self.context.code_filename, - test_code=self.context.test_code, - test_file_name=self.context.test_filename, - command=" ".join(self.context.command), + code=self.i_context.code, + code_file_name=self.i_context.code_filename, + test_code=self.i_context.test_code, + test_file_name=self.i_context.test_filename, + command=" ".join(self.i_context.command), outs=outs[:500], # outs might be long but they are not important, truncate them to avoid token overflow errs=errs[:10000], # truncate errors to avoid token overflow ) diff --git a/metagpt/actions/summarize_code.py b/metagpt/actions/summarize_code.py index 690d5c77b..dde41d3c6 100644 --- a/metagpt/actions/summarize_code.py +++ b/metagpt/actions/summarize_code.py @@ -98,14 +98,14 @@ class SummarizeCode(Action): return code_rsp async def run(self): - design_pathname = Path(self.context.design_filename) + design_pathname = Path(self.i_context.design_filename) repo = self.file_repo design_doc = await repo.get_file(filename=design_pathname.name, relative_path=SYSTEM_DESIGN_FILE_REPO) - task_pathname = Path(self.context.task_filename) + task_pathname = Path(self.i_context.task_filename) task_doc = await repo.get_file(filename=task_pathname.name, relative_path=TASK_FILE_REPO) src_file_repo = self.git_repo.new_file_repository(relative_path=self.context.src_workspace) code_blocks = [] - for filename in self.context.codes_filenames: + for filename in self.i_context.codes_filenames: code_doc = await src_file_repo.get(filename) code_block = f"```python\n{code_doc.content}\n```\n-----" code_blocks.append(code_block) diff --git a/metagpt/actions/write_code.py b/metagpt/actions/write_code.py index 1aa76b67e..62de34ef4 100644 --- a/metagpt/actions/write_code.py +++ b/metagpt/actions/write_code.py @@ -114,7 +114,7 @@ class WriteCode(Action): else: code_context = await self.get_codes( coding_context.task_doc, - exclude=self.context.filename, + exclude=self.i_context.filename, git_repo=self.git_repo, src_workspace=self.context.src_workspace, ) @@ -125,14 +125,14 @@ class WriteCode(Action): code=code_context, logs=logs, feedback=bug_feedback.content if bug_feedback else "", - filename=self.context.filename, + filename=self.i_context.filename, summary_log=summary_doc.content if summary_doc else "", ) logger.info(f"Writing {coding_context.filename}..") code = await self.write_code(prompt) if not coding_context.code_doc: # avoid root_path pydantic ValidationError if use WriteCode alone - root_path = self.context.src_workspace if self.context.src_workspace else "" + root_path = self.i_context.src_workspace if self.i_context.src_workspace else "" coding_context.code_doc = Document(filename=coding_context.filename, root_path=str(root_path)) coding_context.code_doc.content = code return coding_context diff --git a/metagpt/actions/write_code_review.py b/metagpt/actions/write_code_review.py index 6ff9d5aa4..b25f1ab69 100644 --- a/metagpt/actions/write_code_review.py +++ b/metagpt/actions/write_code_review.py @@ -135,20 +135,20 @@ class WriteCodeReview(Action): return result, code async def run(self, *args, **kwargs) -> CodingContext: - iterative_code = self.context.code_doc.content + iterative_code = self.i_context.code_doc.content k = self.context.config.code_review_k_times or 1 for i in range(k): - format_example = FORMAT_EXAMPLE.format(filename=self.context.code_doc.filename) - task_content = self.context.task_doc.content if self.context.task_doc else "" + format_example = FORMAT_EXAMPLE.format(filename=self.i_context.code_doc.filename) + task_content = self.i_context.task_doc.content if self.i_context.task_doc else "" code_context = await WriteCode.get_codes( - self.context.task_doc, - exclude=self.context.filename, + self.i_context.task_doc, + exclude=self.i_context.filename, git_repo=self.context.git_repo, src_workspace=self.src_workspace, ) context = "\n".join( [ - "## System Design\n" + str(self.context.design_doc) + "\n", + "## System Design\n" + str(self.i_context.design_doc) + "\n", "## Tasks\n" + task_content + "\n", "## Code Files\n" + code_context + "\n", ] @@ -156,25 +156,25 @@ class WriteCodeReview(Action): context_prompt = PROMPT_TEMPLATE.format( context=context, code=iterative_code, - filename=self.context.code_doc.filename, + filename=self.i_context.code_doc.filename, ) cr_prompt = EXAMPLE_AND_INSTRUCTION.format( format_example=format_example, ) logger.info( - f"Code review and rewrite {self.context.code_doc.filename}: {i + 1}/{k} | {len(iterative_code)=}, " - f"{len(self.context.code_doc.content)=}" + f"Code review and rewrite {self.i_context.code_doc.filename}: {i + 1}/{k} | {len(iterative_code)=}, " + f"{len(self.i_context.code_doc.content)=}" ) result, rewrited_code = await self.write_code_review_and_rewrite( - context_prompt, cr_prompt, self.context.code_doc.filename + context_prompt, cr_prompt, self.i_context.code_doc.filename ) if "LBTM" in result: iterative_code = rewrited_code elif "LGTM" in result: - self.context.code_doc.content = iterative_code - return self.context + self.i_context.code_doc.content = iterative_code + return self.i_context # code_rsp = await self._aask_v1(prompt, "code_rsp", OUTPUT_MAPPING) # self._save(context, filename, code) # 如果rewrited_code是None(原code perfect),那么直接返回code - self.context.code_doc.content = iterative_code - return self.context + self.i_context.code_doc.content = iterative_code + return self.i_context diff --git a/metagpt/actions/write_test.py b/metagpt/actions/write_test.py index 38b1cf03c..978fa20a6 100644 --- a/metagpt/actions/write_test.py +++ b/metagpt/actions/write_test.py @@ -55,16 +55,16 @@ class WriteTest(Action): return code async def run(self, *args, **kwargs) -> TestingContext: - if not self.context.test_doc: - self.context.test_doc = Document( - filename="test_" + self.context.code_doc.filename, root_path=TEST_CODES_FILE_REPO + if not self.i_context.test_doc: + self.i_context.test_doc = Document( + filename="test_" + self.i_context.code_doc.filename, root_path=TEST_CODES_FILE_REPO ) fake_root = "/data" prompt = PROMPT_TEMPLATE.format( - code_to_test=self.context.code_doc.content, - test_file_name=self.context.test_doc.filename, - source_file_path=fake_root + "/" + self.context.code_doc.root_relative_path, + code_to_test=self.i_context.code_doc.content, + test_file_name=self.i_context.test_doc.filename, + source_file_path=fake_root + "/" + self.i_context.code_doc.root_relative_path, workspace=fake_root, ) - self.context.test_doc.content = await self.write_code(prompt) - return self.context + self.i_context.test_doc.content = await self.write_code(prompt) + return self.i_context