Skip to content

Commit 40b5400

Browse files
committed
Merge branch 'ai-apps' into ale-ai-apps-rename
2 parents 44747e8 + 249e5dd commit 40b5400

15 files changed

Lines changed: 95 additions & 40 deletions

File tree

.env.sample

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
SLACK_APP_TOKEN=YOUR_SLACK_APP_TOKEN
2+
SLACK_BOT_TOKEN=YOUR_SLACK_BOT_TOKEN
3+
# SLACK_API_URL=YOUR_SLACK_API_URL
4+
# This template uses OpenAI, but you can use any other provider!
5+
OPENAI_API_KEY=YOUR_OPENAI_API_KEY

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ env*/
1616
venv/
1717
.venv*
1818
.env*
19+
!.env.sample
1920

2021
# codecov / coverage
2122
.coverage

README.md

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,25 @@ Join the [Slack Developer Program](https://api.slack.com/developer-program) for
1717
4. Review the configuration and click *Create*
1818
5. Click *Install to Workspace* and *Allow* on the screen that follows. You'll then be redirected to the App Configuration dashboard.
1919

20-
#### Environment Variables
20+
### Environment Variables
21+
2122
Before you can run the app, you'll need to store some environment variables.
2223

23-
1. Open your app configuration page from this list, click **OAuth & Permissions** in the left hand menu, then copy the Bot User OAuth Token. You will store this in your environment as `SLACK_BOT_TOKEN`.
24-
2. Click **Basic Information** from the left hand menu and follow the steps in the App-Level Tokens section to create an app-level token with the `connections:write` scope. Copy this token. You will store this in your environment as `SLACK_APP_TOKEN`.
2524

25+
1. Rename `.env.sample` to `.env`.
26+
2. Open your apps setting page from [this list](https://api.slack.com/apps), click _OAuth & Permissions_ in the left hand menu, then copy the _Bot User OAuth Token_ into your `.env` file under `SLACK_BOT_TOKEN`.
27+
```zsh
28+
SLACK_BOT_TOKEN=YOUR_SLACK_BOT_TOKEN
29+
```
30+
3. Click _Basic Information_ from the left hand menu and follow the steps in the _App-Level Tokens_ section to create an app-level token with the `connections:write` scope. Copy that token into your `.env` as `SLACK_APP_TOKEN`.
2631
```zsh
27-
# Replace with your app token and bot token
28-
# For Windows OS, env:SLACK_BOT_TOKEN = <your-bot-token> works
29-
export SLACK_BOT_TOKEN=<your-bot-token>
30-
export SLACK_APP_TOKEN=<your-app-token>
31-
# This sample uses OpenAI's API by default, but you can switch to any other solution!
32-
export OPENAI_API_KEY=<your-openai-api-key>
32+
SLACK_APP_TOKEN=YOUR_SLACK_APP_TOKEN
3333
```
34+
4. Save your OpenAI key into `.env` under `OPENAI_API_KEY`.
35+
```zsh
36+
OPENAI_API_KEY=YOUR_OPEN_API_KEY
37+
```
38+
3439

3540
### Setup Your Local Project
3641
```zsh
@@ -84,7 +89,7 @@ Configures the new Slack Assistant features, providing a dedicated side panel UI
8489
* The `@assistant.thread_started` listener receives an event when users start new app thread.
8590
* The `@assistant.user_message` listener processes user messages in app threads or from the app **Chat** and **History** tab.
8691

87-
`llm_caller.py`, which handles OpenAI API integration and message formatting. It includes the `call_llm()` function that sends conversation threads to OpenAI's models.
92+
`ai/llm_caller.py`, which handles OpenAI API integration and message formatting. It includes the `call_llm()` function that sends conversation threads to OpenAI's models.
8893

8994
## App Distribution / OAuth
9095

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
import os
2-
from typing import List, Dict
2+
from typing import Dict, List
33

44
import openai
55
from openai import Stream
66
from openai.types.responses import ResponseStreamEvent
77

8-
98
DEFAULT_SYSTEM_CONTENT = """
109
You're an assistant in a Slack workspace.
1110
Users in the workspace will ask you to help them write something or to think better about a specific topic.

app.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
1-
import os
21
import logging
2+
import os
3+
4+
from dotenv import load_dotenv
35

46
from slack_bolt import App
57
from slack_bolt.adapter.socket_mode import SocketModeHandler
68
from slack_sdk import WebClient
79

810
from listeners import register_listeners
911

12+
# Load environment variables
13+
load_dotenv(dotenv_path=".env", override=False)
14+
1015
# Initialization
1116
logging.basicConfig(level=logging.DEBUG)
1217

app_oauth.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import logging
22
import os
3+
34
from slack_bolt import App, BoltResponse
4-
from slack_bolt.oauth.callback_options import CallbackOptions, SuccessArgs, FailureArgs
5+
from slack_bolt.oauth.callback_options import CallbackOptions, FailureArgs, SuccessArgs
56
from slack_bolt.oauth.oauth_settings import OAuthSettings
6-
77
from slack_sdk.oauth.installation_store import FileInstallationStore
88
from slack_sdk.oauth.state_store import FileOAuthStateStore
99

listeners/__init__.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
from listeners import actions
2-
from listeners import assistant
3-
from listeners import events
1+
from slack_bolt import App
42

3+
from listeners import actions, assistant, events
54

6-
def register_listeners(app):
5+
6+
def register_listeners(app: App):
77
actions.register(app)
88
assistant.register(app)
99
events.register(app)

listeners/actions/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from slack_bolt import App
2+
23
from .actions import handle_feedback
34

45

listeners/actions/actions.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,19 @@
1-
import logging
1+
from logging import Logger
22

3+
from slack_bolt import Ack
4+
from slack_sdk import WebClient
35

4-
# Handle feedback buttons (thumbs up/down)
5-
def handle_feedback(ack, body, client, logger: logging.Logger):
6+
7+
def handle_feedback(ack: Ack, body: dict, client: WebClient, logger: Logger):
8+
"""
9+
Handles user feedback on AI-generated responses via thumbs up/down buttons.
10+
11+
Args:
12+
ack: Function to acknowledge the action request
13+
body: Action payload containing feedback details (message, channel, user, action value)
14+
client: Slack WebClient for making API calls
15+
logger: Logger instance for debugging and error tracking
16+
"""
617
try:
718
ack()
819
message_ts = body["message"]["ts"]

listeners/assistant/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from slack_bolt import App
2+
23
from .assistant import assistant
34

45

0 commit comments

Comments
 (0)