ixiaocang commited on
Commit
1762349
1 Parent(s): 80db8fd

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +78 -364
app.py CHANGED
@@ -1,452 +1,166 @@
1
  # -*- coding:utf-8 -*-
 
2
  import os
3
  import logging
4
  import sys
 
 
 
5
 
6
- import gradio as gr
7
-
8
- from modules.utils import *
9
- from modules.presets import *
10
- from modules.overwrites import *
11
- from modules.chat_func import *
12
- from modules.openai_func import get_usage
13
-
14
- logging.basicConfig(
15
- level=logging.DEBUG,
16
- format="%(asctime)s [%(levelname)s] [%(filename)s:%(lineno)d] %(message)s",
17
- )
18
 
19
- my_api_key = "" # 在这里输入你的 API 密钥
20
 
21
- # if we are running in Docker
22
- if os.environ.get("dockerrun") == "yes":
23
  dockerflag = True
24
  else:
25
  dockerflag = False
26
 
27
  authflag = False
28
- auth_list = []
29
 
30
- if not my_api_key:
31
- my_api_key = os.environ.get("my_api_key")
32
  if dockerflag:
 
33
  if my_api_key == "empty":
34
  logging.error("Please give a api key!")
35
  sys.exit(1)
36
- # auth
37
- username = os.environ.get("USERNAME")
38
- password = os.environ.get("PASSWORD")
39
  if not (isinstance(username, type(None)) or isinstance(password, type(None))):
40
- auth_list.append((os.environ.get("USERNAME"), os.environ.get("PASSWORD")))
41
  authflag = True
42
  else:
43
- if (
44
- not my_api_key
45
- and os.path.exists("api_key.txt")
46
- and os.path.getsize("api_key.txt")
47
- ):
48
  with open("api_key.txt", "r") as f:
49
  my_api_key = f.read().strip()
50
  if os.path.exists("auth.json"):
51
- authflag = True
52
- with open("auth.json", "r", encoding='utf-8') as f:
53
  auth = json.load(f)
54
- for _ in auth:
55
- if auth[_]["username"] and auth[_]["password"]:
56
- auth_list.append((auth[_]["username"], auth[_]["password"]))
57
- else:
58
- logging.error("请检查auth.json文件中的用户名和密码!")
59
- sys.exit(1)
60
 
61
  gr.Chatbot.postprocess = postprocess
62
- PromptHelper.compact_text_chunks = compact_text_chunks
63
-
64
- with open("assets/custom.css", "r", encoding="utf-8") as f:
65
- customCSS = f.read()
66
 
67
- with gr.Blocks(css=customCSS, theme=small_and_beautiful_theme) as demo:
68
  history = gr.State([])
69
  token_count = gr.State([])
70
  promptTemplates = gr.State(load_template(get_template_names(plain=True)[0], mode=2))
71
- user_api_key = gr.State(my_api_key)
72
- user_question = gr.State("")
73
- outputing = gr.State(False)
74
  topic = gr.State("未命名对话历史记录")
75
 
76
  with gr.Row():
77
- with gr.Column(scale=1):
78
- gr.HTML(title)
79
- with gr.Column(scale=4):
80
- gr.HTML('<center><a href="https://huggingface.co/spaces/JohnSmith9982/ChuanhuChatGPT?duplicate=true"><img src="https://bit.ly/3gLdBN6" alt="Duplicate Space"></a>Duplicate the Space and run securely with your OpenAI API Key</center>')
81
- with gr.Column(scale=4):
82
- status_display = gr.Markdown(get_geoip(), elem_id="status_display")
83
 
84
- with gr.Row().style(equal_height=True):
85
  with gr.Column(scale=5):
86
- with gr.Row():
87
- chatbot = gr.Chatbot(elem_id="chuanhu_chatbot").style(height="100%")
88
- with gr.Row():
89
  with gr.Column(scale=12):
