main.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import json
  2. import openai
  3. from flask import Flask, request, jsonify, send_from_directory, url_for
  4. import re
  5. import os
  6. import time
  7. from openai import ChatCompletion
  8. app = Flask(__name__)
  9. ssl = None
  10. # ssl =('/etc/ssl/sample.crt', '/etc/ssl/sample.pem')
  11. openai_key = os.environ.get("OPENAI_KEY", "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")
  12. openai.api_key = openai_key
  13. app.chat_messages = [
  14. {"role": "system",
  15. "content": "Jawab hanya dengan bahasa Indonesia"}
  16. ]
  17. UPLOAD_FOLDER = 'files'
  18. app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
  19. @app.route('/files/<name>')
  20. def download_file(name):
  21. return send_from_directory(app.config["UPLOAD_FOLDER"], name)
  22. @app.route('/', methods=['GET', 'POST'])
  23. def test():
  24. return jsonify({"status": "0"})
  25. @app.route('/gpt', methods=['POST'])
  26. def gpt():
  27. chat_messages = app.chat_messages.copy()
  28. use_video = False
  29. json_payload = request.get_json()
  30. if not json_payload:
  31. json_payload = []
  32. has_named_params = False
  33. if isinstance(json_payload, dict):
  34. has_named_params = 'use_video' in json_payload or 'payload' in json_payload
  35. if 'use_video' in json_payload and 'payload' in json_payload:
  36. use_video = json_payload['use_video'] == "1"
  37. json_payload = json_payload['payload']
  38. if isinstance(json_payload, dict):
  39. json_payload = [json_payload]
  40. else:
  41. json_payload = [json_payload]
  42. json_payload = json_payload[-5:]
  43. for message in json_payload:
  44. content = message['content']
  45. content_arr = content.split(" ")
  46. new_content_arr = content[:250].split(" ")
  47. new_content_len = len(new_content_arr)
  48. arr = []
  49. for i in range(new_content_len):
  50. arr.append(content_arr[i])
  51. message['content'] = " ".join(arr)
  52. chat_messages.append(message)
  53. print(chat_messages)
  54. result = {}
  55. try:
  56. json_response = openai.ChatCompletion.create(model="gpt-3.5-turbo", # GPT-3.5 Turbo engine
  57. messages=chat_messages,
  58. max_tokens=300, temperature=0.6)
  59. print(json_response.choices[0].message)
  60. if has_named_params:
  61. if use_video:
  62. # TODO: to be implemented
  63. result = {"url": url_for('download_file', name="test.mp4", _external=True), "message": json_response.choices[0].message}
  64. else:
  65. result = {"url": "", "message": json_response.choices[0].message}
  66. else:
  67. result = json_response.choices[0].message
  68. except Exception as error_print:
  69. print(error_print)
  70. result = {}, 405
  71. return result
  72. # Press the green button in the gutter to run the script.
  73. if __name__ == '__main__':
  74. app.run(host='0.0.0.0', port=8348, debug=True, ssl_context=ssl)
  75. # See PyCharm help at https://www.jetbrains.com/help/pycharm/