Skip to content

Commit

Permalink
Add removed code (#36)
Browse files Browse the repository at this point in the history
  • Loading branch information
fedeq authored Jul 19, 2023
1 parent 02e71fb commit c20de78
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 16 deletions.
38 changes: 32 additions & 6 deletions src/services/api_service.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,25 @@
import json
import os

from urllib.request import Request, urlopen
import requests

BASE_URL = os.environ["API_BASE_URL"]
SHARED_SECRET = os.environ["API_SHARED_SECRET"]


def get_key(team_id):
url = f"{BASE_URL}/api/organization/get_key/{team_id}"
headers = {"X-Shared-Secret": os.environ["API_SHARED_SECRET"]}
def get_team_data(team_id):
url = f"{BASE_URL}/api/organization/get_team_data/{team_id}"
headers = {"X-Shared-Secret": SHARED_SECRET}
response = requests.get(url=url, headers=headers, timeout=30)
data = response.json()
if (data.get("error") is not None):
raise Exception(data["error"])
return {"openai_key": data["openai_key"], "slack_bot_token": data["slack_bot_token"]}
return {
"openai_key": data["openai_key"],
"slack_bot_token": data["slack_bot_token"],
"has_reached_request_limit": data["has_reached_request_limit"],
"owner_email": data["owner_email"],
}


def revoke_token(team_id):
Expand All @@ -31,4 +38,23 @@ def revoke_token(team_id):
data = response.json()
if (data.get("error") is not None):
raise Exception(data["error"])
return
return

def increment_request_count(team_id):
url = f"{BASE_URL}/api/slack/increment_request_count"
headers = {
"X-Shared-Secret": SHARED_SECRET,
"Content-Type": "application/json",
}
response = requests.post(
url=url,
headers=headers,
json={
"team_id": team_id,
},
timeout=30
)
data = response.json()
if (data.get("error") is not None):
raise Exception(data["error"])
return
2 changes: 0 additions & 2 deletions src/services/openai_service.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import openai
from openai.error import AuthenticationError, RateLimitError
import os
from services.api_service import get_key

# openai.api_key = os.environ["OPENAI_API_KEY"]

Expand Down
35 changes: 27 additions & 8 deletions src/services/slack_service.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
from threading import Thread
from slack_bolt import App
import time
import os
import re
from services.openai_service import respond_to_user
from lib.retry import retry
from .api_service import get_key, revoke_token
from .api_service import get_team_data, increment_request_count, revoke_token

# grabs the credentials from .env directly
slack_app = App()
Expand Down Expand Up @@ -134,19 +135,35 @@ def process_event_payload(payload):
team_id = event.get("team")
user = event.get("user")
try:
keys = get_key(team_id)
thread_to_reply = thread_ts
if thread_ts != ts:
thread_to_reply = ts

# Get neccessary keys
team_data = get_team_data(team_id)
slack_bot_token = team_data["slack_bot_token"]
openAi_key = team_data["openai_key"] if team_data["openai_key"] else os.environ["OPENAI_API_KEY"]

# Check quota
if team_data["has_reached_request_limit"] == True:
send_message(
channel,
thread_to_reply,
f"It appears you've exceeded the usage limit. To continue enjoying our services without interruption, kindly get in touch with your organization's administrator on {team_data['owner_email']} and request for a subscription upgrade.",
slack_bot_token
)
return

# Send 'thinking' message while we process the request
msg_ts = send_message(
channel,
thread_to_reply,
"*Thinking...*",
keys["slack_bot_token"]
slack_bot_token
)

username = get_user_name(user, keys["slack_bot_token"])
# Get messages in thread
username = get_user_name(user, slack_bot_token)
messages = [{
"role": "user",
"content": text + ". " + username,
Expand All @@ -157,17 +174,19 @@ def process_event_payload(payload):
get_thread_messages_with_usernames_json(
channel,
thread_ts,
keys["slack_bot_token"]
slack_bot_token
)
or messages
)

start_time = time.perf_counter()
response = respond_to_user(messages, keys["openai_key"])
response = respond_to_user(messages, openAi_key)
end_time = time.perf_counter()
print(f"response generated in {round(end_time - start_time, 2)}s")

return update_message(channel, thread_to_reply, msg_ts, response, keys["slack_bot_token"])
print(f"response generated in {round(end_time - start_time, 2)}s")
Thread(target=increment_request_count, args=(team_id,)).start()

return update_message(channel, thread_to_reply, msg_ts, response, slack_bot_token)
except Exception as error:
# Improve error handling
print(error)
Expand Down

0 comments on commit c20de78

Please sign in to comment.