main.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import os
  2. import openai
  3. from flask import Flask, request, jsonify, send_from_directory, url_for
  4. app = Flask(__name__)
  5. ssl = None
  6. # ssl =('/etc/ssl/sample.crt', '/etc/ssl/sample.pem')
  7. #test
  8. openai_key = os.environ.get("OPENAI_KEY", "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")
  9. openai.api_key = openai_key
  10. app.chat_messages = [
  11. {"role": "system",
  12. "content": "Please respond professionally and in a friendly manner, using the same language as the original request."}
  13. ]
  14. UPLOAD_FOLDER = 'files'
  15. app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
  16. @app.route('/files/<name>')
  17. def download_file(name):
  18. return send_from_directory(app.config["UPLOAD_FOLDER"], name)
  19. @app.route('/', methods=['GET', 'POST'])
  20. def test():
  21. return jsonify({"status": "0"})
  22. @app.route('/gpt', methods=['POST'])
  23. def gpt():
  24. chat_messages = app.chat_messages.copy()
  25. use_video = False
  26. json_payload = request.get_json()
  27. if not json_payload:
  28. json_payload = []
  29. has_named_params = False
  30. if isinstance(json_payload, dict):
  31. has_named_params = 'use_video' in json_payload or 'payload' in json_payload
  32. if 'use_video' in json_payload and 'payload' in json_payload:
  33. use_video = json_payload['use_video'] == "1"
  34. json_payload = json_payload['payload']
  35. if isinstance(json_payload, dict):
  36. json_payload = [json_payload]
  37. elif 'greeting' in json_payload:
  38. company_name = json_payload['greeting']['company_name']
  39. timestamp = json_payload['greeting']['timestamp']
  40. islamic_message = f"Apakah Nama '{company_name}' terdapat unsur islami? Jawab dengan 'Ya' atau 'Tidak'"
  41. islam_messages = app.chat_messages.copy()
  42. islam_messages.append({
  43. "role": "user",
  44. "content": islamic_message
  45. })
  46. islamic_response = openai.ChatCompletion.create(model="gpt-3.5-turbo", # GPT-3.5 Turbo engine
  47. messages=islam_messages,
  48. max_tokens=2, temperature=0.5)
  49. if 'Ya' in islamic_response.choices[0].message['content']:
  50. greeting_message = f"Buatkan respons chatbot berupa greeting dari chat {company_name} pada jam {timestamp}, tidak perlu mention waktu, dan jawab dengan salam terlebih dahulu apabila ada unsur islami di nama perusahaan."
  51. else:
  52. greeting_message = f"Buatkan respons chatbot berupa greeting dari chat {company_name} pada jam {timestamp}, tidak perlu mention waktu"
  53. json_payload = [
  54. {
  55. "role": "user",
  56. "content": greeting_message
  57. }
  58. ]
  59. else:
  60. json_payload = [json_payload]
  61. json_payload = json_payload[-5:]
  62. for message in json_payload:
  63. content = message['content']
  64. content_arr = content.split(" ")
  65. new_content_arr = content[:300].split(" ")
  66. new_content_len = len(new_content_arr)
  67. arr = []
  68. for i in range(new_content_len):
  69. arr.append(content_arr[i])
  70. message['content'] = " ".join(arr)
  71. chat_messages.append(message)
  72. app.logger.info(chat_messages)
  73. result = {}
  74. try:
  75. json_response = openai.ChatCompletion.create(model="gpt-3.5-turbo", # GPT-3.5 Turbo engine
  76. messages=chat_messages,
  77. max_tokens=600, temperature=0.7)
  78. app.logger.info(json_response.choices[0].message)
  79. if has_named_params:
  80. if use_video:
  81. # TODO: to be implemented
  82. result = {"url": url_for('download_file', name="test.mp4", _external=True), "message": json_response.choices[0].message}
  83. else:
  84. result = {"url": "", "message": json_response.choices[0].message}
  85. else:
  86. result = json_response.choices[0].message
  87. except Exception as error_print:
  88. app.logger.error(error_print)
  89. result = {}, 405
  90. return result
  91. # Press the green button in the gutter to run the script.
  92. if __name__ == '__main__':
  93. app.run(host='0.0.0.0', port=8348, debug=True, ssl_context=ssl)
  94. # See PyCharm help at https://www.jetbrains.com/help/pycharm/