mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-05-31 19:45:15 +02:00
Add teams connector similar to slack
This commit is contained in:
parent
fabbae2b48
commit
73a9dccefc
21 changed files with 1844 additions and 1 deletions
|
|
@ -2269,6 +2269,80 @@ class ConnectorService:
|
|||
|
||||
return result_object, discord_docs
|
||||
|
||||
async def search_teams(
|
||||
self,
|
||||
user_query: str,
|
||||
search_space_id: int,
|
||||
top_k: int = 20,
|
||||
start_date: datetime | None = None,
|
||||
end_date: datetime | None = None,
|
||||
) -> tuple:
|
||||
"""
|
||||
Search for Microsoft Teams messages and return both the source information and langchain documents.
|
||||
|
||||
Uses combined chunk-level and document-level hybrid search with RRF fusion.
|
||||
|
||||
Args:
|
||||
user_query: The user's query
|
||||
search_space_id: The search space ID to search in
|
||||
top_k: Maximum number of results to return
|
||||
start_date: Optional start date for filtering documents by updated_at
|
||||
end_date: Optional end date for filtering documents by updated_at
|
||||
|
||||
Returns:
|
||||
tuple: (sources_info, langchain_documents)
|
||||
"""
|
||||
teams_docs = await self._combined_rrf_search(
|
||||
query_text=user_query,
|
||||
search_space_id=search_space_id,
|
||||
document_type="TEAMS_CONNECTOR",
|
||||
top_k=top_k,
|
||||
start_date=start_date,
|
||||
end_date=end_date,
|
||||
)
|
||||
|
||||
# Early return if no results
|
||||
if not teams_docs:
|
||||
return {
|
||||
"id": 53,
|
||||
"name": "Microsoft Teams",
|
||||
"type": "TEAMS_CONNECTOR",
|
||||
"sources": [],
|
||||
}, []
|
||||
|
||||
def _title_fn(_doc_info: dict[str, Any], metadata: dict[str, Any]) -> str:
|
||||
team_name = metadata.get("team_name", "Unknown Team")
|
||||
channel_name = metadata.get("channel_name", "Unknown Channel")
|
||||
message_date = metadata.get("start_date", "")
|
||||
title = f"Teams: {team_name} - {channel_name}"
|
||||
if message_date:
|
||||
title += f" ({message_date})"
|
||||
return title
|
||||
|
||||
def _url_fn(_doc_info: dict[str, Any], metadata: dict[str, Any]) -> str:
|
||||
team_id = metadata.get("team_id", "")
|
||||
channel_id = metadata.get("channel_id", "")
|
||||
if team_id and channel_id:
|
||||
return f"https://teams.microsoft.com/l/channel/{channel_id}/General?groupId={team_id}"
|
||||
return ""
|
||||
|
||||
sources_list = self._build_chunk_sources_from_documents(
|
||||
teams_docs,
|
||||
title_fn=_title_fn,
|
||||
url_fn=_url_fn,
|
||||
description_fn=lambda chunk, _doc_info, _metadata: chunk.get("content", ""),
|
||||
)
|
||||
|
||||
# Create result object
|
||||
result_object = {
|
||||
"id": 53,
|
||||
"name": "Microsoft Teams",
|
||||
"type": "TEAMS_CONNECTOR",
|
||||
"sources": sources_list,
|
||||
}
|
||||
|
||||
return result_object, teams_docs
|
||||
|
||||
async def search_luma(
|
||||
self,
|
||||
user_query: str,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue