bots/sdlc-slackbot/sdlc_slackbot/utils.py (74 lines of code) (raw):
import json
import os
from logging import getLogger
# import anthropic
import openai
logger = getLogger(__name__)
def get_form_input(values, *fields):
ret = {}
for f in fields:
container = values[f][f + "_input"]
value = container.get("value")
if value:
ret[f] = container["value"]
else:
for key, item in container.items():
if key.startswith("selected_") and item:
ret[f] = item
break
return ret
def plain_text(text):
return dict(type="plain_text", text=text)
def field(type, placeholder, **kwargs):
return dict(type=type, placeholder=plain_text(placeholder), **kwargs)
def input_block(block_id, label, element):
if "action_id" not in element:
element["action_id"] = block_id + "_input"
return dict(
type="input",
block_id=block_id,
label=plain_text(label),
element=element,
)
def submit_block(action_id):
return dict(
type="actions",
elements=[
dict(
type="button",
text=plain_text("Submit"),
action_id=action_id,
style="primary",
)
],
)
def ask_ai(prompt, context):
# return ask_claude(prompt, context) # YOU CAN USE CLAUDE HERE
response = ask_gpt(prompt, context)
# Removing leading and trailing backticks and whitespace
clean_response = response.strip("`\n ")
# Check if 'json' is at the beginning and remove it
if clean_response.lower().startswith("json"):
clean_response = clean_response[4:].strip()
# Remove a trailing } if it exists
if clean_response.endswith("}}"):
clean_response = clean_response[:-1] # Remove the last character
logger.info(clean_response)
try:
parsed_response = json.loads(clean_response)
return parsed_response
except json.JSONDecodeError as e:
logger.error(f"Failed to parse JSON response from ask_gpt: {response}\nError: {e}")
return None
def ask_gpt(prompt, context):
response = openai.chat.completions.create(
model="gpt-4-32k",
messages=[
{"role": "system", "content": prompt},
{"role": "user", "content": context},
],
)
return response.choices[0].message.content
def ask_claude(prompt, context):
client = anthropic.Anthropic(api_key=os.environ["CLAUDE_API_KEY"])
message = client.messages.create(
model="claude-3-opus-20240229",
max_tokens=4096,
messages=[{"role": "user", "content": prompt}],
)
return message.content