From ab9276e4450745b4c125c863dc2c53d74908fd73 Mon Sep 17 00:00:00 2001 From: emme1t <149944796+emme1t@users.noreply.github.com> Date: Sat, 19 Sep 2026 02:25:17 -0700 Subject: [PATCH] Fix full-rewrite code fences with CRLF and literal languages --- openevolve/utils/code_utils.py | 2 +- tests/test_code_utils.py | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/openevolve/utils/code_utils.py b/openevolve/utils/code_utils.py index cde6a971af..dc97b0cb7e 100644 --- a/openevolve/utils/code_utils.py +++ b/openevolve/utils/code_utils.py @@ -103,7 +103,7 @@ def parse_full_rewrite(llm_response: str, language: str = "python") -> Optional[ Returns: Extracted code or None if not found """ - code_block_pattern = r"```" + language + r"\n(.*?)```" + code_block_pattern = r"```" + re.escape(language) + r"\r?\n(.*?)```" matches = re.findall(code_block_pattern, llm_response, re.DOTALL) if matches: diff --git a/tests/test_code_utils.py b/tests/test_code_utils.py index 20f269b7a9..e9187ad245 100644 --- a/tests/test_code_utils.py +++ b/tests/test_code_utils.py @@ -9,12 +9,33 @@ apply_diff, extract_diffs, format_diff_summary, + parse_full_rewrite, ) class TestCodeUtils(unittest.TestCase): """Tests for code utilities""" + def test_parse_full_rewrite_line_endings(self): + for newline in ("\n", "\r\n"): + with self.subTest(newline=repr(newline)): + code = f"def solve():{newline} return 42" + response = f"Updated program:{newline}```python{newline}{code}{newline}```" + result = parse_full_rewrite(response) + self.assertEqual(result, code) + namespace = {} + exec(result, namespace) + self.assertEqual(namespace["solve"](), 42) + + def test_parse_full_rewrite_literal_language(self): + response = "```c\nint wrong;\n```\n```c++\nint correct;\n```" + self.assertEqual(parse_full_rewrite(response, "c++"), "int correct;") + + def test_parse_full_rewrite_fallbacks(self): + for response in ("```\nx = 1\n```", "x = 1"): + with self.subTest(response=response): + self.assertEqual(parse_full_rewrite(response), "x = 1") + def test_extract_diffs(self): """Test extracting diffs from a response""" diff_text = """