ziggycross
commited on
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):
|