@@ -117,7 +117,7 @@ async def call_aim_guardrail(
117117 self ._handle_block_action (res ["analysis_result" ], required_action )
118118 elif action_type == "anonymize_action" :
119119 return self ._anonymize_request (
120- res [ "analysis_result" ], required_action , data
120+ res , data
121121 )
122122 else :
123123 verbose_proxy_logger .error (f"Aim: { action_type } action" )
@@ -133,27 +133,18 @@ def _handle_block_action(self, analysis_result: Any, required_action: Any) -> No
133133 raise HTTPException (status_code = 400 , detail = detection_message )
134134
135135 def _anonymize_request (
136- self , analysis_result : Any , required_action : Any , data : dict
136+ self , res : Any , data : dict
137137 ) -> dict :
138138 verbose_proxy_logger .info ("Aim: anonymize action" )
139- redaction_result = required_action and required_action .get (
140- "chat_redaction_result"
141- )
142- if not redaction_result :
139+ redacted_chat = res .get ("redacted_chat" )
140+ if not redacted_chat :
143141 return data
144- if analysis_result and analysis_result .get ("session_entities" ):
145- self ._set_dlp_entities (analysis_result .get ("session_entities" ))
146142 data ["messages" ] = [
147- {
148- "role" : redaction_result ["redacted_new_message" ]["role" ],
149- "content" : redaction_result ["redacted_new_message" ]["content" ],
150- }
151- ] + [
152143 {
153144 "role" : message ["role" ],
154145 "content" : message ["content" ],
155146 }
156- for message in redaction_result ["all_redacted_messages" ]
147+ for message in redacted_chat ["all_redacted_messages" ]
157148 ]
158149 return data
159150
@@ -185,7 +176,11 @@ async def call_aim_guardrail_on_output(
185176 return self ._handle_block_action_on_output (
186177 res ["analysis_result" ], required_action
187178 )
188- return self ._deanonymize_output (output )
179+ redacted_chat = res .get ("redacted_chat" , None )
180+
181+ if action_type and action_type == "anonymize_action" and redacted_chat :
182+ return {"redacted_output" : redacted_chat ["all_redacted_messages" ][- 1 ]["content" ]}
183+ return {"redacted_output" : output }
189184
190185 def _handle_block_action_on_output (
191186 self , analysis_result : Any , required_action : Any
@@ -199,15 +194,6 @@ def _handle_block_action_on_output(
199194 )
200195 return {"detection_message" : detection_message }
201196
202- def _deanonymize_output (self , output : str ) -> dict | None :
203- try :
204- for entity in self .dlp_entities :
205- output = output .replace (f"[{ entity ['name' ]} ]" , entity ["content" ])
206- return {"redacted_output" : output }
207- except Exception as e :
208- verbose_proxy_logger .error (f"Aim: Error while redacting output: { e } " )
209- return None
210-
211197 def _build_aim_headers (
212198 self ,
213199 * ,
@@ -323,9 +309,6 @@ async def forward_the_stream_to_aim(
323309 await websocket .send (chunk )
324310 await websocket .send (json .dumps ({"done" : True }))
325311
326- def _set_dlp_entities (self , entities : list [dict ]) -> None :
327- self .dlp_entities = entities [: self ._max_dlp_entities ]
328-
329312 @staticmethod
330313 def get_config_model () -> Optional [Type ["GuardrailConfigModel" ]]:
331314 from litellm .types .proxy .guardrails .guardrail_hooks .aim import (
0 commit comments