90
- user_input = gr.Textbox(
91
- show_label=False, placeholder="在这里输入"
92
- ).style(container=False)
93
- with gr.Column(min_width=70, scale=1):
94
- submitBtn = gr.Button("发送", variant="primary")
95
- cancelBtn = gr.Button("取消", variant="secondary", visible=False)
96
- with gr.Row():
97
- emptyBtn = gr.Button(
98
- "🧹 新的对话",
99
- )
100
  retryBtn = gr.Button("🔄 重新生成")
101
- delFirstBtn = gr.Button("🗑️ 删除最旧对话")
102
- delLastBtn = gr.Button("🗑️ 删除最新对话")
103
  reduceTokenBtn = gr.Button("♻️ 总结对话")
104
 
105
  with gr.Column():
106
- with gr.Column(min_width=50, scale=1):
107
  with gr.Tab(label="ChatGPT"):
108
- keyTxt = gr.Textbox(
109
- show_label=True,
110
- placeholder=f"OpenAI API-key...",
111
- value=hide_middle_chars(my_api_key),
112
- type="password",
113
- visible=not HIDE_MY_KEY,
114
- label="API-Key",
115
- )
116
- usageTxt = gr.Markdown("**发送消息** 或 **提交key** 以显示额度", elem_id="usage_display")
117
- model_select_dropdown = gr.Dropdown(
118
- label="选择模型", choices=MODELS, multiselect=False, value=MODELS[0]
119
- )
120
- use_streaming_checkbox = gr.Checkbox(
121
- label="实时传输回答", value=True, visible=enable_streaming_option
122
- )
123
  use_websearch_checkbox = gr.Checkbox(label="使用在线搜索", value=False)
124
- language_select_dropdown = gr.Dropdown(
125
- label="选择回复语言(针对搜索&索引功能)",
126
- choices=REPLY_LANGUAGES,
127
- multiselect=False,
128
- value=REPLY_LANGUAGES[0],
129
- )
130
- index_files = gr.Files(label="上传索引文件", type="file", multiple=True)
131
 
132
  with gr.Tab(label="Prompt"):
133
- systemPromptTxt = gr.Textbox(
134
- show_label=True,
135
- placeholder=f"在这里输入System Prompt...",
136
- label="System prompt",
137
- value=initial_prompt,
138
- lines=10,
139
- ).style(container=False)
140
  with gr.Accordion(label="加载Prompt模板", open=True):
141
  with gr.Column():
142
  with gr.Row():
143
  with gr.Column(scale=6):
144
- templateFileSelectDropdown = gr.Dropdown(
145
- label="选择Prompt模板集合文件",
146
- choices=get_template_names(plain=True),
147
- multiselect=False,
148
- value=get_template_names(plain=True)[0],
149
- ).style(container=False)
150
  with gr.Column(scale=1):
151
  templateRefreshBtn = gr.Button("🔄 刷新")
152
  with gr.Row():
153
  with gr.Column():
154
- templateSelectDropdown = gr.Dropdown(
155
- label="从Prompt模板中加载",
156
- choices=load_template(
157
- get_template_names(plain=True)[0], mode=1
158
- ),
159
- multiselect=False,
160
- value=load_template(
161
- get_template_names(plain=True)[0], mode=1
162
- )[0],
163
- ).style(container=False)
164
 
165
  with gr.Tab(label="保存/加载"):
166
  with gr.Accordion(label="保存/加载对话历史记录", open=True):
167
  with gr.Column():
168
- with gr.Row():
169
- with gr.Column(scale=6):
170
- historyFileSelectDropdown = gr.Dropdown(
171
- label="从列表中加载对话",
172
- choices=get_history_names(plain=True),
173
- multiselect=False,
174
- value=get_history_names(plain=True)[0],
175
- )
176
- with gr.Column(scale=1):
177
- historyRefreshBtn = gr.Button("🔄 刷新")
178
  with gr.Row():
179
  with gr.Column(scale=6):
180
  saveFileName = gr.Textbox(
181
- show_label=True,
182
- placeholder=f"设置文件名: 默认为.json,可选为.md",
183
- label="设置保存文件名",
184
- value="对话历史记录",
185
- ).style(container=True)
186
  with gr.Column(scale=1):
187
  saveHistoryBtn = gr.Button("💾 保存对话")
