Skip to content

Commit 63278f9

Browse files
committed
use different table
1 parent 7b8911a commit 63278f9

File tree

6 files changed

+35
-15
lines changed

6 files changed

+35
-15
lines changed

packages/cdk/resources/DatabaseTables.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ export interface TablesProps {
88

99
export class DatabaseTables extends Construct {
1010
public readonly slackBotStateTable: DynamoDbTable
11+
public readonly feedbackTable: DynamoDbTable
1112

1213
constructor(scope: Construct, id: string, props: TablesProps) {
1314
super(scope, id)
@@ -24,5 +25,19 @@ export class DatabaseTables extends Construct {
2425
},
2526
timeToLiveAttribute: "ttl"
2627
})
28+
29+
this.feedbackTable = new DynamoDbTable(this, "FeedbackTable", {
30+
tableName: `${props.stackName}-Feedback`,
31+
partitionKey: {
32+
name: "pk",
33+
type: AttributeType.STRING
34+
},
35+
sortKey: {
36+
name: "sk",
37+
type: AttributeType.STRING
38+
},
39+
timeToLiveAttribute: "ttl"
40+
})
41+
2742
}
2843
}

packages/cdk/resources/Functions.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ export interface FunctionsProps {
3434
readonly slackBotTokenSecret: Secret
3535
readonly slackBotSigningSecret: Secret
3636
readonly slackBotStateTable: TableV2
37+
readonly feedbackTable: TableV2
3738
readonly promptName: string
3839
}
3940

@@ -75,6 +76,7 @@ export class Functions extends Construct {
7576
"GUARD_RAIL_ID": props.guardrailId,
7677
"GUARD_RAIL_VERSION": props.guardrailVersion,
7778
"SLACK_BOT_STATE_TABLE": props.slackBotStateTable.tableName,
79+
"FEEDBACK_TABLE": props.feedbackTable.tableName,
7880
"QUERY_REFORMULATION_PROMPT_NAME": props.promptName,
7981
"QUERY_REFORMULATION_PROMPT_VERSION": QUERY_REFORMULATION_PROMPT_VERSION
8082
}

packages/cdk/stacks/EpsAssistMeStack.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ export class EpsAssistMeStack extends Stack {
130130
slackBotTokenSecret: secrets.slackBotTokenSecret,
131131
slackBotSigningSecret: secrets.slackBotSigningSecret,
132132
slackBotStateTable: tables.slackBotStateTable.table,
133+
feedbackTable: tables.feedbackTable.table,
133134
promptName: bedrockPromptResources.queryReformulationPrompt.promptName
134135
})
135136

packages/slackBotFunction/app/core/config.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515

1616
# DynamoDB table for deduplication and session storage
1717
dynamodb = boto3.resource("dynamodb")
18-
table = dynamodb.Table(os.environ["SLACK_BOT_STATE_TABLE"])
18+
slack_bot_state_table = dynamodb.Table(os.environ["SLACK_BOT_STATE_TABLE"])
19+
feedback_table = dynamodb.Table(os.environ["FEEDBACK_TABLE"])
1920

2021
# get Slack credentials from Parameter Store
2122
bot_token_parameter = os.environ["SLACK_BOT_TOKEN_PARAMETER"]

