12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- import argparse
- import os
- import signal
- import stat
- import subprocess
- import sys
- from qwen_server import config_browserqwen
- def parse_args():
- parser = argparse.ArgumentParser()
- parser.add_argument('-m', '--model_server', type=str, default='dashscope')
- parser.add_argument('-k', '--api_key', type=str, default='')
- parser.add_argument('-l', '--llm', type=str, default='qwen-plus',
- choices=['qwen-plus', 'qwen-turbo', 'qwen-14b-chat', 'qwen-7b-chat'])
- parser.add_argument('-s', '--server_host', type=str, default='127.0.0.1')
- parser.add_argument('-lan', '--prompt_language', type=str, default='CN', choices=['EN', 'CN'],
- help='the language of built-in prompt') # TODO: auto detect based on query and ref
- parser.add_argument('-t', '--max_ref_token', type=int, default=4000,
- help='the max token number of reference material')
- parser.add_argument('-w', '--workstation_port', type=int, default=7864,
- help='the port of editing workstation')
- args = parser.parse_args()
- args.model_server = args.model_server.replace('0.0.0.0', '127.0.0.1')
- return args
- def _fix_secure_write_for_code_interpreter():
- if 'linux' in sys.platform.lower():
- fname = os.path.join(config_browserqwen.code_interpreter_ws, 'test_file_permission.txt')
- if os.path.exists(fname):
- os.remove(fname)
- with os.fdopen(os.open(fname, os.O_CREAT | os.O_WRONLY | os.O_TRUNC, 0o0600), 'w') as f:
- f.write('test')
- file_mode = stat.S_IMODE(os.stat(fname).st_mode) & 0o6677
- if file_mode != 0o0600:
- os.environ['JUPYTER_ALLOW_INSECURE_WRITES'] = '1'
- if __name__ == '__main__':
- args = parse_args()
- if not os.path.exists(config_browserqwen.work_space_root):
- os.makedirs(config_browserqwen.work_space_root)
- if not os.path.exists(config_browserqwen.cache_root):
- os.makedirs(config_browserqwen.cache_root)
- if not os.path.exists(config_browserqwen.download_root):
- os.makedirs(config_browserqwen.download_root)
- if not os.path.exists(config_browserqwen.code_interpreter_ws):
- os.makedirs(config_browserqwen.code_interpreter_ws)
- _fix_secure_write_for_code_interpreter()
- servers = {
- 'database': subprocess.Popen(
- [sys.executable, os.path.join(os.getcwd(), 'qwen_server/main.py'), args.prompt_language, args.llm,
- str(args.max_ref_token), str(args.workstation_port), args.model_server, args.api_key, args.server_host]),
- 'workstation': subprocess.Popen(
- [sys.executable, os.path.join(os.getcwd(), 'qwen_server/app.py'), args.prompt_language, args.llm,
- str(args.max_ref_token), str(args.workstation_port), args.model_server, args.api_key, args.server_host]),
- 'browser': subprocess.Popen(
- [sys.executable, os.path.join(os.getcwd(), 'qwen_server/app_in_browser.py'), args.prompt_language,
- args.llm, str(args.max_ref_token), args.model_server, args.api_key, args.server_host])
- }
- def signal_handler(_sig, _frame):
- for v in servers.values():
- v.terminate()
- for k in list(servers.keys()):
- del servers[k]
- signal.signal(signal.SIGINT, signal_handler)
- signal.signal(signal.SIGTERM, signal_handler)
- for p in list(servers.values()):
- p.wait()
|