88import os
99import json
1010import traceback
11+ from typing import Tuple
1112import boto3
1213from aws_lambda_powertools import Logger
14+ from aws_lambda_powertools .logging import utils
1315from aws_lambda_powertools .utilities .parameters import get_parameter
1416from mypy_boto3_dynamodb .service_resource import Table
1517
18+ # we use lru_cache for lots of configs so they are cached
19+
1620
1721@lru_cache ()
1822def get_logger () -> Logger :
19- return Logger (service = "slackBotFunction" )
23+ powertools_logger = Logger (service = "slackBotFunction" )
24+ utils .copy_config_to_registered_loggers (source_logger = powertools_logger , ignore_log_level = True )
25+ return powertools_logger
2026
2127
28+ # set up logger as its used in other functions
2229logger = get_logger ()
2330
2431
@@ -30,7 +37,7 @@ def get_slack_bot_state_table() -> Table:
3037
3138
3239@lru_cache ()
33- def get_ssm_params ():
40+ def get_ssm_params () -> Tuple [ str , str ] :
3441 bot_token_parameter = os .environ ["SLACK_BOT_TOKEN_PARAMETER" ]
3542 signing_secret_parameter = os .environ ["SLACK_SIGNING_SECRET_PARAMETER" ]
3643 try :
@@ -57,13 +64,35 @@ def get_ssm_params():
5764 return bot_token , signing_secret
5865
5966
67+ @lru_cache
68+ def get_bot_token () -> str :
69+ bot_token , _ = get_ssm_params ()
70+ return bot_token
71+
72+
73+ @lru_cache
74+ def get_guardrail_config () -> Tuple [str , str , str , str , str ]:
75+ # Bedrock configuration from environment
76+ KNOWLEDGEBASE_ID = os .environ ["KNOWLEDGEBASE_ID" ]
77+ RAG_MODEL_ID = os .environ ["RAG_MODEL_ID" ]
78+ AWS_REGION = os .environ ["AWS_REGION" ]
79+ GUARD_RAIL_ID = os .environ ["GUARD_RAIL_ID" ]
80+ GUARD_VERSION = os .environ ["GUARD_RAIL_VERSION" ]
81+
82+ logger .info (
83+ "Guardrail configuration loaded" , extra = {"guardrail_id" : GUARD_RAIL_ID , "guardrail_version" : GUARD_VERSION }
84+ )
85+ return KNOWLEDGEBASE_ID , RAG_MODEL_ID , AWS_REGION , GUARD_RAIL_ID , GUARD_VERSION
86+
87+
6088@dataclass
6189class Constants :
6290 FEEDBACK_PREFIX : str
6391 CONTEXT_TYPE_DM : str
6492 CONTEXT_TYPE_THREAD : str
6593 CHANNEL_TYPE_IM : str
6694 SESSION_SK : str
95+ PULL_REQUEST_SK : str
6796 DEDUP_SK : str
6897 EVENT_PREFIX : str
6998 FEEDBACK_PREFIX_KEY : str
@@ -74,6 +103,7 @@ class Constants:
74103 TTL_EVENT_DEDUP : int
75104 TTL_FEEDBACK : int
76105 TTL_SESSION : int
106+ PULL_REQUEST_PREFIX : str
77107
78108
79109constants = Constants (
@@ -82,6 +112,7 @@ class Constants:
82112 CONTEXT_TYPE_THREAD = "thread" ,
83113 CHANNEL_TYPE_IM = "im" ,
84114 SESSION_SK = "session" ,
115+ PULL_REQUEST_SK = "pull_request" ,
85116 DEDUP_SK = "dedup" ,
86117 EVENT_PREFIX = "event#" ,
87118 FEEDBACK_PREFIX_KEY = "feedback#" ,
@@ -92,45 +123,32 @@ class Constants:
92123 TTL_EVENT_DEDUP = 3600 , # 1 hour
93124 TTL_FEEDBACK = 7776000 , # 90 days
94125 TTL_SESSION = 2592000 , # 30 days
126+ PULL_REQUEST_PREFIX = "pr:" ,
95127)
96128
97129
98- @lru_cache
99- def get_bot_token ():
100- bot_token , _ = get_ssm_params ()
101- return bot_token
102-
103-
104- @lru_cache ()
105- def get_bot_messages ():
106-
107- # Bot response messages
108- BOT_MESSAGES = {
109- "empty_query" : "Hi there! Please ask me a question and I'll help you find information from our knowledge base." ,
110- "error_response" : "Sorry, an error occurred while processing your request. Please try again later." ,
111- "feedback_positive_thanks" : "Thank you for your feedback." ,
112- "feedback_negative_thanks" : (
113- 'Please let us know how the answer could be improved. Start your message with "feedback:"'
114- ),
115- "feedback_thanks" : "Thank you for your feedback." ,
116- "feedback_prompt" : "Was this helpful?" ,
117- "feedback_yes" : "Yes" ,
118- "feedback_no" : "No" ,
119- }
120-
121- return BOT_MESSAGES
122-
123-
124- @lru_cache
125- def get_guardrail_config ():
126- # Bedrock configuration from environment
127- KNOWLEDGEBASE_ID = os .environ ["KNOWLEDGEBASE_ID" ]
128- RAG_MODEL_ID = os .environ ["RAG_MODEL_ID" ]
129- AWS_REGION = os .environ ["AWS_REGION" ]
130- GUARD_RAIL_ID = os .environ ["GUARD_RAIL_ID" ]
131- GUARD_VERSION = os .environ ["GUARD_RAIL_VERSION" ]
132-
133- logger .info (
134- "Guardrail configuration loaded" , extra = {"guardrail_id" : GUARD_RAIL_ID , "guardrail_version" : GUARD_VERSION }
135- )
136- return KNOWLEDGEBASE_ID , RAG_MODEL_ID , AWS_REGION , GUARD_RAIL_ID , GUARD_VERSION
130+ @dataclass
131+ class BotMessages :
132+ EMPTY_QUERY : str
133+ ERROR_RESPONSE : str
134+ FEEDBACK_POSITIVE_THANKS : str
135+ FEEDBACK_NEGATIVE_THANKS : str
136+ FEEDBACK_THANKS : str
137+ FEEDBACK_PROMPT : str
138+ FEEDBACK_YES : str
139+ FEEDBACK_NO : str
140+
141+
142+ # Bot response messages
143+ bot_messages = BotMessages (
144+ EMPTY_QUERY = "Hi there! Please ask me a question and I'll help you find information from our knowledge base." ,
145+ ERROR_RESPONSE = "Sorry, an error occurred while processing your request. Please try again later." ,
146+ FEEDBACK_POSITIVE_THANKS = "Thank you for your feedback." ,
147+ FEEDBACK_NEGATIVE_THANKS = (
148+ 'Please let us know how the answer could be improved. Start your message with "feedback:"'
149+ ),
150+ FEEDBACK_THANKS = "Thank you for your feedback." ,
151+ FEEDBACK_PROMPT = "Was this helpful?" ,
152+ FEEDBACK_YES = "Yes" ,
153+ FEEDBACK_NO = "No" ,
154+ )
0 commit comments