qingxu99 commited on
Commit
1fa9a79
1 Parent(s): dfa7615

add proxy debug funtion

Browse files
Files changed (5) hide show
  1. check_proxy.py +25 -0
  2. config.py +9 -1
  3. functional.py +3 -11
  4. main.py +5 -4
  5. predict.py +42 -36
check_proxy.py ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ """
3
+ 我:用python的requests库查询本机ip地址所在地
4
+ ChatGPT:
5
+ """
6
+ def check_proxy(proxies):
7
+ import requests
8
+ try:
9
+ response = requests.get("https://ipapi.co/json/", proxies=proxies, timeout=4)
10
+ data = response.json()
11
+ country = data['country_name']
12
+ # city = data['city']
13
+ proxies_https = proxies['https'] if proxies is not None else '无'
14
+ result = f"代理配置 {proxies_https}, 代理所在地:{country}"
15
+ print(result)
16
+ return result
17
+ except:
18
+ result = f"代理配置 {proxies_https}, 代理所在地查询超时,代理可能无效"
19
+ print(result)
20
+ return result
21
+
22
+
23
+ if __name__ == '__main__':
24
+ from config import proxies
25
+ check_proxy(proxies)
config.py CHANGED
@@ -2,14 +2,22 @@
2
  API_KEY = "sk-此处填API秘钥"
3
  API_URL = "https://api.openai.com/v1/chat/completions"
4
 
 
5
  USE_PROXY = False
6
  if USE_PROXY:
 
7
  proxies = { "http": "socks5h://localhost:11284", "https": "socks5h://localhost:11284", }
8
  print('网络代理状态:运行。')
9
  else:
10
  proxies = None
11
  print('网络代理状态:未配置。无代理状态下很可能无法访问。')
12
 
13
- # avoid dummy
 
 
 
 
 
 
14
  if API_KEY == "sk-此处填API秘钥":
15
  assert False, "请在config文件中修改API密钥, 添加海外代理之后再运行"
 
2
  API_KEY = "sk-此处填API秘钥"
3
  API_URL = "https://api.openai.com/v1/chat/completions"
4
 
5
+ # 改为True应用代理
6
  USE_PROXY = False
7
  if USE_PROXY:
8
+ # 代理网络的地址,打开你的科学上网软件查看代理的协议(socks5/http)、地址(localhost)和端口(11284)
9
  proxies = { "http": "socks5h://localhost:11284", "https": "socks5h://localhost:11284", }
10
  print('网络代理状态:运行。')
11
  else:
12
  proxies = None
13
  print('网络代理状态:未配置。无代理状态下很可能无法访问。')
14
 
15
+ # 发送请求到OpenAI后,等待多久判定为超时
16
+ TIMEOUT_SECONDS = 20
17
+
18
+ # 网页的端口, -1代表随机端口
19
+ WEB_PORT = -1
20
+
21
+ # 检查一下是不是忘了改config
22
  if API_KEY == "sk-此处填API秘钥":
23
  assert False, "请在config文件中修改API密钥, 添加海外代理之后再运行"
functional.py CHANGED
@@ -10,19 +10,16 @@ def get_functionals():
10
  "英语学术润色": {
11
  "Prefix": "Below is a paragraph from an academic paper. Polish the writing to meet the academic style, \
12
  improve the spelling, grammar, clarity, concision and overall readability. When neccessary, rewrite the whole sentence. \
13
- Furthermore, list all modification and explain the reasons to do so in markdown table.\n\n",
14
- "Button": None,
15
- "Suffix": "",
16
- "Color": "stop",
17
  },
18
  "中文学术润色": {
19
  "Prefix": "作为一名中文学术论文写作改进助理,你的任务是改进所提供文本的拼写、语法、清晰、简洁和整体可读性,同时分解长句,减少重复,并提供改进建议。请只提供文本的更正版本,避免包括解释。请编辑以下文本:\n\n",
20
- "Button": None,
21
  "Suffix": "",
22
  },
23
  "查找语法错误": {
24
  "Prefix": "Below is a paragraph from an academic paper. Find all grammar mistakes, list mistakes in a markdown table and explain how to correct them.\n\n",
25
- "Button": None,
26
  "Suffix": "",
27
  },
