@@ -189,6 +189,12 @@ async def process(
189
189
new_request = request .copy ()
190
190
total_redacted = 0
191
191
192
+ # Process all messages
193
+ last_assistant_idx = - 1
194
+ for i , message in enumerate (new_request ["messages" ]):
195
+ if message .get ("role" , "" ) == "assistant" :
196
+ last_assistant_idx = i
197
+
192
198
# Process all messages
193
199
for i , message in enumerate (new_request ["messages" ]):
194
200
if "content" in message and message ["content" ]:
@@ -198,11 +204,11 @@ async def process(
198
204
)
199
205
new_request ["messages" ][i ]["content" ] = protected_string
200
206
201
- # only sum to the count if it is the last message
202
- if i == len ( new_request [ "messages" ]) - 1 :
207
+ # Sum redacted count for messages after the last assistant message
208
+ if i > last_assistant_idx :
203
209
total_redacted += redacted_count
204
210
205
- logger .info (f"Total secrets redacted: { total_redacted } " )
211
+ logger .info (f"Total secrets redacted since last assistant message : { total_redacted } " )
206
212
207
213
# Store the count in context metadata
208
214
context .metadata ["redacted_secrets_count" ] = total_redacted
@@ -350,7 +356,7 @@ async def process_chunk(
350
356
return [chunk ]
351
357
352
358
# Check if this is the first chunk (delta role will be present, others will not)
353
- if chunk .choices [0 ].delta .role :
359
+ if len ( chunk . choices ) > 0 and chunk .choices [0 ].delta .role :
354
360
redacted_count = input_context .metadata ["redacted_secrets_count" ]
355
361
secret_text = "secret" if redacted_count == 1 else "secrets"
356
362
# Create notification chunk
0 commit comments