Skip to content

Commit 7566a6f

Browse files
Merge pull request #668 from codeflash-ai/fix/explanation-print
[FIX] log final explanation
2 parents fbb4bbe + c4e15cf commit 7566a6f

File tree

3 files changed

+5
-72
lines changed

3 files changed

+5
-72
lines changed

codeflash/lsp/beta.py

Lines changed: 1 addition & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,10 @@
1414
from codeflash.discovery.functions_to_optimize import filter_functions, get_functions_within_git_diff
1515
from codeflash.either import is_successful
1616
from codeflash.lsp.server import CodeflashLanguageServer, CodeflashLanguageServerProtocol
17-
from codeflash.result.explanation import Explanation
1817

1918
if TYPE_CHECKING:
2019
from lsprotocol import types
2120

22-
from codeflash.models.models import GeneratedTestsList, OptimizationSet
23-
2421

2522
@dataclass
2623
class OptimizableFunctionsParams:
@@ -179,67 +176,6 @@ def provide_api_key(server: CodeflashLanguageServer, params: ProvideApiKeyParams
179176
return {"status": "error", "message": "something went wrong while saving the api key"}
180177

181178

182-
@server.feature("prepareOptimization")
183-
def prepare_optimization(server: CodeflashLanguageServer, params: FunctionOptimizationParams) -> dict[str, str]:
184-
current_function = server.optimizer.current_function_being_optimized
185-
186-
module_prep_result = server.optimizer.prepare_module_for_optimization(current_function.file_path)
187-
validated_original_code, original_module_ast = module_prep_result
188-
189-
function_optimizer = server.optimizer.create_function_optimizer(
190-
current_function,
191-
function_to_optimize_source_code=validated_original_code[current_function.file_path].source_code,
192-
original_module_ast=original_module_ast,
193-
original_module_path=current_function.file_path,
194-
)
195-
196-
server.optimizer.current_function_optimizer = function_optimizer
197-
if not function_optimizer:
198-
return {"functionName": params.functionName, "status": "error", "message": "No function optimizer found"}
199-
200-
initialization_result = function_optimizer.can_be_optimized()
201-
if not is_successful(initialization_result):
202-
return {"functionName": params.functionName, "status": "error", "message": initialization_result.failure()}
203-
204-
return {"functionName": params.functionName, "status": "success", "message": "Optimization preparation completed"}
205-
206-
207-
@server.feature("generateTests")
208-
def generate_tests(server: CodeflashLanguageServer, params: FunctionOptimizationParams) -> dict[str, str]:
209-
function_optimizer = server.optimizer.current_function_optimizer
210-
if not function_optimizer:
211-
return {"functionName": params.functionName, "status": "error", "message": "No function optimizer found"}
212-
213-
initialization_result = function_optimizer.can_be_optimized()
214-
if not is_successful(initialization_result):
215-
return {"functionName": params.functionName, "status": "error", "message": initialization_result.failure()}
216-
217-
should_run_experiment, code_context, original_helper_code = initialization_result.unwrap()
218-
219-
test_setup_result = function_optimizer.generate_and_instrument_tests(
220-
code_context, should_run_experiment=should_run_experiment
221-
)
222-
if not is_successful(test_setup_result):
223-
return {"functionName": params.functionName, "status": "error", "message": test_setup_result.failure()}
224-
generated_tests_list: GeneratedTestsList
225-
optimizations_set: OptimizationSet
226-
generated_tests_list, _, concolic__test_str, optimizations_set = test_setup_result.unwrap()
227-
228-
generated_tests: list[str] = [
229-
generated_test.generated_original_test_source for generated_test in generated_tests_list.generated_tests
230-
]
231-
optimizations_dict = {
232-
candidate.optimization_id: {"source_code": candidate.source_code.markdown, "explanation": candidate.explanation}
233-
for candidate in optimizations_set.control + optimizations_set.experiment
234-
}
235-
236-
return {
237-
"functionName": params.functionName,
238-
"status": "success",
239-
"message": {"generated_tests": generated_tests, "optimizations": optimizations_dict},
240-
}
241-
242-
243179
@server.feature("performFunctionOptimization")
244180
def perform_function_optimization( # noqa: PLR0911
245181
server: CodeflashLanguageServer, params: FunctionOptimizationParams
@@ -351,16 +287,14 @@ def perform_function_optimization( # noqa: PLR0911
351287

352288
server.show_message_log(f"Optimization completed for {params.functionName} with {speedup:.2f}x speedup", "Info")
353289

354-
explanation = best_optimization.candidate.explanation
355-
explanation_str = explanation.explanation_message() if isinstance(explanation, Explanation) else explanation
356290
return {
357291
"functionName": params.functionName,
358292
"status": "success",
359293
"message": "Optimization completed successfully",
360294
"extra": f"Speedup: {speedup:.2f}x faster",
361295
"optimization": optimized_source,
362296
"patch_file": str(patch_file),
363-
"explanation": explanation_str,
297+
"explanation": best_optimization.explanation_v2,
364298
}
365299
finally:
366300
cleanup_the_optimizer(server)

codeflash/models/models.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ def __hash__(self) -> int:
9191

9292
class BestOptimization(BaseModel):
9393
candidate: OptimizedCandidate
94+
explanation_v2: Optional[str] = None
9495
helper_functions: list[FunctionSource]
9596
code_context: CodeOptimizationContext
9697
runtime: int
@@ -343,7 +344,7 @@ class TestsInFile:
343344
test_type: TestType
344345

345346

346-
@dataclass
347+
@dataclass(frozen=True)
347348
class OptimizedCandidate:
348349
source_code: CodeStringsMarkdown
349350
explanation: str

codeflash/optimization/function_optimizer.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1158,7 +1158,6 @@ def find_and_process_best_optimization(
11581158
original_helper_code,
11591159
code_context,
11601160
)
1161-
self.log_successful_optimization(explanation, generated_tests, exp_type)
11621161
return best_optimization
11631162

11641163
def process_review(
@@ -1232,10 +1231,9 @@ def process_review(
12321231
file_path=explanation.file_path,
12331232
benchmark_details=explanation.benchmark_details,
12341233
)
1234+
self.log_successful_optimization(new_explanation, generated_tests, exp_type)
12351235

1236-
best_optimization.candidate.explanation = new_explanation
1237-
1238-
console.print(Panel(new_explanation_raw_str, title="Best Candidate Explanation", border_style="blue"))
1236+
best_optimization.explanation_v2 = new_explanation.explanation_message()
12391237

12401238
data = {
12411239
"original_code": original_code_combined,

0 commit comments

Comments
 (0)