28
  "中英互译": {
@@ -37,28 +34,23 @@ When providing translations, please use Chinese to explain each sentence’s ten
37
  For phrases or individual words that require translation, provide the source (dictionary) for each one.If asked to translate multiple phrases at once, \
38
  separate them using the | symbol.Always remember: You are an English-Chinese translator, \
39
  not a Chinese-Chinese translator or an English-English translator. Below is the text you need to translate: \n\n",
40
- "Button": None,
41
  "Suffix": "",
42
  "Color": "stop",
43
  },
44
  "中译英": {
45
  "Prefix": "Please translate following sentence to English: \n\n",
46
- "Button": None,
47
  "Suffix": "",
48
  },
49
  "学术中译英": {
50
  "Prefix": "Please translate following sentence to English with academic writing, and provide some related authoritative examples: \n\n",
51
- "Button": None,
52
  "Suffix": "",
53
  },
54
  "英译中": {
55
  "Prefix": "请翻译成中文:\n\n",
56
- "Button": None,
57
  "Suffix": "",
58
  },
59
  "解释代码": {
60
  "Prefix": "请解释以下代码:\n```\n",
61
- "Button": None,
62
  "Suffix": "\n```\n",
63
  "Color": "stop",
64
  },
 
10
  "英语学术润色": {
11
  "Prefix": "Below is a paragraph from an academic paper. Polish the writing to meet the academic style, \
12
  improve the spelling, grammar, clarity, concision and overall readability. When neccessary, rewrite the whole sentence. \
13
+ Furthermore, list all modification and explain the reasons to do so in markdown table.\n\n", # 前言
14
+ "Suffix": "", # 后语
15
+ "Color": "stop", # 按钮颜色
 
16
  },
17
  "中文学术润色": {
18
  "Prefix": "作为一名中文学术论文写作改进助理,你的任务是改进所提供文本的拼写、语法、清晰、简洁和整体可读性,同时分解长句,减少重复,并提供改进建议。请只提供文本的更正版本,避免包括解释。请编辑以下文本:\n\n",
 
19
  "Suffix": "",
20
  },
21
  "查找语法错误": {
22
  "Prefix": "Below is a paragraph from an academic paper. Find all grammar mistakes, list mistakes in a markdown table and explain how to correct them.\n\n",
 
23
  "Suffix": "",
24
  },
25
  "中英互译": {
 
34
  For phrases or individual words that require translation, provide the source (dictionary) for each one.If asked to translate multiple phrases at once, \
35
  separate them using the | symbol.Always remember: You are an English-Chinese translator, \
36
  not a Chinese-Chinese translator or an English-English translator. Below is the text you need to translate: \n\n",
 
37
  "Suffix": "",
38
  "Color": "stop",
39
  },
40
  "中译英": {
41
  "Prefix": "Please translate following sentence to English: \n\n",
 
42
  "Suffix": "",
43
  },
44
  "学术中译英": {
45
  "Prefix": "Please translate following sentence to English with academic writing, and provide some related authoritative examples: \n\n",
 
46
  "Suffix": "",
47
  },
48
  "英译中": {
49
  "Prefix": "请翻译成中文:\n\n",
 
50
  "Suffix": "",
51
  },
52
  "解释代码": {
53
  "Prefix": "请解释以下代码:\n```\n",
 
54
  "Suffix": "\n```\n",
55
  "Color": "stop",
56
  },
main.py CHANGED
@@ -3,6 +3,7 @@ import os
3
  import markdown, mdtex2html
4
  from predict import predict
5
  from show_math import convert as convert_math
 
6
 
7
  def find_free_port():
8
  import socket
@@ -11,8 +12,8 @@ def find_free_port():
11
  s.bind(('', 0))
12
  s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
13
  return s.getsockname()[1]
14
-
15
- PORT = find_free_port()
16
 
17
  initial_prompt = "Serve me as a writing and programming assistant."
18
  title_html = """<h1 align="center">ChatGPT 学术优化</h1>"""
@@ -81,8 +82,8 @@ with gr.Blocks() as demo:
81
  for k in functional:
82
  variant = functional[k]["Color"] if "Color" in functional[k] else "secondary"
83
  functional[k]["Button"] = gr.Button(k, variant=variant)
84
-
85
- statusDisplay = gr.Markdown("status: ready")
86
  systemPromptTxt = gr.Textbox(show_label=True, placeholder=f"System Prompt", label="System prompt", value=initial_prompt).style(container=True)
