Spaces:
Running
Running
yowenchen
commited on
Commit
•
01a747e
1
Parent(s):
febc289
Add application file
Browse files
app.py
ADDED
@@ -0,0 +1,113 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
import requests
|
3 |
+
from enum import Enum
|
4 |
+
|
5 |
+
|
6 |
+
st.header("WeLM Demo 初体验")
|
7 |
+
|
8 |
+
|
9 |
+
class Task(str, Enum):
|
10 |
+
DIALOG_JOURNAL = "对话-采访"
|
11 |
+
READING_COMPREHENSION = "阅读理解"
|
12 |
+
TRANSLATE = "翻译"
|
13 |
+
REWRITE = "改写"
|
14 |
+
COMPLETION = "续写"
|
15 |
+
FREE = "自由任务"
|
16 |
+
|
17 |
+
|
18 |
+
task_value2type = {v.value: v.name for v in Task}
|
19 |
+
|
20 |
+
task_type = st.selectbox(
|
21 |
+
"任务示例",
|
22 |
+
[v.value for v in Task]
|
23 |
+
)
|
24 |
+
task_type = task_value2type[task_type]
|
25 |
+
|
26 |
+
task2prompt = {
|
27 |
+
Task.READING_COMPREHENSION: """在这个关于“故意伤害罪”的案例:
|
28 |
+
“经审理查明,被告人张××、杜×、杨2某均为辽宁省辽阳第一监狱五监区服刑人员。2015年11月3日13时许,被告人张××、杜×因无事便跟随去催要生产材料的被告人杨2某一同前往六监区,在六监区生产车间门外,被告人杨2某与六监区送料员于×因送料问题发生争执,被告人杨2某上前拽住被害人于×胳膊并用手击打被害人后脖颈两下,被告人张××、杜×见杨2某动手后,先后上前分别对被害人于×面部、头部及腹部进行殴打,后被赶到的干警制止。被害人于×被打造成面部受伤,鼻子流血,当日下午14时许,到监区内医院就诊,诊断为:鼻部中段向左侧畸形,11月5日经监狱医院X光诊断为鼻骨骨折。2015年11月18日,经辽阳襄平法医司法鉴定所法医鉴定:被害人于×身体损伤程度为轻伤二级。被告人张××、杜×、杨2某共同赔偿被害人于×人民币7000元,被害人于×对被告人的行为表示谅解。”
|
29 |
+
问题: “被害人于×11月5日经监狱医院X光诊断后的诊断结果为?”
|
30 |
+
答案:""",
|
31 |
+
Task.TRANSLATE: """“I had a good time”的中文翻译是:我玩得很开心。
|
32 |
+
“The pandemic has triggered more demand for online shopping”的中文翻译是:疫情引发了更多的网购需求
|
33 |
+
“I am a programmer in Tencent”的中文翻译是:""",
|
34 |
+
Task.DIALOG_JOURNAL: """Elon Musk 是 SpaceX 和特斯拉汽⻋公司的首席执行官。
|
35 |
+
我:今天我们有 Elon Musk。欢迎加入我们。
|
36 |
+
Elon Musk:谢谢你邀请我。
|
37 |
+
我:你认为 OpenAI 会如何发展?
|
38 |
+
Elon Musk:我认为进展非常顺利。我认为我们在 OpenAI 有一个非常有才华的团队。
|
39 |
+
我:你现在是怎么进行时间分配?
|
40 |
+
Elon Musk:我每周都会尝试将部分时间花在 OpenAI 上,但除此之外,其他时间是 SpaceX 和特斯拉。
|
41 |
+
我:你如何看待自动驾驶技术?
|
42 |
+
Elon Musk:""",
|
43 |
+
Task.REWRITE: """有这样一段文本,{医生微笑着递给小明棒棒糖,同时让小明服下了药。}
|
44 |
+
改写这段话让它变得更加惊悚。{医生眼露凶光让小明服药,小明感到非常害怕}。
|
45 |
+
有这样一段文本,{雨下得很大}
|
46 |
+
改写这段话让它变得更加具体。{一霎时,雨点连成了线,大雨就像天塌了似的铺天盖地从空中倾泻下来。}。
|
47 |
+
有这样一段文本,{王老师离开了电影院,外面已经天黑了}
|
48 |
+
改写这段话让它包含更多电影信息。{这部电影比小王预想的时间要长,虽然口碑很好,但离开电影院时,小王还是有些失望。}
|
49 |
+
有这样一段文本,{男人站在超市外面打电话}
|
50 |
+
改写这段话来描述小丑。{男人站在马戏团外一边拿着气球一边打电话}
|
51 |
+
有这样一段文本,{风铃声响起}
|
52 |
+
改写这段话写的更加丰富。{我对这个风铃的感情是由它的铃声引起的。每当风吹来时,风铃发出非常动听的声音,听起来是那么乐观、豁达,像一个小女孩格格的笑声。}
|
53 |
+
有这样一段文本,{我想家了}
|
54 |
+
改写这段话包含更多悲伤的感情。{""",
|
55 |
+
Task.COMPLETION: """“八月十八潮,壮观天下无。”这是北宋大诗人苏东坡咏赞钱塘秋潮的千古名句。千百年来,钱塘江以其奇特卓绝的江潮,不知倾倒了多少游人看客。
|
56 |
+
每年的农历八月十八前后,是观潮的最佳时节。这期间,秋阳朗照,金风宜人,钱塘江口的海塘上,游客群集,兴致盎然,争睹奇景。
|
57 |
+
""",
|
58 |
+
Task.FREE: ""
|
59 |
+
}
|
60 |
+
|
61 |
+
prompt = task2prompt[Task[task_type]]
|
62 |
+
all_input = st.text_area('模型输入', value=prompt, height=400)
|
63 |
+
|
64 |
+
|
65 |
+
with st.expander("配置"):
|
66 |
+
stop_tokens = []
|
67 |
+
def cut_message(answer: str):
|
68 |
+
end = []
|
69 |
+
for etk in stop_tokens:
|
70 |
+
offset = answer.find(etk)
|
71 |
+
if offset > 0:
|
72 |
+
end.append(offset)
|
73 |
+
if len(end) > 0:
|
74 |
+
answer = answer[:min(end)]
|
75 |
+
return answer.rstrip()
|
76 |
+
|
77 |
+
if task_type == 'READING_COMPREHENSION':
|
78 |
+
default_top_p, default_temperature, default_n, default_tokens = 0.0, 0.0, 1, 15
|
79 |
+
elif task_type == 'TRANSLATE':
|
80 |
+
default_top_p, default_temperature, default_n, default_tokens = 0.0, 0.0, 1, 40
|
81 |
+
elif task_type == 'COMPLETION':
|
82 |
+
default_top_p, default_temperature, default_n, default_tokens = 0.95, 0.85, 1, 150
|
83 |
+
else:
|
84 |
+
default_top_p, default_temperature, default_n, default_tokens = 0.95, 0.85, 5, 40
|
85 |
+
|
86 |
+
model = st.selectbox("model", ["medium", "large", "xl"])
|
87 |
+
top_p = st.slider('top p', 0.0, 1.0, default_top_p)
|
88 |
+
top_k = st.slider('top k', 0, 100, 0)
|
89 |
+
temperature = st.slider('temperature', 0.0, 1.0, default_temperature)
|
90 |
+
n = st.slider('n', 1, 30, default_n)
|
91 |
+
max_tokens = st.slider('max tokens', 4, 1500, default_tokens)
|
92 |
+
|
93 |
+
if st.checkbox("使用换行符作为截断", value=True):
|
94 |
+
stop_tokens.append("\n")
|
95 |
+
|
96 |
+
def completion():
|
97 |
+
resp = requests.post("https://welm.weixin.qq.com/v1/completions", json={
|
98 |
+
'prompt': all_input,
|
99 |
+
'max_tokens': max_tokens,
|
100 |
+
'temperature': temperature,
|
101 |
+
'top_p': top_p,
|
102 |
+
'top_k': top_k,
|
103 |
+
'n': n,
|
104 |
+
'model': model
|
105 |
+
}, headers={"Authorization": "Bearer no_limit_token_for_insider", "'Content-Type":"application/json'"})
|
106 |
+
answer = resp.json()
|
107 |
+
for idx, choice in enumerate(answer['choices']):
|
108 |
+
st.success(f'生成结果#{idx}: {cut_message(choice["text"])}')
|
109 |
+
if task_type == 'COMPLETION':
|
110 |
+
st.text('Tips: 可多次生成后复制你认为的最好结果拼接于原文后,让WeLM继续生成。')
|
111 |
+
|
112 |
+
if st.button('立即生成'):
|
113 |
+
completion()
|