Spaces:
Running
Running
add newbing, testing
Browse files- config.py +2 -1
- request_llm/bridge_all.py +3 -1
- request_llm/bridge_newbing.py +58 -39
config.py
CHANGED
@@ -65,6 +65,7 @@ API_URL_REDIRECT = {}
|
|
65 |
CUSTOM_PATH = "/"
|
66 |
|
67 |
# 如果需要使用newbing,把newbing的长长的cookie放到这里
|
68 |
-
|
|
|
69 |
your bing cookies here
|
70 |
"""
|
|
|
65 |
CUSTOM_PATH = "/"
|
66 |
|
67 |
# 如果需要使用newbing,把newbing的长长的cookie放到这里
|
68 |
+
NEWBING_STYLE = "creative", # ["creative", "balanced", "precise"]
|
69 |
+
NEWBING_COOKIES = """
|
70 |
your bing cookies here
|
71 |
"""
|
request_llm/bridge_all.py
CHANGED
@@ -51,6 +51,7 @@ class LazyloadTiktoken(object):
|
|
51 |
API_URL_REDIRECT, = get_conf("API_URL_REDIRECT")
|
52 |
openai_endpoint = "https://api.openai.com/v1/chat/completions"
|
53 |
api2d_endpoint = "https://openai.api2d.net/v1/chat/completions"
|
|
|
54 |
# 兼容旧版的配置
|
55 |
try:
|
56 |
API_URL, = get_conf("API_URL")
|
@@ -62,6 +63,7 @@ except:
|
|
62 |
# 新版配置
|
63 |
if openai_endpoint in API_URL_REDIRECT: openai_endpoint = API_URL_REDIRECT[openai_endpoint]
|
64 |
if api2d_endpoint in API_URL_REDIRECT: api2d_endpoint = API_URL_REDIRECT[api2d_endpoint]
|
|
|
65 |
|
66 |
|
67 |
# 获取tokenizer
|
@@ -123,7 +125,7 @@ model_info = {
|
|
123 |
"newbing": {
|
124 |
"fn_with_ui": newbing_ui,
|
125 |
"fn_without_ui": newbing_noui,
|
126 |
-
"endpoint":
|
127 |
"max_token": 4096,
|
128 |
"tokenizer": tokenizer_gpt35,
|
129 |
"token_cnt": get_token_num_gpt35,
|
|
|
51 |
API_URL_REDIRECT, = get_conf("API_URL_REDIRECT")
|
52 |
openai_endpoint = "https://api.openai.com/v1/chat/completions"
|
53 |
api2d_endpoint = "https://openai.api2d.net/v1/chat/completions"
|
54 |
+
newbing_endpoint = "wss://sydney.bing.com/sydney/ChatHub"
|
55 |
# 兼容旧版的配置
|
56 |
try:
|
57 |
API_URL, = get_conf("API_URL")
|
|
|
63 |
# 新版配置
|
64 |
if openai_endpoint in API_URL_REDIRECT: openai_endpoint = API_URL_REDIRECT[openai_endpoint]
|
65 |
if api2d_endpoint in API_URL_REDIRECT: api2d_endpoint = API_URL_REDIRECT[api2d_endpoint]
|
66 |
+
if newbing_endpoint in API_URL_REDIRECT: newbing_endpoint = API_URL_REDIRECT[newbing_endpoint]
|
67 |
|
68 |
|
69 |
# 获取tokenizer
|
|
|
125 |
"newbing": {
|
126 |
"fn_with_ui": newbing_ui,
|
127 |
"fn_without_ui": newbing_noui,
|
128 |
+
"endpoint": newbing_endpoint,
|
129 |
"max_token": 4096,
|
130 |
"tokenizer": tokenizer_gpt35,
|
131 |
"token_cnt": get_token_num_gpt35,
|
request_llm/bridge_newbing.py
CHANGED
@@ -1,5 +1,8 @@
|
|
1 |
"""
|
2 |
-
|
|
|
|
|
|
|
3 |
"""
|
4 |
|
5 |
from transformers import AutoModel, AutoTokenizer
|
@@ -273,6 +276,7 @@ class _ChatHub:
|
|
273 |
self.request: _ChatHubRequest
|
274 |
self.loop: bool
|
275 |
self.task: asyncio.Task
|
|
|
276 |
self.request = _ChatHubRequest(
|
277 |
conversation_signature=conversation.struct["conversationSignature"],
|
278 |
client_id=conversation.struct["clientId"],
|
@@ -461,20 +465,20 @@ def _create_completer(commands: list, pattern_str: str = "$"):
|
|
461 |
|
462 |
load_message = ""
|
463 |
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
class GetNewBingHandle(Process):
|
471 |
def __init__(self):
|
472 |
super().__init__(daemon=True)
|
473 |
self.parent, self.child = Pipe()
|
474 |
-
self.
|
475 |
-
self.chatglm_tokenizer = None
|
476 |
self.info = ""
|
477 |
self.success = True
|
|
|
478 |
self.check_dependency()
|
479 |
self.start()
|
480 |
|
@@ -488,28 +492,36 @@ class GetNewBingHandle(Process):
|
|
488 |
self.success = False
|
489 |
|
490 |
def ready(self):
|
491 |
-
return self.
|
492 |
|
493 |
-
async def async_run(self, question):
|
494 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
495 |
prompt=question,
|
496 |
-
conversation_style=
|
497 |
-
wss_link=
|
498 |
):
|
499 |
if not final:
|
500 |
-
self.child.send(response)
|
501 |
print(response)
|
502 |
|
503 |
def run(self):
|
504 |
# 第一次运行,加载参数
|
505 |
retry = 0
|
|
|
506 |
while True:
|
507 |
try:
|
508 |
-
if self.
|
509 |
proxies, = get_conf('proxies')
|
510 |
-
|
511 |
-
cookies = json.loads(
|
512 |
-
self.
|
513 |
break
|
514 |
else:
|
515 |
break
|
@@ -517,13 +529,14 @@ class GetNewBingHandle(Process):
|
|
517 |
retry += 1
|
518 |
if retry > 3:
|
519 |
self.child.send('[Local Message] 不能加载Newbing组件。')
|
|
|
520 |
raise RuntimeError("不能加载Newbing组件。")
|
521 |
|
522 |
# 进入任务等待状态
|
523 |
while True:
|
524 |
kwargs = self.child.recv()
|
525 |
try:
|
526 |
-
asyncio.run(self.async_run(question=kwargs['query']))
|
527 |
except:
|
528 |
self.child.send('[Local Message] Newbing失败.')
|
529 |
self.child.send('[Finish]')
|
@@ -538,24 +551,30 @@ class GetNewBingHandle(Process):
|
|
538 |
break
|
539 |
return
|
540 |
|
541 |
-
|
542 |
-
|
543 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
544 |
def predict_no_ui_long_connection(inputs, llm_kwargs, history=[], sys_prompt="", observe_window=None, console_slience=False):
|
545 |
"""
|
546 |
多线程方法
|
547 |
函数的说明请见 request_llm/bridge_all.py
|
548 |
"""
|
549 |
-
global
|
550 |
-
if
|
551 |
-
|
552 |
-
observe_window[0] = load_message + "\n\n" +
|
553 |
-
if not
|
554 |
-
error =
|
555 |
-
|
556 |
raise RuntimeError(error)
|
557 |
|
558 |
-
#
|
559 |
history_feedin = []
|
560 |
history_feedin.append(["What can I do?", sys_prompt])
|
561 |
for i in range(len(history)//2):
|
@@ -563,7 +582,7 @@ def predict_no_ui_long_connection(inputs, llm_kwargs, history=[], sys_prompt="",
|
|
563 |
|
564 |
watch_dog_patience = 5 # 看门狗 (watchdog) 的耐心, 设置5秒即可
|
565 |
response = ""
|
566 |
-
for response in
|
567 |
observe_window[0] = response
|
568 |
if len(observe_window) >= 2:
|
569 |
if (time.time()-observe_window[1]) > watch_dog_patience:
|
@@ -579,13 +598,13 @@ def predict(inputs, llm_kwargs, plugin_kwargs, chatbot, history=[], system_promp
|
|
579 |
"""
|
580 |
chatbot.append((inputs, ""))
|
581 |
|
582 |
-
global
|
583 |
-
if
|
584 |
-
|
585 |
-
chatbot[-1] = (inputs, load_message + "\n\n" +
|
586 |
yield from update_ui(chatbot=chatbot, history=[])
|
587 |
-
if not
|
588 |
-
|
589 |
return
|
590 |
|
591 |
if additional_fn is not None:
|
@@ -600,7 +619,7 @@ def predict(inputs, llm_kwargs, plugin_kwargs, chatbot, history=[], system_promp
|
|
600 |
for i in range(len(history)//2):
|
601 |
history_feedin.append([history[2*i], history[2*i+1]] )
|
602 |
|
603 |
-
for response in
|
604 |
chatbot[-1] = (inputs, response)
|
605 |
yield from update_ui(chatbot=chatbot, history=history)
|
606 |
|
|
|
1 |
"""
|
2 |
+
========================================================================
|
3 |
+
第一部分:来自EdgeGPT.py
|
4 |
+
https://github.com/acheong08/EdgeGPT
|
5 |
+
========================================================================
|
6 |
"""
|
7 |
|
8 |
from transformers import AutoModel, AutoTokenizer
|
|
|
276 |
self.request: _ChatHubRequest
|
277 |
self.loop: bool
|
278 |
self.task: asyncio.Task
|
279 |
+
print(conversation.struct)
|
280 |
self.request = _ChatHubRequest(
|
281 |
conversation_signature=conversation.struct["conversationSignature"],
|
282 |
client_id=conversation.struct["clientId"],
|
|
|
465 |
|
466 |
load_message = ""
|
467 |
|
468 |
+
"""
|
469 |
+
========================================================================
|
470 |
+
第二部分:子进程Worker
|
471 |
+
========================================================================
|
472 |
+
"""
|
473 |
+
|
474 |
class GetNewBingHandle(Process):
|
475 |
def __init__(self):
|
476 |
super().__init__(daemon=True)
|
477 |
self.parent, self.child = Pipe()
|
478 |
+
self.newbing_model = None
|
|
|
479 |
self.info = ""
|
480 |
self.success = True
|
481 |
+
self.local_history = []
|
482 |
self.check_dependency()
|
483 |
self.start()
|
484 |
|
|
|
492 |
self.success = False
|
493 |
|
494 |
def ready(self):
|
495 |
+
return self.newbing_model is not None
|
496 |
|
497 |
+
async def async_run(self, question, history):
|
498 |
+
# 读取配置
|
499 |
+
NEWBING_STYLE, = get_conf('NEWBING_STYLE')
|
500 |
+
from request_llm.bridge_all import model_info
|
501 |
+
endpoint = model_info['newbing']['endpoint']
|
502 |
+
|
503 |
+
# 开始问问题
|
504 |
+
self.local_history.append(question)
|
505 |
+
async for final, response in self.newbing_model.ask_stream(
|
506 |
prompt=question,
|
507 |
+
conversation_style=NEWBING_STYLE, # ["creative", "balanced", "precise"]
|
508 |
+
wss_link=endpoint, # "wss://sydney.bing.com/sydney/ChatHub"
|
509 |
):
|
510 |
if not final:
|
511 |
+
self.child.send(str(response))
|
512 |
print(response)
|
513 |
|
514 |
def run(self):
|
515 |
# 第一次运行,加载参数
|
516 |
retry = 0
|
517 |
+
self.local_history = []
|
518 |
while True:
|
519 |
try:
|
520 |
+
if self.newbing_model is None:
|
521 |
proxies, = get_conf('proxies')
|
522 |
+
NEWBING_COOKIES, = get_conf('NEWBING_COOKIES')
|
523 |
+
cookies = json.loads(NEWBING_COOKIES)
|
524 |
+
self.newbing_model = Chatbot(proxy=proxies['https'], cookies=cookies)
|
525 |
break
|
526 |
else:
|
527 |
break
|
|
|
529 |
retry += 1
|
530 |
if retry > 3:
|
531 |
self.child.send('[Local Message] 不能加载Newbing组件。')
|
532 |
+
self.success = False
|
533 |
raise RuntimeError("不能加载Newbing组件。")
|
534 |
|
535 |
# 进入任务等待状态
|
536 |
while True:
|
537 |
kwargs = self.child.recv()
|
538 |
try:
|
539 |
+
asyncio.run(self.async_run(question=kwargs['query'], history=kwargs['history']))
|
540 |
except:
|
541 |
self.child.send('[Local Message] Newbing失败.')
|
542 |
self.child.send('[Finish]')
|
|
|
551 |
break
|
552 |
return
|
553 |
|
554 |
+
|
555 |
+
"""
|
556 |
+
========================================================================
|
557 |
+
第三部分:主进程统一调用函数接口
|
558 |
+
========================================================================
|
559 |
+
"""
|
560 |
+
global newbing_handle
|
561 |
+
newbing_handle = None
|
562 |
+
|
563 |
def predict_no_ui_long_connection(inputs, llm_kwargs, history=[], sys_prompt="", observe_window=None, console_slience=False):
|
564 |
"""
|
565 |
多线程方法
|
566 |
函数的说明请见 request_llm/bridge_all.py
|
567 |
"""
|
568 |
+
global newbing_handle
|
569 |
+
if newbing_handle is None or (not newbing_handle.success):
|
570 |
+
newbing_handle = GetNewBingHandle()
|
571 |
+
observe_window[0] = load_message + "\n\n" + newbing_handle.info
|
572 |
+
if not newbing_handle.success:
|
573 |
+
error = newbing_handle.info
|
574 |
+
newbing_handle = None
|
575 |
raise RuntimeError(error)
|
576 |
|
577 |
+
# 没有 sys_prompt 接口,因此把prompt加入 history
|
578 |
history_feedin = []
|
579 |
history_feedin.append(["What can I do?", sys_prompt])
|
580 |
for i in range(len(history)//2):
|
|
|
582 |
|
583 |
watch_dog_patience = 5 # 看门狗 (watchdog) 的耐心, 设置5秒即可
|
584 |
response = ""
|
585 |
+
for response in newbing_handle.stream_chat(query=inputs, history=history_feedin, max_length=llm_kwargs['max_length'], top_p=llm_kwargs['top_p'], temperature=llm_kwargs['temperature']):
|
586 |
observe_window[0] = response
|
587 |
if len(observe_window) >= 2:
|
588 |
if (time.time()-observe_window[1]) > watch_dog_patience:
|
|
|
598 |
"""
|
599 |
chatbot.append((inputs, ""))
|
600 |
|
601 |
+
global newbing_handle
|
602 |
+
if newbing_handle is None or (not newbing_handle.success):
|
603 |
+
newbing_handle = GetNewBingHandle()
|
604 |
+
chatbot[-1] = (inputs, load_message + "\n\n" + newbing_handle.info)
|
605 |
yield from update_ui(chatbot=chatbot, history=[])
|
606 |
+
if not newbing_handle.success:
|
607 |
+
newbing_handle = None
|
608 |
return
|
609 |
|
610 |
if additional_fn is not None:
|
|
|
619 |
for i in range(len(history)//2):
|
620 |
history_feedin.append([history[2*i], history[2*i+1]] )
|
621 |
|
622 |
+
for response in newbing_handle.stream_chat(query=inputs, history=history_feedin, max_length=llm_kwargs['max_length'], top_p=llm_kwargs['top_p'], temperature=llm_kwargs['temperature']):
|
623 |
chatbot[-1] = (inputs, response)
|
624 |
yield from update_ui(chatbot=chatbot, history=history)
|
625 |
|