llama-index
75 строк · 2.0 Кб
1"""Slack tool spec."""
2
3import logging
4from datetime import datetime
5from ssl import SSLContext
6from typing import List, Optional
7
8from llama_index.legacy.readers.slack import SlackReader
9from llama_index.legacy.schema import Document
10from llama_index.legacy.tools.tool_spec.base import BaseToolSpec
11
12logger = logging.getLogger(__name__)
13
14
15class SlackToolSpec(BaseToolSpec):
16"""Slack tool spec."""
17
18spec_functions = ["load_data", "send_message", "fetch_channels"]
19
20def __init__(
21self,
22slack_token: Optional[str] = None,
23ssl: Optional[SSLContext] = None,
24earliest_date: Optional[datetime] = None,
25latest_date: Optional[datetime] = None,
26) -> None:
27"""Initialize with parameters."""
28self.reader = SlackReader(
29slack_token=slack_token,
30ssl=ssl,
31earliest_date=earliest_date,
32latest_date=latest_date,
33)
34
35def load_data(
36self,
37channel_ids: List[str],
38reverse_chronological: bool = True,
39) -> List[Document]:
40"""Load data from the input directory."""
41return self.reader.load_data(
42channel_ids=channel_ids,
43reverse_chronological=reverse_chronological,
44)
45
46def send_message(
47self,
48channel_id: str,
49message: str,
50) -> None:
51"""Send a message to a channel given the channel ID."""
52slack_client = self.reader.client
53try:
54msg_result = slack_client.chat_postMessage(
55channel=channel_id,
56text=message,
57)
58logger.info(msg_result)
59except Exception as e:
60logger.error(e)
61raise
62
63def fetch_channels(
64self,
65) -> List[str]:
66"""Fetch a list of relevant channels."""
67slack_client = self.reader.client
68try:
69msg_result = slack_client.conversations_list()
70logger.info(msg_result)
71except Exception as e:
72logger.error(e)
73raise
74
75return msg_result["channels"]
76