188
- exportMarkdownBtn = gr.Button("📝 导出为Markdown")
189
- gr.Markdown("默认保存于history文件夹")
190
  with gr.Row():
191
- with gr.Column():
192
- downloadFile = gr.File(interactive=True)
193
-
194
- with gr.Tab(label="高级"):
195
- gr.Markdown("# ⚠️ 务必谨慎更改 ⚠️\n\n如果无法使用请恢复默认设置")
196
- default_btn = gr.Button("🔙 恢复默认设置")
197
-
198
- with gr.Accordion("参数", open=False):
199
- top_p = gr.Slider(
200
- minimum=-0,
201
- maximum=1.0,
202
- value=1.0,
203
- step=0.05,
204
- interactive=True,
205
- label="Top-p",
206
- )
207
- temperature = gr.Slider(
208
- minimum=-0,
209
- maximum=2.0,
210
- value=1.0,
211
- step=0.1,
212
- interactive=True,
213
- label="Temperature",
214
- )
215
-
216
- with gr.Accordion("网络设置", open=False, visible=False):
217
- apiurlTxt = gr.Textbox(
218
- show_label=True,
219
- placeholder=f"在这里输入API地址...",
220
- label="API地址",
221
- value="https://api.openai.com/v1/chat/completions",
222
- lines=2,
223
- )
224
- changeAPIURLBtn = gr.Button("🔄 切换API地址")
225
- proxyTxt = gr.Textbox(
226
- show_label=True,
227
- placeholder=f"在这里输入代理地址...",
228
- label="代理地址(示例:http://127.0.0.1:10809)",
229
- value="",
230
- lines=2,
231
- )
232
- changeProxyBtn = gr.Button("🔄 设置代理地址")
233
 
234
  gr.Markdown(description)
235
- gr.HTML(footer.format(versions=versions_html()), elem_id="footer")
236
- chatgpt_predict_args = dict(
237
- fn=predict,
238
- inputs=[
239
- user_api_key,
240
- systemPromptTxt,
241
- history,
242
- user_question,
243
- chatbot,
244
- token_count,
245
- top_p,
246
- temperature,
247
- use_streaming_checkbox,
248
- model_select_dropdown,
249
- use_websearch_checkbox,
250
- index_files,
251
- language_select_dropdown,
252
- ],
253
- outputs=[chatbot, history, status_display, token_count],
254
- show_progress=True,
255
- )
256
-
257
- start_outputing_args = dict(
258
- fn=start_outputing,
259
- inputs=[],
260
- outputs=[submitBtn, cancelBtn],
261
- show_progress=True,
262
- )
263
-
264
- end_outputing_args = dict(
265
- fn=end_outputing, inputs=[], outputs=[submitBtn, cancelBtn]
266
- )
267
 
268
- reset_textbox_args = dict(
269
- fn=reset_textbox, inputs=[], outputs=[user_input]
270
- )
271
 
272
- transfer_input_args = dict(
273
- fn=transfer_input, inputs=[user_input], outputs=[user_question, user_input, submitBtn, cancelBtn], show_progress=True
274
- )
275
 
276
- get_usage_args = dict(
277
- fn=get_usage, inputs=[user_api_key], outputs=[usageTxt], show_progress=False
278
- )
279
 
 
280
 
281
- # Chatbot
282
- cancelBtn.click(cancel_outputing, [], [])
283
 
284
- user_input.submit(**transfer_input_args).then(**chatgpt_predict_args).then(**end_outputing_args)
285
- user_input.submit(**get_usage_args)
286
 
287
- submitBtn.click(**transfer_input_args).then(**chatgpt_predict_args).then(**end_outputing_args)
288
- submitBtn.click(**get_usage_args)
289
 
