Greg Thompson commited on
Commit
fbc5903
1 Parent(s): 8acf519

Fix spacing and name error

Browse files
app.py CHANGED
@@ -72,25 +72,25 @@ async def programmatic_message_manager(request: Request):
72
  Output
73
  context: dict - the information for the current state
74
  {
75
- "user": "47897891",
76
- "state": "welcome-message-state",
77
- "bot_message": "Welcome to Rori!",
78
- "user_message": "",
79
  "type": "ask"
80
  }
81
  """
82
  data_dict = await request.json()
83
- context = manage_conversational_response(data_dict)
84
  return JSONResponse(context)
85
 
86
 
87
  @app.post("/nlu")
88
  async def evaluate_user_message_with_nlu_api(request: Request):
89
  """ Calls nlu evaluation and returns the nlu_response
90
-
91
  Input
92
  - request.body: json - message data for the most recent user response
93
-
94
  Output
95
  - int_data_dict or sent_data_dict: dict - the type of NLU run and result
96
  {'type':'integer', 'data': '8'}
 
72
  Output
73
  context: dict - the information for the current state
74
  {
75
+ "user": "47897891",
76
+ "state": "welcome-message-state",
77
+ "bot_message": "Welcome to Rori!",
78
+ "user_message": "",
79
  "type": "ask"
80
  }
81
  """
82
  data_dict = await request.json()
83
+ context = manage_conversation_response(data_dict)
84
  return JSONResponse(context)
85
 
86
 
87
  @app.post("/nlu")
88
  async def evaluate_user_message_with_nlu_api(request: Request):
89
  """ Calls nlu evaluation and returns the nlu_response
90
+
91
  Input
92
  - request.body: json - message data for the most recent user response
93
+
94
  Output
95
  - int_data_dict or sent_data_dict: dict - the type of NLU run and result
96
  {'type':'integer', 'data': '8'}
mathtext_fastapi/conversation_manager.py CHANGED
@@ -12,7 +12,7 @@ load_dotenv()
12
 
13
  def create_text_message(message_text, whatsapp_id):
14
  """ Fills a template with input values to send a text message to Whatsapp
15
-
16
  Inputs
17
  - message_text: str - the content that the message should display
18
  - whatsapp_id: str - the message recipient's phone number
@@ -28,7 +28,7 @@ def create_text_message(message_text, whatsapp_id):
28
  "text": {
29
  "body": message_text
30
  }
31
- }
32
  return message_data
33
 
34
 
@@ -48,7 +48,7 @@ def create_button_objects(button_options):
48
  "type": "reply",
49
  "reply": {
50
  "id": "inquiry-yes",
51
- "title": option['text']
52
  }
53
  }
54
  button_arr.append(button_choice)
@@ -59,9 +59,9 @@ def create_interactive_message(message_text, button_options, whatsapp_id):
59
  """ Fills a template to create a button message for Whatsapp
60
 
61
  * NOTE: Not fully implemented and tested
62
- * NOTE/TODO: It is possible to create other kinds of messages
63
  with the 'interactive message' template
64
- * Documentation:
65
  https://whatsapp.turn.io/docs/api/messages#interactive-messages
66
 
67
  Inputs
@@ -124,7 +124,7 @@ def return_next_conversational_state(context_data, user_message):
124
  ],
125
  'input_prompt': "Here's the first one... What's 3-1?",
126
  'state': "subtract-question-sequence"
127
- }
128
  elif user_message == 'exit':
129
  message_package = {
130
  'messages': [
@@ -132,7 +132,7 @@ def return_next_conversational_state(context_data, user_message):
132
  ],
133
  'input_prompt': "",
134
  'state': "exit"
135
- }
136
  else:
