@@ -204,6 +204,65 @@ def optimize_python_code_line_profiler(
204204 console .rule ()
205205 return []
206206
207+ def get_new_explanation (
208+ self ,
209+ source_code : str ,
210+ dependency_code : str ,
211+ trace_id : str ,
212+ num_candidates : int = 10 ,
213+ experiment_metadata : ExperimentMetadata | None = None ,
214+ existing_explanation : str = "" ,
215+ ) -> str :
216+ """Optimize the given python code for performance by making a request to the Django endpoint.
217+
218+ Parameters
219+ ----------
220+ - source_code (str): The python code to optimize.
221+ - dependency_code (str): The dependency code used as read-only context for the optimization
222+ - trace_id (str): Trace id of optimization run
223+ - num_candidates (int): Number of optimization variants to generate. Default is 10.
224+ - experiment_metadata (Optional[ExperimentalMetadata, None]): Any available experiment metadata for this optimization
225+ - existing_explanation (str): Existing explanation from AIservice call
226+
227+ Returns
228+ -------
229+ - List[OptimizationCandidate]: A list of Optimization Candidates.
230+
231+ """
232+ payload = {
233+ "source_code" : source_code ,
234+ "dependency_code" : dependency_code ,
235+ "num_variants" : num_candidates ,
236+ "trace_id" : trace_id ,
237+ "python_version" : platform .python_version (),
238+ "experiment_metadata" : experiment_metadata ,
239+ "codeflash_version" : codeflash_version ,
240+ "existing_explanation" : existing_explanation ,
241+ }
242+
243+ logger .info ("Generating optimized candidates…" )
244+ console .rule ()
245+ try :
246+ response = self .make_ai_service_request ("/explain" , payload = payload , timeout = 600 )
247+ except requests .exceptions .RequestException as e :
248+ logger .exception (f"Error generating optimized candidates: { e } " )
249+ ph ("cli-optimize-error-caught" , {"error" : str (e )})
250+ return ""
251+
252+ if response .status_code == 200 :
253+ explanation = response .json ()["explanation" ]
254+ logger .info (f"New Explanation: { explanation } " )
255+ console .rule ()
256+ return explanation
257+ try :
258+ error = response .json ()["error" ]
259+ except Exception :
260+ error = response .text
261+ logger .error (f"Error generating optimized candidates: { response .status_code } - { error } " )
262+ ph ("cli-optimize-error-response" , {"response_status_code" : response .status_code , "error" : error })
263+ console .rule ()
264+ return ""
265+
207266
208267 def log_results (
209268 self ,
0 commit comments