290
- emptyBtn.click(
291
- reset_state,
292
- outputs=[chatbot, history, token_count, status_display],
293
- show_progress=True,
294
- )
295
- emptyBtn.click(**reset_textbox_args)
296
-
297
- retryBtn.click(**start_outputing_args).then(
298
- retry,
299
- [
300
- user_api_key,
301
- systemPromptTxt,
302
- history,
303
- chatbot,
304
- token_count,
305
- top_p,
306
- temperature,
307
- use_streaming_checkbox,
308
- model_select_dropdown,
309
- language_select_dropdown,
310
- ],
311
- [chatbot, history, status_display, token_count],
312
- show_progress=True,
313
- ).then(**end_outputing_args)
314
- retryBtn.click(**get_usage_args)
315
-
316
- delFirstBtn.click(
317
- delete_first_conversation,
318
- [history, token_count],
319
- [history, token_count, status_display],
320
- )
321
-
322
- delLastBtn.click(
323
- delete_last_conversation,
324
- [chatbot, history, token_count],
325
- [chatbot, history, token_count, status_display],
326
- show_progress=True,
327
- )
328
 
329
- reduceTokenBtn.click(
330
- reduce_token_size,
331
- [
332
- user_api_key,
333
- systemPromptTxt,
334
- history,
335
- chatbot,
336
- token_count,
337
- top_p,
338
- temperature,
339
- gr.State(sum(token_count.value[-4:])),
340
- model_select_dropdown,
341
- language_select_dropdown,
342
- ],
343
- [chatbot, history, status_display, token_count],
344
- show_progress=True,
345
- )
346
- reduceTokenBtn.click(**get_usage_args)
347
 
348
- # ChatGPT
349
- keyTxt.change(submit_key, keyTxt, [user_api_key, status_display]).then(**get_usage_args)
350
- keyTxt.submit(**get_usage_args)
351
 
352
- # Template
353
  templateRefreshBtn.click(get_template_names, None, [templateFileSelectDropdown])
354
- templateFileSelectDropdown.change(
355
- load_template,
356
- [templateFileSelectDropdown],
357
- [promptTemplates, templateSelectDropdown],
358
- show_progress=True,
359
- )
360
- templateSelectDropdown.change(
361
- get_template_content,
362
- [promptTemplates, templateSelectDropdown, systemPromptTxt],
363
- [systemPromptTxt],
364
- show_progress=True,
365
- )
366
 
367
- # S&L
368
- saveHistoryBtn.click(
369
- save_chat_history,
370
- [saveFileName, systemPromptTxt, history, chatbot],
371
- downloadFile,
372
- show_progress=True,
373
- )
374
- saveHistoryBtn.click(get_history_names, None, [historyFileSelectDropdown])
375
- exportMarkdownBtn.click(
376
- export_markdown,
377
- [saveFileName, systemPromptTxt, history, chatbot],
378
- downloadFile,
379
- show_progress=True,
380
- )
381
- historyRefreshBtn.click(get_history_names, None, [historyFileSelectDropdown])
382
- historyFileSelectDropdown.change(
383
- load_chat_history,
384
- [historyFileSelectDropdown, systemPromptTxt, history, chatbot],
385
- [saveFileName, systemPromptTxt, history, chatbot],
386
- show_progress=True,
387
- )
388
- downloadFile.change(
389
- load_chat_history,
390
- [downloadFile, systemPromptTxt, history, chatbot],
391
- [saveFileName, systemPromptTxt, history, chatbot],
392
- )
393
 
394
- # Advanced
395
- default_btn.click(
396
- reset_default, [], [apiurlTxt, proxyTxt, status_display], show_progress=True
397
- )
398
- changeAPIURLBtn.click(
399
- change_api_url,
400
- [apiurlTxt],
401
- [status_display],
402
- show_progress=True,
403
- )
404
- changeProxyBtn.click(
405
- change_proxy,
406
- [proxyTxt],
407
- [status_display],
408
- show_progress=True,
409
- )
410
 
411
- logging.info(
412
- colorama.Back.GREEN
413
- + "\n川虎的温馨提示:访问 http://localhost:7860 查看界面"
414
- + colorama.Style.RESET_ALL
415
- )
416
  # 默认开启本地服务器,默认可以直接从IP访问,默认不创建公开分享链接
417
- demo.title = "川虎ChatGPT 🚀"
418
 
419
  if __name__ == "__main__":
420
- reload_javascript()
421
- # if running in Docker
422
  if dockerflag:
