import os import openai from flask import Flask, request, jsonify, send_from_directory, url_for app = Flask(__name__) ssl = None # ssl =('/etc/ssl/sample.crt', '/etc/ssl/sample.pem') openai_key = os.environ.get("OPENAI_KEY", "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") openai.api_key = openai_key app.chat_messages = [ {"role": "system", "content": "Please respond professionally and in a friendly manner, using the same language as the original request."} ] app.translate_messages = [ {"role": "system", "content": "Please translate using the requested language."} ] app.suggest_messages = [ {"role": "system", "content": "Please suggest reply messages based on the previous conversations and the user's request."} ] UPLOAD_FOLDER = 'files' app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER @app.route('/files/') def download_file(name): return send_from_directory(app.config["UPLOAD_FOLDER"], name) @app.route('/', methods=['GET', 'POST']) def test(): return jsonify({"status": "0"}) @app.route('/gpt', methods=['POST']) def gpt(): chat_messages = app.chat_messages.copy() use_video = False suggest = False num_choices = 1 json_payload = request.get_json() if not json_payload: json_payload = [] has_named_params = False if isinstance(json_payload, dict): has_named_params = 'payload' in json_payload if 'payload' in json_payload: if 'num_choices' in json_payload: num_choices = 5 if json_payload['num_choices'] > 5 else json_payload['num_choices'] if 'use_video' in json_payload: use_video = json_payload['use_video'] == "1" if 'translate' in json_payload: chat_messages = app.translate_messages.copy() json_payload['payload'][-1]['content'] = json_payload['payload'][-1]['content'] + f" (Translate to {json_payload['translate']})" elif 'suggest' in json_payload: suggest = json_payload['suggest'] == "1" if suggest: chat_messages = app.suggest_messages.copy() else: chat_messages = app.chat_messages.copy() json_payload['payload'][-1]['content'] = json_payload['payload'][-1]['content'] + f" What can I say to him/her?" else: chat_messages = app.chat_messages.copy() json_payload = json_payload['payload'] if isinstance(json_payload, dict): json_payload = [json_payload] elif 'greeting' in json_payload: chat_messages = app.chat_messages.copy() company_name = json_payload['greeting']['company_name'] timestamp = json_payload['greeting']['timestamp'] islamic_message = f"Apakah Nama '{company_name}' terdapat unsur islami? Jawab dengan 'Ya' atau 'Tidak'" islam_messages = app.chat_messages.copy() islam_messages.append({ "role": "user", "content": islamic_message }) islamic_response = openai.ChatCompletion.create(model="gpt-3.5-turbo", # GPT-3.5 Turbo engine messages=islam_messages, max_tokens=2, temperature=0.5) if 'Ya' in islamic_response.choices[0].message['content']: greeting_message = f"Buatkan respons chatbot berupa greeting dari chat perusahaan bernama {company_name} pada jam {timestamp}, tidak perlu mention waktu, dan jawab dengan 'Assalamu'alaikum...' terlebih dahulu" else: greeting_message = f"Buatkan respons chatbot berupa greeting dari chat perusahaan bernama {company_name} pada jam {timestamp}, tidak perlu mention waktu" json_payload = [ { "role": "user", "content": greeting_message } ] else: chat_messages = app.chat_messages.copy() json_payload = [json_payload] json_payload = json_payload[-7:] for message in json_payload: content = message['content'] content_arr = content.split(" ") new_content_arr = content[:300].split(" ") new_content_len = len(new_content_arr) arr = [] for i in range(new_content_len): arr.append(content_arr[i]) message['content'] = " ".join(arr) chat_messages.append(message) app.logger.info(chat_messages) result = {} try: n = num_choices json_response = openai.ChatCompletion.create(model="gpt-3.5-turbo", # GPT-3.5 Turbo engine messages=chat_messages, max_tokens=600, temperature=0.7, n = n) app.logger.info(json_response.choices[0].message) if has_named_params: if suggest: choices = json_response.choices messages = [i.message for i in choices] result = {"url": "", "message": messages} elif use_video: # TODO: to be implemented result = {"url": url_for('download_file', name="test.mp4", _external=True), "message": json_response.choices[0].message} else: result = {"url": "", "message": json_response.choices[0].message} else: result = json_response.choices[0].message except Exception as error_print: app.logger.error(error_print) result = {}, 405 return result # Press the green button in the gutter to run the script. if __name__ == '__main__': app.run(host='0.0.0.0', port=8348, debug=True, ssl_context=ssl) # See PyCharm help at https://www.jetbrains.com/help/pycharm/