-
Notifications
You must be signed in to change notification settings - Fork 379
/
Copy pathutils.py
58 lines (44 loc) · 1.86 KB
/
utils.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import copy
import global_vars
from pingpong.context import CtxLastWindowStrategy
from pingpong.context import InternetSearchStrategy, SimilaritySearcher
from chats import pre, post
def build_prompts(ppmanager, global_context, win_size=3):
dummy_ppm = copy.deepcopy(ppmanager)
dummy_ppm.ctx = global_context
for pingpong in dummy_ppm.pingpongs:
pong = pingpong.pong
first_sentence = pong.split("\n")[0]
if first_sentence != "" and \
pre.contains_image_markdown(first_sentence):
pong = ' '.join(pong.split("\n")[1:]).strip()
pingpong.pong = pong
lws = CtxLastWindowStrategy(win_size)
prompt = lws(dummy_ppm)
return prompt
def text_stream(ppmanager, streamer):
count = 0
for new_text in streamer:
if count == 0:
ppmanager.append_pong(f"***[{global_vars.model_name}]***\n\n")
count = count + 1
ppmanager.append_pong(new_text)
yield ppmanager, ppmanager.build_uis()
yield ppmanager, ppmanager.build_uis()
def internet_search(ppmanager, serper_api_key, global_context, ctx_num_lconv, device="cpu"):
instruction = "Based on the provided texts below, please answer to '{ping}' in your own words. Try to explain in detail as much as possible."
searcher = SimilaritySearcher.from_pretrained(device=device)
iss = InternetSearchStrategy(
searcher,
instruction=instruction,
serper_api_key=serper_api_key
)(ppmanager)
step_ppm = None
while True:
try:
step_ppm, _ = next(iss)
yield "", step_ppm.build_uis()
except StopIteration:
break
search_prompt = build_prompts(step_ppm, global_context, ctx_num_lconv)
yield search_prompt, ppmanager.build_uis()