423
  if authflag:
424
- demo.queue(concurrency_count=CONCURRENT_COUNT).launch(
425
- server_name="0.0.0.0",
426
- server_port=7860,
427
- auth=auth_list,
428
- favicon_path="./assets/favicon.ico",
429
- )
430
  else:
431
- demo.queue(concurrency_count=CONCURRENT_COUNT).launch(
432
- server_name="0.0.0.0",
433
- server_port=7860,
434
- share=False,
435
- favicon_path="./assets/favicon.ico",
436
- )
437
- # if not running in Docker
438
  else:
439
  if authflag:
440
- demo.queue(concurrency_count=CONCURRENT_COUNT).launch(
441
- share=False,
442
- auth=auth_list,
443
- favicon_path="./assets/favicon.ico",
444
- inbrowser=True,
445
- )
446
  else:
447
- demo.queue(concurrency_count=CONCURRENT_COUNT).launch(
448
- share=False, favicon_path="./assets/favicon.ico", inbrowser=True
449
- ) # 改为 share=True 可以创建公开分享链接
450
- # demo.queue(concurrency_count=CONCURRENT_COUNT).launch(server_name="0.0.0.0", server_port=7860, share=False) # 可自定义端口
451
- # demo.queue(concurrency_count=CONCURRENT_COUNT).launch(server_name="0.0.0.0", server_port=7860,auth=("在这里填写用户名", "在这里填写密码")) # 可设置用户名与密码
452
- # demo.queue(concurrency_count=CONCURRENT_COUNT).launch(auth=("在这里填写用户名", "在这里填写密码")) # 适合Nginx反向代理
 
1
  # -*- coding:utf-8 -*-
2
+ import gradio as gr
3
  import os
4
  import logging
5
  import sys
6
+ import argparse
7
+ from utils import *
8
+ from presets import *
9
 
10
+ logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(levelname)s] [%(filename)s:%(lineno)d] %(message)s")
 
 
 
 
 
 
 
 
 
 
 
11
 
12
+ my_api_key = "" # 在这里输入你的 API 密钥
13
 
14
+ #if we are running in Docker
15
+ if os.environ.get('dockerrun') == 'yes':
16
  dockerflag = True
17
  else:
18
  dockerflag = False
19
 
20
  authflag = False
 
21
 
 
 
22
  if dockerflag:
23
+ my_api_key = os.environ.get('my_api_key')
24
  if my_api_key == "empty":
25
  logging.error("Please give a api key!")
26
  sys.exit(1)
27
+ #auth
28
+ username = os.environ.get('USERNAME')
29
+ password = os.environ.get('PASSWORD')
30
  if not (isinstance(username, type(None)) or isinstance(password, type(None))):
 
31
  authflag = True
32
  else:
33
+ if not my_api_key and os.path.exists("api_key.txt") and os.path.getsize("api_key.txt"):
 
 
 
 
34
  with open("api_key.txt", "r") as f:
35
  my_api_key = f.read().strip()
36
  if os.path.exists("auth.json"):
37
+ with open("auth.json", "r") as f:
 
38
  auth = json.load(f)
39
+ username = auth["username"]
40
+ password = auth["password"]
41
+ if username != "" and password != "":
42
+ authflag = True
 
 
43
 
44
  gr.Chatbot.postprocess = postprocess
 
 
 
 
45
 
46
+ with gr.Blocks(css=customCSS) as demo:
47
  history = gr.State([])
48
  token_count = gr.State([])
49
  promptTemplates = gr.State(load_template(get_template_names(plain=True)[0], mode=2))
50
+ TRUECOMSTANT = gr.State(True)
51
+ FALSECONSTANT = gr.State(False)
 
52
  topic = gr.State("未命名对话历史记录")
53
 
54
  with gr.Row():
55
+ gr.HTML(title)
56
+ status_display = gr.Markdown("status: ready", elem_id="status_display")
 
 
 
 
57
 
58
+ with gr.Row(scale=1).style(equal_height=True):
59
  with gr.Column(scale=5):