87
  #inputs, top_p, temperature, top_k, repetition_penalty
88
  with gr.Accordion("arguments", open=False):
 
3
  import markdown, mdtex2html
4
  from predict import predict
5
  from show_math import convert as convert_math
6
+ from config import proxies, WEB_PORT
7
 
8
  def find_free_port():
9
  import socket
 
12
  s.bind(('', 0))
13
  s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
14
  return s.getsockname()[1]
15
+
16
+ PORT = find_free_port() if WEB_PORT <= 0 else WEB_PORT
17
 
18
  initial_prompt = "Serve me as a writing and programming assistant."
19
  title_html = """<h1 align="center">ChatGPT 学术优化</h1>"""
 
82
  for k in functional:
83
  variant = functional[k]["Color"] if "Color" in functional[k] else "secondary"
84
  functional[k]["Button"] = gr.Button(k, variant=variant)
85
+ from check_proxy import check_proxy
86
+ statusDisplay = gr.Markdown(f"{check_proxy(proxies)}")
87
  systemPromptTxt = gr.Textbox(show_label=True, placeholder=f"System Prompt", label="System prompt", value=initial_prompt).style(container=True)
88
  #inputs, top_p, temperature, top_k, repetition_penalty
89
  with gr.Accordion("arguments", open=False):
predict.py CHANGED
@@ -8,11 +8,11 @@ import os
8
 
9
  if os.path.exists('config_private.py'):
10
  # 放自己的秘密如API和代理网址
11
- from config_private import proxies, API_URL, API_KEY
12
  else:
13
- from config import proxies, API_URL, API_KEY
14
-
15
 
 
16
 
17
  def compose_system(system_prompt):
18
  return {"role": "system", "content": system_prompt}
