ziggycross commited on
Commit
5963990
1 Parent(s): 6f97851

Added response aligner.

Browse files
Files changed (2) hide show
  1. requirements.txt +2 -1
  2. therapist.py +16 -1
requirements.txt CHANGED
@@ -1,4 +1,5 @@
 
1
  flask
2
  flask_CORS
3
- datetime
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):