main.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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")
  8. if not openai_key:
  9. sys.exit()
  10. openai.api_key = openai_key
  11. app.chat_messages = [
  12. {"role": "system",
  13. "content": "Please respond professionally and in a friendly manner, using the same language as the original request."}
  14. ]
  15. UPLOAD_FOLDER = 'files'
  16. app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
  17. @app.route('/files/<name>')
  18. def download_file(name):
  19. return send_from_directory(app.config["UPLOAD_FOLDER"], name)
  20. @app.route('/', methods=['GET', 'POST'])
  21. def test():
  22. return jsonify({"status": "0"})
  23. @app.route('/gpt', methods=['POST'])
  24. def gpt():
  25. chat_messages = app.chat_messages.copy()
  26. use_video = False
  27. json_payload = request.get_json()
  28. if not json_payload:
  29. json_payload = []
  30. has_named_params = False
  31. if isinstance(json_payload, dict):
  32. has_named_params = 'use_video' in json_payload or 'payload' in json_payload
  33. if 'use_video' in json_payload and 'payload' in json_payload:
  34. use_video = json_payload['use_video'] == "1"
  35. json_payload = json_payload['payload']
  36. if isinstance(json_payload, dict):
  37. json_payload = [json_payload]
  38. elif 'greeting' in json_payload:
  39. company_name = json_payload['greeting']['company_name']
  40. timestamp = json_payload['greeting']['timestamp']
  41. completion_message = "Selamat "
  42. if 'completion' in json_payload['greeting']:
  43. completion_message = json_payload['greeting']['completion']
  44. greeting_message = f"Buatkan chat greeting dari {company_name} pada jam {timestamp}, tidak perlu mention waktu: '{completion_message}'"
  45. json_payload = [
  46. {
  47. "role": "user",
  48. "content": greeting_message
  49. }
  50. ]
  51. else:
  52. json_payload = [json_payload]
  53. json_payload = json_payload[-5:]
  54. for message in json_payload:
  55. content = message['content']
  56. content_arr = content.split(" ")
  57. new_content_arr = content[:250].split(" ")
  58. new_content_len = len(new_content_arr)
  59. arr = []
  60. for i in range(new_content_len):
  61. arr.append(content_arr[i])
  62. message['content'] = " ".join(arr)
  63. chat_messages.append(message)
  64. app.logger.info(chat_messages)
  65. result = {}
  66. try:
  67. json_response = openai.ChatCompletion.create(model="gpt-3.5-turbo", # GPT-3.5 Turbo engine
  68. messages=chat_messages,
  69. max_tokens=600, temperature=0.6)
  70. app.logger.info(json_response.choices[0].message)
  71. if has_named_params:
  72. if use_video:
  73. # TODO: to be implemented
  74. result = {"url": url_for('download_file', name="test.mp4", _external=True), "message": json_response.choices[0].message}
  75. else:
  76. result = {"url": "", "message": json_response.choices[0].message}
  77. else:
  78. result = json_response.choices[0].message
  79. except Exception as error_print:
  80. app.logger.error(error_print)
  81. result = {}, 405
  82. return result
  83. # Press the green button in the gutter to run the script.
  84. if __name__ == '__main__':
  85. app.run(host='0.0.0.0', port=8348, debug=False, ssl_context=ssl)
  86. # See PyCharm help at https://www.jetbrains.com/help/pycharm/