44import os
55import platform
66import time
7- from typing import TYPE_CHECKING , Any , Literal
87from pathlib import Path
8+ from typing import TYPE_CHECKING , Any , cast
9+
910import requests
1011from pydantic .json import pydantic_encoder
1112
2324 from codeflash .discovery .functions_to_optimize import FunctionToOptimize
2425 from codeflash .models .ExperimentMetadata import ExperimentMetadata
2526 from codeflash .models .models import AIServiceRefinerRequest
27+ from codeflash .result .explanation import Explanation
2628
2729
2830class AiServiceClient :
@@ -512,28 +514,53 @@ def generate_regression_tests( # noqa: D417
512514 ph ("cli-testgen-error-response" , {"response_status_code" : response .status_code , "error" : response .text })
513515 return None
514516
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 :
517+ def get_optimization_impact (
518+ self ,
519+ original_code : dict [Path , str ],
520+ new_code : dict [Path , str ],
521+ explanation : Explanation ,
522+ existing_tests_source : str ,
523+ generated_original_test_source : str ,
524+ function_trace_id : str ,
525+ coverage_message : str ,
526+ replay_tests : str ,
527+ concolic_tests : str ,
528+ root_dir : Path ,
529+ original_line_profiler_results : str ,
530+ optimized_line_profiler_results : str ,
531+ ) -> str :
516532 """Optimize the given python code for performance by making a request to the Django endpoint.
517533
518534 Args:
519- PrComment args
535+ original_code: dict,
536+ new_code: dict,
537+ explanation: Explanation,
538+ existing_tests_source: str,
539+ generated_original_test_source: str,
540+ function_trace_id: str,
541+ coverage_message: str,
542+ replay_tests: str,
543+ concolic_tests: str,
544+ root_dir: Path,
545+ original_line_profiler_results: str,
546+ optimized_line_profiler_results: str,
520547
521548 Returns:
522549 -------
523550 - 'high','medium' or 'low' optimization impact
524551
525552 """
526553 logger .info ("!lsp|Computing Optimization Impact…" )
527- original_code_str = ''
528- new_code_str = ''
529- for p in original_code :
554+ original_code_str = ""
555+ new_code_str = ""
556+ for p , code in original_code . items () :
530557 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 :
558+ original_code_str += " \n "
559+ original_code_str += code
560+ for p , code in new_code . items () :
534561 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 ]
562+ new_code_str += " \n "
563+ new_code_str += code
537564
538565 payload = {
539566 "original_code" : original_code_str ,
@@ -544,33 +571,32 @@ def get_optimization_impact(self, original_code, new_code, explanation, existing
544571 "coverage_message" : coverage_message ,
545572 "replay_tests" : replay_tests ,
546573 "concolic_tests" : concolic_tests ,
547- "speedup" : f"{ 1 + float (explanation .speedup ):.2f} x" ,
574+ "speedup" : f"{ 1 + float (explanation .speedup ):.2f} x" ,
548575 "loop_count" : explanation .winning_benchmarking_test_results .number_of_loops (),
549576 "benchmark_details" : explanation .benchmark_details if explanation .benchmark_details else None ,
550577 "optimized_runtime" : humanize_runtime (explanation .best_runtime_ns ),
551578 "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
579+ "original_line_profiler_results" : original_line_profiler_results ,
580+ "optimized_line_profiler_results" : optimized_line_profiler_results ,
554581 }
555582 console .rule ()
556583 try :
557584 response = self .make_ai_service_request ("/optimization_impact" , payload = payload , timeout = 600 )
558585 except requests .exceptions .RequestException as e :
559586 logger .exception (f"Error generating optimization refinements: { e } " )
560587 ph ("cli-optimize-error-caught" , {"error" : str (e )})
561- return ''
588+ return ""
562589
563590 if response .status_code == 200 :
564- impact = response .json ()["impact" ]
565- return impact
591+ return cast ("str" , response .json ()["impact" ])
566592 try :
567- error = response .json ()["error" ]
593+ error = cast ( "str" , response .json ()["error" ])
568594 except Exception :
569595 error = response .text
570596 logger .error (f"Error generating impact candidates: { response .status_code } - { error } " )
571597 ph ("cli-optimize-error-response" , {"response_status_code" : response .status_code , "error" : error })
572598 console .rule ()
573- return ''
599+ return ""
574600
575601
576602class LocalAiServiceClient (AiServiceClient ):
0 commit comments