packages/slackBotFunction/app/slack/slack_events.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
from botocore.exceptions import ClientError
1111
from slack_sdk import WebClient
1212
from app.core.config import (
13-
table,
13+
slack_bot_state_table,
14+
feedback_table,
1415
logger,
1516
KNOWLEDGEBASE_ID,
1617
RAG_MODEL_ID,
@@ -47,7 +48,7 @@ def cleanup_previous_unfeedback_qa(conversation_key, current_message_ts, session
4748
return
4849

4950
# Atomically delete Q&A only if no feedback received
50-
table.delete_item(
51+
slack_bot_state_table.delete_item(
5152
Key={"pk": f"qa#{conversation_key}#{previous_message_ts}", "sk": "turn"},
5253
ConditionExpression="attribute_not_exists(feedback_received)",
5354
)
@@ -67,7 +68,7 @@ def store_qa_pair(conversation_key, user_query, bot_response, message_ts, sessio
6768
Store Q&A pair for feedback correlation
6869
"""
6970
try:
70-
table.put_item(
71+
slack_bot_state_table.put_item(
7172
Item={
7273
"pk": f"qa#{conversation_key}#{message_ts}",
7374
"sk": "turn",
@@ -90,7 +91,7 @@ def _mark_qa_feedback_received(conversation_key, message_ts):
9091
Mark Q&A record as having received feedback to prevent deletion
9192
"""
9293
try:
93-
table.update_item(
94+
slack_bot_state_table.update_item(
9495
Key={"pk": f"qa#{conversation_key}#{message_ts}", "sk": "turn"},
9596
UpdateExpression="SET feedback_received = :val",
9697
ExpressionAttributeValues={":val": True},
@@ -322,9 +323,9 @@ def store_feedback(
322323
feedback_item["feedback_text"] = feedback_text[:4000]
323324

324325
if condition:
325-
table.put_item(Item=feedback_item, ConditionExpression=condition)
326+
feedback_table.put_item(Item=feedback_item, ConditionExpression=condition)
326327
else:
327-
table.put_item(Item=feedback_item)
328+
feedback_table.put_item(Item=feedback_item)
328329

329330
# Mark Q&A as having received feedback to prevent deletion
330331
if message_ts:
@@ -365,7 +366,7 @@ def get_conversation_session_data(conversation_key):
365366
Get full session data for this conversation
366367
"""
367368
try:
368-
response = table.get_item(Key={"pk": conversation_key, "sk": SESSION_SK})
369+
response = slack_bot_state_table.get_item(Key={"pk": conversation_key, "sk": SESSION_SK})
369370
if "Item" in response:
370371
logger.info("Found existing session", extra={"conversation_key": conversation_key})
371372
return response["Item"]
@@ -380,7 +381,7 @@ def get_latest_message_ts(conversation_key):
380381
Get latest message timestamp from session
381382
"""
382383
try:
383-
response = table.get_item(Key={"pk": conversation_key, "sk": SESSION_SK})
384+
response = slack_bot_state_table.get_item(Key={"pk": conversation_key, "sk": SESSION_SK})
384385
if "Item" in response:
385386
return response["Item"].get("latest_message_ts")
386387
return None
@@ -413,7 +414,7 @@ def store_conversation_session(
413414
if latest_message_ts:
414415
item["latest_message_ts"] = latest_message_ts
415416

416-
table.put_item(Item=item)
417+
slack_bot_state_table.put_item(Item=item)
417418
logger.info("Stored session", extra={"session_id": session_id, "conversation_key": conversation_key})
418419
except Exception as e:
419420
logger.error("Error storing session", extra={"error": str(e)})
@@ -424,7 +425,7 @@ def update_session_latest_message(conversation_key, message_ts):
424425
Update session with latest message timestamp
425426
"""
426427
try:
427-
table.update_item(
428+
slack_bot_state_table.update_item(
428429
Key={"pk": conversation_key, "sk": SESSION_SK},
429430
UpdateExpression="SET latest_message_ts = :ts",
430431
ExpressionAttributeValues={":ts": message_ts},

packages/slackBotFunction/app/slack/slack_handlers.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from botocore.exceptions import ClientError
1616

1717
from app.core.config import (
18-
table,
18+
slack_bot_state_table,
1919
bot_token,
2020
logger,
2121
BOT_MESSAGES,
@@ -198,7 +198,7 @@ def thread_message_handler(event, event_id, client):
198198

199199
conversation_key = f"{THREAD_PREFIX}{channel_id}#{thread_root}"
200200
try:
201-
resp = table.get_item(Key={"pk": conversation_key, "sk": SESSION_SK})
201+
resp = slack_bot_state_table.get_item(Key={"pk": conversation_key, "sk": SESSION_SK})
202202
if "Item" not in resp:
203203
logger.info(f"No session found for thread: {conversation_key}")
204204
return # not a bot-owned thread; ignore
@@ -335,7 +335,7 @@ def _is_duplicate_event(event_id):
335335
"""
336336
try:
337337
ttl = int(time.time()) + TTL_EVENT_DEDUP
338-
table.put_item(
338+
slack_bot_state_table.put_item(
339339
Item={"pk": f"{EVENT_PREFIX}{event_id}", "sk": DEDUP_SK, "ttl": ttl, "timestamp": int(time.time())},
340340
ConditionExpression="attribute_not_exists(pk)",
341341
)
@@ -350,7 +350,7 @@ def _is_duplicate_event(event_id):
350350
def _is_latest_message(conversation_key, message_ts):
351351
"""Check if message_ts is the latest bot message using session data"""
352352
try:
353-
response = table.get_item(Key={"pk": conversation_key, "sk": SESSION_SK})
353+
response = slack_bot_state_table.get_item(Key={"pk": conversation_key, "sk": SESSION_SK})
354354
if "Item" in response:
355355
latest_message_ts = response["Item"].get("latest_message_ts")
356356
return latest_message_ts == message_ts

0 commit comments

Comments
 (0)