Skip to content

Commit f6135c3

Browse files
committed
Add logic to clean up previous unfeedback Q&A before storing new one
1 parent 0e2ba42 commit f6135c3

File tree

1 file changed

+46
-2
lines changed

1 file changed

+46
-2
lines changed

packages/slackBotFunction/app/slack/slack_events.py

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,39 @@
3333
from app.services.query_reformulator import reformulate_query
3434

3535

36+
def cleanup_previous_unfeedback_qa(conversation_key, current_message_ts, session_data):
37+
"""Delete previous Q&A pair if no feedback received"""
38+
try:
39+
previous_message_ts = session_data.get("latest_message_ts")
40+
if not previous_message_ts or previous_message_ts == current_message_ts:
41+
return
42+
43+
# Check if previous Q&A has any feedback
44+
feedback_exists = check_feedback_exists(conversation_key, previous_message_ts)
45+
46+
if not feedback_exists:
47+
# Delete unfeedback Q&A pair for privacy
48+
previous_qa_key = f"qa#{conversation_key}#{previous_message_ts}"
49+
table.delete_item(Key={"pk": previous_qa_key, "sk": "turn"})
50+
logger.info("Deleted unfeedback Q&A for privacy", extra={"message_ts": previous_message_ts})
51+
52+
except Exception as e:
53+
logger.error("Error cleaning up unfeedback Q&A", extra={"error": str(e)})
54+
55+
56+
def check_feedback_exists(conversation_key, message_ts):
57+
"""Check if any feedback exists for this Q&A pair"""
58+
try:
59+
response = table.query(
60+
KeyConditionExpression="pk = :pk",
61+
ExpressionAttributeValues={":pk": f"feedback#{conversation_key}#{message_ts}"},
62+
Limit=1,
63+
)
64+
return len(response.get("Items", [])) > 0
65+
except Exception:
66+
return False
67+
68+
3669
def store_qa_pair(conversation_key, user_query, bot_response, message_ts, session_id, user_id):
3770
"""
3871
Store Q&A pair for feedback correlation
@@ -105,7 +138,8 @@ def process_async_slack_event(slack_event_data):
105138
reformulated_query = reformulate_query(logger, user_query)
106139

107140
# check if we have an existing conversation
108-
session_id = get_conversation_session(conversation_key)
141+
session_data = get_conversation_session_data(conversation_key)
142+
session_id = session_data.get("session_id") if session_data else None
109143

110144
# Query the knowledge base with reformulated query
111145
kb_response = query_bedrock(reformulated_query, session_id)
@@ -131,6 +165,8 @@ def process_async_slack_event(slack_event_data):
131165
message_ts,
132166
)
133167
elif session_id:
168+
# Clean up previous unfeedback Q&A before storing new one
169+
cleanup_previous_unfeedback_qa(conversation_key, message_ts, session_data)
134170
# Update existing session with latest message timestamp
135171
update_session_latest_message(conversation_key, message_ts)
136172

@@ -364,11 +400,19 @@ def get_conversation_session(conversation_key):
364400
"""
365401
Get existing Bedrock session for this conversation
366402
"""
403+
session_data = get_conversation_session_data(conversation_key)
404+
return session_data.get("session_id") if session_data else None
405+
406+
407+
def get_conversation_session_data(conversation_key):
408+
"""
409+
Get full session data for this conversation
410+
"""
367411
try:
368412
response = table.get_item(Key={"pk": conversation_key, "sk": SESSION_SK})
369413
if "Item" in response:
370414
logger.info("Found existing session", extra={"conversation_key": conversation_key})
371-
return response["Item"]["session_id"]
415+
return response["Item"]
372416
return None
373417
except Exception as e:
374418
logger.error("Error getting session", extra={"error": str(e)})

0 commit comments

Comments
 (0)