Commit
·
5963990
1
Parent(s):
6f97851
Added response aligner.
Browse files- requirements.txt +2 -1
- therapist.py +16 -1
requirements.txt
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
|
|
| 1 |
flask
|
| 2 |
flask_CORS
|
| 3 |
-
|
| 4 |
openai
|
|
|
|
| 1 |
+
datetime
|
| 2 |
flask
|
| 3 |
flask_CORS
|
| 4 |
+
nltk
|
| 5 |
openai
|
therapist.py
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
|
|
| 1 |
import openai
|
| 2 |
import os
|
| 3 |
import questionnaires
|
|
@@ -17,8 +18,21 @@ def listify(options: list, end_and=True, lower=True, use_format=None):
|
|
| 17 |
return ", ".join(options) if len(options) > 2 else " ".join(options)
|
| 18 |
|
| 19 |
def content_summarizer():
|
|
|
|
|
|
|
|
|
|
| 20 |
pass
|
| 21 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 22 |
def assess_response(question: str, response:str, options: list, uses_scale=True, context="a psychological evaluation"):
|
| 23 |
context_prompt = "" if context=="" else f"The context of this discussion is {context}. "
|
| 24 |
if uses_scale is True:
|
|
@@ -51,6 +65,8 @@ def questionnaire_chooser(message):
|
|
| 51 |
options = options,
|
| 52 |
uses_scale = False
|
| 53 |
)
|
|
|
|
|
|
|
| 54 |
|
| 55 |
match topic.lower():
|
| 56 |
case "suicidal":
|
|
@@ -76,7 +92,6 @@ def bot_response(next_question=None):
|
|
| 76 |
pass
|
| 77 |
|
| 78 |
def get_question(questionnaire, number):
|
| 79 |
-
print(questionnaire, number)
|
| 80 |
return questionnaires.questions[questionnaire][number]
|
| 81 |
|
| 82 |
def generate_response(user, message):
|
|
|
|
| 1 |
+
from nltk.metrics.distance import edit_distance
|
| 2 |
import openai
|
| 3 |
import os
|
| 4 |
import questionnaires
|
|
|
|
| 18 |
return ", ".join(options) if len(options) > 2 else " ".join(options)
|
| 19 |
|
| 20 |
def content_summarizer():
|
| 21 |
+
"""
|
| 22 |
+
Summarize previous messages for new prompts to pass as context.
|
| 23 |
+
"""
|
| 24 |
pass
|
| 25 |
|
| 26 |
+
def response_aligner(options:list, response:str):
|
| 27 |
+
"""
|
| 28 |
+
Takes a series of options, and a response as given by Openai.
|
| 29 |
+
Align the response to the nearest option (edit distance).
|
| 30 |
+
This is necessary as sometimes openai will return a response slightly different to the ones in prompt.
|
| 31 |
+
"""
|
| 32 |
+
distances = [(option, edit_distance(option, response)) for option in options]
|
| 33 |
+
distances = sorted(distances, key=lambda item: item[1])
|
| 34 |
+
return distances[0][0]
|
| 35 |
+
|
| 36 |
def assess_response(question: str, response:str, options: list, uses_scale=True, context="a psychological evaluation"):
|
| 37 |
context_prompt = "" if context=="" else f"The context of this discussion is {context}. "
|
| 38 |
if uses_scale is True:
|
|
|
|
| 65 |
options = options,
|
| 66 |
uses_scale = False
|
| 67 |
)
|
| 68 |
+
|
| 69 |
+
if topic not in options: topic = response_aligner(options, topic)
|
| 70 |
|
| 71 |
match topic.lower():
|
| 72 |
case "suicidal":
|
|
|
|
| 92 |
pass
|
| 93 |
|
| 94 |
def get_question(questionnaire, number):
|
|
|
|
| 95 |
return questionnaires.questions[questionnaire][number]
|
| 96 |
|
| 97 |
def generate_response(user, message):
|