44import os
55import platform
66import time
7- from typing import TYPE_CHECKING , Any
8-
7+ from typing import TYPE_CHECKING , Any , Literal
8+ from pathlib import Path
99import requests
1010from pydantic .json import pydantic_encoder
1111
1212from codeflash .cli_cmds .console import console , logger
1313from codeflash .code_utils .env_utils import get_codeflash_api_key
1414from codeflash .code_utils .git_utils import get_last_commit_author_if_pr_exists , get_repo_owner_and_name
15+ from codeflash .code_utils .time_utils import humanize_runtime
1516from codeflash .lsp .helpers import is_LSP_enabled
1617from codeflash .models .ExperimentMetadata import ExperimentMetadata
1718from codeflash .models .models import AIServiceRefinerRequest , CodeStringsMarkdown , OptimizedCandidate
1819from codeflash .telemetry .posthog_cf import ph
1920from codeflash .version import __version__ as codeflash_version
2021
2122if TYPE_CHECKING :
22- from pathlib import Path
23-
2423 from codeflash .discovery .functions_to_optimize import FunctionToOptimize
2524 from codeflash .models .ExperimentMetadata import ExperimentMetadata
2625 from codeflash .models .models import AIServiceRefinerRequest
@@ -513,91 +512,45 @@ def generate_regression_tests( # noqa: D417
513512 ph ("cli-testgen-error-response" , {"response_status_code" : response .status_code , "error" : response .text })
514513 return None
515514
516- def get_optimization_impact (self , original_code , new_code , explanation , existing_tests_source , generated_original_test_source , function_trace_id , coverage_message , replay_tests , concolic_tests ) -> list [ OptimizedCandidate ] :
515+ def get_optimization_impact (self , original_code , new_code , explanation , existing_tests_source , generated_original_test_source , function_trace_id , coverage_message , replay_tests , concolic_tests , root_dir , original_line_profiler_results , optimized_line_profiler_results ) -> str :
517516 """Optimize the given python code for performance by making a request to the Django endpoint.
518517
519518 Args:
520- request: A list of optimization candidate details for refinement
519+ PrComment args
521520
522521 Returns:
523522 -------
524- - List[OptimizationCandidate]: A list of Optimization Candidates.
523+ - 'high','medium' or 'low' optimization impact
525524
526525 """
527- # """{
528- # "original_code": original_code_combined,
529- # "new_code": new_code_combined,
530- # "explanation": new_explanation,
531- # "existing_tests_source": existing_tests,
532- # "generated_original_test_source": generated_tests_str,
533- # "function_trace_id": self.function_trace_id[:-4] + exp_type
534- # if self.experiment_id
535- # else self.function_trace_id,
536- # "coverage_message": coverage_message,
537- # "replay_tests": replay_tests,
538- # "concolic_tests": concolic_tests,
539- # }"""
540- # logger.info("Creating a new PR with the optimized code...")
541- # console.rule()
542- # owner, repo = get_repo_owner_and_name(git_repo, git_remote)
543- # logger.info(f"Pushing to {git_remote} - Owner: {owner}, Repo: {repo}")
544- # console.rule()
545- # if not check_and_push_branch(git_repo, git_remote, wait_for_push=True):
546- # logger.warning("⏭️ Branch is not pushed, skipping PR creation...")
547- # return
548- # relative_path = explanation.file_path.relative_to(root_dir).as_posix()
549- # base_branch = get_current_branch()
550- # build_file_changes = {
551- # Path(p).relative_to(root_dir).as_posix(): FileDiffContent(
552- # oldContent=original_code[p], newContent=new_code[p]
553- # )
554- # for p in original_code
555- # }
556- #
557- # response = cfapi.create_pr(
558- # owner=owner,
559- # repo=repo,
560- # base_branch=base_branch,
561- # file_changes=build_file_changes,
562- # pr_comment=PrComment(
563- # optimization_explanation=explanation.explanation_message(),
564- # best_runtime=explanation.best_runtime_ns,
565- # original_runtime=explanation.original_runtime_ns,
566- # function_name=explanation.function_name,
567- # relative_file_path=relative_path,
568- # speedup_x=explanation.speedup_x,
569- # speedup_pct=explanation.speedup_pct,
570- # winning_behavior_test_results=explanation.winning_behavior_test_results,
571- # winning_benchmarking_test_results=explanation.winning_benchmarking_test_results,
572- # benchmark_details=explanation.benchmark_details,
573- # ),
574- # existing_tests=existing_tests_source,
575- # generated_tests=generated_original_test_source,
576- # trace_id=function_trace_id,
577- # coverage_message=coverage_message,
578- # replay_tests=replay_tests,
579- # concolic_tests=concolic_tests,
580- # )
581- # if response.ok:
582- # pr_id = response.text
583- # pr_url = github_pr_url(owner, repo, pr_id)
584- # logger.info(f"Successfully created a new PR #{pr_id} with the optimized code: {pr_url}")
585- # else:
586- # logger.error(
587- # f"Optimization was successful, but I failed to create a PR with the optimized code."
588- # f" Response from server was: {response.text}"
589- # )
590- # console.rule()
591526 logger .info ("!lsp|Computing Optimization Impact…" )
527+ original_code_str = ''
528+ new_code_str = ''
529+ for p in original_code :
530+ original_code_str += f"```python:{ Path (p ).relative_to (root_dir ).as_posix ()} "
531+ original_code_str += '\n '
532+ original_code_str += original_code [p ]
533+ for p in new_code :
534+ new_code_str += f"```python:{ Path (p ).relative_to (root_dir ).as_posix ()} "
535+ new_code_str += '\n '
536+ new_code_str += new_code [p ]
537+
592538 payload = {
593- "original_code" : original_code ,
594- "new_code " : new_code ,
595- "existing_tests_source " : existing_tests_source ,
596- "generated_original_test_source " : generated_original_test_source ,
597- "function_trace_id " : function_trace_id ,
539+ "original_code" : original_code_str ,
540+ "optimized_code " : new_code_str ,
541+ "existing_tests " : existing_tests_source ,
542+ "generated_tests " : generated_original_test_source ,
543+ "trace_id " : function_trace_id ,
598544 "coverage_message" : coverage_message ,
599545 "replay_tests" : replay_tests ,
600546 "concolic_tests" : concolic_tests ,
547+ "speedup" : f"{ 1 + float (explanation .speedup ):.2f} x" ,
548+ "loop_count" : explanation .winning_benchmarking_test_results .number_of_loops (),
549+ "benchmark_details" : explanation .benchmark_details if explanation .benchmark_details else None ,
550+ "optimized_runtime" : humanize_runtime (explanation .best_runtime_ns ),
551+ "original_runtime" : humanize_runtime (explanation .original_runtime_ns ),
552+ "original_line_profiler_results" :original_line_profiler_results ,
553+ "optimized_line_profiler_results" :optimized_line_profiler_results
601554 }
602555 console .rule ()
603556 try :
@@ -617,7 +570,7 @@ def get_optimization_impact(self, original_code, new_code, explanation, existing
617570 logger .error (f"Error generating impact candidates: { response .status_code } - { error } " )
618571 ph ("cli-optimize-error-response" , {"response_status_code" : response .status_code , "error" : error })
619572 console .rule ()
620- return []
573+ return ''
621574
622575
623576class LocalAiServiceClient (AiServiceClient ):
0 commit comments