diff --git a/metagpt/actions/execute_code.py b/metagpt/actions/execute_code.py index 1d20bf3f6..36e01ed0e 100644 --- a/metagpt/actions/execute_code.py +++ b/metagpt/actions/execute_code.py @@ -186,14 +186,13 @@ class ExecutePyCode(ExecuteCode, Action): def truncate(result: str, keep_len: int = 2000) -> str: desc = f"Truncated to show only the last {keep_len} characters\n" if result.startswith(desc): - result = result[-len(desc) :] + result = result[len(desc) :] if len(result) > keep_len: result = result[-keep_len:] - - if not result.startswith(desc): return desc + result - return desc + + return result def remove_escape_and_color_codes(input_str): diff --git a/tests/metagpt/actions/test_execute_code.py b/tests/metagpt/actions/test_execute_code.py index 73b5886dc..95f883e12 100644 --- a/tests/metagpt/actions/test_execute_code.py +++ b/tests/metagpt/actions/test_execute_code.py @@ -1,6 +1,6 @@ import pytest -from metagpt.actions.execute_code import ExecutePyCode +from metagpt.actions.execute_code import ExecutePyCode, truncate from metagpt.schema import Message @@ -81,3 +81,10 @@ async def test_plotting_bug(): pi = ExecutePyCode() output = await pi.run(code) assert output[1] is True + + +def test_truncate(): + output = "hello world" + assert truncate(output) == output + output = "hello world" + assert truncate(output, 5) == "Truncated to show only the last 5 characters\nworld"