diff --git a/backend/onyx/db/constants.py b/backend/onyx/db/constants.py index 9494ff23f4ea..58573d34244a 100644 --- a/backend/onyx/db/constants.py +++ b/backend/onyx/db/constants.py @@ -1,2 +1,2 @@ SLACK_BOT_PERSONA_PREFIX = "__slack_bot_persona__" -DEFAULT_PERSONA_SLACKCHANNEL_NAME = "DEFAULT" +DEFAULT_PERSONA_SLACK_CHANNEL_NAME = "DEFAULT_SLACK_CHANNEL" diff --git a/backend/onyx/db/slack_channel_config.py b/backend/onyx/db/slack_channel_config.py index 543fcb09d784..27df3891bb23 100644 --- a/backend/onyx/db/slack_channel_config.py +++ b/backend/onyx/db/slack_channel_config.py @@ -6,7 +6,7 @@ from onyx.configs.chat_configs import MAX_CHUNKS_FED_TO_CHAT from onyx.context.search.enums import RecencyBiasSetting -from onyx.db.constants import DEFAULT_PERSONA_SLACKCHANNEL_NAME +from onyx.db.constants import DEFAULT_PERSONA_SLACK_CHANNEL_NAME from onyx.db.constants import SLACK_BOT_PERSONA_PREFIX from onyx.db.models import ChannelConfig from onyx.db.models import Persona @@ -24,7 +24,7 @@ def _build_persona_name(channel_name: str | None) -> str: - return f"{SLACK_BOT_PERSONA_PREFIX}{channel_name if channel_name else DEFAULT_PERSONA_SLACKCHANNEL_NAME}" + return f"{SLACK_BOT_PERSONA_PREFIX}{channel_name if channel_name else DEFAULT_PERSONA_SLACK_CHANNEL_NAME}" def _cleanup_relationships(db_session: Session, persona_id: int) -> None: diff --git a/backend/onyx/server/manage/models.py b/backend/onyx/server/manage/models.py index 20dff01c056f..7c74b9765e88 100644 --- a/backend/onyx/server/manage/models.py +++ b/backend/onyx/server/manage/models.py @@ -286,7 +286,3 @@ class AllUsersResponse(BaseModel): class SlackChannel(BaseModel): id: str name: str - - -class SlackChannelsResponse(BaseModel): - channels: dict[str, SlackChannel] diff --git a/backend/onyx/server/manage/slack_bot.py b/backend/onyx/server/manage/slack_bot.py index 3e18584fe497..6f43b441c439 100644 --- a/backend/onyx/server/manage/slack_bot.py +++ b/backend/onyx/server/manage/slack_bot.py @@ -31,7 +31,6 @@ from onyx.server.manage.models import SlackChannel from onyx.server.manage.models import SlackChannelConfig from onyx.server.manage.models import SlackChannelConfigCreationRequest -from onyx.server.manage.models import SlackChannelsResponse from onyx.server.manage.validate_tokens import validate_app_token from onyx.server.manage.validate_tokens import validate_bot_token from onyx.utils.telemetry import create_milestone_and_report @@ -340,13 +339,13 @@ def list_bot_configs( @router.get( - "/admin/slack-app/bots/{bot_id}/channels_from_slack_api", + "/admin/slack-app/bots/{bot_id}/channels", ) def get_all_channels_from_slack_api( bot_id: int, db_session: Session = Depends(get_session), _: User | None = Depends(current_admin_user), -) -> SlackChannelsResponse: +) -> list[SlackChannel]: tokens = fetch_slack_bot_tokens(db_session, bot_id) if not tokens or "bot_token" not in tokens: raise HTTPException( @@ -357,7 +356,7 @@ def get_all_channels_from_slack_api( client = WebClient(token=bot_token) try: - channels = {} + channels = [] cursor = None while True: response = client.conversations_list( @@ -367,15 +366,13 @@ def get_all_channels_from_slack_api( cursor=cursor, ) for channel in response["channels"]: - channels[channel["name"]] = SlackChannel( - id=channel["id"], name=channel["name"] - ) + channels.append(SlackChannel(id=channel["id"], name=channel["name"])) cursor = response.get("response_metadata", {}).get("next_cursor") if not cursor: break - return SlackChannelsResponse(channels=channels) + return channels except SlackApiError as e: raise HTTPException( status_code=500, detail=f"Error fetching channels from Slack API: {str(e)}" diff --git a/web/src/app/admin/bots/[bot-id]/channels/SlackChannelConfigFormFields.tsx b/web/src/app/admin/bots/[bot-id]/channels/SlackChannelConfigFormFields.tsx index 556efbbe6bc9..7f5681969608 100644 --- a/web/src/app/admin/bots/[bot-id]/channels/SlackChannelConfigFormFields.tsx +++ b/web/src/app/admin/bots/[bot-id]/channels/SlackChannelConfigFormFields.tsx @@ -169,12 +169,12 @@ export function SlackChannelConfigFormFields({ }, [documentSets]); const { data: channelOptions, isLoading } = useSWR( - `/api/manage/admin/slack-app/bots/${slack_bot_id}/channels_from_slack_api`, + `/api/manage/admin/slack-app/bots/${slack_bot_id}/channels`, async (url: string) => { const channels = await fetchSlackChannels(slack_bot_id); - return Object.entries(channels).map(([name, id]) => ({ - name, - value: id as string, + return channels.map((channel: any) => ({ + name: channel.name, + value: channel.id, })); } ); diff --git a/web/src/app/admin/bots/[bot-id]/lib.ts b/web/src/app/admin/bots/[bot-id]/lib.ts index b81231e1be9d..1984441643b2 100644 --- a/web/src/app/admin/bots/[bot-id]/lib.ts +++ b/web/src/app/admin/bots/[bot-id]/lib.ts @@ -96,15 +96,12 @@ export function isPersonaASlackBotPersona(persona: Persona) { } export const fetchSlackChannels = async (botId: number) => { - return fetch( - `/api/manage/admin/slack-app/bots/${botId}/channels_from_slack_api`, - { - method: "GET", - headers: { - "Content-Type": "application/json", - }, - } - ).then((response) => { + return fetch(`/api/manage/admin/slack-app/bots/${botId}/channels`, { + method: "GET", + headers: { + "Content-Type": "application/json", + }, + }).then((response) => { if (!response.ok) { throw new Error("Failed to fetch Slack channels"); } diff --git a/web/src/lib/types.ts b/web/src/lib/types.ts index 219622ac3c93..0dbeda286785 100644 --- a/web/src/lib/types.ts +++ b/web/src/lib/types.ts @@ -266,6 +266,11 @@ export interface SlackChannelConfig { is_default: boolean; } +export interface SlackChannelDescriptor { + id: string; + name: string; +} + export interface SlackBot { id: number; name: string;