@@ -510,42 +510,42 @@ def _extract_unique_features(self, program: Dict[str, Any]) -> str:
510510 and self .config .include_changes_under_chars
511511 and len (changes ) < self .config .include_changes_under_chars
512512 ):
513- features .append (f"Modification: { changes } " )
513+ features .append (self . template_manager . get_fragment ( "inspiration_changes_prefix" ). format ( changes = changes ) )
514514
515515 # Analyze metrics for standout characteristics
516516 metrics = program .get ("metrics" , {})
517517 for metric_name , value in metrics .items ():
518518 if isinstance (value , (int , float )):
519519 if value >= 0.9 :
520- features .append (f"Excellent { metric_name } ( { value :.3f } ) " )
520+ features .append (f"{ self . template_manager . get_fragment ( 'inspiration_metrics_excellent' ). format ( metric_name = metric_name , value = value ) } " )
521521 elif value <= 0.3 :
522- features .append (f"Alternative { metric_name } approach " )
522+ features .append (f"{ self . template_manager . get_fragment ( 'inspiration_metrics_alternative' ). format ( metric_name = metric_name ) } " )
523523
524524 # Code-based features (simple heuristics)
525525 code = program .get ("code" , "" )
526526 if code :
527527 code_lower = code .lower ()
528528 if "class" in code_lower and "def __init__" in code_lower :
529- features .append ("Object-oriented approach" )
529+ features .append (self . template_manager . get_fragment ( "inspiration_code_with_class" ) )
530530 if "numpy" in code_lower or "np." in code_lower :
531- features .append ("NumPy-based implementation" )
531+ features .append (self . template_manager . get_fragment ( "inspiration_code_with_numpy" ) )
532532 if "for" in code_lower and "while" in code_lower :
533- features .append ("Mixed iteration strategies" )
533+ features .append (self . template_manager . get_fragment ( "inspiration_code_with_mixed_iteration" ) )
534534 if (
535535 self .config .concise_implementation_max_lines
536536 and len (code .split ("\n " )) <= self .config .concise_implementation_max_lines
537537 ):
538- features .append ("Concise implementation" )
538+ features .append (self . template_manager . get_fragment ( "inspiration_code_with_concise_line" ) )
539539 elif (
540540 self .config .comprehensive_implementation_min_lines
541541 and len (code .split ("\n " )) >= self .config .comprehensive_implementation_min_lines
542542 ):
543- features .append ("Comprehensive implementation" )
543+ features .append (self . template_manager . get_fragment ( "inspiration_code_with_comprehensive_line" ) )
544544
545545 # Default if no specific features found
546546 if not features :
547547 program_type = self ._determine_program_type (program )
548- features .append (f" { program_type } approach to the problem" )
548+ features .append (self . template_manager . get_fragment ( "inspiration_no_features_postfix" ). format ( program_type = program_type ) )
549549
550550 # Use num_top_programs as limit for features (similar to how we limit programs)
551551 feature_limit = self .config .num_top_programs
0 commit comments