NeverlandPeter commited on
Commit
4efa6b3
·
1 Parent(s): 5236d93

new tabs with state

Browse files
Files changed (1) hide show
  1. app.py +199 -28
app.py CHANGED
@@ -13,28 +13,49 @@ os.environ["RWKV_JIT_ON"] = '1'
13
  os.environ["RWKV_CUDA_ON"] = '1' # if '1' then use CUDA kernel for seq mode (much faster)
14
 
15
  from rwkv.model import RWKV
 
16
  model_path = hf_hub_download(repo_id="BlinkDL/rwkv-6-world", filename=f"{title}.pth")
17
  model = RWKV(model=model_path, strategy='cuda fp16i8 *8 -> cuda fp16')
 
 
 
18
  from rwkv.utils import PIPELINE, PIPELINE_ARGS
19
  pipeline = PIPELINE(model, "rwkv_vocab_v20230424")
20
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  def generate_prompt(instruction, input=""):
22
  instruction = instruction.strip().replace('\r\n','\n').replace('\n\n','\n')
23
  input = input.strip().replace('\r\n','\n').replace('\n\n','\n')
24
  if input:
25
- return f"""Instruction: {instruction}
26
-
27
- Input: {input}
28
-
29
- Response:"""
30
  else:
31
- return f"""User: hi
32
-
33
- Assistant: Hi. I am your assistant and I will provide expert full response in full details. Please feel free to ask any question and I will always answer it.
34
 
35
- User: {instruction}
 
 
 
36
 
37
- Assistant:"""
38
 
