run_server.py 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import argparse
  2. import os
  3. import signal
  4. import stat
  5. import subprocess
  6. import sys
  7. from qwen_server import config_browserqwen
  8. def parse_args():
  9. parser = argparse.ArgumentParser()
  10. parser.add_argument('-m', '--model_server', type=str, default='dashscope')
  11. parser.add_argument('-k', '--api_key', type=str, default='')
  12. parser.add_argument('-l', '--llm', type=str, default='qwen-plus',
  13. choices=['qwen-plus', 'qwen-turbo', 'qwen-14b-chat', 'qwen-7b-chat'])
  14. parser.add_argument('-s', '--server_host', type=str, default='127.0.0.1')
  15. parser.add_argument('-lan', '--prompt_language', type=str, default='CN', choices=['EN', 'CN'],
  16. help='the language of built-in prompt') # TODO: auto detect based on query and ref
  17. parser.add_argument('-t', '--max_ref_token', type=int, default=4000,
  18. help='the max token number of reference material')
  19. parser.add_argument('-w', '--workstation_port', type=int, default=7864,
  20. help='the port of editing workstation')
  21. args = parser.parse_args()
  22. args.model_server = args.model_server.replace('0.0.0.0', '127.0.0.1')
  23. return args
  24. def _fix_secure_write_for_code_interpreter():
  25. if 'linux' in sys.platform.lower():
  26. fname = os.path.join(config_browserqwen.code_interpreter_ws, 'test_file_permission.txt')
  27. if os.path.exists(fname):
  28. os.remove(fname)
  29. with os.fdopen(os.open(fname, os.O_CREAT | os.O_WRONLY | os.O_TRUNC, 0o0600), 'w') as f:
  30. f.write('test')
  31. file_mode = stat.S_IMODE(os.stat(fname).st_mode) & 0o6677
  32. if file_mode != 0o0600:
  33. os.environ['JUPYTER_ALLOW_INSECURE_WRITES'] = '1'
  34. if __name__ == '__main__':
  35. args = parse_args()
  36. if not os.path.exists(config_browserqwen.work_space_root):
  37. os.makedirs(config_browserqwen.work_space_root)
  38. if not os.path.exists(config_browserqwen.cache_root):
  39. os.makedirs(config_browserqwen.cache_root)
  40. if not os.path.exists(config_browserqwen.download_root):
  41. os.makedirs(config_browserqwen.download_root)
  42. if not os.path.exists(config_browserqwen.code_interpreter_ws):
  43. os.makedirs(config_browserqwen.code_interpreter_ws)
  44. _fix_secure_write_for_code_interpreter()
  45. servers = {
  46. 'database': subprocess.Popen(
  47. [sys.executable, os.path.join(os.getcwd(), 'qwen_server/main.py'), args.prompt_language, args.llm,
  48. str(args.max_ref_token), str(args.workstation_port), args.model_server, args.api_key, args.server_host]),
  49. 'workstation': subprocess.Popen(
  50. [sys.executable, os.path.join(os.getcwd(), 'qwen_server/app.py'), args.prompt_language, args.llm,
  51. str(args.max_ref_token), str(args.workstation_port), args.model_server, args.api_key, args.server_host]),
  52. 'browser': subprocess.Popen(
  53. [sys.executable, os.path.join(os.getcwd(), 'qwen_server/app_in_browser.py'), args.prompt_language,
  54. args.llm, str(args.max_ref_token), args.model_server, args.api_key, args.server_host])
  55. }
  56. def signal_handler(_sig, _frame):
  57. for v in servers.values():
  58. v.terminate()
  59. for k in list(servers.keys()):
  60. del servers[k]
  61. signal.signal(signal.SIGINT, signal_handler)
  62. signal.signal(signal.SIGTERM, signal_handler)
  63. for p in list(servers.values()):
  64. p.wait()