From f32a11d609287a94b19ef541a9fd00f156dc485a Mon Sep 17 00:00:00 2001 From: Aseem Saxena Date: Wed, 12 Nov 2025 19:31:38 -0800 Subject: [PATCH 01/10] todo --- codeflash/lsp/features/perform_optimization.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/codeflash/lsp/features/perform_optimization.py b/codeflash/lsp/features/perform_optimization.py index cd5b36d8b..0322be9fa 100644 --- a/codeflash/lsp/features/perform_optimization.py +++ b/codeflash/lsp/features/perform_optimization.py @@ -108,6 +108,8 @@ def sync_perform_optimization(server: CodeflashLanguageServer, cancel_event: thr "status": "error", "message": f"No best optimizations found for function {function_to_optimize_qualified_name}", } + # generate optimization review here + # generate a patch for the optimization relative_file_paths = [code_string.file_path for code_string in code_context.read_writable_code.code_strings] speedup = original_code_baseline.runtime / best_optimization.runtime From ad4c7248e9b4f3a319f97b50286493f1c5644939 Mon Sep 17 00:00:00 2001 From: Aseem Saxena Date: Wed, 12 Nov 2025 20:21:19 -0800 Subject: [PATCH 02/10] should work --- codeflash/lsp/features/perform_optimization.py | 1 + codeflash/optimization/function_optimizer.py | 17 ++++++++++------- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/codeflash/lsp/features/perform_optimization.py b/codeflash/lsp/features/perform_optimization.py index 0322be9fa..3720e7cb3 100644 --- a/codeflash/lsp/features/perform_optimization.py +++ b/codeflash/lsp/features/perform_optimization.py @@ -136,4 +136,5 @@ def sync_perform_optimization(server: CodeflashLanguageServer, cancel_event: thr "patch_file": str(patch_path), "task_id": params.task_id, "explanation": best_optimization.explanation_v2, + "optimization_review": best_optimization.optimization_review, } diff --git a/codeflash/optimization/function_optimizer.py b/codeflash/optimization/function_optimizer.py index 387babf54..c7e041bbc 100644 --- a/codeflash/optimization/function_optimizer.py +++ b/codeflash/optimization/function_optimizer.py @@ -246,6 +246,7 @@ def __init__( self.executor = concurrent.futures.ThreadPoolExecutor( max_workers=n_tests + 3 if self.experiment_id is None else n_tests + 4 ) + self.optimization_review = "" def can_be_optimized(self) -> Result[tuple[bool, CodeOptimizationContext, dict[Path, str]], str]: should_run_experiment = self.experiment_id is not None @@ -1498,15 +1499,17 @@ def process_review( raise_pr = not self.args.no_pr staging_review = self.args.staging_review opt_review_response = "" + # this will now run regardless of pr, staging review flags + try: + opt_review_response = self.aiservice_client.get_optimization_review( + **data, calling_fn_details=function_references + ) + except Exception as e: + logger.debug(f"optimization review response failed, investigate {e}") + data["optimization_review"] = opt_review_response + self.optimization_review = opt_review_response if raise_pr or staging_review: data["root_dir"] = git_root_dir() - try: - opt_review_response = self.aiservice_client.get_optimization_review( - **data, calling_fn_details=function_references - ) - except Exception as e: - logger.debug(f"optimization review response failed, investigate {e}") - data["optimization_review"] = opt_review_response if raise_pr and not staging_review and opt_review_response != "low": data["git_remote"] = self.args.git_remote check_create_pr(**data) From c01acc3f3120e0f2bbaeedfac90d3ff2b5806cf6 Mon Sep 17 00:00:00 2001 From: Aseem Saxena Date: Wed, 12 Nov 2025 20:22:29 -0800 Subject: [PATCH 03/10] should work --- codeflash/lsp/features/perform_optimization.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/codeflash/lsp/features/perform_optimization.py b/codeflash/lsp/features/perform_optimization.py index 3720e7cb3..45c283506 100644 --- a/codeflash/lsp/features/perform_optimization.py +++ b/codeflash/lsp/features/perform_optimization.py @@ -136,5 +136,5 @@ def sync_perform_optimization(server: CodeflashLanguageServer, cancel_event: thr "patch_file": str(patch_path), "task_id": params.task_id, "explanation": best_optimization.explanation_v2, - "optimization_review": best_optimization.optimization_review, + "optimization_review": function_optimizer.optimization_review, } From 42b46373aecc6846694dee10787dc09b48a391b5 Mon Sep 17 00:00:00 2001 From: Aseem Saxena Date: Wed, 12 Nov 2025 20:23:51 -0800 Subject: [PATCH 04/10] Apply suggestion from @aseembits93 --- codeflash/lsp/features/perform_optimization.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/codeflash/lsp/features/perform_optimization.py b/codeflash/lsp/features/perform_optimization.py index 45c283506..3fce87bf2 100644 --- a/codeflash/lsp/features/perform_optimization.py +++ b/codeflash/lsp/features/perform_optimization.py @@ -108,8 +108,6 @@ def sync_perform_optimization(server: CodeflashLanguageServer, cancel_event: thr "status": "error", "message": f"No best optimizations found for function {function_to_optimize_qualified_name}", } - # generate optimization review here - # generate a patch for the optimization relative_file_paths = [code_string.file_path for code_string in code_context.read_writable_code.code_strings] speedup = original_code_baseline.runtime / best_optimization.runtime From 035992391179c6b07f50a6be1ff756002f6132e8 Mon Sep 17 00:00:00 2001 From: Aseem Saxena Date: Thu, 13 Nov 2025 16:25:50 -0800 Subject: [PATCH 05/10] bugfix --- codeflash/api/aiservice.py | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/codeflash/api/aiservice.py b/codeflash/api/aiservice.py index d206a00b6..c3e645412 100644 --- a/codeflash/api/aiservice.py +++ b/codeflash/api/aiservice.py @@ -557,7 +557,6 @@ def get_optimization_review( function_trace_id: str, coverage_message: str, replay_tests: str, - root_dir: Path, concolic_tests: str, # noqa: ARG002 calling_fn_details: str, ) -> str: @@ -583,18 +582,13 @@ def get_optimization_review( """ diff_str = "\n".join( [ - unified_diff_strings( - code1=original_code[p], - code2=new_code[p], - fromfile=Path(p).relative_to(root_dir).as_posix(), - tofile=Path(p).relative_to(root_dir).as_posix(), - ) + unified_diff_strings(code1=original_code[p], code2=new_code[p], fromfile=Path(p), tofile=Path(p)) for p in original_code if not is_zero_diff(original_code[p], new_code[p]) ] ) code_diff = f"```diff\n{diff_str}\n```" - logger.info("!lsp|Computing Optimization Review…") + logger.info("!lsp|Reviewing Optimization…") payload = { "code_diff": code_diff, "explanation": explanation.raw_explanation_message, From 067a200e8c5d287834b8e55ba5179547bebec266 Mon Sep 17 00:00:00 2001 From: Aseem Saxena Date: Thu, 13 Nov 2025 16:28:57 -0800 Subject: [PATCH 06/10] bugfix --- codeflash/api/aiservice.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/codeflash/api/aiservice.py b/codeflash/api/aiservice.py index c3e645412..24cf8fffb 100644 --- a/codeflash/api/aiservice.py +++ b/codeflash/api/aiservice.py @@ -582,7 +582,9 @@ def get_optimization_review( """ diff_str = "\n".join( [ - unified_diff_strings(code1=original_code[p], code2=new_code[p], fromfile=Path(p), tofile=Path(p)) + unified_diff_strings( + code1=original_code[p], code2=new_code[p], fromfile=Path(p).as_posix(), tofile=Path(p).as_posix() + ) for p in original_code if not is_zero_diff(original_code[p], new_code[p]) ] From 2f32439f849d29e1665a495b13aeb4d2865e86a9 Mon Sep 17 00:00:00 2001 From: Aseem Saxena Date: Thu, 13 Nov 2025 16:42:32 -0800 Subject: [PATCH 07/10] bugfix --- codeflash/api/aiservice.py | 7 ++++++- codeflash/optimization/function_optimizer.py | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/codeflash/api/aiservice.py b/codeflash/api/aiservice.py index 24cf8fffb..16c24b750 100644 --- a/codeflash/api/aiservice.py +++ b/codeflash/api/aiservice.py @@ -559,6 +559,7 @@ def get_optimization_review( replay_tests: str, concolic_tests: str, # noqa: ARG002 calling_fn_details: str, + project_root_dir: Path, ) -> str: """Compute the optimization review of current Pull Request. @@ -574,6 +575,7 @@ def get_optimization_review( root_dir: Path -> path of git directory concolic_tests: str -> concolic_tests (not used) calling_fn_details: str -> filenames and definitions of functions which call the function_to_optimize + project_root_dir: Path -> root dir of the project to calculate relative paths Returns: ------- @@ -583,7 +585,10 @@ def get_optimization_review( diff_str = "\n".join( [ unified_diff_strings( - code1=original_code[p], code2=new_code[p], fromfile=Path(p).as_posix(), tofile=Path(p).as_posix() + code1=original_code[p], + code2=new_code[p], + fromfile=Path(p).relative_to(project_root_dir).as_posix(), + tofile=Path(p).relative_to(project_root_dir).as_posix(), ) for p in original_code if not is_zero_diff(original_code[p], new_code[p]) diff --git a/codeflash/optimization/function_optimizer.py b/codeflash/optimization/function_optimizer.py index 6481e1e40..8da9321a0 100644 --- a/codeflash/optimization/function_optimizer.py +++ b/codeflash/optimization/function_optimizer.py @@ -1506,7 +1506,7 @@ def process_review( # this will now run regardless of pr, staging review flags try: opt_review_response = self.aiservice_client.get_optimization_review( - **data, calling_fn_details=function_references + **data, calling_fn_details=function_references, project_root_dir=self.project_root ) except Exception as e: logger.debug(f"optimization review response failed, investigate {e}") From 9502f5931a00badc432b0433466047a51073ca8c Mon Sep 17 00:00:00 2001 From: Aseem Saxena Date: Thu, 13 Nov 2025 23:28:47 -0800 Subject: [PATCH 08/10] should work now --- codeflash/lsp/features/perform_optimization.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/codeflash/lsp/features/perform_optimization.py b/codeflash/lsp/features/perform_optimization.py index 3fce87bf2..6e2329c25 100644 --- a/codeflash/lsp/features/perform_optimization.py +++ b/codeflash/lsp/features/perform_optimization.py @@ -134,5 +134,5 @@ def sync_perform_optimization(server: CodeflashLanguageServer, cancel_event: thr "patch_file": str(patch_path), "task_id": params.task_id, "explanation": best_optimization.explanation_v2, - "optimization_review": function_optimizer.optimization_review, + "optimizationReview": function_optimizer.optimization_review, } From 417581e33f971de07b6ece3b0df479decbe4a214 Mon Sep 17 00:00:00 2001 From: Codeflash Bot Date: Fri, 14 Nov 2025 15:35:48 -0800 Subject: [PATCH 09/10] minor bug fix --- codeflash/api/aiservice.py | 13 ++++--------- codeflash/lsp/features/perform_optimization.py | 2 +- codeflash/optimization/function_optimizer.py | 2 +- 3 files changed, 6 insertions(+), 11 deletions(-) diff --git a/codeflash/api/aiservice.py b/codeflash/api/aiservice.py index 16c24b750..6e080bfde 100644 --- a/codeflash/api/aiservice.py +++ b/codeflash/api/aiservice.py @@ -4,7 +4,6 @@ import os import platform import time -from pathlib import Path from typing import TYPE_CHECKING, Any, cast import requests @@ -24,6 +23,8 @@ from codeflash.version import __version__ as codeflash_version if TYPE_CHECKING: + from pathlib import Path + from codeflash.discovery.functions_to_optimize import FunctionToOptimize from codeflash.models.ExperimentMetadata import ExperimentMetadata from codeflash.models.models import AIServiceRefinerRequest @@ -559,7 +560,6 @@ def get_optimization_review( replay_tests: str, concolic_tests: str, # noqa: ARG002 calling_fn_details: str, - project_root_dir: Path, ) -> str: """Compute the optimization review of current Pull Request. @@ -584,18 +584,13 @@ def get_optimization_review( """ diff_str = "\n".join( [ - unified_diff_strings( - code1=original_code[p], - code2=new_code[p], - fromfile=Path(p).relative_to(project_root_dir).as_posix(), - tofile=Path(p).relative_to(project_root_dir).as_posix(), - ) + unified_diff_strings(code1=original_code[p], code2=new_code[p]) for p in original_code if not is_zero_diff(original_code[p], new_code[p]) ] ) code_diff = f"```diff\n{diff_str}\n```" - logger.info("!lsp|Reviewing Optimization…") + logger.info("loading|Reviewing Optimization…") payload = { "code_diff": code_diff, "explanation": explanation.raw_explanation_message, diff --git a/codeflash/lsp/features/perform_optimization.py b/codeflash/lsp/features/perform_optimization.py index 6e2329c25..9825c5802 100644 --- a/codeflash/lsp/features/perform_optimization.py +++ b/codeflash/lsp/features/perform_optimization.py @@ -134,5 +134,5 @@ def sync_perform_optimization(server: CodeflashLanguageServer, cancel_event: thr "patch_file": str(patch_path), "task_id": params.task_id, "explanation": best_optimization.explanation_v2, - "optimizationReview": function_optimizer.optimization_review, + "optimizationReview": function_optimizer.optimization_review.capitalize(), } diff --git a/codeflash/optimization/function_optimizer.py b/codeflash/optimization/function_optimizer.py index 8da9321a0..6481e1e40 100644 --- a/codeflash/optimization/function_optimizer.py +++ b/codeflash/optimization/function_optimizer.py @@ -1506,7 +1506,7 @@ def process_review( # this will now run regardless of pr, staging review flags try: opt_review_response = self.aiservice_client.get_optimization_review( - **data, calling_fn_details=function_references, project_root_dir=self.project_root + **data, calling_fn_details=function_references ) except Exception as e: logger.debug(f"optimization review response failed, investigate {e}") From d69fc2a123a3cb72367cb7edd1b5d552530d37e7 Mon Sep 17 00:00:00 2001 From: Codeflash Bot Date: Fri, 14 Nov 2025 18:28:07 -0800 Subject: [PATCH 10/10] docstring fix --- codeflash/api/aiservice.py | 1 - 1 file changed, 1 deletion(-) diff --git a/codeflash/api/aiservice.py b/codeflash/api/aiservice.py index 6e080bfde..20c478eb4 100644 --- a/codeflash/api/aiservice.py +++ b/codeflash/api/aiservice.py @@ -575,7 +575,6 @@ def get_optimization_review( root_dir: Path -> path of git directory concolic_tests: str -> concolic_tests (not used) calling_fn_details: str -> filenames and definitions of functions which call the function_to_optimize - project_root_dir: Path -> root dir of the project to calculate relative paths Returns: -------