39
  def evaluate(
40
  ctx,
@@ -49,7 +70,6 @@ def evaluate(
49
  alpha_presence = presencePenalty,
50
  token_ban = [], # ban the generation of some tokens
51
  token_stop = [0]) # stop generation whenever you see any token here
52
- # ctx = generate_prompt(ctx)
53
  ctx = ctx.strip()
54
  all_tokens = []
55
  out_last = 0
@@ -66,7 +86,107 @@ def evaluate(
66
  break
67
  all_tokens += [token]
68
  for xxx in occurrence:
69
- occurrence[xxx] *= 0.996
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
  if token not in occurrence:
71
  occurrence[token] = 1
72
  else:
@@ -93,34 +213,44 @@ examples = [
93
  [generate_prompt("東京で訪れるべき素晴らしい場所とその紹介をいくつか挙げてください。"), gen_limit, 1, 0.3, 0.5, 0.5],
94
  [generate_prompt("Write a story using the following information.", "A man named Alex chops a tree down."), gen_limit, 1, 0.3, 0.5, 0.5],
95
  ["A few light taps upon the pane made her turn to the window. It had begun to snow again.", gen_limit, 1, 0.3, 0.5, 0.5],
96
- ['''Edward: I am Edward Elric from Fullmetal Alchemist.
97
-
98
- User: Hello Edward. What have you been up to recently?
99
-
100
- Edward:''', gen_limit, 1, 0.3, 0.5, 0.5],
101
  [generate_prompt("Write a simple website in HTML. When a user clicks the button, it shows a random joke from a list of 4 jokes."), 500, 1, 0.3, 0.5, 0.5],
102
- ['''Japanese: 春の初め、桜の花が満開になる頃、小さな町の片隅にある古びた神社の境内は、特別な雰囲気に包まれていた。
103
-
104
- English:''', gen_limit, 1, 0.3, 0.5, 0.5],
105
  ["En una pequeña aldea escondida entre las montañas de Andalucía, donde las calles aún conservaban el eco de antiguas leyendas, vivía un joven llamado Alejandro.", gen_limit, 1, 0.3, 0.5, 0.5],
106
  ["Dans le cœur battant de Paris, sous le ciel teinté d'un crépuscule d'or et de pourpre, se tenait une petite librairie oubliée par le temps.", gen_limit, 1, 0.3, 0.5, 0.5],
107
  ["في تطور مذهل وغير مسبوق، أعلنت السلطات المحلية في العاصمة عن اكتشاف أثري قد يغير مجرى التاريخ كما نعرفه.", gen_limit, 1, 0.3, 0.5, 0.5],
108
- ['''“当然可以,大宇宙不会因为这五公斤就不坍缩了。”关一帆说,他还有一个没说出来的想法:也许大宇宙真的会因为相差一个原子的质量而由封闭转为开放。大自然的精巧有时超出想象,比如生命的诞生,就需要各项宇宙参数在几亿亿分之一精度上的精确配合。但程心仍然可以留下她的生态球,因为在那无数文明创造的无数小宇宙中,肯定有相当一部分不响应回归运动的号召,所以,大宇宙最终被夺走的质量至少有几亿吨,甚至可能是几亿亿亿吨。
109
- 但愿大宇宙能够忽略这个误差。
110
- 程心和关一帆进入了飞船,智子最后也进来了。她早就不再穿那身华丽的和服了,她现在身着迷彩服,再次成为一名轻捷精悍的战士,她的身上佩带着许多武器和生存装备,最引人注目的是那把插在背后的武士刀。
111
- “放心,我在,你们就在!”智子对两位人类朋友说。
112
- 聚变发动机启动了,推进器发出幽幽的蓝光,''', gen_limit, 1, 0.3, 0.5, 0.5],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
113
  ]
114
 
115
  ##########################################################################
116
 
117
  with gr.Blocks(title=title) as demo:
118
  gr.HTML(f"<div style=\"text-align: center;\">\n<h1>{title}</h1>\n</div>")
119
- with gr.Tab("Raw Generation"):
 
120
  gr.Markdown(f"This is [RWKV-6](https://huggingface.co/BlinkDL/rwkv-6-world) base model. Supports 100+ world languages and code. RWKV is a 100% attention-free RNN [RWKV-LM](https://github.com/BlinkDL/RWKV-LM), and we have [300+ Github RWKV projects](https://github.com/search?o=desc&p=1&q=rwkv&s=updated&type=Repositories). Demo limited to ctxlen {ctx_limit}.")
121
  with gr.Row():
122
  with gr.Column():
123
- prompt = gr.Textbox(lines=2, label="Prompt", value="Assistant: How can we craft an engaging story featuring vampires on Mars? Let's think step by step and provide an expert response.")
124
  token_count = gr.Slider(10, gen_limit, label="Max Tokens", step=10, value=gen_limit)
125
  temperature = gr.Slider(0.2, 2.0, label="Temperature", step=0.1, value=1.0)
126
  top_p = gr.Slider(0.0, 1.0, label="Top P", step=0.05, value=0.3)
@@ -131,10 +261,51 @@ with gr.Blocks(title=title) as demo:
131
  submit = gr.Button("Submit", variant="primary")
132
  clear = gr.Button("Clear", variant="secondary")
133
  output = gr.Textbox(label="Output", lines=30)
134
- data = gr.Dataset(components=[prompt, token_count, temperature, top_p, presence_penalty, count_penalty], samples=examples, samples_per_page=50, label="Example Instructions", headers=["Prompt", "Max Tokens", "Temperature", "Top P", "Presence Penalty", "Count Penalty"])
135
  submit.click(evaluate, [prompt, token_count, temperature, top_p, presence_penalty, count_penalty], [output])
136
  clear.click(lambda: None, [], [output])
137
  data.click(lambda x: x, [data], [prompt, token_count, temperature, top_p, presence_penalty, count_penalty])
138
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
139
  demo.queue(concurrency_count=1, max_size=10)
140
  demo.launch(share=False)
 
13
  os.environ["RWKV_CUDA_ON"] = '1' # if '1' then use CUDA kernel for seq mode (much faster)
14
 
15
  from rwkv.model import RWKV
16
+
17
  model_path = hf_hub_download(repo_id="BlinkDL/rwkv-6-world", filename=f"{title}.pth")
18
  model = RWKV(model=model_path, strategy='cuda fp16i8 *8 -> cuda fp16')
19
+ # model_path = '/mnt/e/RWKV-Runner/models/rwkv-final-v6-2.1-7b' # conda activate torch2; cd /mnt/program/_RWKV_/_ref_/_gradio_/RWKV-Gradio-2; python app_tab.py
20
+ # model = RWKV(model=model_path, strategy='cuda fp16i8 *8 -> cuda fp16')
21
+
22
  from rwkv.utils import PIPELINE, PIPELINE_ARGS
23
  pipeline = PIPELINE(model, "rwkv_vocab_v20230424")
24
 
25
+ args = model.args
26
+ eng_name = 'rwkv-x060-eng_single_round_qa-7B-20240430-ctx1024'
27
+ chn_name = 'rwkv-x060-chn_single_round_qa-7B-20240505-ctx1024'
28
+ eng_file = hf_hub_download(repo_id="BlinkDL/temp-latest-training-models", filename=f"{eng_name}.pth")
29
+ chn_file = hf_hub_download(repo_id="BlinkDL/temp-latest-training-models", filename=f"{chn_name}.pth")
30
+ state_eng_raw = torch.load(eng_file)
31
+ state_chn_raw = torch.load(chn_file)
32
+ state_eng = [None] * args.n_layer * 3
33
+ state_chn = [None] * args.n_layer * 3
34
+ for i in range(args.n_layer):
35
+ dd = model.strategy[i]
36
+ dev = dd.device
37
+ atype = dd.atype
38
+ state_eng[i*3+0] = torch.zeros(args.n_embd, dtype=atype, requires_grad=False, device=dev).contiguous()
39
+ state_chn[i*3+0] = torch.zeros(args.n_embd, dtype=atype, requires_grad=False, device=dev).contiguous()
40
+ state_eng[i*3+1] = state_eng_raw[f'blocks.{i}.att.time_state'].transpose(1,2).to(dtype=torch.float, device=dev).requires_grad_(False).contiguous()
41
+ state_chn[i*3+1] = state_chn_raw[f'blocks.{i}.att.time_state'].transpose(1,2).to(dtype=torch.float, device=dev).requires_grad_(False).contiguous()
42
+ state_eng[i*3+2] = torch.zeros(args.n_embd, dtype=atype, requires_grad=False, device=dev).contiguous()
43
+ state_chn[i*3+2] = torch.zeros(args.n_embd, dtype=atype, requires_grad=False, device=dev).contiguous()
44
+
45
  def generate_prompt(instruction, input=""):
46
  instruction = instruction.strip().replace('\r\n','\n').replace('\n\n','\n')
47
  input = input.strip().replace('\r\n','\n').replace('\n\n','\n')
48
  if input:
49
+ return f"""Instruction: {instruction}\n\nInput: {input}\n\nResponse:"""
 
 
 
 
50
  else:
51
+ return f"""User: hi\n\nAssistant: Hi. I am your assistant and I will provide expert full response in full details. Please feel free to ask any question and I will always answer it.\n\nUser: {instruction}\n\nAssistant:"""
 
 
52
 
53
+ def qa_prompt(instruction):
54
+ instruction = instruction.strip().replace('\r\n','\n')
55
+ instruction = re.sub(r'\n+', '\n', instruction)
56
+ return f"User: {instruction}\n\nAssistant:"""
57
 
58
+ penalty_decay = 0.996
59
 
60
  def evaluate(
61
  ctx,
 
70
  alpha_presence = presencePenalty,
71
  token_ban = [], # ban the generation of some tokens
72
  token_stop = [0]) # stop generation whenever you see any token here
 
73
  ctx = ctx.strip()
74
  all_tokens = []
75
  out_last = 0
 
86
  break
87
  all_tokens += [token]
88
  for xxx in occurrence:
89
+ occurrence[xxx] *= penalty_decay
90
+ if token not in occurrence:
91
+ occurrence[token] = 1
92
+ else:
93
+ occurrence[token] += 1
94
+
95
+ tmp = pipeline.decode(all_tokens[out_last:])
96
+ if '\ufffd' not in tmp:
97
+ out_str += tmp
98
+ yield out_str.strip()
99
+ out_last = i + 1
100
+
101
+ gpu_info = nvmlDeviceGetMemoryInfo(gpu_h)
102
+ timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
103
+ print(f'{timestamp} - vram {gpu_info.total} used {gpu_info.used} free {gpu_info.free}')
104
+ del out
105
+ del state
106
+ gc.collect()
107
+ torch.cuda.empty_cache()
108
+ yield out_str.strip()
109
+
110
+ def evaluate_eng(
111
+ ctx,
112
+ token_count=gen_limit,
113
+ temperature=1.0,
114
+ top_p=0.3,
115
+ presencePenalty=0.3,
116
+ countPenalty=0.3,
117
+ ):
118
+ args = PIPELINE_ARGS(temperature = max(0.2, float(temperature)), top_p = float(top_p),
119
+ alpha_frequency = countPenalty,
120
+ alpha_presence = presencePenalty,
121
+ token_ban = [], # ban the generation of some tokens
122
+ token_stop = [0]) # stop generation whenever you see any token here
123
+ ctx = qa_prompt(ctx)
124
+ all_tokens = []
125
+ out_last = 0
126
+ out_str = ''
127
+ occurrence = {}
128
+ state = copy.deepcopy(state_eng)
129
+ for i in range(int(token_count)):
130
+ out, state = model.forward(pipeline.encode(ctx)[-ctx_limit:] if i == 0 else [token], state)
131
+ for n in occurrence:
132
+ out[n] -= (args.alpha_presence + occurrence[n] * args.alpha_frequency)
133
+
134
+ token = pipeline.sample_logits(out, temperature=args.temperature, top_p=args.top_p)
135
+ if token in args.token_stop:
136
+ break
137
+ all_tokens += [token]
138
+ for xxx in occurrence:
139
+ occurrence[xxx] *= penalty_decay
140
+ if token not in occurrence:
141
+ occurrence[token] = 1
142
+ else:
143
+ occurrence[token] += 1
144
+
145
+ tmp = pipeline.decode(all_tokens[out_last:])
146
+ if '\ufffd' not in tmp:
147
+ out_str += tmp
148
+ yield out_str.strip()
149
+ out_last = i + 1
150
+
151
+ gpu_info = nvmlDeviceGetMemoryInfo(gpu_h)
152
+ timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
153
+ print(f'{timestamp} - vram {gpu_info.total} used {gpu_info.used} free {gpu_info.free}')
154
+ del out
155
+ del state
156
+ gc.collect()
157
+ torch.cuda.empty_cache()
158
+ yield out_str.strip()
159
+
160
+ def evaluate_chn(
161
+ ctx,
162
+ token_count=gen_limit,
163
+ temperature=1.0,
164
+ top_p=0.3,
165
+ presencePenalty=0.3,
166
+ countPenalty=0.3,
167
+ ):
168
+ args = PIPELINE_ARGS(temperature = max(0.2, float(temperature)), top_p = float(top_p),
169
+ alpha_frequency = countPenalty,
170
+ alpha_presence = presencePenalty,
171
+ token_ban = [], # ban the generation of some tokens
172
+ token_stop = [0]) # stop generation whenever you see any token here
173
+ ctx = qa_prompt(ctx)
174
+ all_tokens = []
175
+ out_last = 0
176
+ out_str = ''
177
+ occurrence = {}
178
+ state = copy.deepcopy(state_chn)
179
+ for i in range(int(token_count)):
180
+ out, state = model.forward(pipeline.encode(ctx)[-ctx_limit:] if i == 0 else [token], state)
181
+ for n in occurrence:
182
+ out[n] -= (args.alpha_presence + occurrence[n] * args.alpha_frequency)
183
+
184
+ token = pipeline.sample_logits(out, temperature=args.temperature, top_p=args.top_p)
185
+ if token in args.token_stop:
186
+ break
187
+ all_tokens += [token]
188
+ for xxx in occurrence:
189
+ occurrence[xxx] *= penalty_decay
190
  if token not in occurrence:
191
  occurrence[token] = 1
192
  else:
 
213
  [generate_prompt("東京で訪れるべき素晴らしい場所とその紹介をいくつか挙げてください。"), gen_limit, 1, 0.3, 0.5, 0.5],
214
  [generate_prompt("Write a story using the following information.", "A man named Alex chops a tree down."), gen_limit, 1, 0.3, 0.5, 0.5],
215
  ["A few light taps upon the pane made her turn to the window. It had begun to snow again.", gen_limit, 1, 0.3, 0.5, 0.5],
216
+ ['''Edward: I am Edward Elric from Fullmetal Alchemist.\n\nUser: Hello Edward. What have you been up to recently?\n\nEdward:''', gen_limit, 1, 0.3, 0.5, 0.5],
 
 
 
 
217
  [generate_prompt("Write a simple website in HTML. When a user clicks the button, it shows a random joke from a list of 4 jokes."), 500, 1, 0.3, 0.5, 0.5],
218
+ ['''Japanese: 春の初め、桜の花が満開になる頃、小さな町の片隅にある古びた神社の境内は、特別な雰囲気に包まれていた。\n\nEnglish:''', gen_limit, 1, 0.3, 0.5, 0.5],
 
 
219
  ["En una pequeña aldea escondida entre las montañas de Andalucía, donde las calles aún conservaban el eco de antiguas leyendas, vivía un joven llamado Alejandro.", gen_limit, 1, 0.3, 0.5, 0.5],
220
  ["Dans le cœur battant de Paris, sous le ciel teinté d'un crépuscule d'or et de pourpre, se tenait une petite librairie oubliée par le temps.", gen_limit, 1, 0.3, 0.5, 0.5],
221
  ["في تطور مذهل وغير مسبوق، أعلنت السلطات المحلية في العاصمة عن اكتشاف أثري قد يغير مجرى التاريخ كما نعرفه.", gen_limit, 1, 0.3, 0.5, 0.5],
222
+ ['''“当然可以,大宇宙不会因为这五公斤就不坍缩了。”关一帆说,他还有一个没说出来的想法:也许大宇宙真的会因为相差一个原子的质量而由封闭转为开放。大自然的精巧有时超出想象,比如生命的诞生,就需要各项宇宙参数在几亿亿分之一精度上的精确配合。但程心仍然可以留下她的生态球,因为在那无数文明创造的无数小宇宙中,肯定有相当一部分不响应回归运动的号召,所以,大宇宙最终被夺走的质量至少有几亿吨,甚至可能是几亿亿亿吨。\n但愿大宇宙能够忽略这个误差。\n程心和关一帆进入了飞船,智子最后也进来了。她早就不再穿那身华丽的和服了,她现在身着迷彩服,再次成为一名轻捷精悍的战士,她的身上佩带着许多武器和生存装备,最引人注目的是那把插在背后的武士刀。\n“放心,我在,你们就在!”智子对两位人类朋友说。\n聚变发动机启动了,推进器发出幽幽的蓝光,''', gen_limit, 1, 0.3, 0.5, 0.5],
223
+ ]
224
+
225
+ examples_eng = [
226
+ ["How can I craft an engaging story featuring vampires on Mars?", gen_limit, 1, 0.2, 0.3, 0.3],
227
+ ["Compare the business models of Apple and Google.", gen_limit, 1, 0.2, 0.3, 0.3],
228
+ ["In JSON format, list the top 5 tourist attractions in Paris.", gen_limit, 1, 0.2, 0.3, 0.3],
229
+ ["Write an outline for a fantasy novel where dreams can alter reality.", gen_limit, 1, 0.2, 0.3, 0.3],
230
+ ["Can fish get thirsty?", gen_limit, 1, 0.2, 0.3, 0.3],
231
+ ["Write a Bash script to check disk usage and send alerts if it's too high.", gen_limit, 1, 0.2, 0.3, 0.3],
232
+ ["Write a simple website in HTML. When a user clicks the button, it shows a random joke from a list of 4 jokes.", gen_limit, 1, 0.2, 0.3, 0.3],
233
+ ]
234
+
235
+ examples_chn = [
236
+ ["怎样写一个火星吸血鬼的有趣故事?", gen_limit, 1, 0.2, 0.3, 0.3],
237
+ ["比较苹果和谷歌的商业模式。", gen_limit, 1, 0.2, 0.3, 0.3],
238
+ ["鱼会口渴吗?", gen_limit, 1, 0.2, 0.3, 0.3],
239
+ ["以 JSON 格式解释冰箱是如何工作的。", gen_limit, 1, 0.2, 0.3, 0.3],
240
+ ["编写一个Bash脚本来检查磁盘使用情况,如果使用量过高则发送警报。", gen_limit, 1, 0.2, 0.3, 0.3],
241
+ ["用HTML编写一个简单的网站。当用户点击按钮时,从4个笑话的列表中随机显示一个笑话。", gen_limit, 1, 0.2, 0.3, 0.3],
242
  ]
243
 
244
  ##########################################################################
245
 
246
  with gr.Blocks(title=title) as demo:
247
  gr.HTML(f"<div style=\"text-align: center;\">\n<h1>{title}</h1>\n</div>")
248
+
249
+ with gr.Tab("Base Model (Raw Generation)"):
250
  gr.Markdown(f"This is [RWKV-6](https://huggingface.co/BlinkDL/rwkv-6-world) base model. Supports 100+ world languages and code. RWKV is a 100% attention-free RNN [RWKV-LM](https://github.com/BlinkDL/RWKV-LM), and we have [300+ Github RWKV projects](https://github.com/search?o=desc&p=1&q=rwkv&s=updated&type=Repositories). Demo limited to ctxlen {ctx_limit}.")
251
  with gr.Row():
252
  with gr.Column():
253
+ prompt = gr.Textbox(lines=2, label="Raw Input", value="Assistant: How can we craft an engaging story featuring vampires on Mars? Let's think step by step and provide an expert response.")
254
  token_count = gr.Slider(10, gen_limit, label="Max Tokens", step=10, value=gen_limit)
255
  temperature = gr.Slider(0.2, 2.0, label="Temperature", step=0.1, value=1.0)
256
  top_p = gr.Slider(0.0, 1.0, label="Top P", step=0.05, value=0.3)
 
261
  submit = gr.Button("Submit", variant="primary")
262
  clear = gr.Button("Clear", variant="secondary")
263
  output = gr.Textbox(label="Output", lines=30)
264
+ data = gr.Dataset(components=[prompt, token_count, temperature, top_p, presence_penalty, count_penalty], samples=examples, samples_per_page=50, label="Examples", headers=["Prompt", "Max Tokens", "Temperature", "Top P", "Presence Penalty", "Count Penalty"])
265
  submit.click(evaluate, [prompt, token_count, temperature, top_p, presence_penalty, count_penalty], [output])
266
  clear.click(lambda: None, [], [output])
267
  data.click(lambda x: x, [data], [prompt, token_count, temperature, top_p, presence_penalty, count_penalty])
268
 
269
+ with gr.Tab("English Q/A"):
270
+ gr.Markdown(f"This is [RWKV-6](https://huggingface.co/BlinkDL/rwkv-6-world) state-tuned to [English Q/A](https://huggingface.co/BlinkDL/temp-latest-training-models/blob/main/{eng_name}.pth). RWKV is a 100% attention-free RNN [RWKV-LM](https://github.com/BlinkDL/RWKV-LM), and we have [300+ Github RWKV projects](https://github.com/search?o=desc&p=1&q=rwkv&s=updated&type=Repositories). Demo limited to ctxlen {ctx_limit}.")
271
+ with gr.Row():
272
+ with gr.Column():
273
+ prompt = gr.Textbox(lines=2, label="Prompt", value="How can I craft an engaging story featuring vampires on Mars?")
274
+ token_count = gr.Slider(10, gen_limit, label="Max Tokens", step=10, value=gen_limit)
275
+ temperature = gr.Slider(0.2, 2.0, label="Temperature", step=0.1, value=1.0)
276
+ top_p = gr.Slider(0.0, 1.0, label="Top P", step=0.05, value=0.2)
277
+ presence_penalty = gr.Slider(0.0, 1.0, label="Presence Penalty", step=0.1, value=0.3)
278
+ count_penalty = gr.Slider(0.0, 1.0, label="Count Penalty", step=0.1, value=0.3)
279
+ with gr.Column():
280
+ with gr.Row():
281
+ submit = gr.Button("Submit", variant="primary")
282
+ clear = gr.Button("Clear", variant="secondary")
283
+ output = gr.Textbox(label="Output", lines=30)
284
+ data = gr.Dataset(components=[prompt, token_count, temperature, top_p, presence_penalty, count_penalty], samples=examples_eng, samples_per_page=50, label="Examples", headers=["Prompt", "Max Tokens", "Temperature", "Top P", "Presence Penalty", "Count Penalty"])
285
+ submit.click(evaluate_eng, [prompt, token_count, temperature, top_p, presence_penalty, count_penalty], [output])
286
+ clear.click(lambda: None, [], [output])
287
+ data.click(lambda x: x, [data], [prompt, token_count, temperature, top_p, presence_penalty, count_penalty])
288
+
289
+ with gr.Tab("Chinese Q/A"):
290
+ gr.Markdown(f"This is [RWKV-6](https://huggingface.co/BlinkDL/rwkv-6-world) state-tuned to [Chinese Q/A](https://huggingface.co/BlinkDL/temp-latest-training-models/blob/main/{chn_name}.pth). RWKV is a 100% attention-free RNN [RWKV-LM](https://github.com/BlinkDL/RWKV-LM), and we have [300+ Github RWKV projects](https://github.com/search?o=desc&p=1&q=rwkv&s=updated&type=Repositories). Demo limited to ctxlen {ctx_limit}.")
291
+ with gr.Row():
292
+ with gr.Column():
293
+ prompt = gr.Textbox(lines=2, label="Prompt", value="怎样写一个火星吸血鬼的有趣故事?")
294
+ token_count = gr.Slider(10, gen_limit, label="Max Tokens", step=10, value=gen_limit)
295
+ temperature = gr.Slider(0.2, 2.0, label="Temperature", step=0.1, value=1.0)
296
+ top_p = gr.Slider(0.0, 1.0, label="Top P", step=0.05, value=0.2)
297
+ presence_penalty = gr.Slider(0.0, 1.0, label="Presence Penalty", step=0.1, value=0.3)
298
+ count_penalty = gr.Slider(0.0, 1.0, label="Count Penalty", step=0.1, value=0.3)
299
+ with gr.Column():
300
+ with gr.Row():
301
+ submit = gr.Button("Submit", variant="primary")
302
+ clear = gr.Button("Clear", variant="secondary")
303
+ output = gr.Textbox(label="Output", lines=30)
304
+ data = gr.Dataset(components=[prompt, token_count, temperature, top_p, presence_penalty, count_penalty], samples=examples_chn, samples_per_page=50, label="Examples", headers=["Prompt", "Max Tokens", "Temperature", "Top P", "Presence Penalty", "Count Penalty"])
305
+ submit.click(evaluate_chn, [prompt, token_count, temperature, top_p, presence_penalty, count_penalty], [output])
306
+ clear.click(lambda: None, [], [output])
307
+ data.click(lambda x: x, [data], [prompt, token_count, temperature, top_p, presence_penalty, count_penalty])
308
+
309
+
310
  demo.queue(concurrency_count=1, max_size=10)
311
  demo.launch(share=False)