Spaces:
Sleeping
Sleeping
| # This module is made to parse the configuration file and to create the botchat reponds | |
| import os | |
| import yaml | |
| import random | |
| from datetime import datetime | |
| SRC_PATH = os.path.dirname(__file__) | |
| def load_yaml(filepath): # A function to open the .yaml configuration files | |
| with open(filepath, "r") as f: | |
| return yaml.safe_load(f) | |
| QUESTION_CONFIG_FILE = os.path.join(SRC_PATH, "QnA.yaml") # Saving the configuration file path | |
| QUESTIONS_CONFIGS = load_yaml(QUESTION_CONFIG_FILE) # Load the configuration file | |
| QUESTIONS = None # A list for the prompted user chat / questions / responds | |
| for q in QUESTIONS_CONFIGS['questions']: # Filling the list with the user questions in the configuration files | |
| string = str(q.keys()) | |
| splitted = string.split("'")[1] | |
| if QUESTIONS is None: | |
| QUESTIONS = [splitted] | |
| else: | |
| QUESTIONS.append(splitted) | |
| def automaticAnswer(question): | |
| answer = "Hey, what can I do for you?" # A default respond of teh chatbot | |
| index = 0 | |
| if question is None: | |
| return answer # If the user does not choose a prompted question of the dropdown, then return defult respond | |
| for qe in QUESTIONS_CONFIGS['questions']: | |
| dt = datetime.now() # Saving the current time for the questions related to time | |
| string1 = str(qe.keys()) # Load the questions from the configuration files | |
| splitted1 = string1.split("'")[1] | |
| if splitted1 == question: | |
| randomNumber = random.randint(0, 1) # Give a random number (either 0 or 1) to determine which version of | |
| # the answer will be displayed | |
| if randomNumber == 0: # If the random number is 0, then display the first version of the answer | |
| if splitted1 == "What day is today?": # For the question related to current day of the week | |
| answer = QUESTIONS_CONFIGS['questions'][index][splitted1][0]['response_1'] + " " + dt.strftime('%A') | |
| elif splitted1 == "Could you please tell the time?": # For the question related to the current time | |
| answer = QUESTIONS_CONFIGS['questions'][index][splitted1][0]['response_1'] + " " + dt.strftime( | |
| "%H:%M") | |
| elif splitted1 == "Can you tell the date?": # For the question of the current date | |
| answer = QUESTIONS_CONFIGS['questions'][index][splitted1][0]['response_1'] + " " + dt.strftime( | |
| "%B %d, %Y") | |
| else: # Other questions | |
| answer = QUESTIONS_CONFIGS['questions'][index][splitted1][0]['response_1'] | |
| else: # If the random number is 1, then display the second version of the answer | |
| if qe == "What day is today?": # For the question related to current day of the week | |
| answer = QUESTIONS_CONFIGS['questions'][index][splitted1][1]['response_2'] + " " + dt.strftime('%A') | |
| elif splitted1 == "Could you please tell the time?": # For the question related to the current time | |
| answer = QUESTIONS_CONFIGS['questions'][index][splitted1][1]['response_2'] + " " + dt.strftime( | |
| "%H:%M") | |
| elif splitted1 == "Can you tell the date?": # For the question of the current date | |
| answer = QUESTIONS_CONFIGS['questions'][index][splitted1][1]['response_2'] + " " + dt.strftime( | |
| "%B %d, %Y") | |
| else: # Other questions | |
| answer = QUESTIONS_CONFIGS['questions'][index][splitted1][1]['response_2'] | |
| break | |
| index = index + 1 # Iterate through the list of questions | |
| return answer | |