main.py 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  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. openai_key = os.environ.get("OPENAI_KEY", "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")
  8. openai.api_key = openai_key
  9. app.chat_messages = [
  10. {"role": "system",
  11. "content": "Please respond professionally and in a friendly manner, using the same language as the original request."}
  12. ]
  13. app.translate_messages = [
  14. {"role": "system",
  15. "content": "Please translate using the requested language."}
  16. ]
  17. app.suggest_messages = [
  18. {"role": "system",
  19. "content": "Please suggest reply messages based on the previous conversations and the user's request."}
  20. ]
  21. UPLOAD_FOLDER = 'files'
  22. app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
  23. @app.route('/files/<name>')
  24. def download_file(name):
  25. return send_from_directory(app.config["UPLOAD_FOLDER"], name)
  26. @app.route('/', methods=['GET', 'POST'])
  27. def test():
  28. return jsonify({"status": "0"})
  29. @app.route('/gpt', methods=['POST'])
  30. def gpt():
  31. chat_messages = app.chat_messages.copy()
  32. use_video = False
  33. suggest = False
  34. num_choices = 1
  35. json_payload = request.get_json()
  36. if not json_payload:
  37. json_payload = []
  38. has_named_params = False
  39. if isinstance(json_payload, dict):
  40. has_named_params = 'payload' in json_payload
  41. if 'payload' in json_payload:
  42. if 'num_choices' in json_payload:
  43. num_choices = 5 if json_payload['num_choices'] > 5 else json_payload['num_choices']
  44. if 'use_video' in json_payload:
  45. use_video = json_payload['use_video'] == "1"
  46. if 'translate' in json_payload:
  47. chat_messages = app.translate_messages.copy()
  48. json_payload['payload'][-1]['content'] = json_payload['payload'][-1]['content'] + f" (Translate to {json_payload['translate']})"
  49. elif 'suggest' in json_payload:
  50. suggest = json_payload['suggest'] == "1"
  51. if suggest:
  52. chat_messages = app.suggest_messages.copy()
  53. else:
  54. chat_messages = app.chat_messages.copy()
  55. json_payload['payload'][-1]['content'] = json_payload['payload'][-1]['content'] + f" What can I say to him/her?"
  56. else:
  57. chat_messages = app.chat_messages.copy()
  58. json_payload = json_payload['payload']
  59. if isinstance(json_payload, dict):
  60. json_payload = [json_payload]
  61. elif 'greeting' in json_payload:
  62. chat_messages = app.chat_messages.copy()
  63. company_name = json_payload['greeting']['company_name']
  64. timestamp = json_payload['greeting']['timestamp']
  65. islamic_message = f"Apakah Nama '{company_name}' terdapat unsur islami? Jawab dengan 'Ya' atau 'Tidak'"
  66. islam_messages = app.chat_messages.copy()
  67. islam_messages.append({
  68. "role": "user",
  69. "content": islamic_message
  70. })
  71. islamic_response = openai.ChatCompletion.create(model="gpt-3.5-turbo", # GPT-3.5 Turbo engine
  72. messages=islam_messages,
  73. max_tokens=2, temperature=0.5)
  74. if 'Ya' in islamic_response.choices[0].message['content']:
  75. 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"
  76. else:
  77. greeting_message = f"Buatkan respons chatbot berupa greeting dari chat perusahaan bernama {company_name} pada jam {timestamp}, tidak perlu mention waktu"
  78. json_payload = [
  79. {
  80. "role": "user",
  81. "content": greeting_message
  82. }
  83. ]
  84. else:
  85. chat_messages = app.chat_messages.copy()
  86. json_payload = [json_payload]
  87. json_payload = json_payload[-7:]
  88. for message in json_payload:
  89. content = message['content']
  90. content_arr = content.split(" ")
  91. new_content_arr = content[:300].split(" ")
  92. new_content_len = len(new_content_arr)
  93. arr = []
  94. for i in range(new_content_len):
  95. arr.append(content_arr[i])
  96. message['content'] = " ".join(arr)
  97. chat_messages.append(message)
  98. app.logger.info(chat_messages)
  99. result = {}
  100. try:
  101. n = num_choices
  102. json_response = openai.ChatCompletion.create(model="gpt-3.5-turbo", # GPT-3.5 Turbo engine
  103. messages=chat_messages,
  104. max_tokens=600, temperature=0.7, n = n)
  105. app.logger.info(json_response.choices[0].message)
  106. if has_named_params:
  107. if suggest:
  108. choices = json_response.choices
  109. messages = [i.message for i in choices]
  110. result = {"url": "", "message": messages}
  111. elif use_video:
  112. # TODO: to be implemented
  113. result = {"url": url_for('download_file', name="test.mp4", _external=True), "message": json_response.choices[0].message}
  114. else:
  115. result = {"url": "", "message": json_response.choices[0].message}
  116. else:
  117. result = json_response.choices[0].message
  118. except Exception as error_print:
  119. app.logger.error(error_print)
  120. result = {}, 405
  121. return result
  122. # Press the green button in the gutter to run the script.
  123. if __name__ == '__main__':
  124. app.run(host='0.0.0.0', port=8348, debug=True, ssl_context=ssl)
  125. # See PyCharm help at https://www.jetbrains.com/help/pycharm/