36
#check if the question is related to the current knowledge topic
def check_topic(message):
try:
# inform the llm about the rules that must be followed.
llm_run = ['ollama', 'run', 'llama3:latest', f"Is the following question or
ability clearly and directly related only to {knowledge_topic}?Answer with yes if it is relevant
else dont use it in your answer or no if not relevant. If message is asking you to count, do it
only if knowledge_topic is Mathematics. {message}"]
#subprocess is used to connect an exe running on cmd with a py file
output
=
subprocess.check_output(llm_run,
encoding='utf-8',
stdin=subprocess.DEVNULL)
print("Output is",message,output )
#The llm is asked to answer yes or no, to determine if users question is relevant to the current
topic
#With the use of strip case-sensitivity was observed. Lower fixed that
return "yes" in output.lower()
# exception for stdout stderr error occurred and print the error
except subprocess.CalledProcessError as e:
print("Error running LLM :", e)
return "Error running LLM"
Στη συνάρτηση take_a_response γίνεται έλεγχος, ώστε να διαπιστωθεί αν το
περιεχόμενο του μηνύματος που έστειλε ο χρήστης είναι σχετικό με τη θεματική που έχει
οριστεί. Σε περίπτωση που σχετίζονται το LLM στέλνει την απάντησή του, αλλιώς απαντάει
με ένα προκαθορισμένο μήνυμα, το οποίο ενημερώνει τον χρήστη, σχετικά με ποιο αντικείμενο
μπορεί να πραγματοποιηθεί η συζήτηση.
if check_topic(message):
#take a response from llm using the function running it
response = run_the_llm(message)
else:
#setting a default response if question of user is not related to the current knowledge topic
response = f"I can only answer questions related to {knowledge_topic}."
print("response:", response)
# return the llms response as a json file to be received by user
return jsonify({'response': response})
Έπειτα μέσω του app.route λαμβάνεται η post εντολή της συνάρτησης
set_knowlege_topic του chat.py. Η μεταβλητή knowledge_topic ορίζεται ως global και μέσω
του λεξικού data γίνεται πρόσβαση στο αρχείο json. Στη συνέχεια το knowledge_topic
ταυτίζεται με τη θεματική/topic που ορίστηκε στη αρχή.