@@ -314,6 +314,32 @@ pub struct Config {
314314 /// Minimum number of feedback observations before adjusting confidence (default 5).
315315 #[ serde( default = "default_feedback_min_observations" ) ]
316316 pub feedback_min_observations : usize ,
317+
318+ /// Enable semantic repository retrieval for related code context.
319+ #[ serde( default = "default_false" ) ]
320+ pub semantic_rag : bool ,
321+
322+ #[ serde( default = "default_semantic_rag_max_files" ) ]
323+ pub semantic_rag_max_files : usize ,
324+
325+ #[ serde( default = "default_semantic_rag_top_k" ) ]
326+ pub semantic_rag_top_k : usize ,
327+
328+ #[ serde( default = "default_semantic_rag_min_similarity" ) ]
329+ pub semantic_rag_min_similarity : f32 ,
330+
331+ /// Enable embedding-backed feedback memory on top of aggregate stats.
332+ #[ serde( default ) ]
333+ pub semantic_feedback : bool ,
334+
335+ #[ serde( default = "default_semantic_feedback_similarity" ) ]
336+ pub semantic_feedback_similarity : f32 ,
337+
338+ #[ serde( default = "default_semantic_feedback_min_examples" ) ]
339+ pub semantic_feedback_min_examples : usize ,
340+
341+ #[ serde( default = "default_semantic_feedback_max_neighbors" ) ]
342+ pub semantic_feedback_max_neighbors : usize ,
317343}
318344
319345#[ derive( Debug , Clone , Serialize , Deserialize , Default ) ]
@@ -482,6 +508,14 @@ impl Default for Config {
482508 verification_max_comments : default_verification_max_comments ( ) ,
483509 enhanced_feedback : false ,
484510 feedback_min_observations : default_feedback_min_observations ( ) ,
511+ semantic_rag : false ,
512+ semantic_rag_max_files : default_semantic_rag_max_files ( ) ,
513+ semantic_rag_top_k : default_semantic_rag_top_k ( ) ,
514+ semantic_rag_min_similarity : default_semantic_rag_min_similarity ( ) ,
515+ semantic_feedback : false ,
516+ semantic_feedback_similarity : default_semantic_feedback_similarity ( ) ,
517+ semantic_feedback_min_examples : default_semantic_feedback_min_examples ( ) ,
518+ semantic_feedback_max_neighbors : default_semantic_feedback_max_neighbors ( ) ,
485519 }
486520 }
487521}
@@ -914,6 +948,28 @@ impl Config {
914948 if self . feedback_suppression_threshold == 0 {
915949 self . feedback_suppression_threshold = default_feedback_suppression_threshold ( ) ;
916950 }
951+ if self . semantic_rag_max_files == 0 {
952+ self . semantic_rag_max_files = default_semantic_rag_max_files ( ) ;
953+ }
954+ if self . semantic_rag_top_k == 0 {
955+ self . semantic_rag_top_k = default_semantic_rag_top_k ( ) ;
956+ }
957+ if !self . semantic_rag_min_similarity . is_finite ( ) {
958+ self . semantic_rag_min_similarity = default_semantic_rag_min_similarity ( ) ;
959+ } else {
960+ self . semantic_rag_min_similarity = self . semantic_rag_min_similarity . clamp ( 0.0 , 1.0 ) ;
961+ }
962+ if !self . semantic_feedback_similarity . is_finite ( ) {
963+ self . semantic_feedback_similarity = default_semantic_feedback_similarity ( ) ;
964+ } else {
965+ self . semantic_feedback_similarity = self . semantic_feedback_similarity . clamp ( 0.0 , 1.0 ) ;
966+ }
967+ if self . semantic_feedback_min_examples == 0 {
968+ self . semantic_feedback_min_examples = default_semantic_feedback_min_examples ( ) ;
969+ }
970+ if self . semantic_feedback_max_neighbors == 0 {
971+ self . semantic_feedback_max_neighbors = default_semantic_feedback_max_neighbors ( ) ;
972+ }
917973 }
918974
919975 pub fn get_path_config ( & self , file_path : & Path ) -> Option < & PathConfig > {
@@ -1300,6 +1356,30 @@ fn default_feedback_min_observations() -> usize {
13001356 5
13011357}
13021358
1359+ fn default_semantic_rag_max_files ( ) -> usize {
1360+ 500
1361+ }
1362+
1363+ fn default_semantic_rag_top_k ( ) -> usize {
1364+ 5
1365+ }
1366+
1367+ fn default_semantic_rag_min_similarity ( ) -> f32 {
1368+ 0.25
1369+ }
1370+
1371+ fn default_semantic_feedback_similarity ( ) -> f32 {
1372+ 0.82
1373+ }
1374+
1375+ fn default_semantic_feedback_min_examples ( ) -> usize {
1376+ 3
1377+ }
1378+
1379+ fn default_semantic_feedback_max_neighbors ( ) -> usize {
1380+ 8
1381+ }
1382+
13031383fn normalize_comment_types ( values : & [ String ] ) -> Vec < String > {
13041384 if values. is_empty ( ) {
13051385 return default_comment_types ( ) ;
0 commit comments