@@ -242,8 +242,7 @@ def optimize_function(self) -> Result[BestOptimization, str]:
242
242
# request for new optimizations but don't block execution, check for completion later
243
243
# adding to control and experiment set but with same traceid
244
244
best_optimization = None
245
-
246
- for _u , candidates in enumerate ([optimizations_set .control , optimizations_set .experiment ]):
245
+ for _u , (candidates , exp_type ) in enumerate (zip ([optimizations_set .control , optimizations_set .experiment ],["EXP0" ,"EXP1" ])):
247
246
if candidates is None :
248
247
continue
249
248
@@ -253,8 +252,9 @@ def optimize_function(self) -> Result[BestOptimization, str]:
253
252
original_code_baseline = original_code_baseline ,
254
253
original_helper_code = original_helper_code ,
255
254
file_path_to_helper_classes = file_path_to_helper_classes ,
255
+ exp_type = exp_type ,
256
256
)
257
- ph ("cli-optimize-function-finished" , {"function_trace_id" : self .function_trace_id })
257
+ ph ("cli-optimize-function-finished" , {"function_trace_id" : self .function_trace_id [: - 4 ] + exp_type if self . experiment_id else self . function_trace_id })
258
258
259
259
generated_tests = remove_functions_from_generated_tests (
260
260
generated_tests = generated_tests , test_functions_to_remove = test_functions_to_remove
@@ -286,7 +286,7 @@ def optimize_function(self) -> Result[BestOptimization, str]:
286
286
benchmark_details = processed_benchmark_info .benchmark_details if processed_benchmark_info else None ,
287
287
)
288
288
289
- self .log_successful_optimization (explanation , generated_tests )
289
+ self .log_successful_optimization (explanation , generated_tests , exp_type )
290
290
291
291
self .replace_function_and_helpers_with_optimized_code (
292
292
code_context = code_context , optimized_code = best_optimization .candidate .source_code
@@ -324,7 +324,7 @@ def optimize_function(self) -> Result[BestOptimization, str]:
324
324
explanation = explanation ,
325
325
existing_tests_source = existing_tests ,
326
326
generated_original_test_source = generated_tests_str ,
327
- function_trace_id = self .function_trace_id ,
327
+ function_trace_id = self .function_trace_id [: - 4 ] + exp_type if self . experiment_id else self . function_trace_id ,
328
328
coverage_message = coverage_message ,
329
329
git_remote = self .args .git_remote ,
330
330
)
@@ -361,6 +361,7 @@ def determine_best_candidate(
361
361
original_code_baseline : OriginalCodeBaseline ,
362
362
original_helper_code : dict [Path , str ],
363
363
file_path_to_helper_classes : dict [Path , set [str ]],
364
+ exp_type : str ,
364
365
) -> BestOptimization | None :
365
366
best_optimization : BestOptimization | None = None
366
367
best_runtime_until_now = original_code_baseline .runtime
@@ -377,27 +378,26 @@ def determine_best_candidate(
377
378
candidates = deque (candidates )
378
379
# Start a new thread for AI service request, start loop in main thread
379
380
# check if aiservice request is complete, when it is complete, append result to the candidates list
380
- with concurrent .futures .ThreadPoolExecutor (max_workers = 1 ) as executor :
381
+ with concurrent .futures .ThreadPoolExecutor (max_workers = 2 ) as executor :
382
+ ai_service_client = self .aiservice_client if exp_type == "EXP0" else self .local_aiservice_client
381
383
future_line_profile_results = executor .submit (
382
- self . aiservice_client .optimize_python_code_line_profiler ,
384
+ ai_service_client .optimize_python_code_line_profiler ,
383
385
source_code = code_context .read_writable_code ,
384
386
dependency_code = code_context .read_only_context_code ,
385
- trace_id = self .function_trace_id ,
387
+ trace_id = self .function_trace_id [: - 4 ] + exp_type if self . experiment_id else self . function_trace_id ,
386
388
line_profiler_results = original_code_baseline .line_profile_results ["str_out" ],
387
389
num_candidates = 10 ,
388
- experiment_metadata = None ,
390
+ experiment_metadata = ExperimentMetadata ( id = self . experiment_id , group = "control" if exp_type == "EXP0" else "experiment" ) if self . experiment_id else None ,
389
391
)
390
392
try :
391
393
candidate_index = 0
392
- done = False
393
394
original_len = len (candidates )
394
395
while candidates :
395
- # for candidate_index, candidate in enumerate(candidates, start=1):
396
396
done = True if future_line_profile_results is None else future_line_profile_results .done ()
397
397
if done and (future_line_profile_results is not None ):
398
398
line_profile_results = future_line_profile_results .result ()
399
399
candidates .extend (line_profile_results )
400
- original_len += len (candidates )
400
+ original_len += len (line_profile_results )
401
401
logger .info (
402
402
f"Added results from line profiler to candidates, total candidates now: { original_len } "
403
403
)
@@ -519,16 +519,16 @@ def determine_best_candidate(
519
519
logger .exception (f"Optimization interrupted: { e } " )
520
520
raise
521
521
522
- self . aiservice_client .log_results (
523
- function_trace_id = self .function_trace_id ,
522
+ ai_service_client .log_results (
523
+ function_trace_id = self .function_trace_id [: - 4 ] + exp_type if self . experiment_id else self . function_trace_id ,
524
524
speedup_ratio = speedup_ratios ,
525
525
original_runtime = original_code_baseline .runtime ,
526
526
optimized_runtime = optimized_runtimes ,
527
527
is_correct = is_correct ,
528
528
)
529
529
return best_optimization
530
530
531
- def log_successful_optimization (self , explanation : Explanation , generated_tests : GeneratedTestsList ) -> None :
531
+ def log_successful_optimization (self , explanation : Explanation , generated_tests : GeneratedTestsList , exp_type : str ) -> None :
532
532
explanation_panel = Panel (
533
533
f"⚡️ Optimization successful! 📄 { self .function_to_optimize .qualified_name } in { explanation .file_path } \n "
534
534
f"📈 { explanation .perf_improvement_line } \n "
@@ -555,7 +555,7 @@ def log_successful_optimization(self, explanation: Explanation, generated_tests:
555
555
ph (
556
556
"cli-optimize-success" ,
557
557
{
558
- "function_trace_id" : self .function_trace_id ,
558
+ "function_trace_id" : self .function_trace_id [: - 4 ] + exp_type if self . experiment_id else self . function_trace_id ,
559
559
"speedup_x" : explanation .speedup_x ,
560
560
"speedup_pct" : explanation .speedup_pct ,
561
561
"best_runtime" : explanation .best_runtime_ns ,
0 commit comments