@@ -35,7 +35,7 @@ def predict(inputs, top_p, temperature, chatbot=[], history=[], system_prompt=''
35
  raw_input = inputs
36
  logging.info(f'[raw_input] {raw_input}')
37
  chatbot.append((inputs, ""))
38
- yield chatbot, history, "Waiting"
39
 
40
  headers = {
41
  "Content-Type": "application/json",
@@ -49,26 +49,29 @@ def predict(inputs, top_p, temperature, chatbot=[], history=[], system_prompt=''
49
  messages = [compose_system(system_prompt)]
50
  if chat_counter:
51
  for index in range(0, 2*chat_counter, 2):
52
- d1 = {}
53
- d1["role"] = "user"
54
- d1["content"] = history[index]
55
- d2 = {}
56
- d2["role"] = "assistant"
57
- d2["content"] = history[index+1]
58
- if d1["content"] != "":
59
- if d2["content"] != "" or retry:
60
- messages.append(d1)
61
- messages.append(d2)
 
62
  else:
63
- messages[-1]['content'] = d2['content']
 
64
  if retry and chat_counter:
65
  messages.pop()
66
  else:
67
- temp3 = {}
68
- temp3["role"] = "user"
69
- temp3["content"] = inputs
70
- messages.append(temp3)
71
  chat_counter += 1
 
72
  # messages
73
  payload = {
74
  "model": "gpt-3.5-turbo",
@@ -87,10 +90,10 @@ def predict(inputs, top_p, temperature, chatbot=[], history=[], system_prompt=''
87
  try:
88
  # make a POST request to the API endpoint using the requests.post method, passing in stream=True
89
  response = requests.post(API_URL, headers=headers, proxies=proxies,
90
- json=payload, stream=True, timeout=15)
91
  except:
92
- chatbot[-1] = ((chatbot[-1][0], 'Request timeout, network error. please check proxy settings in config.py.'))
93
- yield chatbot, history, "Requests Timeout"
94
  raise TimeoutError
95
 
96
  token_counter = 0
@@ -101,8 +104,6 @@ def predict(inputs, top_p, temperature, chatbot=[], history=[], system_prompt=''
101
  stream_response = response.iter_lines()
102
  while True:
103
  chunk = next(stream_response)
104
- # print(chunk)
105
-
106
  if chunk == b'data: [DONE]':
107
  break
108
 
@@ -119,16 +120,21 @@ def predict(inputs, top_p, temperature, chatbot=[], history=[], system_prompt=''
119
  break
120
  except Exception as e:
121
  traceback.print_exc()
 
122
 
123
- chunkjson = json.loads(chunk.decode()[6:])
124
- status_text = f"id: {chunkjson['id']}, finish_reason: {chunkjson['choices'][0]['finish_reason']}"
125
- partial_words = partial_words + \
126
- json.loads(chunk.decode()[6:])[
127
- 'choices'][0]["delta"]["content"]
128
- if token_counter == 0:
129
- history.append(" " + partial_words)
130
- else:
131
- history[-1] = partial_words
132
- chatbot[-1] = (history[-2], history[-1])
133
- token_counter += 1
134
- yield chatbot, history, status_text
 
 
 
 
 
8
 
9
  if os.path.exists('config_private.py'):
10
  # 放自己的秘密如API和代理网址
11
+ from config_private import proxies, API_URL, API_KEY, TIMEOUT_SECONDS
12
  else:
13
+ from config import proxies, API_URL, API_KEY, TIMEOUT_SECONDS
 
14
 
15
+ timeout_bot_msg = 'Request timeout, network error. please check proxy settings in config.py.'
16
 
17
  def compose_system(system_prompt):
18
  return {"role": "system", "content": system_prompt}
 
35
  raw_input = inputs
36
  logging.info(f'[raw_input] {raw_input}')
37
  chatbot.append((inputs, ""))
38
+ yield chatbot, history, "等待响应"
39
 
40
  headers = {
41
  "Content-Type": "application/json",
 
49
  messages = [compose_system(system_prompt)]
50
  if chat_counter:
51
  for index in range(0, 2*chat_counter, 2):
52
+ what_i_have_asked = {}
53
+ what_i_have_asked["role"] = "user"
54
+ what_i_have_asked["content"] = history[index]
55
+ what_gpt_answer = {}
56
+ what_gpt_answer["role"] = "assistant"
57
+ what_gpt_answer["content"] = history[index+1]
58
+ if what_i_have_asked["content"] != "":
59
+ if not (what_gpt_answer["content"] != "" or retry): continue
60
+ if what_gpt_answer["content"] == timeout_bot_msg: continue
61
+ messages.append(what_i_have_asked)
62
+ messages.append(what_gpt_answer)
63
  else:
64
+ messages[-1]['content'] = what_gpt_answer['content']
65
+
66
  if retry and chat_counter:
67
  messages.pop()
68
  else:
69
+ what_i_ask_now = {}
70
+ what_i_ask_now["role"] = "user"
71
+ what_i_ask_now["content"] = inputs
72
+ messages.append(what_i_ask_now)
73
  chat_counter += 1
74
+
75
  # messages
76
  payload = {
77
  "model": "gpt-3.5-turbo",
 
90
  try:
91
  # make a POST request to the API endpoint using the requests.post method, passing in stream=True
92
  response = requests.post(API_URL, headers=headers, proxies=proxies,
93
+ json=payload, stream=True, timeout=TIMEOUT_SECONDS)
94
  except:
95
+ chatbot[-1] = ((chatbot[-1][0], timeout_bot_msg))
96
+ yield chatbot, history, "请求超时"
97
  raise TimeoutError
98
 
99
  token_counter = 0
 
104
  stream_response = response.iter_lines()
105
  while True:
106
  chunk = next(stream_response)
 
 
107
  if chunk == b'data: [DONE]':
108
  break
109
 
 
120
  break
121
  except Exception as e:
122
  traceback.print_exc()
123
+ print(chunk.decode())
124
 
125
+ try:
126
+ chunkjson = json.loads(chunk.decode()[6:])
127
+ status_text = f"finish_reason: {chunkjson['choices'][0]['finish_reason']}"
128
+ partial_words = partial_words + json.loads(chunk.decode()[6:])['choices'][0]["delta"]["content"]
129
+ if token_counter == 0:
130
+ history.append(" " + partial_words)
131
+ else:
132
+ history[-1] = partial_words
133
+ chatbot[-1] = (history[-2], history[-1])
134
+ token_counter += 1
135
+ yield chatbot, history, status_text
136
+
137
+ except Exception as e:
138
+ traceback.print_exc()
139
+ print(chunk.decode())
140
+ yield chatbot, history, "Json解析不合常规"