60
+ with gr.Row(scale=1):
61
+ chatbot = gr.Chatbot().style(height=600) # .style(color_map=("#1D51EE", "#585A5B"))
62
+ with gr.Row(scale=1):
63
  with gr.Column(scale=12):
64
+ user_input = gr.Textbox(show_label=False, placeholder="在这里输入").style(
65
+ container=False)
66
+ with gr.Column(min_width=50, scale=1):
67
+ submitBtn = gr.Button("🚀", variant="primary")
68
+ with gr.Row(scale=1):
69
+ emptyBtn = gr.Button("🧹 新的对话",)
 
 
 
 
70
  retryBtn = gr.Button("🔄 重新生成")
71
+ delLastBtn = gr.Button("🗑️ 删除一条对话")
 
72
  reduceTokenBtn = gr.Button("♻️ 总结对话")
73
 
74
  with gr.Column():
75
+ with gr.Column(min_width=50,scale=1):
76
  with gr.Tab(label="ChatGPT"):
77
+ keyTxt = gr.Textbox(show_label=True, placeholder=f"OpenAI API-key...",value=my_api_key, type="password", visible=not HIDE_MY_KEY, label="API-Key")
78
+ model_select_dropdown = gr.Dropdown(label="选择模型", choices=MODELS, multiselect=False, value=MODELS[0])
79
+ with gr.Accordion("参数", open=False):
80
+ top_p = gr.Slider(minimum=-0, maximum=1.0, value=1.0, step=0.05,
81
+ interactive=True, label="Top-p (nucleus sampling)",)
82
+ temperature = gr.Slider(minimum=-0, maximum=2.0, value=1.0,
83
+ step=0.1, interactive=True, label="Temperature",)
84
+ use_streaming_checkbox = gr.Checkbox(label="实时传输回答", value=True, visible=enable_streaming_option)
 
 
 
 
 
 
 
85
  use_websearch_checkbox = gr.Checkbox(label="使用在线搜索", value=False)
 
 
 
 
 
 
 
86
 
87
  with gr.Tab(label="Prompt"):
88
+ systemPromptTxt = gr.Textbox(show_label=True, placeholder=f"在这里输入System Prompt...", label="System prompt", value=initial_prompt).style(container=True)
 
 
 
 
 
 
89
  with gr.Accordion(label="加载Prompt模板", open=True):
90
  with gr.Column():
91
  with gr.Row():
92
  with gr.Column(scale=6):
93
+ templateFileSelectDropdown = gr.Dropdown(label="选择Prompt模板集合文件", choices=get_template_names(plain=True), multiselect=False, value=get_template_names(plain=True)[0])
 
 
 
 
 
94
  with gr.Column(scale=1):
95
  templateRefreshBtn = gr.Button("🔄 刷新")
96
  with gr.Row():
97
  with gr.Column():
98
+ templateSelectDropdown = gr.Dropdown(label="从Prompt模板中加载", choices=load_template(get_template_names(plain=True)[0], mode=1), multiselect=False, value=load_template(get_template_names(plain=True)[0], mode=1)[0])
 
 
 
 
 
 
 
 
 
99
 
100
  with gr.Tab(label="保存/加载"):
101
  with gr.Accordion(label="保存/加载对话历史记录", open=True):
102
  with gr.Column():
 
 
 
 
 
 
 
 
 
 
103
  with gr.Row():
104
  with gr.Column(scale=6):
105
  saveFileName = gr.Textbox(
106
+ show_label=True, placeholder=f"在这里输入保存的文件名...", label="设置保存文件名", value="对话历史记录").style(container=True)
 
 
 
 
107
  with gr.Column(scale=1):
108
  saveHistoryBtn = gr.Button("💾 保存对话")
 
 
109
  with gr.Row():
110
+ with gr.Column(scale=6):
111
+ historyFileSelectDropdown = gr.Dropdown(label="从列表中加载对话", choices=get_history_names(plain=True), multiselect=False, value=get_history_names(plain=True)[0])
112
+ with gr.Column(scale=1):
113
+ historyRefreshBtn = gr.Button("🔄 刷新")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
114
 
115
  gr.Markdown(description)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