137
  message_package = {
138
  'messages': [
@@ -162,15 +162,15 @@ def manage_conversation_response(data_json):
162
  """
163
  message_data = data_json.get('message_data', '')
164
  context_data = data_json.get('context_data', '')
165
-
166
  whatsapp_id = message_data['author_id']
167
  user_message = message_data['message_body']
168
 
169
  # TODO: Need to incorporate nlu_response into wormhole by checking answers against database (spreadsheet?)
170
  nlu_response = evaluate_message_with_nlu(message_data)
171
-
172
  message_package = return_next_conversational_state(
173
- context_data,
174
  user_message
175
  )
176
 
@@ -183,18 +183,18 @@ def manage_conversation_response(data_json):
183
  for message in message_package['messages']:
184
  data = create_text_message(message, whatsapp_id)
185
  r = requests.post(
186
- f'https://whatsapp.turn.io/v1/messages',
187
- data=json.dumps(data),
188
  headers=headers
189
  )
190
 
191
  # Update the context object with the new state of the conversation
192
  context = {
193
  "context":{
194
- "user": whatsapp_id,
195
- "state": message_package['state'],
196
- "bot_message": message_package['input_prompt'],
197
- "user_message": user_message,
198
  "type": 'ask'
199
  }
200
  }
@@ -217,17 +217,17 @@ def manage_conversation_response(data_json):
217
  # "type": "reply",
218
  # "reply": {
219
  # "id": "inquiry-yes",
220
- # "title": "Yes"
221
  # }
222
  # },
223
  # {
224
  # "type": "reply",
225
  # "reply": {
226
  # "id": "inquiry-no",
227
- # "title": "No"
228
  # }
229
  # }
230
  # ]
231
  # }
232
  # }
233
- # }
 
12
 
13
  def create_text_message(message_text, whatsapp_id):
14
  """ Fills a template with input values to send a text message to Whatsapp
15
+
16
  Inputs
17
  - message_text: str - the content that the message should display
18
  - whatsapp_id: str - the message recipient's phone number
 
28
  "text": {
29
  "body": message_text
30
  }
31
+ }
32
  return message_data
33
 
34
 
 
48
  "type": "reply",
49
  "reply": {
50
  "id": "inquiry-yes",
51
+ "title": option['text']
52
  }
53
  }
54
  button_arr.append(button_choice)
 
59
  """ Fills a template to create a button message for Whatsapp
60
 
61
  * NOTE: Not fully implemented and tested
62
+ * NOTE/TODO: It is possible to create other kinds of messages
63
  with the 'interactive message' template
64
+ * Documentation:
65
  https://whatsapp.turn.io/docs/api/messages#interactive-messages
66
 
67
  Inputs
 
124
  ],
125
  'input_prompt': "Here's the first one... What's 3-1?",
126
  'state': "subtract-question-sequence"
127
+ }
128
  elif user_message == 'exit':
129
  message_package = {
130
  'messages': [
 
132
  ],
133
  'input_prompt': "",
134
  'state': "exit"
135
+ }
136
  else:
137
  message_package = {
138
  'messages': [
 
162
  """
163
  message_data = data_json.get('message_data', '')
164
  context_data = data_json.get('context_data', '')
165
+
166
  whatsapp_id = message_data['author_id']
167
  user_message = message_data['message_body']
168
 
169
  # TODO: Need to incorporate nlu_response into wormhole by checking answers against database (spreadsheet?)
170
  nlu_response = evaluate_message_with_nlu(message_data)
171
+
172
  message_package = return_next_conversational_state(
173
+ context_data,
174
  user_message
175
  )
176
 
 
183
  for message in message_package['messages']:
184
  data = create_text_message(message, whatsapp_id)
185
  r = requests.post(
186
+ f'https://whatsapp.turn.io/v1/messages',
187
+ data=json.dumps(data),
188
  headers=headers
189
  )
190
 
191
  # Update the context object with the new state of the conversation
192
  context = {
193
  "context":{
194
+ "user": whatsapp_id,
195
+ "state": message_package['state'],
196
+ "bot_message": message_package['input_prompt'],
197
+ "user_message": user_message,
198
  "type": 'ask'
199
  }
200
  }
 
217
  # "type": "reply",
218
  # "reply": {
219
  # "id": "inquiry-yes",
220
+ # "title": "Yes"
221
  # }
222
  # },
223
  # {
224
  # "type": "reply",
225
  # "reply": {
226
  # "id": "inquiry-no",
227
+ # "title": "No"
228
  # }
229
  # }
230
  # ]
231
  # }
232
  # }
233
+ # }
mathtext_fastapi/logging.py CHANGED
@@ -7,7 +7,7 @@ from supabase import create_client
7
  load_dotenv()
8
 
9
  SUPA = create_client(
10
- os.environ.get('SUPABASE_URL'),
11
  os.environ.get('SUPABASE_KEY')
12
  )
13
 
@@ -30,25 +30,24 @@ def get_or_create_supabase_entry(table_name, insert_data, check_variable=None):
30
 
31
  Result
32
  - logged_data - an object with the Supabase data
33
-
34
  """
35
  if table_name == 'contact':
36
  resp = SUPA.table('contact').select("*").eq(
37
- "original_contact_id",
38
  insert_data['original_contact_id']
39
  ).eq(
40
- "project",
41
  insert_data['project']
42
  ).execute()
43
  else:
44
  resp = SUPA.table(table_name).select("*").eq(
45
- check_variable,
46
  insert_data[check_variable]
47
  ).execute()
48
 
49
  if len(resp.data) == 0:
50
  logged_data = log_message_data_through_supabase_api(
51
- table_name,
52
  insert_data
53
  )
54
  else:
@@ -64,11 +63,11 @@ def prepare_message_data_for_logging(message_data, nlu_response):
64
  """
