30
● request: Λήψη δεδομένων από εισερχόμενα HTTP αιτήματα
● subprocess: Εκτέλεση εξωτερικών εντολών στο σύστημα, επιτρέποντας την εκτέλεση
του LLM μέσω του τερματικού.
Δημιουργία του Flask App
Αρχικά δημιουργήθηκε ένα αντικείμενο Flask, το οποίο λειτουργεί ως κεντρική εφαρμογή.
app = Flask(__name__)
Εκτέλεση του LLM
Η συνάρτηση run_the_llm
εκτελεί το εξωτερικό LLM μέσω της γραμμής εντολών. Για να
πραγματοποιηθεί αυτή η διαδικασία, χρησιμοποιήθηκε το subprocess
. Επιπλέον έγινε χρήση
του DEVNULL, ώστε να αποφευχθεί το μήνυμα σφάλματος: "failed to get console mode for
stdout: The handle is invalid"
. Έπειτα, με το try-except πραγματοποιήθηκε ομαλή διαχείριση
του σφάλματος “stdout stderr”
def run_the_llm(message):
try:
llm_run = ['ollama', 'run', 'llama3:latest', message]
output = subprocess.check_output(llm_run, encoding='utf-8', stdin=subprocess.DEVNULL)
return output.strip()
except subprocess.CalledProcessError as e:
print("Error running LLM :", e)
return "Error running LLM"
Διαχείριση Αιτημάτων μέσω API
Η διαχείριση της επικοινωνίας πραγματοποιείται μέσω ενός endpoint που λαμβάνει το
μήνυμα του χρήστη και επιστρέφει την απάντηση του LLM. Mέσω του app.route στέλνονται
τα δεδομένα στο Flask server από τη μέθοδο Post του chat.py (response = requests.post(url,
json=data)).
Στη συνάρτηση take_a_response, τα δεδομένα λαμβάνονται και δημιουργείται ένα
λεξικό-dictionary, που ονομάζεται data ώστε να είναι προσβάσιμο το αρχείο json. Έπειτα
επιστρέφεται το μήνυμα που λήφθηκε.
@app.route('/take_a_response', methods=['POST'])
def take_a_response(): #function to take the response from the llm as a text message
data = request.get_json()
message = data.get('message')
response = run_the_llm(message)
return jsonify({'response': response})
14
https://realpython.com/python-subprocess/
15
https://stackoverflow.com/questions/39563802/subprocess-calledprocesserror-what-is-the-error
16
https://stackoverflow.com/questions/40108816/python-running-as-windows-service-oserror-winerror-