116
 
117
+ user_input.submit(predict, [keyTxt, systemPromptTxt, history, user_input, chatbot, token_count, top_p, temperature, use_streaming_checkbox, model_select_dropdown, use_websearch_checkbox], [chatbot, history, status_display, token_count], show_progress=True)
118
+ user_input.submit(reset_textbox, [], [user_input])
 
119
 
120
+ submitBtn.click(predict, [keyTxt, systemPromptTxt, history, user_input, chatbot, token_count, top_p, temperature, use_streaming_checkbox, model_select_dropdown, use_websearch_checkbox], [chatbot, history, status_display, token_count], show_progress=True)
121
+ submitBtn.click(reset_textbox, [], [user_input])
 
122
 
123
+ emptyBtn.click(reset_state, outputs=[chatbot, history, token_count, status_display], show_progress=True)
 
 
124
 
125
+ retryBtn.click(retry, [keyTxt, systemPromptTxt, history, chatbot, token_count, top_p, temperature, use_streaming_checkbox, model_select_dropdown], [chatbot, history, status_display, token_count], show_progress=True)
126
 
127
+ delLastBtn.click(delete_last_conversation, [chatbot, history, token_count], [
128
+ chatbot, history, token_count, status_display], show_progress=True)
129
 
130
+ reduceTokenBtn.click(reduce_token_size, [keyTxt, systemPromptTxt, history, chatbot, token_count, top_p, temperature, use_streaming_checkbox, model_select_dropdown], [chatbot, history, status_display, token_count], show_progress=True)
 
131
 
132
+ saveHistoryBtn.click(save_chat_history, [
133
+ saveFileName, systemPromptTxt, history, chatbot], None, show_progress=True)
134
 
135
+ saveHistoryBtn.click(get_history_names, None, [historyFileSelectDropdown])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
136
 
137
+ historyRefreshBtn.click(get_history_names, None, [historyFileSelectDropdown])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
138
 
139
+ historyFileSelectDropdown.change(load_chat_history, [historyFileSelectDropdown, systemPromptTxt, history, chatbot], [saveFileName, systemPromptTxt, history, chatbot], show_progress=True)
 
 
140
 
 
141
  templateRefreshBtn.click(get_template_names, None, [templateFileSelectDropdown])
 
 
 
 
 
 
 
 
 
 
 
 
142
 
143
+ templateFileSelectDropdown.change(load_template, [templateFileSelectDropdown], [promptTemplates, templateSelectDropdown], show_progress=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
144
 
145
+ templateSelectDropdown.change(get_template_content, [promptTemplates, templateSelectDropdown, systemPromptTxt], [systemPromptTxt], show_progress=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
146
 
147
+ logging.info(colorama.Back.GREEN + "\n川虎的温馨提示:访问 http://localhost:7860 查看界面" + colorama.Style.RESET_ALL)
 
 
 
 
148
  # 默认开启本地服务器,默认可以直接从IP访问,默认不创建公开分享链接
149
+ demo.title = "荧可ChatGPT 🚀"
150
 
151
  if __name__ == "__main__":
152
+ #if running in Docker
 
153
  if dockerflag:
154
  if authflag:
155
+ demo.queue().launch(server_name="0.0.0.0", server_port=7860,auth=(username, password))
 
 
 
 
 
156
  else:
157
+ demo.queue().launch(server_name="0.0.0.0", server_port=7860, share=True)
158
+ #if not running in Docker
 
 
 
 
 
159
  else:
160
  if authflag:
161
+ demo.queue().launch(share=True, auth=(username, password))
 
 
 
 
 
162
  else:
163
+ demo.queue().launch(share=True) # 改为 share=True 可以创建公开分享链接
164
+ #demo.queue().launch(server_name="0.0.0.0", server_port=7860, share=False) # 可自定义端口
165
+ #demo.queue().launch(server_name="0.0.0.0", server_port=7860,auth=("在这里填写用户名", "在这里填写密码")) # 可设置用户名与密码
166
+ #demo.queue().launch(auth=("在这里填写用户名", "在这里填写密码")) # 适合Nginx反向代理