65
  project_data = {
66
  'name': "Rori",
67
- # Autogenerated fields: id, created_at, modified_at
68
  }
69
  project_data_log = get_or_create_supabase_entry(
70
- 'project',
71
- project_data,
72
  'name'
73
  )
74
 
@@ -99,6 +98,6 @@ def prepare_message_data_for_logging(message_data, nlu_response):
99
  # Autogenerated fields: created_at, modified_at
100
  }
101
  message_data_log = log_message_data_through_supabase_api(
102
- 'message',
103
  message_data
104
- )
 
7
  load_dotenv()
8
 
9
  SUPA = create_client(
10
+ os.environ.get('SUPABASE_URL'),
11
  os.environ.get('SUPABASE_KEY')
12
  )
13
 
 
30
 
31
  Result
32
  - logged_data - an object with the Supabase data
 
33
  """
34
  if table_name == 'contact':
35
  resp = SUPA.table('contact').select("*").eq(
36
+ "original_contact_id",
37
  insert_data['original_contact_id']
38
  ).eq(
39
+ "project",
40
  insert_data['project']
41
  ).execute()
42
  else:
43
  resp = SUPA.table(table_name).select("*").eq(
44
+ check_variable,
45
  insert_data[check_variable]
46
  ).execute()
47
 
48
  if len(resp.data) == 0:
49
  logged_data = log_message_data_through_supabase_api(
50
+ table_name,
51
  insert_data
52
  )
53
  else:
 
63
  """
64
  project_data = {
65
  'name': "Rori",
66
+ # Autogenerated fields: id, created_at, modified_at
67
  }
68
  project_data_log = get_or_create_supabase_entry(
69
+ 'project',
70
+ project_data,
71
  'name'
72
  )
73
 
 
98
  # Autogenerated fields: created_at, modified_at
99
  }
100
  message_data_log = log_message_data_through_supabase_api(
101
+ 'message',
102
  message_data
103
+ )
mathtext_fastapi/nlu.py CHANGED
@@ -26,8 +26,8 @@ def test_for_number_sequence(message_text_arr, message_data, message_text):
26
  nlu_response = {}
27
  if all(ele.isdigit() for ele in message_text_arr):
28
  nlu_response = build_nlu_response_object(
29
- 'integer',
30
- ','.join(message_text_arr),
31
  ''
32
  )
33
  prepare_message_data_for_logging(message_data, nlu_response)
@@ -79,25 +79,23 @@ def evaluate_message_with_nlu(message_data):
79
  if 32202 in student_response_arr:
80
  sentiment_api_resp = sentiment(message_text)
81
  nlu_response = build_nlu_response_object(
82
- 'sentiment',
83
- sentiment_api_resp[0]['label'],
84
  sentiment_api_resp[0]['score']
85
  )
86
  else:
87
  if len(student_response_arr) > 1:
88
  nlu_response = build_nlu_response_object(
89
- 'integer',
90
- ','.join(str(num) for num in student_response_arr),
91
  ''
92
  )
93
  else:
94
  nlu_response = build_nlu_response_object(
95
- 'integer',
96
- student_response_arr[0],
97
  ''
98
  )
99
 
100
  prepare_message_data_for_logging(message_data, nlu_response)
101
  return nlu_response
102
-
103
-
 
26
  nlu_response = {}
27
  if all(ele.isdigit() for ele in message_text_arr):
28
  nlu_response = build_nlu_response_object(
29
+ 'integer',
30
+ ','.join(message_text_arr),
31
  ''
32
  )
33
  prepare_message_data_for_logging(message_data, nlu_response)
 
79
  if 32202 in student_response_arr:
80
  sentiment_api_resp = sentiment(message_text)
81
  nlu_response = build_nlu_response_object(
82
+ 'sentiment',
83
+ sentiment_api_resp[0]['label'],
84
  sentiment_api_resp[0]['score']
85
  )
86
  else:
87
  if len(student_response_arr) > 1:
88
  nlu_response = build_nlu_response_object(
89
+ 'integer',
90
+ ','.join(str(num) for num in student_response_arr),
91
  ''
92
  )
93
  else:
94
  nlu_response = build_nlu_response_object(
95
+ 'integer',
96
+ student_response_arr[0],
97
  ''
98
  )
99
 
100
  prepare_message_data_for_logging(message_data, nlu_response)
101
  return nlu_response