admehta01's picture
Adding logging of input/output to Notion
d763fab
raw
history blame
2.62 kB
from transformers import AutoTokenizer, AutoModelForSequenceClassification
from scipy.special import expit
import numpy as np
import os
import gradio as gr
import requests
# set up model
authtoken = os.environ.get("TOKEN") or True
tokenizer = AutoTokenizer.from_pretrained("guidecare/feelings_and_issues", use_auth_token=authtoken)
model = AutoModelForSequenceClassification.from_pretrained("guidecare/feelings_and_issues", use_auth_token=authtoken)
all_label_names = list(model.config.id2label.values())
def predict(text):
probs = expit(model(**tokenizer([text], return_tensors="pt", padding=True)).logits.detach().numpy())
# can't use numpy for whatever reason
probs = [float(np.round(i, 2)) for i in probs[0]]
# break out issue, harm, sentiment, feeling
zipped_list = list(zip(all_label_names, probs))
print(text, zipped_list)
issues = [(i, j) for i, j in zipped_list if i.startswith('issue')]
feelings = [(i, j) for i, j in zipped_list if i.startswith('feeling')]
harm = [(i, j) for i, j in zipped_list if i.startswith('harm')]
# keep tops for each one
issues = sorted(issues, key=lambda x: x[1])[::-1][:3]
feelings = sorted(feelings, key=lambda x: x[1])[::-1][:3]
harm = sorted(harm, key=lambda x: x[1])[::-1][:1]
# top is the combo of these
top = issues + feelings + harm
logToNotion(text, top)
d = {i: j for i, j in top}
return d
def logToNotion(text, top):
url = "https://api.notion.com/v1/pages"
payload = {
"properties": {
"title": {
"title": [{
"text": {
"content": "."
}
}]
},
"input": {
"rich_text": [{
"text": {
"content": text
}
}]
},
"output": {
"rich_text": [{
"text": {
"content": ", ".join(str(x) for x in top)
}
}]
}
},
"parent": "4a220773ac694851811e87f4571ec41d"
}
headers = {
"Accept": "application/json",
"Notion-Version": "2022-02-22",
"Content-Type": "application/json",
"Authorization": "Bearer secret_lc3Weq9s87EnkNWk2Yibko91hhLuNQIEzSoeAAoriUz"
}
response = requests.post(url, json=payload, headers=headers)
iface = gr.Interface(
fn=predict,
inputs="text",
outputs="label",
#examples=["This test tomorrow is really freaking me out."]
)
iface.launch()