Spaces:
Runtime error
Runtime error
Greg Thompson
commited on
Commit
·
d6f5c10
1
Parent(s):
3b2a57b
Update message logging to fix bugs
Browse files- app.py +3 -2
- mathtext_fastapi/nlu.py +33 -3
- scripts/make_request.py +1 -1
app.py
CHANGED
|
@@ -68,6 +68,7 @@ async def evaluate_user_message_with_nlu_api(request: Request):
|
|
| 68 |
|
| 69 |
# Handles if a student answer is already an integer or a float (ie., 8)
|
| 70 |
if type(message_text) == int or type(message_text) == float:
|
|
|
|
| 71 |
return JSONResponse(content={'type': 'integer', 'data': message_text})
|
| 72 |
|
| 73 |
# Removes whitespace and converts str to arr to handle multiple numbers
|
|
@@ -75,6 +76,7 @@ async def evaluate_user_message_with_nlu_api(request: Request):
|
|
| 75 |
|
| 76 |
# Handle if a student answer is a string of numbers (ie., "8,9, 10")
|
| 77 |
if all(ele.isdigit() for ele in message_text_arr):
|
|
|
|
| 78 |
return JSONResponse(content={'type': 'integer', 'data': ','.join(message_text_arr)})
|
| 79 |
|
| 80 |
student_response_arr = []
|
|
@@ -99,6 +101,5 @@ async def evaluate_user_message_with_nlu_api(request: Request):
|
|
| 99 |
response_object = {'type': 'integer', 'data': student_response_arr[0]}
|
| 100 |
|
| 101 |
# Uncomment to enable logging to Supabase
|
| 102 |
-
|
| 103 |
-
|
| 104 |
return JSONResponse(content=response_object)
|
|
|
|
| 68 |
|
| 69 |
# Handles if a student answer is already an integer or a float (ie., 8)
|
| 70 |
if type(message_text) == int or type(message_text) == float:
|
| 71 |
+
prepare_message_data_for_logging(message_data)
|
| 72 |
return JSONResponse(content={'type': 'integer', 'data': message_text})
|
| 73 |
|
| 74 |
# Removes whitespace and converts str to arr to handle multiple numbers
|
|
|
|
| 76 |
|
| 77 |
# Handle if a student answer is a string of numbers (ie., "8,9, 10")
|
| 78 |
if all(ele.isdigit() for ele in message_text_arr):
|
| 79 |
+
prepare_message_data_for_logging(message_data)
|
| 80 |
return JSONResponse(content={'type': 'integer', 'data': ','.join(message_text_arr)})
|
| 81 |
|
| 82 |
student_response_arr = []
|
|
|
|
| 101 |
response_object = {'type': 'integer', 'data': student_response_arr[0]}
|
| 102 |
|
| 103 |
# Uncomment to enable logging to Supabase
|
| 104 |
+
prepare_message_data_for_logging(message_data)
|
|
|
|
| 105 |
return JSONResponse(content=response_object)
|
mathtext_fastapi/nlu.py
CHANGED
|
@@ -17,12 +17,42 @@ def format_datetime_in_isoformat(dt):
|
|
| 17 |
return getattr(dt.now(), 'isoformat', lambda x: None)()
|
| 18 |
|
| 19 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 20 |
def prepare_message_data_for_logging(message_data):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 21 |
project_data = {
|
| 22 |
-
'name': "
|
| 23 |
# Autogenerated fields: id, created_at, modified_at
|
| 24 |
}
|
| 25 |
-
project_data_log =
|
| 26 |
|
| 27 |
contact_data = {
|
| 28 |
'project': project_data_log.data[0]['id'], # FK
|
|
@@ -32,7 +62,7 @@ def prepare_message_data_for_logging(message_data):
|
|
| 32 |
'contact_inserted_at': format_datetime_in_isoformat(datetime.now())
|
| 33 |
# Autogenerated fields: id, created_at, modified_at
|
| 34 |
}
|
| 35 |
-
contact_data_log =
|
| 36 |
|
| 37 |
message_data = {
|
| 38 |
'contact': contact_data_log.data[0]['id'], # FK
|
|
|
|
| 17 |
return getattr(dt.now(), 'isoformat', lambda x: None)()
|
| 18 |
|
| 19 |
|
| 20 |
+
def get_or_create_supabase_entry(table_name, insert_data, check_variable=None):
|
| 21 |
+
""" Checks whether a project or contact exists in the database and adds if one is not found
|
| 22 |
+
|
| 23 |
+
Input:
|
| 24 |
+
- table_name: str- the name of the table in Supabase that is being examined
|
| 25 |
+
- insert_data: json - the data to insert
|
| 26 |
+
- check_variable: str/None - the specific field to examine for existing matches
|
| 27 |
+
|
| 28 |
+
Result
|
| 29 |
+
- logged_data - an object with the Supabase data
|
| 30 |
+
|
| 31 |
+
"""
|
| 32 |
+
if table_name == 'contact':
|
| 33 |
+
resp = SUPA.table('contact').select("*").eq("original_contact_id", insert_data['original_contact_id']).eq("project", insert_data['project']).execute()
|
| 34 |
+
else:
|
| 35 |
+
resp = SUPA.table(table_name).select("*").eq(check_variable, insert_data[check_variable]).execute()
|
| 36 |
+
|
| 37 |
+
if len(resp.data) == 0:
|
| 38 |
+
logged_data = log_message_data_through_supabase_api(table_name, insert_data)
|
| 39 |
+
else:
|
| 40 |
+
logged_data = resp
|
| 41 |
+
return logged_data
|
| 42 |
+
|
| 43 |
+
|
| 44 |
+
|
| 45 |
def prepare_message_data_for_logging(message_data):
|
| 46 |
+
""" Builds the message data for each table and ensures it's logged to the database
|
| 47 |
+
|
| 48 |
+
Input:
|
| 49 |
+
- message_data: an object with the full message data from Turn.io/Whatsapp
|
| 50 |
+
"""
|
| 51 |
project_data = {
|
| 52 |
+
'name': "Rori",
|
| 53 |
# Autogenerated fields: id, created_at, modified_at
|
| 54 |
}
|
| 55 |
+
project_data_log = get_or_create_supabase_entry('project', project_data, 'name')
|
| 56 |
|
| 57 |
contact_data = {
|
| 58 |
'project': project_data_log.data[0]['id'], # FK
|
|
|
|
| 62 |
'contact_inserted_at': format_datetime_in_isoformat(datetime.now())
|
| 63 |
# Autogenerated fields: id, created_at, modified_at
|
| 64 |
}
|
| 65 |
+
contact_data_log = get_or_create_supabase_entry('contact', contact_data)
|
| 66 |
|
| 67 |
message_data = {
|
| 68 |
'contact': contact_data_log.data[0]['id'], # FK
|
scripts/make_request.py
CHANGED
|
@@ -104,7 +104,7 @@ print(request)
|
|
| 104 |
|
| 105 |
json = b'{"message_data": {"message":{"_vnd":{"v1":{"author":{"id":57787919091,"name":"GT","type":"OWNER"},"card_uuid":null,"chat":{"assigned_to":{"id":"jhk151kl-hj42-3752-3hjk-h4jk6hjkk2","name":"Greg Thompson","type":"OPERATOR"},"contact_uuid":"j43hk26-2hjl-43jk-hnk2-k4ljl46j0ds09","inserted_at":"2022-07-05T04:00:34.033522Z","owner":"+57787919091","permalink":"https://app.turn.io/c/4kl209sd0-a7b8-2hj3-8563-3hu4a89b32","state":"OPEN","state_reason":"Re-opened by inbound message.","unread_count":14,"updated_at":"2023-01-10T02:37:28.487319Z","uuid":"4kl209sd0-a7b8-2hj3-8563-3hu4a89b32"},"direction":"inbound","faq_uuid":null,"in_reply_to":null,"inserted_at":"2023-01-10T02:37:28.477940Z","labels":[{"confidence":0.506479332,"metadata":{"nlu":{"confidence":0.506479332,"intent":"question","model_name":"nlu-general-spacy-ngrams-20191014"}},"uuid":"ha7890s2k-hjk2-2476-s8d9-fh9779a8a9ds","value":"Unclassified"}],"last_status":null,"last_status_timestamp":null,"on_fallback_channel":false,"rendered_content":null,"uuid":"s8df79zhws-h89s-hj23-7s8d-thb248d9bh2qn"}},"from":57787919091,"id":"hsjkthzZGehkzs09sijWA3","text":{"body":"8, 9, 10"},"timestamp":1673318248,"type":"text"},"type":"message"}}\n'
|
| 106 |
|
| 107 |
-
# 8, 9, 10 > 8,9,10
|
| 108 |
request = requests.post(url=
|
| 109 |
'http://localhost:7860/nlu',
|
| 110 |
data=json
|
|
|
|
| 104 |
|
| 105 |
json = b'{"message_data": {"message":{"_vnd":{"v1":{"author":{"id":57787919091,"name":"GT","type":"OWNER"},"card_uuid":null,"chat":{"assigned_to":{"id":"jhk151kl-hj42-3752-3hjk-h4jk6hjkk2","name":"Greg Thompson","type":"OPERATOR"},"contact_uuid":"j43hk26-2hjl-43jk-hnk2-k4ljl46j0ds09","inserted_at":"2022-07-05T04:00:34.033522Z","owner":"+57787919091","permalink":"https://app.turn.io/c/4kl209sd0-a7b8-2hj3-8563-3hu4a89b32","state":"OPEN","state_reason":"Re-opened by inbound message.","unread_count":14,"updated_at":"2023-01-10T02:37:28.487319Z","uuid":"4kl209sd0-a7b8-2hj3-8563-3hu4a89b32"},"direction":"inbound","faq_uuid":null,"in_reply_to":null,"inserted_at":"2023-01-10T02:37:28.477940Z","labels":[{"confidence":0.506479332,"metadata":{"nlu":{"confidence":0.506479332,"intent":"question","model_name":"nlu-general-spacy-ngrams-20191014"}},"uuid":"ha7890s2k-hjk2-2476-s8d9-fh9779a8a9ds","value":"Unclassified"}],"last_status":null,"last_status_timestamp":null,"on_fallback_channel":false,"rendered_content":null,"uuid":"s8df79zhws-h89s-hj23-7s8d-thb248d9bh2qn"}},"from":57787919091,"id":"hsjkthzZGehkzs09sijWA3","text":{"body":"8, 9, 10"},"timestamp":1673318248,"type":"text"},"type":"message"}}\n'
|
| 106 |
|
| 107 |
+
# "8, 9, 10" > "8,9,10"
|
| 108 |
request = requests.post(url=
|
| 109 |
'http://localhost:7860/nlu',
|
| 110 |
data=json
|