@@ -38,18 +38,25 @@ def name(self) -> str:
38
38
"""
39
39
return "codegate-context-retriever"
40
40
41
- def generate_context_str (self , objects : list [object ], context : PipelineContext ) -> str :
41
+ def generate_context_str (
42
+ self , objects : list [object ], context : PipelineContext , snippet_map : dict
43
+ ) -> str :
42
44
context_str = ""
43
45
matched_packages = []
44
46
for obj in objects :
45
47
# The object is already a dictionary with 'properties'
46
48
package_obj = obj ["properties" ] # type: ignore
47
49
matched_packages .append (f"{ package_obj ['name' ]} ({ package_obj ['type' ]} )" )
50
+
51
+ # Retrieve the related snippet if it exists
52
+ code_snippet = snippet_map .get (package_obj ["name" ])
53
+
48
54
# Add one alert for each package found
49
55
context .add_alert (
50
56
self .name ,
51
57
trigger_string = json .dumps (package_obj ),
52
58
severity_category = AlertSeverity .CRITICAL ,
59
+ code_snippet = code_snippet ,
53
60
)
54
61
package_str = generate_vector_string (package_obj )
55
62
context_str += package_str + "\n "
@@ -80,14 +87,18 @@ async def process( # noqa: C901
80
87
snippets = extractor .extract_snippets (user_message )
81
88
82
89
bad_snippet_packages = []
83
- if len (snippets ) > 0 :
90
+ snippet_map = {}
91
+ if snippets and len (snippets ) > 0 :
84
92
snippet_language = snippets [0 ].language
85
93
# Collect all packages referenced in the snippets
86
94
snippet_packages = []
87
95
for snippet in snippets :
88
- snippet_packages . extend (
89
- PackageExtractor . extract_packages ( snippet .code , snippet .language ) # type: ignore
96
+ extracted_packages = PackageExtractor . extract_packages (
97
+ snippet .code , snippet .language
90
98
)
99
+ snippet_packages .extend (extracted_packages )
100
+ for package in extracted_packages :
101
+ snippet_map [package ] = snippet
91
102
92
103
logger .info (
93
104
f"Found { len (snippet_packages )} packages "
@@ -127,7 +138,7 @@ async def process( # noqa: C901
127
138
return PipelineResult (request = request , context = context )
128
139
else :
129
140
# Add context for bad packages
130
- context_str = self .generate_context_str (all_bad_packages , context )
141
+ context_str = self .generate_context_str (all_bad_packages , context , snippet_map )
131
142
context .bad_packages_found = True
132
143
133
144
# Make a copy of the request
0 commit comments