update
Browse files- .DS_Store +0 -0
- app.py +222 -4
- examples.csv +48 -0
.DS_Store
DELETED
Binary file (6.15 kB)
|
|
app.py
CHANGED
@@ -1,7 +1,225 @@
|
|
|
|
1 |
import gradio as gr
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
-
|
4 |
-
|
5 |
|
6 |
-
|
7 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from __future__ import annotations
|
2 |
import gradio as gr
|
3 |
+
import logging
|
4 |
+
logger = logging.getLogger(__name__)
|
5 |
+
logging.basicConfig(level=logging.INFO,
|
6 |
+
format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')
|
7 |
+
import subprocess
|
8 |
+
def runcmd(command):
|
9 |
+
ret = subprocess.run(command,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE,encoding="utf-8",timeout=60)
|
10 |
+
if ret.returncode == 0:
|
11 |
+
print("success:",ret)
|
12 |
+
else:
|
13 |
+
print("error:",ret)
|
14 |
+
runcmd("pip3 install --upgrade clueai")
|
15 |
|
16 |
+
import clueai
|
17 |
+
cl = clueai.Client("", check_api_key=False)
|
18 |
|
19 |
+
'''
|
20 |
+
#luck_t2i_btn_1, #luck_s2i_btn_1, #luck_i2i_btn_1, #luck_ici_btn_1{
|
21 |
+
color: #fff;
|
22 |
+
--tw-gradient-from: #BED336;
|
23 |
+
--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
|
24 |
+
--tw-gradient-to: #BED336;
|
25 |
+
border-color: #BED336;
|
26 |
+
}
|
27 |
+
|
28 |
+
#luck_easy_btn_1, #luck_iti_btn_1, #luck_tsi_btn_1, #luck_isi_btn_1{
|
29 |
+
color: #fff;
|
30 |
+
--tw-gradient-from: #BED336;
|
31 |
+
--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
|
32 |
+
--tw-gradient-to: #BED336;
|
33 |
+
border-color: #BED336;
|
34 |
+
}
|
35 |
+
'''
|
36 |
+
css='''
|
37 |
+
.container { max-width: 800px; margin: auto; }
|
38 |
+
#gen_btn_1{
|
39 |
+
color: #fff;
|
40 |
+
--tw-gradient-from: #f44336;
|
41 |
+
--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
|
42 |
+
--tw-gradient-to: #ff9800;
|
43 |
+
border-color: #ff9800;
|
44 |
+
}
|
45 |
+
#t2i_btn_1, #s2i_btn_1, #i2i_btn_1, #ici_btn_1, #easy_btn_1, #iti_btn_1, #tsi_btn_1, #isi_btn_1{
|
46 |
+
color: #fff;
|
47 |
+
--tw-gradient-from: #f44336;
|
48 |
+
--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
|
49 |
+
--tw-gradient-to: #ff9800;
|
50 |
+
border-color: #ff9800;
|
51 |
+
}
|
52 |
+
|
53 |
+
|
54 |
+
#import_t2i_btn_1, #import_s2i_btn_1, #import_i2i_btn_1, #import_ici_btn_1{
|
55 |
+
color: #fff;
|
56 |
+
--tw-gradient-from: #BED336;
|
57 |
+
--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
|
58 |
+
--tw-gradient-to: #BED336;
|
59 |
+
border-color: #BED336;
|
60 |
+
}
|
61 |
+
|
62 |
+
#import_easy_btn_1, #import_iti_btn_1, #import_tsi_btn_1, #import_isi_btn_1{
|
63 |
+
color: #fff;
|
64 |
+
--tw-gradient-from: #BED336;
|
65 |
+
--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
|
66 |
+
--tw-gradient-to: #BED336;
|
67 |
+
border-color: #BED336;
|
68 |
+
}
|
69 |
+
|
70 |
+
#record_btn{
|
71 |
+
|
72 |
+
}
|
73 |
+
#record_btn > div > button > span {
|
74 |
+
width: 2.375rem;
|
75 |
+
height: 2.375rem;
|
76 |
+
}
|
77 |
+
#record_btn > div > button > span > span {
|
78 |
+
width: 2.375rem;
|
79 |
+
height: 2.375rem;
|
80 |
+
}
|
81 |
+
audio {
|
82 |
+
margin-bottom: 10px;
|
83 |
+
}
|
84 |
+
div#record_btn > .mt-6{
|
85 |
+
margin-top: 0!important;
|
86 |
+
}
|
87 |
+
div#record_btn > .mt-6 button {
|
88 |
+
font-size: 1em;
|
89 |
+
width: 100%;
|
90 |
+
padding: 20px;
|
91 |
+
height: 60px;
|
92 |
+
}
|
93 |
+
|
94 |
+
div#txt2img_tab {
|
95 |
+
color: #BED336;
|
96 |
+
}
|
97 |
+
|
98 |
+
'''
|
99 |
+
task_styles = []
|
100 |
+
examples_list = []
|
101 |
+
task_style_to_task_prefix = {}
|
102 |
+
import csv
|
103 |
+
def read_examples(input_file):
|
104 |
+
header = True
|
105 |
+
with open(input_file) as finput:
|
106 |
+
csv_input = csv.reader(finput)
|
107 |
+
for line in csv_input:
|
108 |
+
if header:
|
109 |
+
header = False
|
110 |
+
continue
|
111 |
+
task_style, task_prefix, example = line
|
112 |
+
task_styles.append(task_style)
|
113 |
+
task_style_to_task_prefix[task_style] = task_prefix
|
114 |
+
examples_list.append([task_style, example])
|
115 |
+
|
116 |
+
read_examples("./examples.csv")
|
117 |
+
#print(task_styles)
|
118 |
+
def preprocess(text, task):
|
119 |
+
if task == "问答":
|
120 |
+
text = text.replace("?", ":").replace("?", ":")
|
121 |
+
text = text + ":"
|
122 |
+
|
123 |
+
return task_style_to_task_prefix[task] + "\n" + text + "\n答案:"
|
124 |
+
|
125 |
+
def inference_gen(text, task):
|
126 |
+
text = preprocess(text, task)
|
127 |
+
#print(text)
|
128 |
+
try:
|
129 |
+
prediction = cl.generate(
|
130 |
+
model_name='clueai-base',
|
131 |
+
prompt=text)
|
132 |
+
except Exception as e:
|
133 |
+
logger.error(f"error, e")
|
134 |
+
return
|
135 |
+
|
136 |
+
return prediction.generations[0].text
|
137 |
+
|
138 |
+
t2i_default_img_path_list = []
|
139 |
+
import base64, requests
|
140 |
+
from io import BytesIO
|
141 |
+
from PIL import Image
|
142 |
+
def inference_image(text, n_text, guidance_scale, style, shape, clarity, steps, shape_scale):
|
143 |
+
try:
|
144 |
+
res = requests.get(f"https://www.clueai.cn/clueai/hf_text2image?text={text}")
|
145 |
+
except Exception as e:
|
146 |
+
logger.error(f"error, {e}")
|
147 |
+
return
|
148 |
+
json_dict = res.json()
|
149 |
+
file_path_list = []
|
150 |
+
for i, image in enumerate(json_dict["images"]):
|
151 |
+
image = image.encode('utf-8')
|
152 |
+
binary_data = base64.b64decode(image)
|
153 |
+
img_data = BytesIO(binary_data)
|
154 |
+
img = Image.open(img_data)
|
155 |
+
file_path_list.append(img)
|
156 |
+
|
157 |
+
return file_path_list
|
158 |
+
image_styles = ['无', '细节大师', '对称美', '虚拟引擎', '空间感', '机械风格', '形状艺术', '治愈', '电影构图', '电影构图(治愈)', '荒芜感', '漫画', '逃离艺术', '斯皮尔伯格', '幻想', '杰作', '壁画', '朦胧', '黑白(3d)', '梵高', '毕加索', '莫奈', '丰子恺', '现代', '欧美']
|
159 |
+
with gr.Blocks(css=css, title="ClueAI") as demo:
|
160 |
+
gr.Markdown('<h1><center><font color=red style="font-size:50px;">ClueAI全能师</font></center></h1>')
|
161 |
+
with gr.TabItem("文本生成", id='_tab'):
|
162 |
+
with gr.Row(variant="compact").style( equal_height=True):
|
163 |
+
text = gr.Textbox("俄罗斯天然气管道泄漏爆炸",
|
164 |
+
label="编辑内容", show_label=False, max_lines=20,
|
165 |
+
placeholder="在这里输入...",
|
166 |
+
)
|
167 |
+
task = gr.Dropdown(label="任务", show_label=True, choices=task_styles, value="标题生成文章")
|
168 |
+
btn = gr.Button("生成",elem_id="gen_btn_1").style(full_width=False)
|
169 |
+
with gr.Accordion("高级操作", open=False):
|
170 |
+
n_text = gr.Textbox("",
|
171 |
+
label="不想要生成的元素", show_label=True, max_lines=2,
|
172 |
+
placeholder="在这里输入你不需要包含的内容...",
|
173 |
+
)
|
174 |
+
guidance_scale = gr.Slider(1, 20, value=7.5, step=0.5, label="和你的描述匹配程度,越大越匹配")
|
175 |
+
shape = gr.Radio(["1x1", "16x9", "手机壁纸"], label="尺寸", value="1x1")
|
176 |
+
shape_scale = gr.Radio([1, 2, 3], label="对图放大倍数", value=1)
|
177 |
+
steps = gr.Slider(10, 150, value=50, step=1, label="越大质量越好,生成时间越长")
|
178 |
+
clarity = gr.Radio(["标清", "高清"], label="清晰度", value="标清")
|
179 |
+
with gr.Row(variant="compact").style( equal_height=True):
|
180 |
+
output_text = gr.Textbox(
|
181 |
+
label="输出", show_label=True, max_lines=50,
|
182 |
+
placeholder="在这里展示结果",
|
183 |
+
)
|
184 |
+
gr.Examples(examples_list, [task, text], label="示例")
|
185 |
+
input_params = [text, task]
|
186 |
+
#text.submit(inference_gen, inputs=input_params, outputs=output_text)
|
187 |
+
btn.click(inference_gen, inputs=input_params, outputs=output_text)
|
188 |
+
|
189 |
+
with gr.TabItem("图像生成", id='txt2img_tab'):
|
190 |
+
with gr.Row(variant="compact").style( equal_height=True):
|
191 |
+
text = gr.Textbox("美丽的风景",
|
192 |
+
label="编辑内容", show_label=False, max_lines=2,
|
193 |
+
placeholder="在这里输入你的描述...",
|
194 |
+
)
|
195 |
+
btn = gr.Button("生成图像",elem_id="t2i_btn_1").style(full_width=False)
|
196 |
+
|
197 |
+
with gr.Row().style( equal_height=True):
|
198 |
+
generate_prompt_btn = gr.Button("手气不错", elem_id="luck_t2i_btn_1")
|
199 |
+
|
200 |
+
style = gr.Dropdown(label="风格", show_label=True, choices=image_styles, value="无")
|
201 |
+
with gr.Accordion("高级操作", open=False):
|
202 |
+
n_text = gr.Textbox("",
|
203 |
+
label="不想要生成的元素", show_label=True, max_lines=2,
|
204 |
+
placeholder="在这里输入你不需要包含的内容...",
|
205 |
+
)
|
206 |
+
guidance_scale = gr.Slider(1, 20, value=7.5, step=0.5, label="和你的描述匹配程度,越大越匹配")
|
207 |
+
shape = gr.Radio(["1x1", "16x9", "手机壁纸"], label="尺寸", value="1x1")
|
208 |
+
shape_scale = gr.Radio([1, 2, 3], label="对图放大倍数", value=1)
|
209 |
+
steps = gr.Slider(10, 150, value=50, step=1, label="越大质量越好,生成时间越长")
|
210 |
+
clarity = gr.Radio(["标清", "高清"], label="清晰度", value="标清")
|
211 |
+
|
212 |
+
gr.Examples(["秋日的晚霞", "星空", "室内装修", "婚礼鲜花"], text, label="示例")
|
213 |
+
|
214 |
+
t2i_gallery = gr.Gallery(
|
215 |
+
t2i_default_img_path_list,
|
216 |
+
label="生成图像",
|
217 |
+
show_label=False).style(
|
218 |
+
grid=[2], height="auto"
|
219 |
+
)
|
220 |
+
|
221 |
+
input_params = [text, n_text, guidance_scale, style, shape, clarity, steps, shape_scale]
|
222 |
+
generate_prompt_btn.click(inference_image, inputs=input_params, outputs=[t2i_gallery])
|
223 |
+
text.submit(inference_image, inputs=input_params, outputs=t2i_gallery)
|
224 |
+
btn.click(inference_image, inputs=input_params, outputs=t2i_gallery)
|
225 |
+
demo.launch()
|
examples.csv
ADDED
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
任务类型,任务前缀,文本内容
|
2 |
+
问答,问答:,问题:阿里巴巴的总部在哪里
|
3 |
+
纠错,文本纠错:,你必须服从命令,不要的考虑。你的思想被别人手下来。
|
4 |
+
改写,生成与下列文字相同意思的句子:,长期通胀前景在今天可能不确定性更大。
|
5 |
+
中心词提取,中心词提取:,现在有京东国际太方便了,可以安全的买到正经的电子设备,游戏机完全没问题,发货非常快,第二天就到
|
6 |
+
标题生成文章,根据标题生成文章:,标题:俄罗斯天然气管道泄漏爆炸
|
7 |
+
情感倾向,文字中包含了怎样的情感:,"超可爱的帅哥,爱了。。。
|
8 |
+
选项:厌恶,喜欢,开心,悲伤,惊讶,生气,害怕"
|
9 |
+
关键词抽取, 抽取关键词:,当地时间21日,美国联邦储备委员会宣布加息75个基点,将联邦基金利率目标区间上调到3.00%至3.25%之间,符合市场预期。这是美联储今年以来第五次加息,也是连续第三次加息,创自1981年以来的最大密集加息幅度。
|
10 |
+
指代消解,代词指向哪个名词短语:,"段落:
|
11 |
+
我回来,咱们两个人劳动,一定要把少平和兰香的书供成。只要他两个有本事,能考到哪里,咱们就把他们(代词)供到哪里。
|
12 |
+
问题:代词“ 他们”指代的是?"
|
13 |
+
问题生成,问题生成:,"本周早些时候,始于俄罗斯的两条巨型天然气管道分别发现了三个泄漏点。管道中充满燃料,破裂产生了宽度达800米的气泡,上浮到丹麦博恩霍尔姆岛附近的波罗的海表面。
|
14 |
+
就在泄漏发生前,附近检测到了爆炸,而欧洲各国政府尚未确定被称为北溪一号和北溪二号管道泄漏的原因。欧洲和美国的领导人表示,这是一起蓄意破坏行为。
|
15 |
+
相关猜测指向俄罗斯,该国的国有能源公司俄罗斯天然气工业股份公司是这些管道的主要所有者。俄罗斯发言人德米特里·佩斯科夫驳斥了有关俄罗斯参与的指控,称其“愚蠢”,并将矛头指向美国。"
|
16 |
+
医疗语义相似度,下面句子是否表示了相同的语义:,"文本1:糖尿病腿麻木怎么办?
|
17 |
+
文本2:糖尿病怎样控制生活方式
|
18 |
+
选项:相似,不相似"
|
19 |
+
电商客户需求分析,电商客户诉求分类:,"收到但不太合身,可以退换吗
|
20 |
+
选项:买家咨询商品是否支持花呗付款,买家表示收藏关注店铺,买家咨询退换货规则,买家需要商品推荐"
|
21 |
+
医疗信息抽取,找出指定的信息:,"我今天胃不舒服,手有点麻木,浑身不舒服,前几天去医院医生说我有胃炎
|
22 |
+
问题:症状,治疗,检查,身体部位,疾病"
|
23 |
+
简历信息抽取,阅读文本抽取关键信息:,"张玄武1990年出生中国国籍无境外居留权博士学历现任杭州线锁科技技术总监。
|
24 |
+
问题:机构,人名,职位,籍贯,专业,国籍,学历,种族"
|
25 |
+
通用信息抽取,信息抽取:,"据新华社电广东省清远市清城区政府昨日对外发布信息称,日前被实名举报涉嫌勒索企业、说“分分钟可以搞垮一间厂”的清城区环保局局长陈柏,已被免去清城区区委委员
|
26 |
+
问题:机构名,人名,职位"
|
27 |
+
翻译-英中,翻译成中文:,This is a dialogue robot that can talk to people.
|
28 |
+
翻译-中英,翻译成英文:,前国务卿去了台湾,中国人民很愤怒。
|
29 |
+
摘要,摘要生成:,"本周早些时候,始于俄罗斯的两条巨型天然气管道分别发现了三个泄漏点。管道中充满燃料,破裂产生了宽度达800米的气泡,上浮到丹麦博恩霍尔姆岛附近的波罗的海表面。
|
30 |
+
就在泄漏发生前,附近检测到了爆炸,而欧洲各国政府尚未确定被称为北溪一号和北溪二号管道泄漏的原因。欧洲和美国的政治领导人表示,这是一起蓄意破坏行为。
|
31 |
+
相关猜测指向俄罗斯,该国的国有能源公司俄罗斯天然气工业股份公司是这些管道的主要所有者。俄罗斯发言人德米特里·佩斯科夫驳斥了有关俄罗斯参与的指控,称其“愚蠢”,并将矛头指向美国。"
|
32 |
+
阅读理解-自由式,阅读以下对话并回答问题。,"男:今天怎么这么晚才来上班啊?女:昨天工作到很晚,而且我还感冒了。男:那你回去休息吧,我帮你请假。女:谢谢你。
|
33 |
+
问题:女的怎么样?
|
34 |
+
选项:正在工作,感冒了,在打电话,要出差。"
|
35 |
+
阅读理解,阅读理解:,"段落:本周早些时候,始于俄罗斯的两条巨型天然气管道分别发现了三个泄漏点。管道中充满燃料,破裂产生了宽度达800米的气泡,上浮到丹麦博恩霍尔姆岛附近的波罗的海表面。
|
36 |
+
就在泄漏发生前,附近检测到了爆炸,而欧洲各国政府尚未确定被称为北溪一号和北溪二号管道泄漏的原因。欧洲和美国的政治领导人表示,这是一起蓄意破坏行为。
|
37 |
+
相关猜测指向俄罗斯,该国的国有能源公司俄罗斯天然气工业股份公司是这些管道的主要所有者���俄罗斯发言人德米特里·佩斯科夫驳斥了有关俄罗斯参与的指控,称其“愚蠢”,并将矛头指向美国。
|
38 |
+
问题:北溪管道是什么原因泄露的?"
|
39 |
+
推理,推理关系判断:,"前提:小明今天在北京
|
40 |
+
假设:小明在深圳旅游
|
41 |
+
选项:矛盾,蕴含,中立"
|
42 |
+
情感分析,情感分析:,"这个看上去还可以,但其实我不喜欢
|
43 |
+
选项:积极,消极"
|
44 |
+
新闻分类,新闻分类:,"本周早些时候,始于俄罗斯的两条巨型天然气管道分别发现了三个泄漏点。管道中充满燃料,破裂产生了宽度达800米的气泡,上浮到丹麦博恩霍尔姆岛附近的波罗的海表面。
|
45 |
+
就在泄漏发生前,附近检测到了爆炸,而欧洲各国政府尚未确定被称为北溪一号和北溪二号管道泄漏的原因。欧洲和美国的政治领导人表示,这是一起蓄意破坏行为。
|
46 |
+
相关猜测指向俄罗斯,该国的国有能源公司俄罗斯天然气工业股份公司是这些管道的主要所有者。俄罗斯发言人德米特里·佩斯科夫驳斥了有关俄罗斯参与的指控,称其“愚蠢”,并将矛头指向美国。"
|
47 |
+
意图分类,意图分类:,"帮我定一个周日上海浦东的房间
|
48 |
+
选项:闹钟,文学,酒店,艺术,体育,健康,天气,其他"
|