mirror of
https://github.com/danswer-ai/danswer.git
synced 2025-06-24 23:11:01 +02:00
Misc slack bot improvements
This commit is contained in:
parent
7972c8a71e
commit
ccbc69d153
@ -50,6 +50,9 @@ def _build_custom_semantic_identifier(
|
|||||||
truncated_blurb = UserIdReplacer.replace_tags_basic(truncated_blurb)
|
truncated_blurb = UserIdReplacer.replace_tags_basic(truncated_blurb)
|
||||||
truncated_blurb = UserIdReplacer.replace_channels_basic(truncated_blurb)
|
truncated_blurb = UserIdReplacer.replace_channels_basic(truncated_blurb)
|
||||||
truncated_blurb = UserIdReplacer.replace_special_mentions(truncated_blurb)
|
truncated_blurb = UserIdReplacer.replace_special_mentions(truncated_blurb)
|
||||||
|
truncated_blurb = UserIdReplacer.replace_links(truncated_blurb)
|
||||||
|
# stop as soon as we see a newline, since these break the link
|
||||||
|
truncated_blurb = truncated_blurb.split("\n")[0]
|
||||||
if truncated_blurb:
|
if truncated_blurb:
|
||||||
return f"#{semantic_identifier}: {truncated_blurb}"
|
return f"#{semantic_identifier}: {truncated_blurb}"
|
||||||
else:
|
else:
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
from slack_sdk import WebClient
|
||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
|
|
||||||
from danswer.configs.constants import QAFeedbackType
|
from danswer.configs.constants import QAFeedbackType
|
||||||
@ -5,7 +6,14 @@ from danswer.db.engine import get_sqlalchemy_engine
|
|||||||
from danswer.db.feedback import update_query_event_feedback
|
from danswer.db.feedback import update_query_event_feedback
|
||||||
|
|
||||||
|
|
||||||
def handle_qa_feedback(query_id: int, feedback_type: QAFeedbackType) -> None:
|
def handle_qa_feedback(
|
||||||
|
query_id: int,
|
||||||
|
feedback_type: QAFeedbackType,
|
||||||
|
client: WebClient,
|
||||||
|
user_id_to_post_confirmation: str,
|
||||||
|
channel_id_to_post_confirmation: str,
|
||||||
|
thread_ts_to_post_confirmation: str,
|
||||||
|
) -> None:
|
||||||
engine = get_sqlalchemy_engine()
|
engine = get_sqlalchemy_engine()
|
||||||
with Session(engine) as db_session:
|
with Session(engine) as db_session:
|
||||||
update_query_event_feedback(
|
update_query_event_feedback(
|
||||||
@ -14,3 +22,11 @@ def handle_qa_feedback(query_id: int, feedback_type: QAFeedbackType) -> None:
|
|||||||
user_id=None, # no "user" for Slack bot for now
|
user_id=None, # no "user" for Slack bot for now
|
||||||
db_session=db_session,
|
db_session=db_session,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# post message to slack confirming that feedback was received
|
||||||
|
client.chat_postEphemeral(
|
||||||
|
channel=channel_id_to_post_confirmation,
|
||||||
|
user=user_id_to_post_confirmation,
|
||||||
|
thread_ts=thread_ts_to_post_confirmation,
|
||||||
|
text="Thanks for your feedback!",
|
||||||
|
)
|
||||||
|
@ -107,6 +107,8 @@ def handle_message(
|
|||||||
channel=channel,
|
channel=channel,
|
||||||
blocks=blocks,
|
blocks=blocks,
|
||||||
thread_ts=message_ts_to_respond_to,
|
thread_ts=message_ts_to_respond_to,
|
||||||
|
# don't unfurl, since otherwise we will have 5+ previews which makes the message very long
|
||||||
|
unfurl=False,
|
||||||
)
|
)
|
||||||
except Exception:
|
except Exception:
|
||||||
logger.exception(
|
logger.exception(
|
||||||
|
@ -146,10 +146,17 @@ def _process_slack_event(client: SocketModeClient, req: SocketModeRequest) -> No
|
|||||||
return
|
return
|
||||||
|
|
||||||
block_id = cast(str, action.get("block_id"))
|
block_id = cast(str, action.get("block_id"))
|
||||||
|
user_id = cast(str, req.payload["user"]["id"])
|
||||||
|
channel_id = cast(str, req.payload["container"]["channel_id"])
|
||||||
|
thread_ts = cast(str, req.payload["container"]["thread_ts"])
|
||||||
query_event_id = get_query_event_id_from_block_id(block_id)
|
query_event_id = get_query_event_id_from_block_id(block_id)
|
||||||
handle_qa_feedback(
|
handle_qa_feedback(
|
||||||
query_id=query_event_id,
|
query_id=query_event_id,
|
||||||
feedback_type=feedback_type,
|
feedback_type=feedback_type,
|
||||||
|
client=client.web_client,
|
||||||
|
user_id_to_post_confirmation=user_id,
|
||||||
|
channel_id_to_post_confirmation=channel_id,
|
||||||
|
thread_ts_to_post_confirmation=thread_ts,
|
||||||
)
|
)
|
||||||
|
|
||||||
logger.info(f"Successfully handled QA feedback for event: {query_event_id}")
|
logger.info(f"Successfully handled QA feedback for event: {query_event_id}")
|
||||||
|
@ -29,6 +29,7 @@ def respond_in_thread(
|
|||||||
text: str | None = None,
|
text: str | None = None,
|
||||||
blocks: list[Block] | None = None,
|
blocks: list[Block] | None = None,
|
||||||
metadata: Metadata | None = None,
|
metadata: Metadata | None = None,
|
||||||
|
unfurl: bool = True,
|
||||||
) -> None:
|
) -> None:
|
||||||
if not text and not blocks:
|
if not text and not blocks:
|
||||||
raise ValueError("One of `text` or `blocks` must be provided")
|
raise ValueError("One of `text` or `blocks` must be provided")
|
||||||
@ -45,6 +46,8 @@ def respond_in_thread(
|
|||||||
blocks=blocks,
|
blocks=blocks,
|
||||||
thread_ts=thread_ts,
|
thread_ts=thread_ts,
|
||||||
metadata=metadata,
|
metadata=metadata,
|
||||||
|
unfurl_links=unfurl,
|
||||||
|
unfurl_media=unfurl,
|
||||||
)
|
)
|
||||||
if not response.get("ok"):
|
if not response.get("ok"):
|
||||||
raise RuntimeError(f"Unable to post message: {response}")
|
raise RuntimeError(f"Unable to post message: {response}")
|
||||||
|
@ -179,3 +179,18 @@ class UserIdReplacer:
|
|||||||
message = message.replace("<!here>", "@here")
|
message = message.replace("<!here>", "@here")
|
||||||
message = message.replace("<!everyone>", "@everyone")
|
message = message.replace("<!everyone>", "@everyone")
|
||||||
return message
|
return message
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def replace_links(message: str) -> str:
|
||||||
|
"""Replaces slack links e.g. `<URL>` -> `URL` and `<URL|DISPLAY>` -> `DISPLAY`"""
|
||||||
|
# Find user IDs in the message
|
||||||
|
possible_link_matches = re.findall(r"<(.*?)>", message)
|
||||||
|
for possible_link in possible_link_matches:
|
||||||
|
if possible_link[0] not in ["#", "@", "!"]:
|
||||||
|
link_display = (
|
||||||
|
possible_link
|
||||||
|
if "|" not in possible_link
|
||||||
|
else possible_link.split("|")[1]
|
||||||
|
)
|
||||||
|
message = message.replace(f"<{possible_link}>", link_display)
|
||||||
|
return message
|
||||||
|
Loading…
x
Reference in New Issue
Block a user